<< Click to Display Table of Contents >> Разработка > Рекомендации по разработке для масштабируемых систем > Оптимизация длительных процессов Запуск большого количества длительных асинхронных обработчиков
|
![]() ![]() |
Не рекомендуется запускать асинхронные обработчики для выполнения длительных и ресурсоемких операций на одном экземпляре сервиса асинхронных событий Worker.
Например, из Directum RX выгружается 200 тысяч документов. Для загрузки порциями по 10 тысяч одновременно запускается 20 экземпляров одного асинхронного обработчика и каждый выполняется по 10-15 минут. Из-за большой нагрузки сервис Worker не успевает обрабатывать сообщения из очереди. В результате в системе не выполняются другие фоновые процессы и асинхронные обработчики, также наблюдаются задержки в выдаче прав доступа, отправке документов во внешнюю систему.
Чтобы таких ситуаций не возникало, рекомендуется:
•выносить асинхронный обработчик длительных и ресурсоемких операций на отдельный экземпляр сервиса асинхронных событий. Для этого необходимо настроить параметры ASYNC_HANDLERS_PROCESSING и ASYNC_HANDLERS_EXCLUDED. Подробнее см. в разделе «Обработка сообщений асинхронных обработчиков». В этом случае обработка сообщений других фоновых процессов и асинхронных обработчиков выполняется параллельно на другом сервисе;
•использовать переповтор асинхронного обработчика для обработки порциями. Например, запускать не сразу все 20 экземпляров обработчика, а на 2 меньше, чем число потоков. При этом обрабатывать только первые 10 тысяч записей в одном обработчике, после чего проверять, остались ли еще записи для обработки. Если записи есть, то вызывать переповтор выполнения обработчика. Также можно указать время следующего повтора. В результате сообщение о переповторе попадет в очередь после того, как в нее добавятся сообщения о других фоновых процессах и асинхронных обработчиках.
Для изменения количества потоков, которые сервис может запустить параллельно, настройте параметр ASYNC_HANDLERS_PROCESSING_PARALLEL_COUNT. Подробнее см. в разделе «Обработка сообщений асинхронных обработчиков».
•если нет требований по быстродействию, то обработку можно выполнять порциями последовательно в рамках одного фонового процесса. При этом необходимо учитывать, что время выполнения операции увеличится.
© Компания Directum, 2024 |