Programmers love good stories, so I hope the five-year journey to a composite API using GraphQL in a production environment (at the peak of 110 requests per second at 100ms latency) will be interesting.
[If you hurry, proskrolte below to the lessons and take a look at open source graphql-schema-registry ]
Task
, Pipedrive ( 2020 10 ), REST API . /users/self, , , 30 . PHP , . , .
, .
, graphql.
3-4 , , , - - elixir graphql. MySQL Pipedrive /graphql.
, , - CRUD, .
2019, , GraphQL stitching graphql-compose REST API. , , - graphql .
:
. dataloader', N+1 . - .
. , , . - - , - .
, POST gateway .
graphql - . , Protobuf Thrift, GRPC, OData.
, graphql (insights, teams) , ( User). typescript + relay , .
.
, - API ? ? Gateway - ? .
, - , - . Confluent’s schema-registry Atlassian’s Braid, , Java, .
3 :
:
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 , -
Apollo studio . gateway.
, - , - . opensource - graphql-schema-registry.
graphql gateway . , gateway .
, gateway , - . Apollo studio - .
, ( -) . . Gateway schema-registry /schema/compose , .
schema-registry ,
REST Graphql API, , REST.
REST
REST graphql, openapi-to-graphql, .
- , , ? REST .
, REST API , .
REST API . , - deal.pipeline_id. graphql, ,
json-. , REST _, .
CQRS
Pipedrive TTL-.
, , . , . 3 .
- PHP-, nodejs ( monograph), memcached. -. , .
CQRS pattern. , 80% .
- . , - . - , 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 .
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?
As for the outside world, I hope Apollo with its Constellation project will speed up the processing of a request for Rust so that this 10% performance tax is not present and will be able to federate graphql services without major changes to the latter.
In general, a great time to enjoy the development where there is a lot of complexity!