Middle
Que balanceadores de carga conhece? Qual a sua experiência com eles e que tecnologias utilizou?
sobes.tech IA
Resposta da IA
Conhecem-se os seguintes tipos de balanceadores de carga:
- Balanceadores de carga de hardware (Hardware Load Balancers): Dispositivos especializados. Exemplo: F5 BIG-IP.
- Balanceadores de carga de software (Software Load Balancers): Funcionam como software. Exemplos: HAProxy, Nginx, AWS Elastic Load Balancing (ELB), Google Cloud Load Balancing, Azure Load Balancer.
Tenho experiência com HAProxy e Nginx como balanceadores de carga de software, bem como com soluções em nuvem como AWS ELB (Application Load Balancer e Network Load Balancer).
HAProxy:
- Utilizado para balancear tráfego TCP e HTTP.
- A configuração era feita através de ficheiros de configuração.
- Aplicado para:
- Distribuir pedidos HTTP entre servidores web.
- Garantir alta disponibilidade de bases de dados (tráfego TCP).
- Foram implementados:
- Algoritmos de balanceamento (round-robin, leastconn).
- Verificações de saúde dos servidores.
- Terminação SSL.
# Exemplo de configuração HAProxy
global
log /dev/log local0
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode http # ou tcp
option httplog
option dontlognull
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
frontend http_front
bind *:80
default_backend http_back
backend http_back
balance roundrobin # Algoritmo de balanceamento
server s1 192.168.1.10:80 check # Servidor 1 com verificação de saúde
server s2 192.168.1.11:80 check # Servidor 2 com verificação de saúde
Nginx:
- Utilizado como proxy reverso e balanceador de tráfego HTTP(S).
- A configuração era feita em ficheiros
nginx.confou ficheiros incluídos. - Aplicado para:
- Distribuir carga em servidores web e microserviços.
- Caching, compressão, terminção SSL.
- Foram implementados:
- Diversos métodos de balanceamento (round-robin, least_conn, ip_hash).
- Verificações de saúde na versão comercial (Nginx Plus) ou com módulos.
- Configuração de hosts virtuais.
# Exemplo de configuração Nginx
http {
upstream backend_servers {
server 192.168.1.20:8080 weight=1; # Servidor 1 com peso
server 192.168.1.21:8080 weight=1; # Servidor 2 com peso
# least_conn; # Outro método de balanceamento
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers; # Proxy para grupo de servidores
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# Outras configurações de proxy
}
}
}
AWS ELB:
- Application Load Balancer (ALB): Utilizado para balancear tráfego HTTP/HTTPS. No nível L7.
- Roteamento baseado em URL, cabeçalhos e métodos HTTP.
- Integração com Auto Scaling Groups.
- Terminação SSL, Web Application Firewall (WAF).
- Network Load Balancer (NLB): Utilizado para balancear tráfego TCP/UDP no nível L4.
- Alta performance e baixa latência.
- Usado para balancear tráfego para bases de dados, servidores de jogos e outras aplicações sensíveis à latência.
A experiência incluiu configuração de Listeners, Target Groups, verificações de saúde e integração com outros serviços AWS via AWS Management Console, AWS CLI e Terraform.
Tecnologias:
- Configuração: Edição manual de ficheiros, Ansible, Chef, Puppet.
- Infraestrutura como código: Terraform para implantação automática e gestão de balanceadores na nuvem.
- Monitorização: Prometheus, Grafana com exporters para HAProxy/Nginx ou via CloudWatch para AWS ELB.
- CIDI: Integração de configuração e reajuste de balanceadores em pipelines CI/CD.
De modo geral, a escolha do balanceador dependia dos requisitos da aplicação (tipo de tráfego, desempenho, funcionalidades), infraestrutura (nuvem ou on-premise) e orçamento.