Desempenho de API
Para criar uma API que atenda a um volume específico de solicitações por segundo, o speaker utilizou Docker Compose com quatro componentes: banco de dados, Nginx como balanceador de carga e dois APIs idênticos. No entanto, a API inicial não foi bem-sucedida. Com a ferramenta Gatling, o speaker realizou testes de carga e identificou problemas de desempenho. A otimização do código e a melhoria da API foram fundamentais para superar esses desafios.
Métricas de Desempenho
Para avaliar o desempenho, o speaker destaca a importância de entender métricas como Acordo de Nível de Serviço (SLA), Indicador de Nível de Serviço (SLI) e Objetivo de Nível de Serviço (SLO). Além disso, a métrica P95 (percentil 95 das vezes de resposta) é um indicador eficaz de desempenho.
Melhorias de Desempenho
Para melhorar o desempenho, o speaker identificou gargalos no banco de dados e redistribuiu recursos para melhorar os tempos de resposta. Além disso, ele investigou consultas SQL lentas e criou um índice na coluna relevante para melhorar a consulta de busca. Outras melhorias incluíram concatenar informações necessárias em um único campo e adicionar uma camada de cache diante dos pontos de extremidade de consulta, o que melhorou significativamente o desempenho.
Concorrência e problemas de desempenho
No entanto, o speaker também enfrentou problemas de concorrência ao criar endpoints de pessoas, incluindo a devolução de uma resposta de sucesso antes de garantir que os dados fossem salvos no banco de dados, o que pode levar a inconsistências de dados. Além disso, optar por velocidade em vez de persistência de dados pode não ser a abordagem mais adequada.
Padrão de Conjunto de Trabalhadores
Para lidar com problemas de concorrência, o speaker propõe o uso do padrão de conjunto de trabalhadores. No entanto, ele destaca as limitações da programação concorrente, incluindo troca de contexto, problemas de desempenho e complexidade aumentada ao escalonar o número de rotinas.
Reflexões e Lições Aprendidas
O speaker reflete sobre sua experiência, notando que escrever um script para o vídeo fez parecer mais organizado do que o processo de desenvolvimento real. Ele destaca a importância de ajustar configurações de Indynex e Postgres para alcançar um desempenho mais rápido na API. Embora não tenha submetido sua solução ao desafio de codificação Rinha, ele aprendeu muito e se divertiu durante o processo.
Em resumo, este artigo destaca a importância de otimizar o desempenho e gerenciar a concorrência em projetos de desenvolvimento de APIs. Com a compreensão das métricas de desempenho e a aplicação de padrões de design eficazes, os desenvolvedores podem criar APIs escaláveis e eficientes que atendam às necessidades dos usuários.