|
Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.
|
Изменения (42)
просмотр истории страницы... |
| app['worker.loglevel']='warning' - уровень логирования ошибок worker['balance_change.fork.cnt']='1' - количество потоков balance_change |
| worker['abonents.perfork.cnt']='15' worker['abonents.perfork.cnt']='100' - количество абонентов обрабатываемых в каждом потоке balance_change службы worker |
| app['worker.multiprocessing.enabled']='0' - включает многопоточность, по-умолчанию эта опция выключена |
| app['worker.enabled']='1' - включение воркера{code} |
| {code} {warning} |
| {warning}Установка *app\['worker.enabled'\]* в значение "*0*" равносильна отключению биллинга{warning} |
| {warning} |
| h1. Многопоточность |
| В ядре реализована функция многопоточности чтобы равномерно распределять нагрузку по ядрам процессора: * *abonent_block* \- обрабатывает блокировки абонентов * *usluga_abon_pay* \- списание абонентской платы и обработка статусов услуг * *tarif_change* \- переключает тарифы * *balance_change* \- обновляет состояния балансов * *status_daemon* \- статусы абонентов * *send_commands* \- обработка кеша: кеш абонентов, обработка флага modified в БД абонентов (что может говорить Воркеру о необходимости отправки команд на оборудование) , [сброс RADIUS-сессий по таймауту|CarbonBilling:Глобальные настройки биллинга и оператора] * *pay_cards* \- обрабатывает пополнение баланса через карты оплаты * *events* \- добавляет в стек команды для отправки на оборудование * *csv_loading* \- обрабатывает загрузку платежей из csv * *account_traf* \- регистрирует информацию по объёмам интернет-трафика * *account_voip* \- обрабатывает зарегистрированный VoIP трафик * *nas_stats* \- статистика NAS |
| В ядре реализована функция многопоточности, чтобы равномерно распределять нагрузку по ядрам процессора. Подпроцессы равноверно разпределяются по потокам CPU. Суммарно, все запущенные подпроцессы относятся в одной итерации, пока они не завершили работу новая итерация не начнётся. Таким образом, если запустить слишком много подпроцессов это может не ускорить, а замедлить работу. Скорость работы напрямую зависит от количества потоков процессора, его мощности, а так же количества ОЗУ. Подробнее узнать о конфигурации сервера можно в [статье|Системные требования]. |
| |
| {code}2018-07-02 12:07:22,778 - worker - worker - INFO - Fork daemons.abonent_block.0:9477 2018-07-02 12:07:22,782 - worker - worker - INFO - Fork daemons.usluga_abon_pay.0:9479 2018-07-02 12:07:22,786 - worker - worker - INFO - Fork daemons.tarif_change.0:9482 2018-07-02 12:07:22,790 - worker - worker - INFO - Fork daemons.balance_change.0:9483 2018-07-02 12:07:22,795 - worker - worker - INFO - Fork daemons.balance_change.1:9485 2018-07-02 12:07:22,823 - worker - worker - INFO - Fork daemons.status_daemon.0:9499 2018-07-02 12:07:22,827 - worker - worker - INFO - Fork daemons.send_commands.0:9503 2018-07-02 12:07:22,832 - worker - worker - INFO - Fork daemons.pay_cards.0:9509 2018-07-02 12:07:22,836 - worker - worker - INFO - Fork daemons.events.0:9517 2018-07-02 12:07:22,841 - worker - worker - INFO - Fork daemons.csv_loading.0:9521 2018-07-02 12:07:22,846 - worker - worker - INFO - Fork daemons.account_traf.0:9526 2018-07-02 12:07:22,850 - worker - worker - INFO - Fork daemons.account_voip.0:9529 2018-07-02 12:07:22,854 - worker - worker - INFO - Fork daemons.nas_stats.0:9532 |
| По логу работы сервиса можно увидеть количество данных обработанных за итерацию данных и суммарное время итерации: |
| {code} |
| Подпроцессы равноверно разпределяются по потокам CPU. Суммарно все запущенные подпроцессы относятся в одной итерации, пока они не завершили работу новая итерация не начнётся. Таким образом, если запустить слишком много подпроцессов это может не ускорить, а замедлить работу - скорость работы напрямую зависит от количества потоков процессора, его мощности, а так же количества ОЗУ. По логу работы сервиса можно увидеть количество обработанных за итерацию данных и суммарное время итерации: |
| {code}2018-07-02 13:10:46,424 - worker - worker - INFO - Fork has finished:daemons.abonent_block.0, Processed 0 in 1.017s. |
| 2018-07-02 13:12:48,942 - worker - worker - INFO - Fork exitcode: 0 2018-07-02 13:12:48,944 - worker - worker - INFO - Fork has finished:daemons.usluga_abon_pay.0, Processed 11 in 123.516s. |
... |
| 2018-07-02 13:12:58,587 - worker - worker - INFO - Fork has finished:daemons.nas_stats.0, Processed 3 in 9.903s. 2018-07-02 13:12:58,591 - worker - worker - INFO - Recalculating customers tree: 1970-01-01 03:00:00 |
| 2018-07-02 13:13:00,383 - worker - worker - INFO - Processed in one iteration 7265 in 135.563s.{code} |
| {code} |
| Из приведенно лога видно сколько времени ушло у каждого процесса на обработку данных, в последней строке общее время итерации. "exitcode" содержит код завершения работы процесса, если он отличен от "0" *0* - значит, при выполнении проищошла какая-либо ошибка, что так же пишется в лог. Например: |
| {code} |
| {code}2018-07-02 13:12:48,950 - worker - worker - INFO - Fork has finished:daemons.balance_change.0, Processed 717 in 111.879s. |
| 2018-07-02 13:12:48,951 - worker - worker - INFO - Fork exitcode: 0 ... |
| 2018-07-02 13:13:00,383 - worker - worker - INFO - Processed in one iteration 7265 in 135.563s.{code} |
| Подпроцесс balance_change (один из) обработал 717 операций за 112 секунд, ошибок в работе не произошло. |
| {code} |
| Один из подпроцессов balance_change обработал 717 операций за 112 секунд, ошибок в работе не произошло. Суммарное время итерации чуть менее 136 секунд. Всего обработано 7265 записей. |
| |
| Количество потоков и обрабатываемых в каждом потоке данных описано в логике биллинга. Тем не менее, для *balance_change* оставлена возможность настройки. |
| Описиние процессов: * *abonent_block* - обработка блокировок абонента * *usluga_abon_pay* \- списание абонентской платы и обработка статусов услуг * *tarif_change* \- переключает тарифы * *balance_change* \- обновляет состояния балансов * *status_daemon* \- статусы абонентов * *send_commands* \- обработка кеша: кеш абонентов, обработка флага modified в БД абонентов (что может говорить службе воркер о необходимости отправки команд на оборудование) , [сброс RADIUS-сессий по таймауту|CarbonBilling:Глобальные настройки биллинга и оператора] * *pay_cards* \- обрабатывает пополнение баланса через карты оплаты * *events* \- добавляет в стек команды для отправки на оборудование * *csv_loading* \- обрабатывает загрузку платежей из csv * *account_traf* \- регистрирует информацию по объёмам интернет-трафика * *account_voip* \- обрабатывает зарегистрированный VoIP трафик * *nas_stats* \- статистика NAS |
| h2. Включение и настройка |
| h3. Включение многопоточности |
| Для включения многопоточного режима, установите опцию worker.multiprocessing.enabled в единицу и перезапустите ядро: |
| {code:title=Опция в /app/asr_billng/cfg/config}app['worker.multiprocessing.enabled']='1'{code} |
| {code:title=Опция в /app/asr_billng/cfg/config} app['worker.multiprocessing.enabled']='1' {code} |
| {code:title=Перезапуск ядра} |
| chroot /app/asr_billing service worker restart{code} |
| {code} |
| |
| h3. Настройка многопоточности balance_change |
| h3. Описание параметров многопоточности |
| |
| В конфигурационном файле *asr_billing* за balance_change отвечают следующие настройки: {code}worker['abonents.perfork.cnt']='110' - количество абонентов обрабатываемых каждым воркером за итерацию worker['balance_change.fork.cnt']='5' - количество подпроцессов обработки баланса{code} Используя различные комбинации этих переменных можно отладить скорость работы воркера. Пример лога: |
| Параметры для регулирования работы службы воркер: * *abonents.perfork.cnt* - задаёт количество обрабатываемых абонентов для всех потоков службы воркер. |
| {code} |
| 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} h3. Простая настройка многопоточности Обычно для ускорения работы ядра биллинг достаточно включить мнгопоточность и добавить несколько потоков обработки баланса. При этом количесво абонентов обрабатываемых за каждую итерацию можно оставить стандартным. Увеличим количество потоков процесса обработки балансов *balance_change*. В конфигурационном файле *asr_billing* установим параметры для balance_change: {code} worker['balance_change.fork.cnt']='5' {code} Используя различные значения переменной для отладки скорости работы службы воркер. {code:title=Пример лога} |
| 2018-06-27 19:37:29,522 - worker - worker - INFO - Fork has finished:daemons.balance_change.0, Processed 0 in 0.159s. 2018-06-27 19:37:29,523 - worker - worker - INFO - Fork exitcode: 0 |
... |
| 2018-06-27 19:37:29,526 - worker - worker - INFO - Fork has finished:daemons.balance_change.4, Processed 0 in 0.372s. {code} |
| Общие рекомендации по настройке: * abonents.perfork.cnt не должен превышать 1500 (ограничение СУБД) * Одна итерация не должна превышать 180 секунд, если больше - уменьшите количество потоков/абонентов balance_change. * При массовых списаниях (раз в месяц при типе списания "Ежемесячно" и каждый день при "Ежедневно равными долями в день" или "Ежедневно"), каждый процесс balance_change должен обработать не менее 1000 записей, при этом уложиться в 180 секунд * Общее количество подпроцессов balance_change и прочих не должно превышать количество потоков процессора, иначе balance_change может замедлить всю работу системы * На слабых платформах лучше не изменять настройки, а оставить стандартные: 110 абонентов в 1 потоке |
| |
| h3. Настройка многопоточности account_voip |
| h3. Тонкая настройка многопоточности |
| |
| Параллельную обработку трафика телефонии можно включить, настроив *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* записей на поток вне зависимости от настроек; * В количесветве потоков стоит указывать простые числа - 2,3,5,7,11 и так далее; * При расчёте количесва поток стоит учитывать только процессы, которые реально обрабатывают данные. Например, если вы не используете [карты оплаты|Карты оплаты], то поток их обработки *pay_cards* можно не учитывать в общем количестве потоков. |
| |
| В каждом потоке {{account_voip}} обрабатывает звонки для 1000 разных абонентов. На текущий момент, это значение не настраивается и прописано в коде ядра. |
| h3. Особенности настройки: h5. account_voip |
| |
| Пример лога: {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} |
| В процессее обработки звонков *account_voip* возможно настроить только количество потоков *account_voip.fork.cnt*. Каждый поток будет обрабатывать *1000* звонков. |
| |
| 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. Отладка |
... |
