Будівельний блок
Load balancer
Розподіляє запити між кількома копіями сервісу й прибирає з ротації ті, що впали. Перший крок до горизонтального масштабування й нульового даунтайму при деплої.
L4 і L7
L4-балансувальник працює на рівні TCP/UDP: бачить IP і порт, але не HTTP. Він дуже швидкий і дешевий, підходить для будь-якого протоколу (бази, gRPC, WebSocket). Приклади: AWS NLB, HAProxy у режимі TCP, Linux IPVS.
L7-балансувальник розуміє HTTP: маршрутизує за шляхом і заголовками (/api в один пул, /static в інший), термінує TLS, додає заголовки, робить retries. Приклади: Nginx, Caddy, Traefik, Envoy, AWS ALB.
Алгоритми розподілу
Round robin по черзі віддає запити кожній копії, просто й добре для однакових коротких запитів. Least connections шле запит туди, де найменше активних з'єднань, і краще працює, коли запити мають різну тривалість (наприклад, генерація PDF-сертифіката поруч зі звичайним API).
Consistent hashing прив'язує ключ (user id, URL) до конкретного бекенду, і при додаванні вузла перерозподіляється лише невелика частина ключів. Це корисно для кешів і stateful-сервісів.
Health checks і деплой без даунтайму
Балансувальник кожні кілька секунд звертається до /healthz кожної копії. Після 2...3 невдалих перевірок копія виходить з ротації, і користувачі її не бачать.
На цьому будується rolling deploy: нова версія піднімається поруч, проходить health check, потрапляє в пул, а стара спершу перестає отримувати нові запити (draining), дочікується завершення поточних і лише тоді зупиняється.
Важлива умова: копії мають бути stateless. Якщо сесія лежить у пам'яті процесу, користувач «вилетить» при переході на іншу копію. Тримайте стан у базі, Redis або токені. Sticky sessions рятують тимчасово, але ламають рівномірний розподіл.
Плюси
- Горизонтальне масштабування додаванням копій.
- Автоматичне виключення несправних копій.
- Деплой без даунтайму через rolling update.
- Одна точка для TLS, стиснення й маршрутизації.
Мінуси
- Сам балансувальник може стати єдиною точкою відмови, потрібна пара або керований сервіс.
- Вимагає stateless-застосунку.
- Ще один шар конфігурації й ще кілька мілісекунд затримки.
Коли обирати
- Сервіс має працювати більш ніж на одній копії.
- Потрібен деплой без даунтайму.
- Треба маршрутизувати різні шляхи на різні бекенди.
Де застосовують
- GitHub: власний балансувальник GLB, описаний у блозі компанії у 2016 році.
- Cloudflare: L4-балансувальник Unimog на всіх серверах edge-мережі (2020).
Інструменти
- nginxnginx це швидкий вебсервер і зворотний проксі, який також працює як балансувальник навантаження та HTTP-кеш.
- CaddyCaddy це вебсервер і reverse proxy на Go з автоматичним HTTPS та дуже простою конфігурацією.
- TraefikTraefik це хмарний reverse proxy та edge router, який сам знаходить сервіси в Docker і Kubernetes та налаштовує маршрути.
- KubernetesKubernetes це система оркестрації контейнерів: розгортає, масштабує та лікує застосунки на кластері серверів.
- AWSНайбільша хмарна платформа з сотнями сервісів: від віртуальних машин і сховища до баз даних, черг і ML.
- CloudflareГлобальна мережа з CDN, DNS, захистом від DDoS, а також Workers, R2 і D1 для запуску застосунків на краю.
Пов'язані теми
Джерела
Логотипи належать їхнім власникам і використані лише для ідентифікації. Іконки: Simple Icons (CC0), Devicon (MIT).