Балансувальник навантаження приймає запити клієнтів і розподіляє їх між кількома серверами застосунку. Для клієнта це одна адреса, а за нею - пул серверів.
Що він дає:
- масштабування - навантаження ділиться між серверами;
- відмовостійкість - перевірки стану (health checks) виключають несправний сервер з пулу;
- оновлення без простою - сервери оновлюються по черзі, поки решта обслуговує запити;
- завершення TLS - шифрування обробляється на балансувальнику, а не на кожному сервері.
Рівні балансування:
- L4 (транспортний) - розподіляє TCP-з'єднання за IP і портом, не дивлячись у вміст. Швидко й просто;
- L7 (прикладний) - бачить HTTP: може маршрутизувати за шляхом (
/api- на одні сервери,/- на інші), заголовками, cookie, кешувати, стискати.
Алгоритми розподілу:
- round robin - по черзі; найпростіший, добрий для однакових серверів і схожих запитів;
- weighted round robin - потужніші сервери отримують більше запитів;
- least connections - на сервер з найменшою кількістю активних з'єднань; кращий, коли запити дуже різні за тривалістю;
- IP hash / consistent hashing - той самий клієнт потрапляє на той самий сервер (корисно для кешів на сервері, але це «липкість»);
- random with two choices - вибрати два випадкові сервери й узяти менш завантажений: просто й ефективно у великих пулах.
Health checks - балансувальник регулярно запитує, наприклад, /up (у Laravel 11+ такий маршрут налаштовано за замовчуванням). Сервер, що не відповідає, тимчасово виключається.
Приклади: Nginx, HAProxy, Caddy, Traefik, хмарні (AWS ALB/NLB), Cloudflare Load Balancing.
Що треба налаштувати в застосунку за балансувальником: довірені проксі (trustProxies), щоб Laravel бачив справжній IP клієнта й протокол https, а не адресу балансувальника; спільні сесії, кеш і файли - сервери мають бути без стану.
Балансувальник сам може стати точкою відмови - у продакшені їх резервують (пара з перемиканням чи керований хмарний сервіс).