Балансировка нагрузки 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; сессии храните в общем хранилище, а не в памяти сервера.