Skip to content

Go 1.26.1 e a Revolução 'Green Tea': Reduzindo Custos e Otimizando o Garbage Collector

Published: Duration: 6:40
0:00 0:00

Transcript

Apresentadora: Juliana Santos Convidado: Rafael Costa (Especialista em Sistemas Distribuídos e Engenheiro de Software Sênior) Apresentadora: E aí, pessoal, bem-vindos de volta ao Allur! Eu sou a Juliana Santos e hoje o nosso papo é sobre algo que mexe diretamente com o bolso das empresas e com o sono de quem cuida de infraestrutura. Sabe aquele momento em que seu serviço em Go começa a escalar, o tráfego sobe, e de repente... o Garbage Collector decide que é hora de trabalhar e sua latência vai pro espaço? Pois é, o time do Google e a comunidade Go acabaram de lançar uma resposta de peso pra isso. Estamos falando do Go 1.26.1 e da grande estrela dessa versão: o novo coletor de lixo apelidado de "Green Tea". Apresentadora: E pra me ajudar a mergulhar nos detalhes técnicos dessa versão, eu trouxe um cara que respira Go e sistemas de alta disponibilidade. Ele é engenheiro de software sênior, especialista em nuvem e já quebrou muito a cabeça otimizando heaps gigantescos. Rafael Costa, seja muito bem-vindo ao Allur! Massa ter você aqui, Rafael. Convidado: Valeu, Juliana! O prazer é todo meu. Cara, falar de Go e performance é algo que eu adoro, né? E olha, vou te falar, essa versão 1.26.1 não é brincadeira não. Tem muita coisa "sob o capô" que vai facilitar demais a vida de quem opera sistema em larga escala. Apresentadora: Rafael, pra gente começar... o nome é curioso, né? "Green Tea" ou Chá Verde. Por que esse apelido pro novo coletor de lixo e o que é que ele traz de tão diferente do que a gente já tinha nas versões anteriores? Convidado: Pois é, o nome "Green Tea" dá essa ideia de algo mais leve, mais zen, né? (risos). Mas a real é que ele representa uma reengenharia pesada no *pacing* do GC. Nas versões antigas, o Go tinha um ritmo de coleta de lixo que às vezes era meio "truncado". O Green Tea foca muito na adaptabilidade. Ele olha pra carga de trabalho atual do sistema e ajusta o ritmo em tempo real. A grande sacada é como ele lida com a memória de curto prazo. Ele ficou muito mais agressivo pra reciclar objetos que morrem rápido, o que evita que o coletor precise fazer aquele ciclo completo, pesado, que trava tudo. É tipo assim, em vez de fazer uma faxina geral na casa uma vez por semana, ele vai limpando cada migalha que cai no chão na hora, sabe? Apresentadora: Entendi! E eu li que isso impacta um tal de "GC Assist". Explica pra gente: o que é isso e por que os desenvolvedores deveriam se importar com essa redução de overhead? Convidado: Essa é a parte que eu mais gosto! O "GC Assist" é quando o coletor de lixo tá tão sobrecarregado que ele começa a "pedir ajuda" pras suas próprias goroutines de negócio. Ou seja, em vez da sua thread estar lá processando um pedido de compra ou um streaming, ela é obrigada a parar pra ajudar o GC a limpar memória. Isso gera aqueles picos de latência que a gente odeia, o famoso p99 alto. Com o Go 1.26, o tempo que as goroutines passam nesse "trabalho comunitário" forçado caiu drasticamente. A promessa é de uma redução de 10% a 40% no overhead de CPU. Cara, 40% a menos de CPU gasta com limpeza de memória é muita coisa! É poder de processamento real voltando pro seu app. Apresentadora: Nossa, 40% é um absurdo de ganho! E trazendo isso pro mundo real, Rafael... no final do mês, quando o CTO olha a fatura da AWS ou do Google Cloud, onde é que esse "Green Tea" aparece? Ele realmente reduz o número de servidores? Convidado: Com certeza, Juliana. É matemática pura. Se o seu serviço hoje precisa de 10 máquinas pra aguentar o tráfego por causa do custo do GC, com essa eficiência do 1.26.1, você muito provavelmente consegue fazer o mesmo trabalho com 7 ou 8 máquinas mantendo o mesmo SLA. Pra quem usa Kubernetes, isso é mel na chupeta. O Green Tea diminui aquele fenômeno de *throttling* de CPU dentro dos pods. Sabe quando o container começa a ser limitado pelo K8s porque passou do limite? Muitas vezes era o GC tentando limpar um heap gigante de 64GB. Agora, o Go lida com esses heaps massivos de um jeito muito mais suave. O ROI é imediato, tipo, você atualiza a versão e no dia seguinte a curva de uso de CPU já cai. Apresentadora: Massa! Agora, a gente tá falando da versão 1.26.1. Muita gente se empolga com a 1.26.0, mas você comentou comigo que a "versão de produção" mesmo é a .1. Por que essa cautela? Convidado: Ah, Juliana, escalado gato escaldado tem medo de água fria, né? (risos). A versão .0 sempre traz as grandes inovações, mas a 1.26.1 é o que a gente chama de "patch de estabilidade". Ela corrigiu uns bugs bem específicos de concorrência que podiam causar *panics* raros no Green Tea e, mais importante, fechou umas vulnerabilidades de segurança em pacotes de rede. Pra quem tá em ambiente crítico, a 1.26.1 é o porto seguro. É onde a performance encontra a confiabilidade. Apresentadora: Perfeito. E pra quem tá ouvindo a gente e pensando: "Putz, preciso migrar agora!", qual o caminho das pedras? Tem algum segredo ou é só trocar a versão no `go.mod` e ser feliz? Convidado: Olha, trocar no `go.mod` é o primeiro passo, mas não seja imprudente. O que eu recomendo sempre: primeiro, atualiza seu ambiente de CI/CD. Depois, roda benchmarks, foca muito no `allocs/op`. Mas a dica de ouro mesmo é monitorar as métricas de runtime. No Go 1.26, a gente tem uma métrica chamada `GCPUFraction`. Se você começar a monitorar isso antes e depois do deploy, você vai ver a mágica acontecer. A fração de CPU dedicada ao GC tem que cair. Se caiu, você tá ganhando dinheiro. E claro, use ferramentas de observabilidade pra garantir que sua latência p99 tá estável sob carga. Apresentadora: Legal demais! Rafael, o papo tá incrível, mas a gente já tá caminhando pro final. Se você pudesse resumir: por que o Go 1.26.1 é o novo padrão ouro pra nuvem? Convidado: Eu diria que é porque ele resolve o maior "vilão" das linguagens gerenciadas: a previsibilidade. Com o Green Tea, o Go se torna ainda mais imbatível pra infraestrutura de nuvem porque ele entrega mais performance com menos recurso. É menos latência, menos custo e mais segurança. Se você quer que seu serviço escale sem explodir a conta bancária da empresa, a migração pro 1.26.1 não é opcional, é prioridade técnica pra esse trimestre. Apresentadora: Recado dado, hein pessoal! Menos "GC Assist", mais performance e aquele alívio na fatura da nuvem. Rafael, cara, valeu demais por compartilhar esse conhecimento aqui com a gente no Allur. Foi um prazer! Convidado: Eu que agradeço, Juliana! Valeu pelo convite e bora atualizar esses sistemas, galera! Abraço! Apresentadora: Com certeza! E pra você que acompanhou a gente, se quiser ver o exemplo de código que o Rafael mencionou sobre como monitorar as métricas de GC, dá uma olhada nas notas do episódio. Valeu por sintonizar o Allur, seu podcast de tecnologia preferido. A gente se vê no próximo episódio. Tchau!