Skip to content

luis-olivetti/go-observability

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

go-observability

Objetivo

Desenvolver um sistema em Go que receba um CEP, identifica a cidade e retorna o clima atual (temperatura em graus celsius, fahrenheit e kelvin) juntamente com a cidade. Esse sistema deverá implementar OTEL(Open Telemetry) e Zipkin.

Basedo no cenário conhecido "Sistema de temperatura por CEP" denominado Serviço B, será incluso um novo projeto, denominado Serviço A.

Requisitos

Serviço A (responsável pelo input):

  • O sistema deve receber um input de 8 dígitos via POST, através do schema: { "cep": "29902555" }
  • O sistema deve validar se o input é valido (contem 8 dígitos) e é uma STRING
    • Caso seja válido, será encaminhado para o Serviço B via HTTP
    • Caso não seja válido, deve retornar: Código HTTP: 422 Mensagem: invalid zipcode

Serviço B (responsável pela orquestração):

  • O sistema deve receber um CEP válido de 8 digitos
  • O sistema deve realizar a pesquisa do CEP e encontrar o nome da localização, a partir disso, deverá retornar as temperaturas e formatá-las em: Celsius, Fahrenheit e Kelvin. Juntamente com o nome da localização.
  • O sistema deve responder adequadamente nos seguintes cenários:
    • Em caso de sucesso: Código HTTP: 200 Response Body: { "city: "São Paulo", "temp_C": 28.5, "temp_F": 28.5, "temp_K": 28.5 }
    • Em caso de falha, caso o CEP não seja válido (com formato correto): Código HTTP: 422 Mensagem: invalid zipcode
    • ​Em caso de falha, caso o CEP não seja encontrado: Código HTTP: 404 Mensagem: cannot find zipcode

Após a implementação dos serviços, adicione a implementação do OTEL + Zipkin:

Implementar tracing distribuído entre Serviço A - Serviço B Utilizar span para medir o tempo de resposta do serviço de busca de CEP e busca de temperatura.

Dicas:

  • Utilize a API viaCEP (ou similar) para encontrar a localização que deseja consultar a temperatura: https://viacep.com.br/
  • Utilize a API WeatherAPI (ou similar) para consultar as temperaturas desejadas: https://www.weatherapi.com/
  • Para realizar a conversão de Celsius para Fahrenheit, utilize a seguinte fórmula: F = C * 1,8 + 32
  • Para realizar a conversão de Celsius para Kelvin, utilize a seguinte fórmula: K = C + 273 Sendo F = Fahrenheit Sendo C = Celsius Sendo K = Kelvin
  • Para dúvidas da implementação do OTEL, você pode clicar aqui
  • Para implementação de spans, você pode clicar aqui
  • Você precisará utilizar um serviço de collector do OTEL
  • Para mais informações sobre Zipkin, você pode clicar aqui

Entrega:

O código-fonte completo da implementação. Documentação explicando como rodar o projeto em ambiente dev. Utilize docker/docker-compose para que possamos realizar os testes de sua aplicação.

Como executar?

Ambiente Dev

Altere o arquivo .env com os seguintes valores:

DOCKERFILE=Dockerfile.dev
IS_DEV=true

Execute o seguinte comando através do Docker Compose:

$ docker compose up -d

Conecte-se no container go-service-a e execute o serviço:

$ docker compose exec go-service-a sh
$ go run cmd/main.go

Conecte-se também no container go-service-b e execute o serviço:

$ docker compose exec go-service-b sh
$ go run cmd/main.go

Dica: Utilize a extensão Remote Development no VSCode para realizar um ´Attach to running container´.

O serviço A iniciará na porta 8080 e o serviço B na porta 8181. Para facilitar, utilize os arquivos http disponíveis nos diretórios rest-client de cada microsserviço.

Ambiente Produção

Altere o arquivo .env com os seguintes valores:

DOCKERFILE=Dockerfile.prod
IS_DEV=false

Execute o seguinte comando através do Docker Compose:

$ docker compose up --build

Os contêineres go-service-a e go-service-b estarão prontos para uso, e você poderá realizar as chamadas HTTP. O serviço A iniciará na porta 8080 e o serviço B na porta 8181. Para facilitar, utilize os arquivos http disponíveis nos diretórios rest-client de cada microsserviço.

Zipkin

O Zipkin é uma ferramenta de rastreamento distribuído que permite monitorar e solucionar problemas em sistemas distribuídos complexos. Ele ajuda a visualizar o fluxo de solicitações enquanto atravessam vários serviços, permitindo identificar gargalos de desempenho, erros e latências em sua arquitetura de microsserviços.

Você pode acessar a interface do Zipkin através do endereço http://localhost:9411/

Exemplo de rastreio

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages