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-терминирование и защита от атак. Благодаря своей гибкости
|
||
и функциональности, реверс-прокси является важным компонентом
|
||
высокопроизводительных и отказоустойчивых распределенных систем.
|
||
|
||
|