Ao participar de um desafio de backend, o speaker Filho da Nuvem compartilha suas experiências e lições aprendidas em relação ao desempenho e concorrência em desenvolvimento de APIs. Neste artigo, vamos apresentar os principais pontos discutidos no vídeo transcrição, destacando a importância da otimização de desempenho e do gerenciamento de concorrência em projetos de desenvolvimento.

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.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *