Elevando o padrão sem servidor: APIs de infraestrutura agregam mais valor para as empresas
24 de janeiro de 2024Construindo uma ferramenta de monitoramento de plantas com IoT
24 de janeiro de 2024A estrutura de aplicativos da web Express.js teve uma grande atualização pela última vez em 2014 – isso é muito tempo, afirmou Tamar Twena-Stern, arquiteto de sistema sênior da XM Cyber.
“O framework Node.js mais popular é um framework que não lançou uma versão principal por quase 10 anos”, disse Twena-Stern a uma sala cheia de participantes da conferência internacional sobre JavaScript em 25 de setembro. 27. “Você não acha que talvez devêssemos não fazer a escolha óbvia e talvez pensar em algo novo, algo que se adapte melhor aos padrões de hoje?”
Ela esperou que o público concordasse – o que eles concordaram – antes de apresentar sua alternativa sugerida: Fastify. Ele foi criado pelo desenvolvedor Matteo Collina, que contribuiu para a estrutura Node.js e também foi criador do Autocannon e do Pino JS, uma estrutura de registro para Node.js.
A reivindicação do Fastify: velocidade e flexibilidade
Fastify é um novo framework que possui as mesmas funcionalidades do Express e Hapi, ao mesmo tempo que se orgulha de ter maior velocidade, melhor experiência de desenvolvedor e mais flexibilidade. Twena-Stern decidiu testar sua velocidade e compartilhou os resultados em sua apresentação.
“De acordo com a comparação do Fastify, eles são sete vezes mais rápidos que outros frameworks, mas decidi que gosto de escrever benchmarks por conta própria”, disse ela. “Tenho uma verdadeira paixão pela performance e quando alguém me diz isso, tenho que verificar eu mesmo.”
Foi o que ela fez, usando a ferramenta de benchmarking Autocannon para comparar o servidor Node.js Express e um servidor com Fastify. Ela declarou com um cenário Hello World, retornando solicitações GET de Hello World sem prefixo para o roteador. Ela também desligou os registros, o que, segundo ela, poderia arruinar o desempenho.
A latência é a duração de uma solicitação e quanto tempo levou para atendê-la, ressaltou ela. Nessa categoria, ela recomendou olhar para o percentil 99 e não para a média ou mediana.
“Por que eu recomendo olhar para o percentil 99, porque quando você está fazendo um contrato com uma empresa terceirizada e está contando a ela (…) todas as minhas solicitações são mais rápidas do que alguma coisa, então você precisa pegar o 99º percentil, não a mediana”, explicou ela. “Como você pode ver aqui, o percentil 99 é um milissegundo.”
Ela destacou que o Express atendeu com sucesso cerca de 20.000 solicitações por segundo, com uma média de leitura de 4,8 Mega, e atendeu 221.000 solicitações no total. Em seguida, ela compartilhou os resultados do Fastify.
“Em primeiro lugar, isso pode não parecer tão impressionante para você, mas depois o percentil 99 caiu de um milissegundo para zero”, disse ela. “Vejamos a média de solicitações que o Fastify conseguiu atender: ele conseguiu atender, em média, cerca de 50.000 solicitações – o que é muito, e, eu acho, a velocidade é cerca de duas vezes e meia mais rápida do que nós tive (com) Express.”
O total de solicitações atendidas foi de 526 mil, acrescentou ela.
“Também é quase duas vezes e meia mais rápido que o Express”, disse ela. “Isso é realmente impressionante, na minha opinião.”
Outro teste com MongoDB
Sem ter certeza se isso era uma anomalia, ela decidiu testá-lo usando Node.js mais Express rodando com Mongoose funcionando como ORM mais MongoDB. O Mongoose permite que os desenvolvedores imponham um esquema específico na camada de aplicação. Ela então comparou isso ao Fastify executando o MongoDB. Novamente, ela usou o Autocannon para comparar os resultados.
“Aqui, estamos registrando plug-ins, registrando o conector DB e navegando”, disse ela. Ela adicionou um pouco do código e exigiu que o primeiro servidor fosse executado, refinando o esquema, fazendo uma pós-solicitação e atendendo-o.
“Este é o Express, podemos ver 99% de solicitações de três milissegundos por segundo, temos cerca de 6.500 (solicitações por segundo) em média e, no total, conseguimos atender cerca de 70 mil solicitações”, disse ela.
Em comparação, o Fastify entregou o percentil 99 em dois milissegundos, com uma média de aproximadamente 8.800 solicitações por segundo e exibiu cerca de 86 mil resultados.
“Temos algo 40% mais rápido”, disse ela. “Isso ainda é muito impressionante.”
Como os ORMs podem aumentar a sobrecarga de desempenho, ela mudou para um Mongo Driver nativo. O Express acelerou de seis para 600, com 7.100 solicitações por segundo em média e 74.000 solicitações no total.
“Isso melhorou o desempenho do servidor Express; isso não é suficiente e estamos conseguindo que o Fastify ainda seja muito mais rápido”, acrescentou ela. Fastify afirma que eles são a estrutura mais rápida que existe. Posso dizer que atualmente eles estão certos.”
Twena-Stern também comparou-o com Hapi, KOA e outras estruturas e descobriu que ainda tinha um desempenho mais rápido, embora não tenha compartilhado os resultados desses testes.
O que torna o Fastify rápido
Um fator que contribui para a velocidade do Fastify é a biblioteca fast-jon-stringify, que ela disse ser significativamente mais rápida do que a biblioteca JSON.stringify() para pequenas cargas úteis.
“Essa biblioteca oferece uma vantagem quando você recebe uma solicitação HTTP, você precisa serializar para um objeto JavaScript, então eles têm uma vantagem real aqui”, disse ela. “Eu recomendo, mesmo que você não queira adotar o Fastify, que considere dar uma olhada nessa biblioteca e tentar otimizar o desempenho do seu servidor Express.”
Ela também brincou com ele para carregá-lo e escreveu um servidor, substituindo o middleware Express padrão por analisador de corpo e outras “coisas”. Ela escreveu um middleware e obteve grandes melhorias de desempenho nele.
Fastify tem uma arquitetura leve, disse ela, que aproveita plug-ins para componentes, definindo um controlador e conectando. Tudo é um plug-in, acrescentou ela.
“Seus componentes estão se comunicando de forma muito eficiente entre si e isso também lhes dá uma vantagem”, disse ela.
Fastify também segue recomendações sobre gerenciamento de conexões de banco de dados, manutenção de recursos compartilhados e manutenção de um pool de conexões eficiente para o servidor de banco de dados, acrescentou ela.
Por fim, o Fastify usa a biblioteca de logs Pino JS, que é considerada uma das — senão o – bibliotecas de log mais rápidas, disse ela.
Experiência do desenvolvedor
Ela também testou o Fastify na experiência do desenvolvedor e demonstrou algumas das maneiras pelas quais o Fastify transforma logs e define plug-ins para criar determinadas funcionalidades. Ela demonstrou como implementa o encapsulamento, como utiliza decoradores e como implanta ganchos para realizar operações no Fastify.
No geral, ela disse que foi fácil de aprender, em parte graças aos tutoriais que o Fastify oferece em seu site.
“O Fastify oferece plug-ins para quase tudo, então, se puder, dê uma olhada”, disse ela. “Eles têm plug-ins para múltiplas funcionalidades que nós, como desenvolvedores, precisamos ter em nossos serviços”.
AWS Lambda pode ser usado para escrever um servidor Fastify e expô-lo no Lambda com Fastify/aws-lambda. O Google Cloud oferece suporte nativo, exceto para análise de tipo de conteúdo, acrescentou ela.
A postagem Um confronto entre Express.js e Fastify Web App Frameworks apareceu pela primeira vez em The New Stack.