O documento descreve a migração de um backend GraphQL feito com Node.js e Apollo Server para Go usando o framework GraphQL Gophers. A migração resultou em melhorias significativas de desempenho, reduzindo o uso de CPU em 60% e aumentando a taxa de requisições em 168%.
4. - remover regras de negócio do front
- entregar somente o necessário para o front
- facilidade de alterar algum comportamento em produção
sem alterar o front
- performance
BFF
15. GraphQL
Apollo Server foi uma experiência bem rápida e completa
para iniciar no GraphQL
Mas nem tudo são flores…
Chegamos a precisar de 180 cpus para atender produção em um dia
normal.
E nem era toda a carga que a gente precisava.
18. A nossa estimativa de carga no GraphQL era de receber 4.5MM RPM
E mesmo com a otimização precisamos de pelo menos 1200 CPU’s disponíveis para segurar
essa carga.
Preparação
BlackFriday 2020
Ainda precisamos melhorar...
19.
20. Fiber
Fiber é um framework web inspirado no express.
Ele é feito em cima do FastHTTP que é a engine HTTP mais rápida do Go
https://github.com/gofiber/fiber
GraphQL
graph-gophers/graphql-go - https://github.com/graph-gophers/graphql-go
38. Migração query a query
Apollo Client
Links - Middlewares que são executadas antes e depois de cada query.
Basicamente criamos uma whitelist de queries e fomos migrando uma a uma.
40. Resultado
Versão Requests por
minuto (k)
CPUs ~ Request por cpu Meta BF
ExpressJS + Apollo Server 1 1420
Mercurius + Fastify 1 3130
Fiber 1 8400
41. Resultado
Versão Requests por minuto
(k)
CPUs ~ Request por cpu Meta BF
ExpressJS + Apollo
Server
500 180 2.800
MercuriusJS + Fastify 500 72 6.950
Fiber ? ? ?