Repositório do Projeto: Load Balancer em Go no GitHub -> https://github.com/diillson/load-balancer-go
O balanceamento de carga é uma técnica essencial para distribuir tráfego de entrada de maneira eficiente entre vários servidores back-end. Isso não apenas melhora a latência e a capacidade de processamento do servidor, mas também garante uma distribuição equitativa do tráfego. Neste artigo, exploraremos a construção de um load balancer usando a linguagem de programação Go e diversas bibliotecas complementares.
Esta aplicação fornece um load balancer simples que direciona solicitações de entrada para vários servidores back-end. Ele oferece funcionalidades como:
O coração do load balancer. Com base na saúde e no número de conexões ativas, direciona a solicitação do cliente para o servidor mais adequado.
Permite a adição e remoção dinâmica de servidores. Isso é útil para manter o balanceamento eficiente e adaptável.
Os servidores back-end podem ter problemas. A verificação de saúde assegura que apenas servidores saudáveis recebam tráfego.
Uma visão geral dos servidores disponíveis, permitindo monitoramento e gestão.
A aplicação foi desenvolvida considerando boas práticas de programação e design:
Vamos dar uma olhada em como nosso Load Balancer funciona em ação.
Ao fazer uma chamada POST para /addServer, podemos adicionar um novo servidor ao Load Balancer. O body da chamada contém os detalhes do servidor, como a URL, o número de conexões ativas e o status de saúde.
Você também pode adicionar seus servidores em um config.yaml e ao subir o balancer este já contempla seus servers sem precisar add pela API, no mesmo diretório que estará o seu arquivo de execução, binário ou script após o build, crie um arquivo chamado config.yaml com o seguinte conteúdo abaixo:
Obs: este config.yaml é opcional, pois antes do código do balancer rodar ele carrega as config que por ai encontrar.
A rota /list nos permite ver todos os servidores atuais no Load Balancer.
Ao fazer uma chamada DELETE para /removeServer, podemos remover um servidor do Load Balancer. O body da chamada contém os detalhes do servidor.
A rota /health nos permite ver a saúde do Load Balancer, podendo assim implementar algo mais avançado e sofisticado, aqui só retornamos um Status OK.
Usamos o Gin, um popular framework web em Go, para gerenciar nossas rotas e produzir logs úteis. Aqui está como os logs aparecem no terminal quando as chamadas estão acontecendo:
Em resumo, construi um load balancer "simples", mas poderoso, usando Go. A aplicação é eficiente, fácil de configurar e adaptável a mudanças. A combinação de Go com bibliotecas modernas e um design de código cuidadoso torna a solução robusta e pronta para cenários do mundo real. Se você está procurando uma introdução prática ao balanceamento de carga ou deseja entender melhor como implementar soluções de infraestrutura em Go, este projeto serve como um excelente ponto de partida.
Explore mais: Acesse o código completo no GitHub -> https://github.com/diillson/load-balancer-go.