AWS X-Ray — Achando a agulha no palheiro
Nos últimos anos, foi possível observar um forte avanço em direção aos microservices ( e consequentemente, afastando dos monolíticos). Software construídos utilizando conceitos de microservice estão cada vez mais comuns no mercado, e esta tendência não mostra sinais de desaceleração.
Quando pensamos no software em produção, logo pensamos no rastreamento dos dados. Enquanto os logs são muito úteis para esse propósito, o conceito de “rastreamento distribuído” emergiu agora como uma parte importante das boas práticas para a implementação de microservices. Isso por que o “rastreamento distribuido” permite uma visão sucinta dos logs que outrora estariam espalhados entre diferentes ambientes e serviços.
Atualmente, a arquitetura de microservices é frequentemente combinada com arquiteturas assíncronas e baseadas em notificações( como por exemplo o Amazon SNS). Isto torna a aplicação microservice um apanhado de partes separadas, independentes e móveis. Este serviços são normalmente executados em conteiners, dockers, serviços de banco de dados, serviços de mensagens, serviços de aplicativos e máquinas virtuais. E, conforme é possível imaginar, rastrear estas requisições e analisar os pontos de gargalo de desempenho para melhorar o sistema é um desafio. E é neste ponto que a solução da Amazon — tratada neste post — ataca.
O que é
O X-Ray, como o próprio nome indica, permite que você obtenha visibilidade sobre o desempenho de seus aplicativos implantados, fornecendo rastreabilidade das requisições à medida que são roteadas através dos diferentes serviços. Podendo, portanto, não apenas ser usado para monitorar o desempenho das requisições, mas também para identificar gargalos e erros.
Como funciona
O X-Ray captura os dados de rastreamento emitidos por aplicações rodando em instancias EC2( incluindo contêineres ECS), AWS Elastic Beanstalk, Amazon API Gateway, e mais.
Ele implementa o rastreamento, adicionando um cabeçalho HTTP (com um ID exclusivo) para as requisições que ainda não possuem um,e passando o cabeçalho para as demais camadas do gerenciador de requisições. Os dados coletados em cada camada são chamados de segmento e são armazenados em formato JSON. Um segmento representa uma unidade de trabalho e inclui o tempo de solicitação e a resposta, juntamente com sub-segmentos opcionais que representam unidades de trabalho menores (até linhas de código, se for fornecida a instrumentação adequada). Uma amostra estatisticamente significativa dos segmentos é encaminhada para o X-Ray(um processo daemon administra isso em instâncias EC2 e dentro de contêineres) para então ser agrupado (grupos de segmentos que compartilham um ID comum). Após processado, o console do X-Ray disponibiliza um mapa de serviços que representa visualmente a relação dos serviços entre si:
Linguagens compatíveis
No momento que este post foi escrito, as seguintes linguagens possuem uma SDK ( conjunto de bibliotecas com o intuito de facilitar a vida do desenvolvedor) :
- Java
- Go
- Node.js
- Python
- Ruby
- .NET
Mas não se preocupe, caso a sua linguagem favorita não esteja listada aqui, ainda é possível instrumentar sua aplicação utilizando a API disponibilizada pelo serviço: X-Ray API
Serviços similares
É interessante citar que existem outras soluções para “rastreamento distribuído”, a mais famosa delas — de acordo com o Google Trends — é a Zipkin, solução open source do Twitter.
Abaixo estão as mais conhecidas atualmente:
- Twitter Zipkin
- OpenTracing API
- Google Dapper
- AWS X-Ray
Conclusão
Atualmente, a dinâmica das empresas torna cada vez mais importante encontrar rapidamente a raiz dos problemas. Quando falamos em sistemas distribuídos, entendemos que a dificuldade de rastrear os dados cresce exponencialmente. Dito isto, é interessante investir em soluções de rastreamento distribuído, pois estas apresentam uma visão macro da sua solução — facilitando encontrar a raiz do problema — e também permitem que você entre no detalhe quando necessário — facilitando nos casos mais minuciosos.
E você, o que achou? Sua empresa já implementa microservices? Você já utilizou alguma das ferramentas citadas?
Se quiser trocar uma ideia ou entrar em contato comigo, pode me achar no Twitter(@e_ferreirasouza) ou Linkedin.
Grande abraço e até a próxima!