SlideShare a Scribd company logo
Умная балансировка
нагрузки на базе Nginx и
Lua
Андрей Кононов, Solution architect at EPAM systems
О себе
Disclaimer
Чем больше мы познаём неизменные законы природы,
тем всё более невероятными становятся для нас чудеса.
Чарльз Дарвин.
Все используемые технологии – опенсорс
Все совпадения с реальными компаниями и
брендами случайны.
Какая балансировка бывает
• L7 (DNS, http)
• L4 (TCP)
• L3 (BGP)
TCP/HTTP
VRRP
DNS
BGP
Стартовая позиция
• Нет балансировки
• Всё работает
• Фичи пилятся
Надо быть защищёнными, но…
1. Поддержки SSl нет
2. Надо разработать
Надо быть защищёнными, но…
1. Поддержки SSl нет
2. Надо разработать
Надо что-то придумать
Появился Nginx
Надо что-то придумать
Появился Nginx
Ничто не предвещало…
НО пришла корпорация добра!
TIME
RESPONSE TIME, MS
Надо что-то придумать
• DNS балансировка
Надо что-то придумать
• DNS балансировка
Надо что-то придумать
• DNS балансировка
0
500
1000
1500
2000
2500
3000
3500
requests
time
requests/server
app1 app2
Жизнь продолжается
• DNS балансировка
Балансировка курильщика
• DNS балансировка
0
1000
2000
3000
4000
5000
6000
7000
8000
Requests /server
app1 app2 app3 app4 app5
Основные проблемы с DNS балансировкой
• Постоянные выигрыши в лотерею
Основные проблемы с DNS балансировкой
• Постоянные выигрыши в лотерею
• UDP не безграничен (512 bytes)
Основные проблемы с DNS балансировкой
• Постоянные выигрыши в лотерею
• UDP не безграничен (512 bytes)
• Само по себе распределение не ровное
Основные проблемы с DNS балансировкой
• Постоянные выигрыши в лотерею
• UDP не безграничен (512 bytes)
• Само по себе распределение не ровное
• Нужен другой балансировщик
Вендорский Балансировщик!
Балансировка нормального человека
2200
2300
2400
2500
2600
2700
2800
2900
3000
3100
requests/server
app1 app2 app3 app4 app5
НО Вендоры не без греха!
• Vendor lock
НО Вендоры не без греха!
• Vendor lock
• ELB на L4 не отправляет клиенту нотификации
о разрыве соединения
НО Вендоры не без греха!
• Vendor lock
• ELB на L4 не отправляет клиенту нотификации
о разрыве соединения
• Нет поддержки SNI (один сертификат - один IP)
НО Вендоры не без греха!
• Vendor lock
• ELB на L4 не отправляет клиенту нотификации
о разрыве соединения
• Нет поддержки SNI (один сертификат - один IP)
• На L7 нет возможности реализовать хотелки
НО Вендоры не без греха!
• Vendor lock
• ELB на L4 не отправляет клиенту нотификации
о разрыве соединения
• Нет поддержки SNI (один сертификат - один IP)
• На L7 нет возможности реализовать хотелки
• Не нулевая вероятность получить на свои
сервера чужой трафик.
Подоспели новые требования.
• Новое требование от бизнеса –
всегда показывать пиксел
Подоспели новые требования.
• Новое требование от бизнеса –
всегда показывать пиксел
Подоспели новые требования.
• Новое требование от бизнеса –
всегда показывать пиксел
• Появился полноценный
балансировщик
Подоспели новые требования.
• Новое требование от бизнеса –
всегда показывать пиксел
• Появился полноценный
балансировщик
• Нужно быть ближе к пользователю
• КАК бы CDN
GDNSD
• DNS балансировщик
• 100% opensource
• Авторитативный днс сервер
• Геобазы нескольких провайдеров
• Встроенные проверки состояния приложения
Rootconf2016 nginx-lua-balancing
Никто не ждал но…..
• Взрыв мониторинга.
Никто не ждал но…..
• Взрыв мониторинга.
• 100 gb за 2 часа error log
• LA > 8 (8 cores instance)
used space
Никто не ждал но…..
• Взрыв мониторинга.
• 100 gb за 2 часа error log
• LA > 8 (8 cores instance)
main.all.http_1xx = 0
main.all.http_2xx = 480
main.all.http_3xx = 11
main.all.http_4xx = 3
main.all.http_5xx = 0
Продолжаем развиваться !
• Бизнес хочет странного, а именно - что то типа сессий
Продолжаем развиваться !
• Бизнес хочет странного, а именно - что то типа сессий
Продолжаем развиваться !
• Бизнес хочет странного, а именно - что то типа сессий
Продолжаем развиваться !
• Бизнес хочет странного, а именно - что то типа сессий
• Ограничения – никакого сессионного хранилища
• Минимальное перераспределение пользователей
при добавление ноды.
Продолжаем развиваться !
• Бизнес хочет странного, а именно - что то типа сессий
• Ограничения – никакого сессионного хранилища
• Минимальное перераспределение пользователей
при добавление ноды.
Включаем Ip_hash method в nginx
Продолжаем развиваться !
• Бизнес хочет странного, а именно - что то типа сессий.
• Ограничения – никакого сессионного хранилища.
• Минимальное перераспределение пользователей
при добавление ноды.
Включаем Ip_hash method в nginx
0
1000
2000
3000
4000
5000
6000
7000
8000
app1 app2 app3 app4 app5
Балансировка - не только балансировка
SSL offload
Балансировка - не только балансировка
SSL offload
Pixel
Балансировка - не только балансировка
SSL offload
Pixel
Redundancy
Балансировка - не только балансировка
SSL offload
Pixel
Redundancy
Geo distribution
Балансировка - не только балансировка
SSL offload
Pixel
Redundancy
Geo distribution
Easy configuration
Балансировка - не только балансировка
SSL offload
Pixel
Redundancy
Geo distribution
Easy configuration
Automatic add/remove nodes
Балансировка - не только балансировка
SSL offload
Pixel
Redundancy
Geo distribution
Easy configuration
Automatic add/remove nodes
oStickiness
• Consistent Hash !
https://en.wikipedia.org/wiki/Consistent_hashing
David Karger
Rootconf2016 nginx-lua-balancing
Rootconf2016 nginx-lua-balancing
Rootconf2016 nginx-lua-balancing
Rootconf2016 nginx-lua-balancing
Мозговой штурм, выбор не велик
• 1. Компилируемый модуль
Мозговой штурм, выбор не велик
• 1. Компилируемый модуль
2. Логика на LUA
Мозговой штурм, выбор не велик
• 1. Компилируемый модуль
2. Логика на LUA
Забег по граблям
• Генерили много точек по умолчанию - начала кончаться память
Забег по граблям
• Генерили много точек по умолчанию - начала кончаться память
Решение – динамическая генерация количества точек
Забег по граблям
• Генерили много точек по умолчанию - начала кончаться память
Решение – динамическая генерация количества точек
• 1 worker отказ в обслуживании при добавлении
Забег по граблям
• Генерили много точек по умолчанию - начала кончаться память
Решение – динамическая генерация количества точек
• 1 worker отказ в обслуживании при добавлении
Решение “cpu_count-2” workers на балансировщик
Продолжаем бежать
• Fallback не фолбечит
Продолжаем бежать
• Fallback не фолбечит
Решение – перенос в отдельный процесс нджинкс
Продолжаем бежать
• Внутренний хелфчек не способен
добавить много хостов (массовый
деплой например), полная
деградация целиком сервиса
запросы становятся в очередь, вот
это всё
Продолжаем бежать
• Внутренний хелфчек не способен
добавить много хостов (массовый
деплой например), полная
деградация целиком сервиса
запросы становятся в очередь, вот
это всё
Решение – инкрементальный
пересчёт consistent hash
Пример конфигурации nginx
location / {
...
proxy_pass http://$best_upstream;
...
}
upstream app1 {
…
server app1 max_fails=n fail_timeout=k;
server unix:/var/run/nginx_fallback.sock backup;
}
upstream app2 {
…
server app2 max_fails=n fail_timeout=k;
server unix:/var/run/nginx_fallback.sock backup;
}
Итоговая архитектура.
Выводы
• Хорошая балансировка всегда знает о приложении довольно
много
• Нагрузочное тестирование
• Ну и конечно здравый смысл
Links
1. http://luajit.org
2. http://nginx.org
3. https://github.com/openresty/lua-nginx-module
4. https://github.com/openresty/lua-upstream-nginx-module
5. https://github.com/goldenclone/nginx-sla
6. http://gdnsd.org
GDNSD
Всем Спасибо!
akononov.job@gmail.com

