Балансировка нагрузки
Проксирование
- Forward Proxy = Proxy - доступ в интернет через сервер
- Reverse Proxy - сервер перенаправляет на другие сервы
Алгоритмы балансировки
- Random
- Round-Robin - последовательно (1 > 2 > 3 > 1)
- Weighted Round-Robin - последовательно с весами (1 > 1 > 2 > 3 > 1)
- Least Connections - кидаем туда где меньше всего соединений
- Least Response Time - кидаем туда где меньше латенси
- Load-based - кидаем туда где меньше нагрузка (cpu, ram)
- sticky sessions - по айди пользователя (айди = 1 ⇒ сервер 1)
- power of two choises - берём 2 рандома и направляем запрос серву с меньшей нагрузкой
Проверка работоспособности
- Пинг / прием соединений
- Специальный запрос GET/HEAD
Реализации
- Round-Robin DNS - dns отвечает массивом адресов, затем сдвигает массив на 1, клиент стучится на 1 адрес
- Geo Based DNS - ближайший адрес к пользователю по расстоянию
L4 / L3
- Hardware / сетевой уровень по ip
- NAT - на лоад-балансер приходит запрос, затем перенаправляется на конкретную тачку
- Минусы: обратно тоже все через лоад-балансер
- IP Tunneling - сейм, но обратно данные отдаются сразу с целевой тачки
- L3: Direct Routing - на уровне Ethernet
L7
- Http Reverse Proxy - просто прога, которая занимается балансировкой
- Nginx, HAProxy
- Гибкость, равномерность, решение проблем медленных клиентов
Application Based
- В коде приложения балансируем
Материалы
https://www.youtube.com/watch?v=0Im7ArJvV6Y