DAS_2024_1/artamonova_tatyana_lab_7/README.md

5.5 KiB
Raw Blame History

Лабораторная работа №7

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

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

А что делать, если серверов больше сотни или тысячи?

Балансировка нагрузки позволяет обеспечить равномерное распределение нагрузки между несколькими серверами. Без неё один сервер может перегрузиться, а другой простаивать. Это приводит к неэффективной работе системы.

Для решения этой проблемы используют различные алгоритмы.

  1. "Round-robin" - балансировка нагрузок циклическим перебором. Алгоритм можно описать так: балансировщик нагрузок отправляет запрос каждому серверу по очереди. Это решает проблему "отбрасывания" входящих запросов, когда предыдущий запрос еще не был обработан. Такой алгоритм подойдет для серверов с одинаковой мощностью и одинаково затратных запросов.

  2. Очереди запросов - балансировка нагрузок с помощью создания очередей запросов. Редко встречаются ситуации, когда все запросы одинаково обрабатываются. Очереди запросов позволяют справиться с этой проблемой, но со своими недостатками. "Отбрасываться" будет меньше запросов, но некоторые из них будут иметь задержку при обработке (так как будут ожидать в очереди)

  3. "Weighted round-robin" - взвешенный цикличный перебор. Алгоритм заключается в назначении веса каждому серверу. Вес определяет, сколько запросов сможет обработать сервер. Это нужно, для подстраивания к мощности каждого сервера.

В качестве открытых технологий для балансировки нагрузки используются HAProxy и Nginx. Они выступают в роли обратного прокси-сервера: принимают запросы от клиентов и перенаправляют их на один из доступных серверов. Они предлагают гибкую настройку алгоритмов балансировки и отслеживания состояния серверов. Кроме того, существуют решения на основе Kubernetes или других оркестраторов контейнеров, которые управляют распределением нагрузки по микросервисам.

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

Репликация создает копии данных на нескольких серверах. Это обеспечивает отказоустойчивость и повышение производительности за счет распределения нагрузки чтения.

Кластеризация объединяет несколько баз данных в единую систему. Это позволяет распределять нагрузку записи и чтения между несколькими базами. Выбор оптимального подхода зависит от специфики приложения и требований к доступности и производительности.

Реверс-прокси играет ключевую роль в балансировке нагрузки. Он принимает все входящие запросы, контролирует доступность серверов на бэке и перенаправляет запросы на доступные и наименее загруженные сервера. Кроме распределения нагрузки, реверс-прокси выполняет другие важные функции: кэширование, SSL-терминирование и защита от атак. Благодаря своей гибкости и функциональности, реверс-прокси является важным компонентом высокопроизводительных и отказоустойчивых распределенных систем.