DAS_2024_1/artamonova_tatyana_lab_7/README.md

67 lines
5.5 KiB
Markdown
Raw Normal View History

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