|
Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.
|
Изменения (15)
просмотр истории страницы{toc:maxLevel=2} h1. Описание ядра биллинговой системы |
Обработчик абонентов *worker* является одной из основных систем Carbon Billing 5 - именно он выполняет все финансовые расчеты, регистрирует состояния абонентов и добавляет данные которые в последствии обрабатывают другие системы, такие как отправка оповещений, события для отправки на оборудование. |
Фактический эта служба - ядро биллинга. |
В конфигурационном файле */app/asr_billing/cfg/config* за настройку воркера ядра отвечают следующие переменные: |
{code} app['worker.logfile']='/var/log/worker.log' - расположение лог-файла работы процесса |
... |
worker['balance_change.fork.cnt']='1' - количество потоков balance_change worker['abonents.perfork.cnt']='15' - количество абонентов обрабатываемых в каждом потоке balance_change |
app['worker.multiprocessing.enabled']='0' - включает многопоточность, по-умолчанию эта опция выключена |
app['worker.enabled']='1' - включение воркера{code} {warning}Установка *app\['worker.enabled'\]* в значение "*0*" равносильна отключению биллинга{warning} |
h1. Многопоточность. |
|
В обработчике абонентов реализована многопоточность с целью максимальной утилизации доступных ресурсов процессора и памяти: worker запускает несколько подпроцессов, каждый из которых обрабатывает определенное количество данных того или иного типа: |
В ядре реализована функция многопоточности чтобы равномерно распределять нагрузку по ядрам процессора: |
* *abonent_block* \- обрабатывает блокировки абонентов * *usluga_abon_pay* \- списание абонентской платы и обработка статусов услуг |
... |
Количество потоков и обрабатываемых в каждом потоке данных описано в логике биллинга. Тем не менее, для *balance_change* оставлена возможность настройки. |
h2. Настройка многопоточности *balance_change* |
h2. Включение и настройка |
|
Для включения многопоточного режима, установите опцию worker.multiprocessing.enabled в единицу и перезапустите ядро: {code:title=Опция в /app/asr_billng/cfg/config}app['worker.multiprocessing.enabled']='1'{code} {code:title=Перезапуск ядра} chroot /app/asr_billing service worker restart{code} h3. Настройка многопоточности balance_change |
В конфигурационном файле *asr_billing* за balance_change отвечают следующие настройки: {code}worker['abonents.perfork.cnt']='110' - количество абонентов обрабатываемых каждым воркером за итерацию |
... |
* Одна итерация не должна превышать 180 секунд, если больше - уменьшите количество потоков/абонентов balance_change. * При массовых списаниях (раз в месяц при типе списания "Ежемесячно" и каждый день при "Ежедневно равными долями в день" или "Ежедневно"), каждый процесс balance_change должен обработать не менее 1000 записей, при этом уложиться в 180 секунд |
* Желательно чтобы общее Общее количество подпроцессов balance_change и прочих не превышало должно превышать количество потоков процессора, иначе balance_change может замедлить всю работу системы |
* На слабых платформах лучше не изменять настройки, а оставить стандартные: 110 абонентов в 1 потоке |
h1. Отладка. |
h3. Настройка многопоточности account_voip |
|
Параллельную обработку трафика телефонии можно включить, настроив *account_voip.fork.cnt*: {code} worker['account_voip.fork.cnt']='16' {code} Заметки и рекомендации по настройке: * Параметр может отсутствовать в конфигурационном файле по-умолчанию. Если он требуется - добавьте вручную. * Количество потоков не должно превышать количество доступных потоков процессора. Например, если у Вас два шестиядерных процессора с технологией hyperthreading, то account_voip.fork.cnt должен быть не более 24 (2 * 6 * 2). * На слабых платформах лучше не изменять настройки и оставить один поток В каждом потоке {{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. Отладка |
При возникновении каких-либо проблем в работе сервиса, можно выключить повышенное логирование в следующей переменной: {code}app['worker.loglevel']='warning'{code} |
... |