Série de Melhoria da Observabilidade de API (Parte 3): Tracing
March 19, 2024
Introdução
O que é Rastreamento Distribuído?
No cenário atual da arquitetura de microsserviços e sistemas distribuídos, uma única solicitação frequentemente atravessa vários serviços, cada um contendo diversas etapas de processamento interno. Para garantir a operação eficiente e estável dos sistemas, é essencial compreender o caminho completo e o processamento dessas solicitações. Essa necessidade deu origem à tecnologia de rastreamento distribuído. Ela nos permite obter uma compreensão clara de toda a jornada de uma solicitação, desde o início até a conclusão, incluindo cada serviço pelo qual ela passa, o tempo de processamento de cada serviço e a ocorrência de quaisquer anomalias.
Processo de Utilização de Rastreamento em APIs
Inicialmente, é essencial implantar um agente de rastreamento ou SDK para rastreamento no ponto de entrada de cada serviço, a fim de capturar todas as solicitações. Por meio dos dados de rastreamento, podemos observar claramente o tempo de processamento das solicitações em cada serviço, identificando assim possíveis gargalos de desempenho. O rastreamento distribuído não apenas registra o processamento normal das solicitações, mas também captura quaisquer exceções e erros que ocorram durante o processo. Ao visualizar os dados de rastreamento distribuído, podemos compreender intuitivamente o fluxo das solicitações entre diferentes serviços e componentes.
Melhorando a Observabilidade - Rastreamento Distribuído
Em relação ao rastreamento distribuído, aqui estão alguns métodos para melhorar a observabilidade das APIs, juntamente com exemplos específicos:
1. Selecionando Ferramentas e Tecnologias de Rastreamento Distribuído Adequadas
Ao escolher ferramentas de rastreamento distribuído, é importante considerar sua stack de tecnologia, requisitos de negócios e complexidade de monitoramento. Zipkin, SkyWalking e OpenTelemetry são soluções populares de rastreamento distribuído, cada uma com suas características únicas.
2. Integrando Rastreamento Distribuído no Desenvolvimento de APIs
Para Zipkin e SkyWalking, a integração no desenvolvimento de APIs pode ser alcançada adicionando as respectivas dependências e configurações. No entanto, para o OpenTelemetry, é necessário criar e gerenciar manualmente o contexto de rastreamento usando sua API.
3. Configurando e Otimizando Sistemas de Rastreamento Distribuído
Zipkin, SkyWalking e OpenTelemetry podem ser personalizados por meio de arquivos de configuração. Parâmetros como taxa de amostragem, configuração de armazenamento de backend e otimização de transmissão de dados podem ser definidos. Além disso, é crucial definir regras de alerta para responder prontamente a eventos excepcionais.
4. Análise e Visualização de Dados
Zipkin, SkyWalking e OpenTelemetry fornecem interfaces de visualização para exibir dados de rastreamento distribuído e métricas de desempenho. Por exemplo, na interface do usuário do Zipkin, é possível pesquisar e visualizar dados de rastreamento específicos para entender o fluxo de solicitações entre diferentes serviços. O painel do SkyWalking oferece uma visão geral do desempenho global e um gráfico de relacionamento de chamadas de serviço. Os dados do OpenTelemetry podem ser importados para várias ferramentas de visualização, como Grafana, para criar painéis e gráficos personalizados.
5. API7 Enterprise Integra Plugins de Rastreamento Distribuído
API7 Enterprise suporta vários plugins de rastreamento, incluindo Zipkin, OpenTracing e SkyWalking. Esses plugins de rastreamento precisam ser vinculados a regras de roteamento ou regras globais. Se não houver requisitos de taxa de amostragem, é recomendável vinculá-los a regras globais para evitar omissões.
Análise de Caso Prático: Melhorando a Observabilidade de APIs de E-commerce
Durante o processo de navegação e compra de produtos em uma plataforma de e-commerce, várias chamadas de API estão envolvidas. Por exemplo, os usuários inicialmente chamam a API do serviço de produtos para recuperar uma lista de produtos, depois selecionam um produto específico e chamam a API do serviço de pedidos para criar um pedido e, finalmente, chamam a API do serviço de pagamento para concluir o pagamento.
Nesse cenário, foi observado que a API do serviço de pedidos frequentemente apresentava atrasos e timeouts durante os períodos de pico, resultando em atrasos e falhas perceptíveis durante o processo de finalização da compra. Para resolver esse problema, a equipe decidiu introduzir a tecnologia de rastreamento distribuído para diagnosticar gargalos de desempenho e otimizar o sistema.
-
Selecionando Ferramentas de Rastreamento Distribuído: A equipe escolheu o SkyWalking como a ferramenta de rastreamento distribuído devido ao seu suporte a várias linguagens, facilidade de integração e recursos ricos de visualização.
-
Integrando o SkyWalking: O serviço de pedidos é desenvolvido em Java, e a equipe integrou o Java Agent do SkyWalking ao código do serviço de pedidos. Isso permite que o SkyWalking colete automaticamente dados de rastreamento quando a API do serviço de pedidos é chamada.
-
Configurando o SkyWalking: A equipe configurou o armazenamento de backend do SkyWalking para o Elasticsearch e definiu taxas de amostragem adequadas para equilibrar o nível de detalhe dos dados de rastreamento e os custos de armazenamento.
-
Coletando e Analisando Dados de Rastreamento: Durante os períodos de pico, a equipe observou a cadeia de chamadas e as métricas de desempenho da API do serviço de pedidos por meio da interface do usuário do SkyWalking. Eles descobriram que uma chamada específica à API do serviço de estoque de produtos levava significativamente mais tempo durante o processo de criação de pedidos, tornando-se um gargalo de desempenho.
-
Investigação Detalhada: A equipe examinou detalhadamente os dados de rastreamento da API do serviço de estoque de produtos, incluindo parâmetros de chamada, resultados de retorno e informações de exceção. Eles descobriram que a API executava uma operação complexa de consulta ao banco de dados ao processar produtos específicos, resultando em um aumento no tempo de processamento.
-
Medidas de Otimização: Para resolver esse problema, a equipe implementou duas medidas de otimização. Primeiro, eles otimizaram as instruções de consulta ao banco de dados para melhorar a eficiência das consultas. Em segundo lugar, implementaram o cache para a API do serviço de estoque de produtos, recuperando os resultados diretamente do cache para produtos frequentemente consultados e que mudam pouco, evitando assim consultas desnecessárias ao banco de dados.
Conclusão
A tecnologia de rastreamento distribuído desempenha um papel crucial na arquitetura de microsserviços e sistemas distribuídos. Ao registrar e visualizar o fluxo de solicitações entre vários serviços, podemos identificar e resolver rapidamente gargalos de desempenho, melhorando a estabilidade e a observabilidade do sistema. Ao selecionar ferramentas de rastreamento distribuído adequadas e integrá-las ao desenvolvimento de APIs, podemos obter insights mais profundos sobre as operações do sistema, melhorando assim a experiência do usuário e a eficiência do sistema.