faststore
faststore copied to clipboard
GraphQL Framework
We need to decide which framework/server we will use in our starter. The frameworks I found we could use:
Pegar o base.store, e migrar a function do graphql.ts
para usar apollo/envelop e fazer varios request e medir as seguintes metricas.
- ops/s - quantas queries eles aceitam por segundo
- min time de resposta para uma query
- max time de resposta para uma query
Report
Envelop
- Spike em: https://github.com/vtex-sites/base.store/pull/76/files
- Status: Ainda precisa de polimento antes de seguir para master
O que precisa ser feito:
Escolher os plugins que serão utilizados
Todos os plugins podem ser vistos aqui: https://www.envelop.dev/plugins
- Recomendação de, incialmente, colocar todos de perfomance e segurança
- Podemos refazer o teste de perfomance após isso.
Resultado do teste de perfomance
O teste de perfomance foi executado utilizando siege na minha máquina local.
Os testes foram realizados com:
- base.vtex sem framework
- Utilizando envelop sem jit
- Utilizando envelop com jit
Para cada um desses casos, foram realizados testes com 25, 100 e 250 usuários concorrentes.
Os resultados podem ser encontrados aqui.
Não houve alteração significativa de perfomance, e ainda há a possibilidade de utilizar plugins para melhoria da mesma. Como muitas funcionalidades são adicionadas com a utilização do framework, sem perda visível de perfomance, penso que vale a utilização.
Apollo Server
- Status: Spike não concluído.
- Motivo: Ao tentar realizar a execução utilizando o graphQL, é recebida a seguinte mensagem:
Duplicate "graphql" modules cannot be used at the same time since different versions may have different capabilities and behavior
Investigação
A partir dos resultados de yarn why graphql
e npm ls graphql
, identifiquei duas dependências que poderiam causar o problema:
-
rollup-graphql-plugin
emstore-api
; -
graphql-codegen-plugin
embase.store
.
As duas foram removidas e os PRs ~se encontram abertos e prontos para revisão~ mergeados:
- https://github.com/vtex-sites/base.store/pull/94
- https://github.com/vtex/faststore/pull/1009
Mesmo com essas duas remoções, ainda não foi possível utilizar o apollo-server, que retornou a mesma mensagem de erro de antes
Outra tentativa realizada foi utilizando resolutions
do yarn, mas também sem resultado.
Referências
- https://github.com/apollographql/apollo-tooling/issues/1384
- https://github.com/apollographql/apollo-server/issues/3773
- https://stackoverflow.com/questions/63957674/cannot-use-graphqlobjecttype-query-from-another-module-or-realm
Conclusão
Devido a dificuldade para implementar o Apollo Server e os resultados positivos com o framework Envelop, penso que é válido iniciarmos a implementação com Envelop e criarmos uma task separada para tentar um outro spike com Apollo Server no futuro para avaliarmos novamente, se necessário.
Can we close this issue, @tlgimenes @danzanzini ?