Merge pull request 'chernyshev_georgy_lab_7' (#420) from chernyshev_georgy_lab_7 into main

Reviewed-on: #420
This commit was merged in pull request #420.
This commit is contained in:
2025-12-08 22:56:39 +04:00

View File

@@ -0,0 +1,17 @@
Балансировка нагрузки важна в распределённых системах, так как уменьшает вероятность того, что часть системы "ляжет" от большого количества запросов. Для балансировки нагрузки могут использоваться такие алгоритмы:
* циклическая балансировка, когда нагрузка между сервервами распределяется циклично по очереди (каждой копии отправляется по 1 запросу)
* циклическая балансировка с учётом мощности серверов, когда нагрузка так же распределяется циклически по очереди между серверами, но более мощным серверам за 1 цикл отсылается больше запросов
* балансировка на основе загружённости серверов, когда запросы направляются к наиболее свободному серверу
Для реализации балансировки нагрузки часто используются обратные прокси-сервера:
* nginx
* Apache
* HAProxy
Обратные прокси позволяют отделить слой сервера от слоя клиента, т.к. клиенты обращаются именно к прокси-серверу для получения доступа к остальным сервисам, а сервисы направляют ответы не напрямую клиенту, а тоже через прокси (что позволяет кешировать часть ответов в прокси для того, чтобы уменьшить количество одинаковых обращений к сервису). Прокси-сервер должен знать о том, по каким адресам доступны сервисы (и их копии), а также должен своевременно замечать, что какой-то из сервисов недоступен (с помощью периодических проверок работоспособности сервисов (healthcheck)), для того чтобы перенаправлять запросы только к рабочим серверам. Также он будет распределять запросы между серверами сервиса по тому алгоритму, который указан в его конфигурации (примеры алгоритмов в первом маркированном списке выше)
Данные алгоритмы и технологии выполняют балансировку на уровне сетевого трафика. Для балансировки на уровне БД можно использовать приёмы:
* разделить данные между несколькими БД, указывая какая часть данных хранится в какой БД. Например, данные о всех студентах можно разделить на разные части по их id кафедры и хранить каждую часть в своей БД. Это сократит операции чтения данных, так как теперь в каждой БД будет меньше записей
* создать несколько БД, главная из них будет обрабатывать все запросы, которые приводят к изменению данных (чтение, обновление, удаление), а копии этой БД будут обрабатывать операции чтения. Таким образом, с главной БД уменьшится нагрузка, но могут возникнуть сложности с корректной настройкой процессов дублирования данных из основной БД в копии
В целом, правильная настройка балансировки нагрузки - это не самая простая задача, которая может потребовать много времени (особенно в первые разы), т.к. кроме теории требует также понимания того, как работать с существующими практическими решениями. Поэтому в простых проектах, где вероятность перегрузки сервера мала, реализация балансировки может быть излишней