La voie du GraphQL fédéré

Photo de dgraph.io
Photo de dgraph.io

Les programmeurs aiment les bonnes histoires, alors j'espĂšre que le voyage de cinq ans vers une API composite utilisant GraphQL dans un environnement de production (au maximum de 110 requĂȘtes par seconde Ă  100 ms de latence) sera intĂ©ressant.

[Si vous vous dĂ©pĂȘchez, proskrolte ci-dessous pour les leçons et jetez un Ɠil Ă  l'open source graphql-schema-registry ]

registre de schémas avec exemple de schéma de test
registre de schémas avec exemple de schéma de test

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

/ users / auto-distribution de la latence pour le trafic restant
/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 .

  • (- )

, , .. .

RequĂȘtes rĂ©seau lors du chargement de l'application Web
-

:

Services sur lesquels travailler

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.

Notre boßte à outils de validation de schéma écrite

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

- Pipedrive. , DC . , , , ?

graphql gateway . , gateway .

, gateway , - . Apollo studio - .

, Apollo , .. . .

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

schema-registry ,

Enregistrement du programme au début du service

REST Graphql API, , REST.

REST

REST graphql, openapi-to-graphql, .

- , , ? REST .

, REST API , .

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

json-. , REST _, .

un graphique de données Pipedrive fédéré (à gauche) avec 2 services (sur 539) et un graphique de service de prospects non encore fédérés (à droite)
Pipedrive () 2 ( 539) -- leads ()

CQRS

Pipedrive TTL-.

, , . , . 3 .

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

CQRS pattern. , 80% .

Temps de latence de rĂ©ponse moyen du monolith (Ă  gauche) et de la passerelle Graphql (Ă  droite) dans la rĂ©gion des États-Unis, basĂ© sur 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 .

RequĂȘte Wrap / Graphql Ă  gauche
/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?

Quant au monde extérieur, j'espÚre qu'Apollo avec son projet Constellation accélérera le traitement d'une demande de Rust afin qu'il n'y ait pas de taxe de performance de 10% et puisse fédérer des services graphql sans modifications majeures de ce dernier.

C'est le moment idĂ©al pour profiter du dĂ©veloppement lĂ  oĂč il y a beaucoup de complexitĂ©!




All Articles