DAS_2024_1/polevoy_sergey_lab_7/README.md

3.7 KiB
Raw Blame History

Лабораторная работа № 7. Балансировка нагрузки в распределённых системах при помощи открытых технологий на примерах

В распределённых системах может использоваться как вертикальное, так и горизонтальное масштабирование. Горизонтальное масштабирование предполагает создание большего количества экземляров одного компонента системы. И для того, чтобы определять, какому работающему экземпляру передать запрос/задачу(при этом не допустив ситуации, когда один экземпляр постоянно работает, а остальные простаивают), применяется балансировщик нагрузки.

Существует несколько алгоритмов реализации балансировки нагрузки:

  • Циклический перебор (Round Robin): запросы распределяются между серверами по очереди.
  • Взвешенный циклический перебор (Weighted Round Robin): каждый сервер имеет вес в зависимости от производительности, более мощные серверы берут на себя больше запросов.
  • Наименьшее количество подключений (Least Connections): запросы направляются на сервер с наименьшим количеством активных соединений.

Имеются и открытые технологии для балансировки нагрузки, например:

  • Nginx: Известный балансировщик на уровне http/tcp
  • Apache: В каком-то смысле похож на nginx, но применяет иные подходы к реализации
  • Kubernetes Ingress: Управляет балансировкой в контейнерных средах.

Применять балансировку нагрузки можно и для баз данных. Используются разные подходы, например:

  • Репликация: Данные можно копировать по нескольким базам данных, возможно, размещённых в разных местах. Таким образом клиент может обращаться к ближайшей реплике или использовать другую в случае сбоя.
  • Шардинг: При таком подходе создаётся некоторое количество шардов(осколков), каждый из которых хранит свои данные(что и отличает шардинг от репликаций баз данных). Простейший и наивный пример с двумя шардами - в первой инсталляции находятся сущности с нечётными идентификаторами, во второй - с чётными.

Реверс-прокси - один из ключевых элементов балансировки нагрузки. В его задачи входит получение запроса, его перенаправление на нужный сервер и возврат ответа. Таким образом подобный сервер выступает в качестве посредника в цепочке запрос-ответ.