O caminho para o GraphQL federado

Foto de dgraph.io
Foto de dgraph.io

Os programadores adoram boas histórias, então espero que a jornada de cinco anos para uma API composta usando GraphQL em um ambiente de produção (no pico de 110 solicitações por segundo em latência de 100 ms) seja interessante.

[Se você se apressar, prossiga abaixo para as lições e dê uma olhada no registro de esquema gráfico de código aberto ]

registro de esquema com esquema de teste de amostra
registro de esquema com esquema de teste de amostra

Tarefa

, Pipedrive ( 2020 10 ), REST API . /users/self, , , 30 . PHP , . , .

/ users / autodistribuição de latência para o tráfego restante
/users/self

, .

, graphql.

3-4 , , , - - elixir graphql. MySQL Pipedrive /graphql.

, , - CRUD, .

2019, , GraphQL stitching graphql-compose REST API. , , - graphql .

:

2019, , Apollo , . , Core, .

, POST gateway .

graphql - . , Protobuf Thrift, GRPCOData.

, graphql (insights, teams) , ( User). typescript + relay , .

.

, - API ? ? Gateway - ? .

, - , - . Confluent’s schema-registry  Atlassian’s Braid, , Java, .

3 :

  • ( ) 15%. REST /graphql

  • 30%. graphql .

  • (- )

, , .. .

Solicitações de rede conforme o aplicativo da web carrega
-

:

Serviços nos quais trabalhar

schema-registry , , (swagger, typescript, graphql, avro, proto). .

Gateway schema-registry . frontend autocomplete .

, graphql , , .

/users/self - ? (!). - , .

( 2020), - 13% 25% (- ), UI Datadog.

, - REST.

- ( 600+ ), - . IOS- Android- graphql .

60 , -

? , .

Mark Stuart, Paypal Engineering

Apollo studio    . gateway.

Nosso kit de ferramentas de validação de esquema escrito

, - , - . opensource - graphql-schema-registry.

- Pipedrive. , DC . , , , ?

graphql gateway . , gateway .

, gateway , - . Apollo studio - .

, Apollo , .. . .

, ( -) . . Gateway schema-registry /schema/compose , .

schema-registry ,

Registro do esquema no início do serviço

REST Graphql API, , REST.

REST

REST graphql, openapi-to-graphql, .

- , , ? REST .

, REST API , .

REST API . , - deal.pipeline_id. graphql, ,

json-. , REST _, .

um gráfico de dados Pipedrive federado (à esquerda) com 2 serviços (de 539) e um gráfico de serviço de leads ainda não federados (à direita)
Pipedrive () 2 ( 539) -- leads ()

CQRS

Pipedrive TTL-.

, , . , . 3 .

- PHP-, nodejs ( monograph), memcached. -. , .

CQRS pattern. , 80% .

Tempo médio de latência de resposta do monólito (à esquerda) e do gateway graphql (à direita) na região dos EUA com base em NewRelic
() graphql gateway () US NewRelic

- . , - . - , identity. .

Identity , kafka, monograph . , ( 1 ), . , - .

APM - . Datadog .

, 30 memcached. . memcached 10, , 220. , - mcrouter. , 20 .

- , getMulti . resolver' , 5 debounce .

. graphql gateway . , .

28 30 , 500, .

graphql , /graphql . 3-5 , ( debounce FE )

, - (APM) tracing:true, .

700 300 . , ( performance.now()), .

graphql gateway  Chrome DevTools, , .

  .

, graphql . /graphql ( vendors.js) . , - - .

- graphql    gql . bundle, fetch. , - - . server-side-rendering service workers .

Questão de wrap / graphql à esquerda
/graphql

graphql , . , , rate limit .

graphql-cost-analysis , , - , , ( , , CPU, ). gateway schema-registry. .

js/typescript . graphql .

koa-graphql  apollo-server-koa GraphQLSchema . apollo/server :

buildFederatedSchema([{typeDefs, resolvers}])

, , gql , schema.graphql , ,  ASTNode ( parse / buildASTSchema)

canary

- .

, graphql 100 -"". 1000 , 1%, 10%, 30%, 50% .

company ID . , - , graphql . - graphql .

, , ( ), .

- graphql , - , , . - .

graphql API , API. OAuth ( ) .

schema-registry , gateway - , , , (persisted query), .

, go, - GRPC - , graphql , gateway. GRPC - , graphql msgpack?

Quanto ao mundo exterior, espero que a Apollo com seu projeto Constellation acelere o processamento de um pedido de Rust de forma que não haja uma taxa de desempenho de 10% e seja capaz de federar serviços Graphql sem grandes alterações neste último.

Em geral, um ótimo momento para aproveitar o desenvolvimento onde há muita complexidade!




All Articles