Worker

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

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

просмотр истории страницы

h1. Многопоточность.

В обработчике абонентов реализована многопоточность с целью максимальной утилизации доступных ресурсов процессора и памяти: worker запускает несколько подпроцессов, каждый из которых обрабатывает определенное количество данных того или иного типа:
* *abonent_block* - \- обрабатывает блокировки абонентов
* *usluga_abon_pay* - \- TODO
* *tarif_change* - \- переключает тарифы
* *balance_change* - \- обновляет состояния балансов
* *status_daemon* - \- TODO
* *send_commands* \-TODO
* *pay_cards* - \- обрабатывает пополнение баланса через карты оплаты
* *events* - \- добавляет в стек команды для отправки на оборудование
* *csv_loading* - \- обрабатывает загрузку платежей из csv
* *account_traf* - \- регистрирует информацию по объёмам интернет-трафика
* *account_voip* - \- обрабатывает зарегистрированный VoIP трафик
* *nas_stats* \-TODO

{code}2018-07-02 12:07:22,778 - worker - worker - INFO - Fork daemons.abonent_block.0:9477
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}
Из приведенно лога видно сколько времени ушло у каждого процесса на обработку данных, в последней строке общее время итерации. "exitcode" содержит код завершения работы процесса, если он отличен от "0" - значит, при выполнении проищошла какая-либо ошибка, что так же пишется в лог. Например:
{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

Количество потоков и обрабатываемых в каждом потоке данных описано в логике биллинга. Тем не менее, для *balance_change* оставлена возможность настройки.

h2. Настройка многопоточности *balance_change*

В конфигурационном файле *asr_billing* за balance_change отвечают следующие настройки:
{code}worker['abonents.perfork.cnt']='25' - N количество абонентов обрабатываемых каждым воркером за итерацию
worker['balance_change.fork.cnt']='5' - демоны количество подпроцессов обработки баланса{code}
Используя различные комбинации этих переменных можно отладить скорость работы воркера.
Пример лога:
{code}
* Желательно чтобы общее количество подпроцессов balance_change и прочих не превышало количество потоков процессора, иначе balance_change может замедлить всю работу воркера
* Одна итерация не должна превышать 180 секунд, если больше - уменьшите количество потоков/абонентов balance_change.
* На слабых платформах лучше не изменять настройки, а оставить стандартные: 215 абонентов в 1 потоке

h1. Отладка.

При возникновении каких-либо проблем в работе сервиса, можно выключить повышенное логирование в следующей переменной:
{code}app['worker.loglevel']='warning'{code}
* *ERROR* - \- логирование только ошибок
* *WARNING* - \- логирование ошибок и предупреждений, которые в общем случае не влияют на скорость работы и не вызывают существенных проблем
* *INFO* - \- полный лог работы процесса, включая логирование всех запросов к БД и их результаты

При изменении уровня логирования, требуется перезапустить процесс: