Apache Модуль mod_lbmethod_byrequests
| Описание: | Алгоритм балансировки нагрузки с подсчётом запросов для mod_proxy_balancer
|
|---|---|
| Статус: | Расширение |
| Идентификатор модуля: | lbmethod_byrequests_module |
| Файл исходного кода: | mod_lbmethod_byrequests.c |
| Совместимость: | Выделен из mod_proxy_balancer в версии 2.3 |
Обзор
Этот модуль не предоставляет собственных директив конфигурации. Он использует сервисы mod_proxy_balancer, и предоставляет метод балансировки нагрузки byrequests.
Алгоритм подсчёта запросов
Включён с помощью lbmethod=byrequests, идея этого планировщика заключается в распределении запросов между различными рабочими процессами для обеспечения того, чтобы каждый получил свою заданную долю количества запросов. Он работает следующим образом:
lbfactor — это ожидаемая нагрузка на этот рабочий процесс, или квота работы рабочего процесса. Это нормализованное значение, представляющее их «долю» от общего объёма работы.
lbstatus — это степень срочности работы этого рабочего процесса для выполнения его квоты.
Рабочий процесс — это участник балансировщика нагрузки, обычно удалённый хост, обслуживающий один из поддерживаемых протоколов.
Мы распределяем квоту работы каждого рабочего процесса рабочему процессу, а затем смотрим, какой из них нуждается в работе наиболее срочно (наибольший lbstatus). Этот рабочий процесс затем выбирается для работы, а его lbstatus уменьшается на общую квоту работы, распределённую всем рабочим процессам. Таким образом, сумма всех lbstatus не изменяется (*) и мы распределяем запросы по желанию.
Если некоторые рабочие процессы отключены, остальные по-прежнему будут расписаны корректно.
for each worker in workers worker lbstatus += worker lbfactor total factor += worker lbfactor if worker lbstatus > candidate lbstatus candidate = worker candidate lbstatus -= total factorЕсли балансировщик настроен следующим образом:
| рабочий процесс | a | b | c | d |
|---|---|---|---|---|
| lbfactor | 25 | 25 | 25 | 25 |
| lbstatus | 0 | 0 | 0 | 0 |
И b отключён, будет произведён следующий расчёт:
| рабочий процесс | a | b | c | d |
|---|---|---|---|---|
| lbstatus | -50 | 0 | 25 | 25 |
| lbstatus | -25 | 0 | -25 | 50 |
| lbstatus | 0 | 0 | 0 | 0 |
| (повторять) | ||||
То есть он расписывает: a c d a c d a c d ... Обратите внимание, что:
| рабочий процесс | a | b | c | d |
|---|---|---|---|---|
| lbfactor | 25 | 25 | 25 | 25 |
имеет точно такое же поведение, как:
| рабочий процесс | a | b | c | d |
|---|---|---|---|---|
| lbfactor | 1 | 1 | 1 | 1 |
Это потому, что все значения lbfactor нормализованы относительно друг друга. Для:
| рабочий процесс | a | b | c |
|---|---|---|---|
| lbfactor | 1 | 4 | 1 |
рабочий процесс b в среднем получит в 4 раза больше запросов, чем a и c.
Следующая асимметричная конфигурация работает так, как ожидается:
| рабочий процесс | a | b |
|---|---|---|
| lbfactor | 70 | 30 |
| lbstatus | -30 | 30 |
| lbstatus | 40 | -40 |
| lbstatus | 10 | -10 |
| lbstatus | -20 | 20 |
| lbstatus | -50 | 50 |
| lbstatus | 20 | -20 |
| lbstatus | -10 | 10 |
| lbstatus | -40 | 40 |
| lbstatus | 30 | -30 |
| lbstatus | 0 | 0 |
| (повторять) | ||
То есть после 10 расчётов расписание повторяется, и 7 a выбираются с 3 b вперемешку.
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_lbmethod_byrequests.html