Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GraphQL Framework #954

Closed
tlgimenes opened this issue Sep 13, 2021 · 3 comments
Closed

GraphQL Framework #954

tlgimenes opened this issue Sep 13, 2021 · 3 comments
Milestone

Comments

@tlgimenes
Copy link
Contributor

We need to decide which framework/server we will use in our starter. The frameworks I found we could use:

  1. Apollo Server
  2. Envelop
  3. ?
@tlgimenes tlgimenes added this to the Store API milestone Sep 13, 2021
@tlgimenes
Copy link
Contributor Author

Pegar o base.store, e migrar a function do graphql.ts para usar apollo/envelop e fazer varios request e medir as seguintes metricas.

  1. ops/s - quantas queries eles aceitam por segundo
  2. min time de resposta para uma query
  3. max time de resposta para uma query

@danzanzini
Copy link
Contributor

danzanzini commented Oct 29, 2021

Report

Envelop

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 em store-api;
  • graphql-codegen-plugin em base.store.

As duas foram removidas e os PRs se encontram abertos e prontos para revisão mergeados:

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

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.

@igorbrasileiro
Copy link
Contributor

Can we close this issue, @tlgimenes @danzanzini ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants