Worker (ядро биллинга)

Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.

Изменения (16)

просмотр истории страницы
app['worker.loglevel']='warning' - уровень логирования ошибок
worker['balance_change.fork.cnt']='1' - количество потоков balance_change
worker['abonents.perfork.cnt']='100' - количество абонентов обрабатываемых в каждом потоке balance_change службы worker
app['worker.multiprocessing.enabled']='0' - включает многопоточность, по-умолчанию эта опция выключена
app['worker.enabled']='1' - включение воркера
h2. Включение и настройка

h3. Включение многопоточности

Для включения многопоточного режима, установите опцию worker.multiprocessing.enabled в единицу и перезапустите ядро:
{code:title=Опция в /app/asr_billng/cfg/config}
{code}

h3. Настройка многопоточности
h3. Включение и настройка многопоточности

Рассмотрим настройку многопоточности на примере *balance_change*. В конфигурационном файле *asr_billing* за balance_change отвечают следующие настройки:
Параметры для регулирования работы службы воркер:
* *abonents.perfork.cnt* - задаёт количество обрабатываемых абонентов для всех потоков службы воркер.
{code}
worker['abonents.perfork.cnt']='110' - количество абонентов обрабатываемых каждым воркером за итерацию
worker['balance_change.fork.cnt']='5' - количество подпроцессов обработки баланса
worker['abonents.perfork.cnt']='100'
{code}
Используя различные комбинации этих переменных можно отладить скорость работы воркера.
* *abonents.perfork.<имя процесса>* - задаёт количество обрабатываемых абонентов для потоков конкретного процесса. Например для процесса *balance_change*:
{code}
worker['abonents.perfork.balance_change']='150'
{code}
* *<имя процесса>.fork.cnt* - количество потоков обработки внутри конкретного процесса. Например для процесса *balance_change*:
{code}
worker['balance_change.fork.cnt']='5'
{code}

h5. Простая настройка многопоточности

Обычно для ускорения работы ядра биллинг достаточно включить мнгопоточность и добавить несколько потоков обработки баланса. При этом количесво абонентов обрабатываемых за каждую итерацию можно оставить стандартным. Увеличим количество потоков процесса обработки балансов *balance_change*. В конфигурационном файле *asr_billing* установим параметры для balance_change:
{code}
worker['balance_change.fork.cnt']='5' - количество потоков обработки баланса
{code}

Используя различные значения переменной можно отладить скорость работы службы воркер.
Пример лога:
{code}
2018-06-27 19:37:29,526 - worker - worker - INFO - Fork has finished:daemons.balance_change.4, Processed 0 in 0.372s.
{code}
Общие рекомендации по настройке:
* Одна итерация не должна превышать 180 секунд, если больше - уменьшите количество потоков/абонентов balance_change.
* При массовых списаниях (раз в месяц при типе списания "Ежемесячно" и каждый день при "Ежедневно равными долями в день" или "Ежедневно"), каждый процесс balance_change должен обработать не менее 1000 записей, при этом уложиться в 180 секунд
* Общее количество подпроцессов balance_change и прочих не должно превышать количество потоков процессора, иначе balance_change может замедлить всю работу системы
* На слабых платформах лучше не изменять настройки, а оставить стандартные: 110 абонентов в 1 потоке

h3. Настройка многопоточности account_voip
h5. Тонкая настройка многопоточности

Параллельную обработку трафика телефонии можно включить, настроив *account_voip.fork.cnt*:
{code}
worker['account_voip.fork.cnt']='16'
{code}
Заметки и рекомендации по настройке:
* Параметр может отсутствовать в конфигурационном файле по-умолчанию. Если он требуется - добавьте вручную.
* Количество потоков не должно превышать количество доступных потоков процессора. Например, если у Вас два шестиядерных процессора с технологией hyperthreading, то account_voip.fork.cnt должен быть не более 24 (2 * 6 * 2).
* На слабых платформах лучше не изменять настройки и оставить один поток
Для систем с высокой нагрузкой потребуется тонкая настройка многопоточности. Общие рекомендации по настройке:
* Одна итерация не должна превышать 180 секунд, если больше - уменьшите количество абонентов в потоке;
* При массовых [списаниях|Методы списания] (раз в месяц при типе списания "Ежемесячно" и каждый день при "Ежедневно равными долями в день" или "Ежедневно"), каждый процесс balance_change должен обработать не менее 1000 записей, при этом уложиться в 180 секунд;
* Общее количество потоков службы воркер не должно превышать количество потоков процессора, иначе это может замедлить работу всю системы;
* Мы рекомендыем оставлять запас ядер процессора для выполния других задачь на биллинга;
* На слабых платформах лучше не изменять настройки, а оставить стандартные: 110 абонентов в 1 потоке;
* В системе есть ограничение в *5000* записей на поток вне зависимости от настройек.

В каждом потоке {{account_voip}} обрабатывает звонки для 1000 разных абонентов. На текущий момент, это значение не настраивается и прописано в коде ядра.

Пример лога:
{code}
2021-10-11 14:07:19,799 - worker - worker - INFO - Fork has finished:daemons.account_voip.1, Processed 963 in 16.700s.
2021-10-11 14:07:19,811 - worker - worker - INFO - Fork has finished:daemons.account_voip.10, Processed 6 in 14.522s.
2021-10-11 14:07:19,815 - worker - worker - INFO - Fork has finished:daemons.account_voip.13, Processed 316 in 14.921s.
2021-10-11 14:07:19,816 - worker - worker - INFO - Fork has finished:daemons.account_voip.14, Processed 58 in 14.599s.
2021-10-11 14:07:19,817 - worker - worker - INFO - Fork has finished:daemons.account_voip.15, Processed 4579 in 23.562s.
{code}

h3. Настройка многопоточности events
Настроить многопоточность службы обработки событий оборудования можно параметром:
{code}
worker['events.fork.cnt']='8'
{code}
h3. Настройка многопоточности send_commands
Настроить многопоточность службы отправки коммманд на оборудование можно параметром:
{code}
worker['send_commands.fork.cnt']='8'
{code}
h3. Настройка многопоточности usluga_abon_pay
Настроить многопоточность службы списанием за услуги можно параметром:
{code}
worker['usluga_abon_pay.fork.cnt']='8'
{code}
h3. Настройка многопоточности account_traf
{code}
worker['account_traf.fork.cnt']='8'
{code}

h1. Отладка