Балансировка высоконагруженных системЕвгений Пивень IPONWEB
RTB
IPONWEB• Вся инфраструктура в облаках (AWS и GCE) • Миллионы HTTP-запросов в секунду • Короткие ответы • Кэширование не актуально • Суточные и событийные колебания
Япония и другие страны
IPONWEB и RTB• Вся инфраструктура в облаках (AWS и GCE) • Миллионы HTTP-запросов в секунду • Короткие ответы • Кэширование не актуально • Суточные и событийные колебания • Разброс пользователей по всему миру • Серверный и пользовательский трафик
Серверный и пользовательский трафик
Зачем балансировать?• Масштабируемость • Доступность
Что ещё?• SSL offload
SSL offload
Что ещё?• SSL offload • Sticky / session affinity
Sticky балансировка
Что ещё?• SSL offload • Sticky / session affinity • Fallback
Fallback
Нормальная балансировка
Что-то пошло не так
Метрики — это хорошо
Серверный трафик• Гибкие возможности решения проблем • Можно договориться с клиентом • Возможность разделения • Можно даже забанить
DNS-балансировка
google.com. A 173.194.122.194google.com. A 173.194.122.201google.com. A 173.194.122.199google.com. A 173.194.122.195google.com. A 173.194.122.196google.com. A 173.194.122.193google.com. A 173.194.122.197google.com. A 173.194.122.200google.com. A 173.194.122.198google.com. A 173.194.122.192google.com. A 173.194.122.206
}Round-robin DNS pool
Проблемы Round-Robin DNS• Нет status checks • Нет понимания гео-локации клиента • Распределение не идеально для серверного трафика
gdnsd
gdnsd• DYNA записи • geoIP • Status checks
• TTL
gdnsd: weighted• weighted пулы можно разбивать • веса можно использовать для staging / instance types
• DNS cache
> 253 хостов• Проблема только у AWS DNS [уже нет]
Мы же в облаках!• Вертикальное масштабирование — временное решение • Облачные решения балансировки: ELB
ELB
ELB• CNAME • SSL offload • Status checks
• Pre-warmup • Балансировка по скорости ответа
ALB• Path-based routing • WebSocket, HTTP/2 • Контейнеры
GLB vs ELB/ALB• 1 IP (!)
GLB
GLB vs ELB/ALB• 1 IP (!) • Sticky: по IP и cookie • Instant warm-up
• Резкое изменение числа бэкендов • 80/8080 • Нет SNI
А как же пользователи?
Требования• Sticky • Fallback
nginx + Lua• Lua • Sticky • Hash Ring • Fallback
upstream backend-1 { server backend-1.local max_fails=x fail_timeout=y; server unix:/var/run/nginx_fallback.sock backup;}upstream backend-2 { server backend-2.local max_fails=x fail_timeout=y; server unix:/var/run/nginx_fallback.sock backup;}
Облака vs свои решения• Vendor lock • Проблемы с отладкой • Всегда хочется больше возможностей • Поддержка • Стоимость серверов vs стоимость трафика
Какие ещё решения бывают?• Hardware балансировщики • lighttpd, haproxy, проприетарные приложения etc.
Выводы• Облачные балансировщики - это удобно, но есть минусы • Всегда смотрите на требования • Периодически пересматривайте решения
Balance is good