El camino hacia GraphQL federado

Imagen de dgraph.io
Imagen de dgraph.io

A los programadores les encantan las buenas historias, así que espero que el viaje de cinco años hacia una API compuesta usando GraphQL en un entorno de producción (en el pico de 110 solicitudes por segundo con una latencia de 100 ms) sea interesante.

[Si se da prisa, prosiga a continuación a las lecciones y eche un vistazo a graphql-schema-registration de código abierto ]

registro de esquema con esquema de prueba de muestra
registro de esquema con esquema de prueba de muestra

Tarea

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

/ users / auto distribución de latencia para el tráfico 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 .

  • (- )

, , .. .

Solicitudes de red a medida que se carga la aplicación web
-

:

Servicios sobre los que trabajar

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.

Nuestro kit de herramientas de validación de esquemas escritos

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

- Pipedrive. , DC . , , , ?

graphql gateway . , gateway .

, gateway , - . Apollo studio - .

, Apollo , .. . .

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

schema-registry ,

Registro del esquema al inicio del servicio.

REST Graphql API, , REST.

REST

REST graphql, openapi-to-graphql, .

- , , ? REST .

, REST API , .

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

json-. , REST _, .

un gráfico de datos de Pipedrive federado (izquierda) con 2 servicios (de 539) y un gráfico de servicio de clientes potenciales aún no federados (derecha)
Pipedrive () 2 ( 539) -- leads ()

CQRS

Pipedrive TTL-.

, , . , . 3 .

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

CQRS pattern. , 80% .

Tiempo de latencia promedio para la respuesta de monolith (izquierda) y gateway graphql (derecha) en la región de EE. UU. Según 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 .

Wrap / graphql query left
/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?

En cuanto al mundo exterior, espero que Apollo con su proyecto Constellation acelere el procesamiento de una solicitud de Rust para que este impuesto sobre el rendimiento del 10% no esté presente y pueda federar servicios graphql sin cambios importantes en este último.

En general, ¡un gran momento para disfrutar del desarrollo donde hay mucha complejidad!




All Articles