O que é service mesh

À medida que as arquiteturas de microserviços se tornam mais prevalentes, a complexidade na comunicação entre serviços individuais também aumenta. Garantir a confiabilidade, segurança e observabilidade dessas interações pode ser um desafio significativo.

Assim então surge o conceito de Service Mesh, uma solução projetada para facilitar a gestão de serviços em ambientes distribuídos.

O que é Service Mesh?

Service Mesh é uma camada de infraestrutura dedicada ao gerenciamento de comunicações de rede entre microserviços ou até mesmo monolitos.

Ele fornece funcionalidades essenciais, como roteamento de tráfego, observabilidade, segurança e resiliência, sem a necessidade de modificar o código dos aplicativos. Em essência, um Service Mesh permite que os desenvolvedores foquem na lógica de negócio, enquanto a camada de infraestrutura cuida das complexidades de comunicação entre serviços.

Leia mais »

O que é e como utilizar o package context

No desenvolvimento de aplicações em Go, é comum enfrentar situações em que precisamos gerenciar o tempo de vida de processos, propagar cancelamentos de tarefas ou passar dados entre goroutines.

Para resolver esses problemas, a própria linguagem fornece um package chamado context.

Nesse post, vamos explorar juntos o que é o package context, para que ele serve, onde normalmente é utilizado e como implementá-lo em suas aplicações Go.

Hello Context

O package context foi introduzido na versão 1.7 do Go e é utilizado para gerenciar deadlines, cancelamentos e outros valores através de limites de API e entre goroutines. Sua principal função é gerenciar o tempo de vida de uma operação, especialmente em servidores e aplicativos web, onde operações longas podem ser canceladas se excederem um determinado tempo ou se a solicitação do cliente for cancelada.

Leia mais »

Como configurar Vertical Pod Autoscaler no Kubernetes

No mundo dos contêineres e orquestração, o Kubernetes se destaca como uma das plataformas mais poderosas para gerenciar aplicações em escala.

Uma das funcionalidades essenciais oferecidas pelo Kubernetes é a capacidade de escalar aplicações automaticamente. Quando comparado com o Horizontal Pod Autoscaler (HPA), que é bastante conhecido e utilizado, o Vertical Pod Autoscaler (VPA), mesmo desempenhando um papel crucial no ajuste de recursos alocados a um pod, é muito menos conhecido.

Neste post falo um pouco sobre o conceito de VPA, suas diferenças em relação ao HPA e como configurá-lo com exemplos práticos.

Leia mais »

A diferença entre ponteiro e valor nos métodos

Quando escrevemos métodos em Go, uma das decisões importantes é se devemos passar a struct por valor ou por ponteiro. A escolha pode impactar a performance, o comportamento do nosso código e a alocação de memória. Neste post, vamos explorar essa diferença com um exemplo prático e entender em quais situações cada abordagem é mais adequada.

Vamos começar com uma pequena struct e dois métodos: um onde a struct é passada por valor e outro por ponteiro.

Leia mais »

Boas práticas na utilização de goroutines e channels

Goroutines e channels são fundamentais para a programação concorrente em Go, proporcionando uma maneira eficiente de realizar tarefas simultâneas. Caso você ainda não esteja tão familiarizado com goroutines e channels recomendo a leitura:

No entanto, embora a facilidade para se lidar com programação concorrente em Go seja grande, para garantir que o código seja eficiente e livre de erros, é essencial prestar atenção a alguns pontos.

Leia mais »

Como criar rotas no Go 1.22+

O package net/http é uma ferramenta essencial para o desenvolvimento de aplicações web. Originalmente, o roteamento no net/http era bastante básico, exigindo que os desenvolvedores criassem suas próprias soluções para mapear URLs a handlers específicos. Isso frequentemente resultava em código adicional para lidar com casos comuns, como métodos HTTP diferentes (GET, POST, DELETE) e a organização de rotas mais complexas.

Melhorias no Roteamento

Recentemente, na versão 1.22 da linguagem, o time de desenvolvimento do Go introduziu melhorias significativas no roteamento do net/http. Estas mudanças têm como objetivo simplificar o desenvolvimento de aplicações web, oferecendo uma API mais poderosa e flexível para definir e gerenciar rotas.

Leia mais »

Tudo sobre a pasta internal

Embora não haja uma obrigatoriedade em como organizar projetos Go, um recurso pouco explorado – pelo menos da maneira correta -, é a utilização da pasta internal .

A pasta internal é um recurso poderoso que permite organizar e encapsular código que não deve ser utilizado por outros packages. Em outras palavras, ela é perfeita para armazenar funções auxiliares, estruturas de dados, domínio e outros detalhes de implementação.

Como funciona

De forma simples, quando o compilador Go encontra uma pasta internal, ele a trata como um package separado e não exporta nenhum dos seus símbolos para fora do package ao qual ela pertence. Isso significa que qualquer código na pasta internal só pode ser acessado por outros arquivos dentro do mesmo package “principal”.

Leia mais »

Diferenças entre structs e classes

No Go, uma struct é um tipo de dado fundamental que agrupa “variáveis” (atributos) sob um único nome, similar a como uma classe agrupa propriedades e métodos em linguagens orientadas a objetos como Java ou C#. No entanto, existem diferenças significativas tanto na sintaxe quanto nos conceitos e funcionalidades oferecidos por structs em Go quando comparada com classes em outras linguagens.

Estrutura e Sintaxe

Struct

Em Go, uma struct é definida usando a palavra-chave struct. A definição de uma struct envolve apenas a declaração de atributos.

type Pessoa struct {
	Nome  string
	Idade int
}
Leia mais »

Otimização automatizada com PGO

A otimização de desempenho é uma preocupação constante no desenvolvimento de software, e a linguagem Go não é uma exceção. Uma técnica que tem ganhado bastante atenção nesse contexto é a Profile-Guided Optimization (PGO). Neste post, vamos explorar o que é PGO, sua história na linguagem Go, e como você pode utilizar essa técnica tanto em aplicações de linha de comando (CLI) quanto em APIs.

O que é PGO?

PGO é uma técnica de otimização que utiliza dados de execução de uma aplicação para guiar o processo de compilação. Ao contrário da otimização tradicional, onde o compilador faz suposições gerais, o PGO permite ao compilador otimizar o código com base em dados reais de uso, levando a um desempenho significativamente melhorado.

Leia mais »

Observabilidade em Aplicações Go

A observabilidade é uma parte essencial do desenvolvimento de software, e é especialmente importante para aplicações Go. Por ser uma linguagem de programação compilada estaticamente, alguns tipos de erros podem ser difíceis de encontrar e corrigir.

Nesses casos, a observabilidade pode ajudar a identificar e resolver problemas rapidamente, reduzindo o tempo de inatividade e melhorando a experiência do usuário.

Boas Práticas

Existem várias boas práticas que você pode seguir para melhorar a observabilidade de suas aplicações, dentre elas, podemos citar:

Leia mais »