DAS_2024_1/kuzarin_maxim_lab_7
..
README.md

Балансировка нагрузки в распределённых системах

Балансировка нагрузки в распределенных системах это метод распределения сетевого трафика по пулу ресурсов приложения. Для этого существует достаточно большое число инструментов.

Алгоритмы балансировки

Всё множество алгоритмов для балансировки можно условно разделить на 2 большие группы: рассчитанные на сохранение состояния и не рассчитанные.

  • Первые, по большому счёту, балансируют подключения пользователей. Но это никак не гарантирует равномерного распределения их запросов.
  • Вторые балансируют запросы между ресурсами. Это позволяет распределять нагрузку чуть более равномерно, но при этом необходимо задумываться о том, что бы система могла работать в режиме без сохранения состояния.

Сами же алгоритмы, по большому счёту, отличаются только механизмом выбора экземпляра ресурса, к которому перенаправляется запрос. Это может быть равномерное распределение (алгоритм Round Robin) или вариации взвешенного (алгоритм Weighted Round Robin). На сегодняшний день существует множество открытых технологий балансировки нагрузки. Например, всем известный Nginx предоставляет инструменты для настройки подобной функции. Так же есть ряд проектов, полностью заточенных под балансировку нагрузки в Kubernetes (OpenELB, MetalLB).

Балансировка нагрузки на БД

Балансировка нагрузки на БД более сложный и комплексный вопрос. Он предполагает, что у СУБД должен быть механизм репликации данных, или шардинга. Например, такое умеет PostgreSQL и MongoDB

Реверс-прокси

Реверс-прокси в данном случае напрямую не является инструментом балансировки нагрузки. Скорее это инструмент, эту балансировку и распределённость в целом, скрывающий за единым фасадом. Самым известным представителем этого семейства можно назвать уже упомянутый ранее Nginx