DAS_2024_1/artamonova_tatyana_lab_7/README.md

67 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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