Healthz, a sua aplicação está saudável?
Um dos principais problemas quando uma aplicação para de funcionar é encontrar e descobrir porque ela não está funcionando. Existem várias metodologias ou bibliotecas que fornecem ferramentas, nesse caso externas à aplicação, para verificar a saúde da aplicação e seus serviços.
Tentando resolver esse problema, alguns engenheiros do Google criaram uma metodologia chamada Healthz, onde a própria aplicação nos informa se ela está saudável ou não.
Esse vídeo do Kelsey Hightower fala bem sobre o assunto e eu recomendo bastante, mas vou citar brevemente o conceito e porque acho que seria uma prática interessante de se adotar. Vamos lá?
O que é Healthz?
Lembro de um dia na cozinha. Alguns colegas aqui da dti discutindo se a lâmpada deveria saber se trocar ou se outra classe precisaria implementar esse método.
O conceito de Healthz é semelhante. Deveríamos conectar “probes” para testar nossas aplicações ou as aplicações deveriam nos avisar se ela está saudável? Claro, essa pergunta visa levantar a curiosidade, podemos fazer os dois.
O que é o Healthz? Simples, um endpoint que existe na aplicação, que faz testes de sanidade, conexões ao banco de dados, serviços e etc. Ele nos retorna um status 200 caso tudo esteja ok, ou alguma outra “resposta” caso não esteja ok.
Esse endpoint pode ser desenvolvido dentro da aplicação ou ser encapsulado e publicado juntamente com ela.
O conceito é simples. O desenvolvimento vai desde simples testes com um status http 200 ou 500, até um JSON mais completo listando os erros encontrados, ou até mesmo uma interface, tudo depende da sua necessidade ou disponibilidade. O ponto aqui é que o simples status http 200 já valida a ideia e a torna de imensa utilidade.
Healthz 101
Um exemplo prático seria uma aplicação dti-wc. Um app maravilhoso que nos informa se o banheiro da empresa está vazio ou não. Essa aplicação possui um banco de dados SQL, um servidor Redis e dois serviços, o Alair e o Ademar. Alair e Ademar são serviços que informam se o banheiro está vazio ou não.
Além dos endpoints normais dessa aplicação, ela possui um endpoint healthz que se conecta ao banco e realiza um SELECT (só pra ver se está tudo ok), conecta-se ao Redis e faz um get, e realiza uma chamada ao Vanderlei e o Ademar para saber se a conexão com os serviços está ok. A aplicação retorna 200 ou um JSON informando se alguma dessas conexões falhar.
Em algum ponto no futuro algo na nossa aplicação para de funcionar e precisamos de informações para tentar entender por que. Nesse cenário, o primeiro teste seria chamar o endpoint healthz. Ao fazer isso, percebemos que por algum motivo recebemos a mensagem que o serviço do Ademar não está funcionando. Logo, não precisamos “perder tempo” verificando a aplicação em si e podemos validar o que aconteceu com o Ademar.
O mesmo acontece para o Banco, Redis ou o Alair, podemos verificar de maneira rápida a saúde da aplicação, e ter uma identificação, mesmo que simples, caso algum sistema esteja indisponível.
CI/CD com o Healthz
Uma outra vantagem do Healthz é que podemos incluí-lo no processo de CI/CD e impedir a publicação da aplicação caso o endpoint não retorne corretamente. Isso evita, por exemplo, que um dos ambientes fique fora do ar por um tempo até que o desenvolvedor responsável possa perceber que a aplicação não está saudável e realizar um rollback.
Olhando um caso específico do Kubernetes temos dois health checks disponíveis, livenessProbe e readinessProbe que podem ser utilizados com o Healthz. Ao configurar o readinessProbe para testar o healthz, caso o Kubernetes não receba uma mensagem de sucesso desse endpoint ele impede a publicação, mantendo o pod anterior online, tudo de forma automática e sem que o ambiente fique indisponível.
Da mesma forma, o livenessProbe pode ser utilizado para realizar testes com uma frequência X e testar se a aplicação está saudável.
Em breve vamos falar mais sobre Kubernetes, fique ligado!
Desenvolvimento de Software
Confira outros artigos
Mecanismos de Acompanhamento no Desenvolvimento de Software
O uso de mecanismos de acompanhamento é imprescindível no mundo do desenvolvimento de software e pode potencializar a eficiência digital. O acompanhamento efetivo das operações é fundamental para garantir a entrega de soluções digitais de sucesso. Na nossa empresa, utilizamos uma metodologia única, o dti evolve, que incorpora inteligência artificial (IA) para acelerar nosso processo de […]
Desenvolvimento de Software
Eficiência digital com copilot: um caso de uso do GitHub
Em um mundo em constante evolução tecnológica, otimizar o tempo e potencializar a eficiência digital se torna cada vez mais crucial. Portanto, vamos apresentar alguns experimentos que estão sendo implementados com o Git Hub Copilot em busca de maior eficiência digital. Certamente quem nos acompanha sabe que estamos experimentando e introduzindo as melhores ferramentas de […]
Desenvolvimento de Software
Engenharia de Prompt: A Arte de Conversar com a IA
Sumário1 Falando a Linguagem das Máquinas2 O que é Engenharia de Prompt?3 A Importância da Engenharia de Prompt em Ação: Aplicações do Mundo Real 4 Princípios-chave da Engenharia de Prompt Eficaz4.1 Desconstruindo o Prompt:4.2 Técnicas de Engenharia de Prompt:4.3 Combinando Técnicas e Criando sua Obra-Prima:5 As Armadilhas da Engenharia de Prompt: Navegando pelos Limites dos Modelos […]
Desenvolvimento de Software