Балансировка нагрузки ELB

Один сервер не тянет нагрузку? Раздаём её между несколькими через балансировщик.

ELB (Elastic Load Balancing) — сервис, распределяющий входящий трафик между несколькими инстансами и автоматически исключающий из ротации те, что не отвечают.

Зачем нужна балансировка

Когда пользователей много, один сервер не справляется. Решение — поставить несколько одинаковых серверов, а перед ними балансировщик, который равномерно раздаёт им запросы. Заодно балансировщик повышает надёжность: если сервер упал, трафик пойдёт только на живые.

Как это работает

Пользователь обращается не к серверу напрямую, а к балансировщику (у него один адрес). Балансировщик выбирает здоровый инстанс и пересылает запрос ему. Здоровье проверяется health check — балансировщик периодически стучится на заданный URL каждого инстанса.

           Пользователи
               |
         Load Balancer  (один адрес, health checks)
         /     |     \
    EC2 #1   EC2 #2   EC2 #3
    (живой)  (живой)  (упал -> исключён из ротации)

Типы балансировщиков

ТипУровеньКогда
Application LB (ALB)HTTP/HTTPS (L7)веб-приложения, маршрутизация по пути/домену
Network LB (NLB)TCP/UDP (L4)экстремальная скорость, нестандартные протоколы

Для типичного веб-приложения берут Application Load Balancer: он понимает HTTP, умеет терминировать HTTPS и маршрутизировать по URL.

Как работает под капотом

Балансировщик — это сам по себе управляемый отказоустойчивый сервис, размазанный по нескольким зонам доступности. Он держит пул целей (target group) и постоянно опрашивает их health check. Инстанс попадает в ротацию, только пройдя несколько успешных проверок подряд, и выбывает после нескольких неудачных — это сглаживает кратковременные сбои. Application Load Balancer работает на уровне приложения: видит HTTP-заголовки и путь, поэтому может слать /api на одни сервера, а /images — на другие. Связка с автоскейлингом позволяет добавлять и убирать сервера в группе автоматически, и балансировщик сразу учитывает изменения.

Частые ошибки

  • Неправильный health check. Если проверять «не тот» URL, балансировщик решит, что живые сервера мертвы.
  • Хранить сессию в памяти инстанса. Запросы пользователя попадают на разные сервера; состояние держат в общей базе или кеше.
  • Брать NLB там, где нужен ALB. Для маршрутизации по HTTP-пути нужен Application LB, а не сетевой.

Итог

  • ELB распределяет трафик между серверами и исключает из ротации упавшие.
  • Health check определяет, какие инстансы здоровы и получают трафик.
  • Для веба берут Application Load Balancer; сессии храните в общем хранилище, а не в памяти сервера.
Проверьте себя
1. Что делает балансировщик, когда один из серверов перестаёт отвечать?
AОстанавливает весь сервис
BИсключает упавший сервер из ротации и шлёт трафик на живые
CУдаляет все данные
DПовышает счёт
2. Какой балансировщик выбрать для веб-приложения с маршрутизацией по URL-пути?
ANetwork Load Balancer (L4)
BApplication Load Balancer (L7)
CНикакой
DЛюбой случайный