More Related Content

PPTX
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
PPTX
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
PDF
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
PPTX
Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...
PPTX
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
PPTX
Денис Иванов
PDF
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
PDF
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Денис Иванов
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...

What's hot (20)

PPTX
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
PPTX
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
PDF
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
PDF
Сегментируем 600 млн. пользователей в режиме реального времени каждый день. H...
PPTX
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
PDF
Доклад Ильи Аблеева на DevOps Meetup "Мониторинг высоконагруженного проекта".
PDF
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
PPTX
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
PPTX
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
PDF
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС
PDF
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
PPTX
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
PDF
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
PDF
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
PPSX
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
PDF
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)
PDF
Обзор решения Cisco для управления пространством IP адресов
PDF
Вадим Мадисон "Опыт разработки через микросервисы"
PDF
Учет и управление IP-ресурсами сети
PDF
Zabbix 3.2 - мониторинг качественно нового уровня / Алексей Владышев (Zabbix)
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
Сегментируем 600 млн. пользователей в режиме реального времени каждый день. H...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Доклад Ильи Аблеева на DevOps Meetup "Мониторинг высоконагруженного проекта".
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)
Обзор решения Cisco для управления пространством IP адресов
Вадим Мадисон "Опыт разработки через микросервисы"
Учет и управление IP-ресурсами сети
Zabbix 3.2 - мониторинг качественно нового уровня / Алексей Владышев (Zabbix)
Ad

