Spec-Zone.ru › Apache HTTP Server

Модуль 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API