Matheus Castiglioni

Identificador correlacional

Imagine que você venda coisas para seus clientes onlines, frequentemente você será questionado por:

Onde estão minhas coisas?

Ou seja, clientes irão nos contatar para saber mais e investigar uma ordem de compra específica.

De forma geral, a maioria dos sistemas possuem tarefas de alto nível que controlam esse tipo de situação, ou seja, uma tarefa processa tudo que é necessário. Mas, com as evoluções tecnologicas e a adoção de sistemas distribuídos utilizando arquiteturas microsserviços, essas tarefas de alto nivel acabam se espalhando em uma cadeia de execução (workflow) e nesse workflow podemos ter N serviços envolvidos em tal operação.

O problema pode ser ainda maior: Cada serviço pode estar em servidores diferentes, localizações diferentes ou ser particionado em multíplas regiões.

Dessa forma como podemos ter bons mecanismos de rastreabilidade, observabilidade, logs e monitoramento? Uma vez que uma requisição atinge e alcance N serviços espalhados na rede de forma distribuída.

Agrupando mensagens de log pelo identificador correlacional

Uma solução seria a gente dar um identificar único para as requisições que estão chegando em nossos ponto de entrada e incluir tal id em todas as mensagens de logs, requisições de rede, chamadas entre microsserviços e demais participantes que estão envolvidos no workflow visto anteriormente.

Esse identificador único é conhecido como correlational id.

Criando o identificador correlacional

A criação do identificador correlacional (correlational id) deve ser feita para cada requisição ou mensagem de entrada em todo serviço com uma interface de comunicação externa (pública).

Transportando o identificador correlacional

Uma vez que você tem criado o identificador, use ele em todo lugar, ou seja, eles devem ser transportados entre serviços. Isso pode ser feito utilizando um cabeçalho (header) chamado X-Correlation-Id com o valor do mesmo.

Caso você não esteja utilizando transporte via HTTP, você provavelmente deve ter um jeito equivalente de adicionar essa metainformação para suas mensagens (geralmente algum tipo de propriedade), se você está gerando arquivos, pode adicionar tal identificador no nome dos mesmos.

Tipos de identificadores

Existe uma diversa granularidade de identificadores à serem utilizados em tal proposta, sendo alguns deles:

Conclusão

Nesse post vimos com adicionar rastreabilidade, observabilidade, métricas e bons monitoramentos para operações de negócio em sistemas distribuídos.

Abraços, até a próxima.

Matheus Castiglioni

Matheus Castiglioni

Apaixonado pelo mundo dos códigos e um eterno estudante, gosto de aprender e saber um pouco de tudo, aquela curiosidade de saber como tudo funciona, tento compartilhar o máximo de conhecimentos adquiridos e ajudar todos aqueles que sou capaz.

comments powered by Disqus