El balanceig de càrrega és una tècnica fonamental en el disseny d'arquitectures de sistemes escalables i robustes. Aquesta tècnica permet distribuir de manera eficient el tràfic de xarxa o les càrregues de treball entre múltiples servidors, assegurant que cap servidor individual es sobrecarregui i que els recursos es utilitzin de manera òptima.
Conceptes Clau
- Balancejador de Càrrega (Load Balancer): Dispositiu o programari que distribueix el tràfic entrant entre diversos servidors.
- Nodes: Els servidors que reben el tràfic distribuït pel balancejador de càrrega.
- Algoritmes de Balanceig de Càrrega: Regles que determinen com es distribueix el tràfic entre els nodes.
Tipus de Balancejadors de Càrrega
- Balancejadors de Càrrega de Capa 4 (Transport Layer)
Operen en la capa de transport del model OSI (TCP/UDP). Distribueixen el tràfic basant-se en la informació de les capçaleres de transport, com ara adreces IP i ports.
Exemples:
- AWS Elastic Load Balancer (ELB)
- HAProxy
- Balancejadors de Càrrega de Capa 7 (Application Layer)
Operen en la capa d'aplicació del model OSI. Distribueixen el tràfic basant-se en informació de les capçaleres d'aplicació, com ara URL, cookies, o capçaleres HTTP.
Exemples:
- NGINX
- Traefik
Algoritmes de Balanceig de Càrrega
- Round Robin
Distribueix les sol·licituds de manera seqüencial entre els servidors disponibles.
Sol·licitud 1 -> Servidor 1 Sol·licitud 2 -> Servidor 2 Sol·licitud 3 -> Servidor 3 Sol·licitud 4 -> Servidor 1
- Least Connections
Assigna la sol·licitud al servidor amb el menor nombre de connexions actives.
- IP Hash
Utilitza un hash de l'adreça IP del client per determinar quin servidor ha de gestionar la sol·licitud.
- Weighted Round Robin
Similar al Round Robin, però permet assignar pesos als servidors per distribuir el tràfic de manera no uniforme.
Implementació Pràctica
Exemple amb NGINX
A continuació es mostra un exemple de configuració d'un balancejador de càrrega amb NGINX utilitzant l'algoritme Round Robin.
http { upstream backend { server backend1.example.com; server backend2.example.com; server backend3.example.com; } server { listen 80; location / { proxy_pass http://backend; } } }
Explicació del Codi
- upstream backend: Defineix un grup de servidors backend.
- server backend1.example.com: Defineix cada servidor backend.
- proxy_pass http://backend: Redirigeix les sol·licituds al grup de servidors backend.
Exercici Pràctic
Configuració d'un Balancejador de Càrrega amb HAProxy
- Instal·la HAProxy en el teu servidor.
- Configura HAProxy per utilitzar l'algoritme Least Connections.
Configuració Exemple:
global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats socket /run/haproxy/admin.sock mode 660 level admin stats timeout 30s user haproxy group haproxy daemon defaults log global mode http option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000 frontend http_front bind *:80 default_backend http_back backend http_back balance leastconn server server1 192.168.1.1:80 check server server2 192.168.1.2:80 check server server3 192.168.1.3:80 check
Explicació del Codi
- frontend http_front: Defineix la configuració del frontend, que escolta en el port 80.
- default_backend http_back: Defineix el backend per defecte.
- balance leastconn: Utilitza l'algoritme Least Connections per distribuir el tràfic.
- server server1 192.168.1.1:80 check: Defineix els servidors backend i habilita la verificació de salut.
Errors Comuns i Consells
- No Configurar la Verificació de Salut: Assegura't que els servidors backend es verifiquin periòdicament per evitar enviar tràfic a servidors inactius.
- Sobrecàrrega d'un Sol Servidor: Utilitza algoritmes de balanceig adequats per evitar la sobrecàrrega d'un sol servidor.
- No Monitoritzar el Rendiment: Implementa eines de monitorització per assegurar-te que el balancejador de càrrega funciona correctament i optimitza segons sigui necessari.
Conclusió
El balanceig de càrrega és una tècnica essencial per assegurar la disponibilitat i escalabilitat dels sistemes. Comprendre els diferents tipus de balancejadors de càrrega i algoritmes de distribució de tràfic és crucial per dissenyar arquitectures robustes i eficients. Amb les eines i configuracions adequades, pots millorar significativament el rendiment i la resiliència del teu sistema.
Arquitectures de Sistemes: Principis i Pràctiques per Dissenyar Arquitectures Tecnològiques Robustes i Escalables
Mòdul 1: Introducció a les Arquitectures de Sistemes
- Conceptes Bàsics d'Arquitectura de Sistemes
- Importància d'una Bona Arquitectura
- Tipus d'Arquitectures de Sistemes
Mòdul 2: Principis de Disseny d'Arquitectures
Mòdul 3: Components d'una Arquitectura de Sistemes
Mòdul 4: Escalabilitat i Rendiment
Mòdul 5: Seguretat en Arquitectures de Sistemes
Mòdul 6: Eines i Tecnologies
Mòdul 7: Casos d'Estudi i Exemples Pràctics
- Cas d'Estudi: Arquitectura d'un Sistema de Comerç Electrònic
- Cas d'Estudi: Arquitectura d'una Aplicació de Xarxes Socials
- Exercicis Pràctics