Similar to Rootconf2016 nginx-lua-balancing (20)

PDF
A popular DNS security overview
PPTX
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
PPTX
NoBigData - потоковая система аналитики clientside производительности, Сергей...
PDF
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
PPTX
Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...
PDF
Nikolay
PDF
Percona XtraDB Cluster, Galera под капотом / Николай Ихалайнен (Percona)
PDF
Распространенные ошибки применения баз данных (Сергей Аверин)
PDF
Распространенные ошибки применения баз данных
PDF
Sun Microsystems открытые системы хранения данных
PDF
Распространенные ошибки применения баз данных (Сергей Аверин)
PDF
PPTX
Разбор реального кейса построения гибридного облака.
PDF
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
PDF
Переход с Objective-C на Swift — все ли так просто? / Олег Алексеенко (SuperJob)
PDF
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
PDF
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
PDF
Андрей Николаенко, IBS. NVMf: 5 млн IOPS по сети своими руками
 
PPTX
Highload++2013: TopGun - архитектура терабитной платформы DPI
PPTX
Sql Server: Database Mirroring -> Availability group migration
A popular DNS security overview
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
NoBigData - потоковая система аналитики clientside производительности, Сергей...
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...
Nikolay
Percona XtraDB Cluster, Galera под капотом / Николай Ихалайнен (Percona)
Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных
Sun Microsystems открытые системы хранения данных
Распространенные ошибки применения баз данных (Сергей Аверин)
Разбор реального кейса построения гибридного облака.
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
Переход с Objective-C на Swift — все ли так просто? / Олег Алексеенко (SuperJob)
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
Андрей Николаенко, IBS. NVMf: 5 млн IOPS по сети своими руками
 
Highload++2013: TopGun - архитектура терабитной платформы DPI
Sql Server: Database Mirroring -> Availability group migration
Ad

Rootconf2016 nginx-lua-balancing