Load Balancer

Load balancer

attachments/Pasted image 20230622141722.png

Балансировщики трафика распределяют запросы между разными ресурсами: серверами приложений или базами данных. В каждом случае, балансировщик возвращает ответ от ресурса соответствующему клиенту.

Балансировщики эффективны в:

  • Не даёт делать запросы к неработающему ресурсу
  • Не даёт перегрузить отдельный ресурс
  • Избавляет от единой точки отказа

Дополнительные преимущества:

  • SSL termination - расшифровывает запросы от клиентов и зашифровывает ответы от ресурса, чтобы освободить от этих дорогих операций сами ресурсы.
    • Убирает необходимость сохранять сертификаты на каждом из ресурсов
  • Сохраняемость сессий - балансировщик пересылает запрос клиента нужному ресурсу относительно куки

Для отказоустойчивости размещают сразу несколько экземпляров балансировщика по методам активный-пассивный или активный-активный.

Балансировщики могут распределять трафик по следующим алгоритмам:

  • По наименее загруженному (Least loaded)
  • (Взвешенный) Round-Robin
  • По сессии/куке
  • L4
  • L7

L4 балансировщик

Такие балансировщики распределяют трафик смотря на содержимое пакетов только до транспортного слоя. Чаще всего, они используют src IP, dst IP, src port, dst port. При этом не смотрят на payload пакета.

L7 балансировщик

Такие балансировщики распределяют трафик смотря на прикладной слой пакета. Чаще всего они используют информацию в заголовках, сообщении и куке для своего решения.

Для примера, такой балансировщик может расшифровать сообщение и послать видео трафик на сервера с видео, а трафик с биллинговой информацией на защищённые сервера.

В ущерб гибкости, L4 тип требует меньше времени и мощностей чем L7. Хотя на современном специализированном железе разница может быть минимальной.

Горизонтальное масштабирование

(Horizontal scaling)

Балансировщики упрощают горизонтальное масштабирование в силу своей специфики.

Недостатки

  • Балансировщик может стать узким местом в производительности, если неверно сконфигурирован или имеет недостаточно ресурсов.
  • Введение балансировщика для избавления от единой точки отказа добавляет дополнительную сложность в архитектуру.
  • Балансировщик сам становится единой точкой отказа, а добавление отказоустойчивости ведёт к ещё дополнительной сложности.

Балансировщик vs Обратный прокси

  • Введение балансировщика полезно, когда есть множество серверов. Часто их добавляют для серверов выполняющих одинаковую функцию
  • Введение обратного прокси будет полезно даже для одного сервера из-за его преимуществ. См. заметку Reverse proxy
  • Решения вроде NGINX и HAProxy могут действовать и как балансировщик, и как обратный прокси

Source(s) and further reading