Monitoramento de API’s, Routines, Channels e mais Golang
Hoje tem bastante coisas boas e tretas em Go
Aqui a gente é muito intenso, pé na porta e soco na cara. Semana passada teve muito Kubernetes, Kubernetes, Kubernetes, Kubernetes, Kubernetes e essa semana teve muito Golang, Golang e Golang. Mas não é muito minha culpa, e sim dos algoritmos de recomendação do Feedly que não devem tá funcionando muito legal. Hehehe.
Então bora lá.
O que monitorar da sua API?
Observabilidade e monitoramento é um dos meus assuntos favoritos atualmente. Num contexto de ferramentas de monitoramento, agentes, exporters e afins é muito simples hoje fazer um digest gigante de métricas pra serem escovadas depois. Mas existe um fenômeno que vem depois disso que é a grande variedade de métricas, alarmes que no fim fazem você chover no molhado de tanta coisa que você pode (mas nem sempre deve) considerar como prioritário na hora de criar um alarme ou uma dashboard descritiva sobre o comportamento da sua aplicação.
Nesse texto massa do Mark Michon ele faz um resumo dos principais pontos que devem ser considerados para iniciar com o monitoramento das suas API’s, mas se aplica pra qualquer contexto web no geral. Basicamente começar do básico com as métricas RED (Rate, Error, Duration). Vale a pena das uma olhada.
Se você gosta desse assunto, há uns tempos eu escrevi um texto sobre considerações iniciais da jornada de SRE, de como você pode iniciar a estabelecer e monitorar seus SLO’s e SLI’s. Eu me orgulho bastante desse texto, vou deixar ele aqui pra você ler também quando tiver um tempo.
Onde se usa Go Routines e Channels?
Channels e Routines está para Go, o que Spot Instances está para a AWS. Se não usa, está perdendo o melhor que a ferramenta pode te oferecer.
Os paradigmas de solicitações assíncronas, multithread e paralelismo são predominantes em arquiteturas cloud native, e nesse artigo do Alex Sniffing podemos ver de forma detalhada a implementação e as possibilidades de uso que podemos ter trabalhando com processamento async de mensagens dentro da lib nativa do Go, e de como podemos desacoplar esse conceito e implementar em workloads do dia a dia. De todos os artigos a respeito esse é o mais simples que encontrei. Da uma lida, sem zoeira. Se você tem problemas em entender a implementação disso, devolvemos o dinheiro que você pagou pra receber esse e-mail, sério, todos os R$ 0,00. Tudinho. Da uma olhada lá.
Maps em Go pra quem gosta de Arrays em PHP
Desculpa a comparação, mas sejamos francos, as ferramentas pra se lidar com arrays é o que me manteve no PHP por alguns anos, considero um dos melhores pontos da linguagem. Hoje isso já não me pertence mais, por outros caminhos que tomei profissionalmente, mas ainda considero uma baita ferramenta, sem duvidas. Acho que por isso todas as linguagens que eu tenho contato eu procuro de alguma forma adaptar esse uso.
As tools nativas do Go pra tratar arrays e slices são bem boas, e eu faço um uso até meio desenfreado delas, agora estou tentando incluir os maps por conta de familiaridade depois de algumas muitas horas de vôo com o Terraform e a possibilidade de poder iterar na forma de chave / valor que eu sinceramente fico bem feliz de poder fazer isso novamente. Vou deixar esse artigo aqui da Digital Ocean que me ajudou bastante.
Homebrew Tap da Hashicorp
Essa semana a Hashicorp anunciou o tap oficial pra disponibilizar e versionar suas ferramentas pra usuários MacOS. É só isso mesmo. Me fez feliz e espero que ajude você também. Tá aqui o post.
Você testa seus arquivos de configuração nas suas pipelines? Te apresento Conftest, do Open Policy Agent.
Olha eu aqui puxando sardinha pra mais ferramentas da CNCF. Dessa vez trouxe aqui uma prática interessante utilizando o Open Policy Agent pra fazer validações de boas práticas e segurança nos seus manifestos de deployment. Cada vez mais os manifestos de deployment e infraestrutura se tornam presentes no dia a dia de entrega de produtos na forma de código, e estabelecer padrões e processos de qualidade nesses caras é cada dia mais essencial pra garantir real confiabilidade de todas as pontas da entrega da aplicação. Cai nesse artigo que aborda uso de um cli chamado conftest, que testa arquivos de deployment baseado em especificações estruturadas em Rego, a linguagem do Open Policy Agent. Olha que maravilha.
10 coisas pra se considerar na adoção de Kubernetes
Pra quem acha que Kubernetes em prod é só plugar e usar. Desculpa. Nesse artigo do Container Journal foi apresentado uma série de passos incríveis para se considerar na adoção de Kubernetes para suportar seus workloads de produção, principalmente nos quesitos de observabilidade entregando bem mastigadinho o que você precisa monitorar pra ter garantir um ciclo de vida legal pro seu ambiente, inclusive muita coisa pode ser resolvida da parte de audit com a dica anterior.
Protobufs e gRPC’s em dia zero
O gRPC está em ascensão no cardápio de formatos de transporte e serialização, meio empurrado via goela abaixo, mas está. E isso faz parte do problema. Existe inclusive muita implementação sem nem ao menos considerações iniciais, somente pra seguir um guideline não escrito do hype. Nesse artigo escrito pelo Senyo Simpson temos um dia 0 de implementação de gRPC, explicando desde os conceitos básicos de procedure calls, a implementação do gRPC em si, e um guia pós leitura maneiro das referencias do artigo que vai me render algumas boas horas de leitura. Vale a pena.
Queues em Go? Usando Slices pra simular FIFO?
Trouxe essa proposta legal aqui. Sinceramente eu acho um pouco esquisita, mas ainda assim, bem legal. Imagina que legal poder trabalhar com filas voláteis in memory somente com Go? Essa sugestão aqui se baseia em criar queues utilizando somente slices. Um pouco esquisito? Pra mim que estou cortando o mato agora, sim! Haha.
A ideia seria ordenar atributos que você já tem no seu runtime, enfileirar pra tratá-los unitariamente. Pode ser um aliado na hora de gerenciar lógicas de retentativa talvez. Ainda não tenho opinião formada.
Mas gostei da sugestão, então vou deixar ela aqui também.
Go não está pronto pra produção?
Agora treta. Nesse artigo temos um ponto de vista bem interessante sobre o uso de Go em ambientes Enterprise. Na real mesmo o texto tenta culpar o ciclo de desenvolvimento e a linguagem pelo trabalho cuidadoso que deveria existir da parte do desenvolvedor. Praticamente todas as criticas seriam facilmente resolviveis com um pouquinho de Sonar, uma pitada de linter e quem sabe... Até mesmo code review.
Toda a critica é construida em cima da visão do livro Patterns of Enterprise Application Architecture do Martin Fowler.
Até semana que vem!
Bebam máscara e usem água.