5.5 KiB
Лабораторная работа №7
Эссе на тему "Балансировка нагрузки в распределённых системах при помощи открытых технологий на примерах"
При масштабировании приложения появляется необходимость в добавлении новых серверов. В таком случае нужно пользоваться балансировщиком нагрузок для распределения запросов.
А что делать, если серверов больше сотни или тысячи?
Балансировка нагрузки позволяет обеспечить равномерное распределение нагрузки между несколькими серверами. Без неё один сервер может перегрузиться, а другой простаивать. Это приводит к неэффективной работе системы.
Для решения этой проблемы используют различные алгоритмы.
-
"Round-robin" - балансировка нагрузок циклическим перебором. Алгоритм можно описать так: балансировщик нагрузок отправляет запрос каждому серверу по очереди. Это решает проблему "отбрасывания" входящих запросов, когда предыдущий запрос еще не был обработан. Такой алгоритм подойдет для серверов с одинаковой мощностью и одинаково затратных запросов.
-
Очереди запросов - балансировка нагрузок с помощью создания очередей запросов. Редко встречаются ситуации, когда все запросы одинаково обрабатываются. Очереди запросов позволяют справиться с этой проблемой, но со своими недостатками. "Отбрасываться" будет меньше запросов, но некоторые из них будут иметь задержку при обработке (так как будут ожидать в очереди)
-
"Weighted round-robin" - взвешенный цикличный перебор. Алгоритм заключается в назначении веса каждому серверу. Вес определяет, сколько запросов сможет обработать сервер. Это нужно, для подстраивания к мощности каждого сервера.
В качестве открытых технологий для балансировки нагрузки используются HAProxy и Nginx. Они выступают в роли обратного прокси-сервера: принимают запросы от клиентов и перенаправляют их на один из доступных серверов. Они предлагают гибкую настройку алгоритмов балансировки и отслеживания состояния серверов. Кроме того, существуют решения на основе Kubernetes или других оркестраторов контейнеров, которые управляют распределением нагрузки по микросервисам.
Балансировка нагрузки на базах данных — специфическая задача, решаемая с помощью механизмов репликации и кластеризации.
Репликация создает копии данных на нескольких серверах. Это обеспечивает отказоустойчивость и повышение производительности за счет распределения нагрузки чтения.
Кластеризация объединяет несколько баз данных в единую систему. Это позволяет распределять нагрузку записи и чтения между несколькими базами. Выбор оптимального подхода зависит от специфики приложения и требований к доступности и производительности.
Реверс-прокси играет ключевую роль в балансировке нагрузки. Он принимает все входящие запросы, контролирует доступность серверов на бэке и перенаправляет запросы на доступные и наименее загруженные сервера. Кроме распределения нагрузки, реверс-прокси выполняет другие важные функции: кэширование, SSL-терминирование и защита от атак. Благодаря своей гибкости и функциональности, реверс-прокси является важным компонентом высокопроизводительных и отказоустойчивых распределенных систем.