Будівельний блок

Load balancer

Розподіляє запити між кількома копіями сервісу й прибирає з ротації ті, що впали. Перший крок до горизонтального масштабування й нульового даунтайму при деплої.

Load balancer розподіляє запити між трьома копіями застосункуHTTPShealth ✗КлієнтиLoad balancerКопія 1Копія 2Копія 3 (впала)База даних
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).

Інструменти

Джерела

Логотипи належать їхнім власникам і використані лише для ідентифікації. Іконки: Simple Icons (CC0), Devicon (MIT).

Розділи платформи