Load balancer (równoważnik obciążenia) to element infrastruktury, który stoi przed grupą serwerów i rozdziela między nie przychodzący ruch sieciowy. Zamiast pozwolić, by jeden serwer dostał wszystkie żądania i padł pod ich naporem, load balancer pilnuje, żeby praca rozkładała się równomiernie. Efekt: usługa jest szybsza (bo nikt nie jest zarżnięty) i bardziej dostępna (bo gdy jeden serwer odpadnie, ruch leci do pozostałych).
Jak to działa
Klienci łączą się z jednym adresem (load balancera), a ten w tle decyduje, do którego z serwerów backendu przekazać żądanie. Wybór odbywa się według algorytmu: round robin (po kolei), least connections (do najmniej obciążonego) albo na podstawie hashowania IP klienta. Do tego dochodzi health check — load balancer regularnie odpytuje serwery i jeśli któryś przestaje odpowiadać, automatycznie wyrzuca go z puli, dopóki nie wróci do formy.
Rozróżnia się dwie warstwy: L4 (transportowa, balansuje po TCP/UDP, nie zaglądając do treści) i L7 (aplikacyjna, rozumie HTTP, więc potrafi kierować ruch np. po ścieżce URL czy nagłówku). L7 daje więcej możliwości, L4 jest szybszy i prostszy.
Przykład z praktyki
Najpopularniejszy darmowy zestaw to nginx jako reverse proxy z balansowaniem. Definiujesz pulę serwerów i kierujesz na nią ruch:
upstream backend { server 10.0.0.1; server 10.0.0.2; server 10.0.0.3; }
Potem w bloku server dajesz proxy_pass http://backend; i nginx sam rozkłada żądania round robinem. W chmurze zamiast tego klikasz gotowca: AWS Elastic Load Balancing (ALB dla HTTP, NLB dla L4), HAProxy albo Traefik w świecie kontenerów.
Częste błędy i mity
- Mit: load balancer = wysoka dostępność. Jeśli masz jeden load balancer, to on sam jest single point of failure. W produkcji stawia się je redundantnie (np. para w trybie active-passive).
- Sesje i sticky sessions. Gdy aplikacja trzyma stan sesji lokalnie na serwerze, rozrzucanie żądań po różnych maszynach wyloguje użytkownika. Rozwiązanie: trzymaj sesje w Redisie, albo włącz session affinity (ale to ogranicza równomierność).
- Zapomniany health check. Bez niego load balancer wesoło wysyła ruch do martwego serwera i zalicza błędy 502.
Pojęcia powiązane: reverse proxy, high availability, failover, round robin, nginx, HAProxy, autoscaling, single point of failure.