From a0ca1e8f4ff401800f876692c84173827bbf407c Mon Sep 17 00:00:00 2001 From: "an.lazarev" Date: Sun, 10 Nov 2024 02:24:30 +0400 Subject: [PATCH] lazarev_andrey_lab_7 --- lazarev_andrey_lab_7/README.md | 51 ++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 lazarev_andrey_lab_7/README.md diff --git a/lazarev_andrey_lab_7/README.md b/lazarev_andrey_lab_7/README.md new file mode 100644 index 0000000..0c20f42 --- /dev/null +++ b/lazarev_andrey_lab_7/README.md @@ -0,0 +1,51 @@ +# Лабораторная работа №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-терминация** - шифрование и расшифровка данных на уровне прокси; +- **Сжатие и оптимизация трафика** - уменьшение объема передаваемых данных. \ No newline at end of file