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