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:
17
chernyshev_georgy_lab_7/README.md
Normal file
17
chernyshev_georgy_lab_7/README.md
Normal file
@@ -0,0 +1,17 @@
|
||||
Балансировка нагрузки важна в распределённых системах, так как уменьшает вероятность того, что часть системы "ляжет" от большого количества запросов. Для балансировки нагрузки могут использоваться такие алгоритмы:
|
||||
* циклическая балансировка, когда нагрузка между сервервами распределяется циклично по очереди (каждой копии отправляется по 1 запросу)
|
||||
* циклическая балансировка с учётом мощности серверов, когда нагрузка так же распределяется циклически по очереди между серверами, но более мощным серверам за 1 цикл отсылается больше запросов
|
||||
* балансировка на основе загружённости серверов, когда запросы направляются к наиболее свободному серверу
|
||||
|
||||
Для реализации балансировки нагрузки часто используются обратные прокси-сервера:
|
||||
* nginx
|
||||
* Apache
|
||||
* HAProxy
|
||||
|
||||
Обратные прокси позволяют отделить слой сервера от слоя клиента, т.к. клиенты обращаются именно к прокси-серверу для получения доступа к остальным сервисам, а сервисы направляют ответы не напрямую клиенту, а тоже через прокси (что позволяет кешировать часть ответов в прокси для того, чтобы уменьшить количество одинаковых обращений к сервису). Прокси-сервер должен знать о том, по каким адресам доступны сервисы (и их копии), а также должен своевременно замечать, что какой-то из сервисов недоступен (с помощью периодических проверок работоспособности сервисов (healthcheck)), для того чтобы перенаправлять запросы только к рабочим серверам. Также он будет распределять запросы между серверами сервиса по тому алгоритму, который указан в его конфигурации (примеры алгоритмов в первом маркированном списке выше)
|
||||
|
||||
Данные алгоритмы и технологии выполняют балансировку на уровне сетевого трафика. Для балансировки на уровне БД можно использовать приёмы:
|
||||
* разделить данные между несколькими БД, указывая какая часть данных хранится в какой БД. Например, данные о всех студентах можно разделить на разные части по их id кафедры и хранить каждую часть в своей БД. Это сократит операции чтения данных, так как теперь в каждой БД будет меньше записей
|
||||
* создать несколько БД, главная из них будет обрабатывать все запросы, которые приводят к изменению данных (чтение, обновление, удаление), а копии этой БД будут обрабатывать операции чтения. Таким образом, с главной БД уменьшится нагрузка, но могут возникнуть сложности с корректной настройкой процессов дублирования данных из основной БД в копии
|
||||
|
||||
В целом, правильная настройка балансировки нагрузки - это не самая простая задача, которая может потребовать много времени (особенно в первые разы), т.к. кроме теории требует также понимания того, как работать с существующими практическими решениями. Поэтому в простых проектах, где вероятность перегрузки сервера мала, реализация балансировки может быть излишней
|
||||
Reference in New Issue
Block a user