DAS_2024_1/lazarev_andrey_lab_7/README.md
2024-11-10 02:24:30 +04:00

51 lines
6.2 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. Какие алгоритмы и методы используются для балансировки нагрузки?
2. Какие открытые технологии существуют для балансировки нагрузки?
3. Как осуществляется балансировка нагрузки на базах данных?
4. Реверс-прокси как один из элементов балансировки нагрузки.
## Результат
Для вводной части стоит ввести толкование.
**Балансировка нагрузки** - метод распределения сетевого трафика и задач между сетевыми устройствами. Применяется, когда вертикальное масштабирование достигает потолка, и начинает задействоваться горизонтальное, частью чего и является балансировщик нагрузки, распределяющий трафик.
### Методы и алгоритмы балансировки нагрузки
Существует много различных методов и алгоритмов балансировки нагрузки, но универсального варианта - нет. Подбор нужного метода или алгоритма исходит из специфики проекта, а также целей, которые он преследует.
Например, алгоритм **Round Robin** - достаточно простой алгоритм, равномерно и циклично распределяющий запросы по серверам, однако возникает проблема, что не у всех серверов одинаковые ресурсы, тогда можно использовать усовершенствованную версию алгоритма - **Weighted Round Robin**, в котором каждому серверу присваивается весовой коэффициент, следовательно сервер с большим весом обрабатывает больше запросов.
Кроме проблемы ресурсов **RR**, которую может исправить **WRR**, есть и проблема учета количества активных подключений, заключающаяся в перегрузке сервера с длительными активными подключениями.
Проблему можно решить с помощью алгоритма **Least Connections**. Он учитывает количество подключений, поддерживаемых серверами в текующий момент времени, перенаправляя запросы на менее нагруженные сервера. Для этого алгоритма также существует и весовой вариант **Weighted Least Connections**.
### Открытые технологии балансировки нагрузки
**Открытые технологии** - это технологии, которые предоставляются сообществу с открытым доступом к исходному коду, документациям и прочему.
Например, **Nginx** - веб-сервер и реверс прокси с функциями балансировщика нагрузки. Поддерживающий алгоритмы **RR**, **leastconn** и **IP Hash**.
Также для контейнеризированных приложений есть **Kubernetes Ingress Controller** - контроллер, который управляет входящими запросами и балансирует нагрузку приложений, размещенных в **kubernetes**
### Балансировка нагрузки на базах данных
Балансировка нагрузки базы данных требует к себе особого подхода, так как базы данных требуют согласованность и синхронизацию данных.
Для решения проблемы используют:
- **Шардинг** - распределение данных между несколькими БД по определенному ключу;
- **Запись с репликами** - подход, при котором запросы на запись отправляются в мастер базу, а чтение уже на реплики;
- **Прокси-серверы** - управляют соединениями, обеспечивают балансировку нагрузки и другие функции для повышения производительности и отказоустойчивости. Например, **Pgpool-II** для PostgresSQL или **MySQL Proxy** для MySQL.
### Реверс-прокси как элемент балансировки нагрузки.
Выше уже были представлены примеры реверс-прокси, однако не были рассмотрены предоставляемые функции:
- **Маршрутизация запросов** - передача запросов на соответствующие сервера в зависимости от алгоритма балансировки;
- **Кеширование** - хранение часто запрашиваемых данных;
- **SSL-терминация** - шифрование и расшифровка данных на уровне прокси;
- **Сжатие и оптимизация трафика** - уменьшение объема передаваемых данных.