Merge pull request 'lazarev_andrey_lab_7' (#155) from lazarev_andrey_lab_7 into main
Reviewed-on: #155
This commit is contained in:
commit
b018a2421a
51
lazarev_andrey_lab_7/README.md
Normal file
51
lazarev_andrey_lab_7/README.md
Normal file
@ -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-терминация** - шифрование и расшифровка данных на уровне прокси;
|
||||
- **Сжатие и оптимизация трафика** - уменьшение объема передаваемых данных.
|
Loading…
Reference in New Issue
Block a user