AWS X-Ray — Achando a agulha no palheiro

Evandro F. Souza
Training Center
Published in
3 min readJan 17, 2018

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:

Imagem retirada da Amazon

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!

--

--