Описание актуально для версий для SuiteCRM 8.10.0+
SuiteCRM 8.10 представляет новую систему обработки фоновых заданий, построенную на основе Symfony Messenger. Эта система позволяет SuiteCRM выполнять ресурсоемкие, длительные операции в фоновом режиме, не блокируя приложение и не загружая излишне веб-сервер.
До появления асинхронных заданий операции, затрагивающие тысячи записей — например, миграция данных после обновления — должны были выполняться в рамках одного HTTP-запроса или распределяться между запланированными заданиями cron, что могло приводить к замедлению загрузки страниц, тайм-аутам при работе с большими объёмами данных и ограничению контроля над результатами при выполнении заданий.
Новая система асинхронных заданий коренным образом меняет прежнюю схему.
Асинхронные задания разбивают работу на небольшие пакеты и обрабатывают их по одному в фоновом режиме. При этом отсутствуют ограничения по тайм-аутам PHP, нет нагрузки на память веб-сервера и нет риска прерывания длительной операции из-за тайм-аута браузера.
Каждая асинхронная задача отслеживает свой прогресс по мере выполнения — сколько элементов было обработано, сколько успешно выполнено и сколько операций завершились с ошибкой. Эта информация отображается в пользовательском интерфейсе SuiteCRM, поэтому администраторы могут в любое время отслеживать состояние выполняющихся заданий.
Когда отдельные операции по обработке элементов завершаются с ошибкой, система фиксирует, какие именно операции завершились подобным образом и почему. Неудачные операции можно повторить без повторной обработки всего пакета. Если всё задание завершается с ошибкой, его можно запустить заново.
При выполнении фоновых заданий пользователи могут продолжать работать в обычном режиме. Задания обрабатываются отдельным рабочим процессом, полностью независимым от веб-сервера, обрабатывающего запросы пользователей.
В конфигурации по умолчанию в качестве транспорта сообщений используется существующая база данных — дополнительная инфраструктура не требуется. Поскольку SuiteCRM построен на Symfony Messenger, по мере роста ваших потребностей также доступно использование альтернативных транспортных протоколов, например, RabbitMQ, Redis и других, что позволяет масштабировать рабочие процессы и направлять различные типы заданий в выделенные очереди без изменения кода приложения.
Когда пользователь (или система) запускает асинхронное задание, SuiteCRM помещает сообщение в очередь. Отдельный процесс-обработчик (воркер) — работающий параллельно с вашим веб-сервером — забирает сообщения из очереди и выполняет их в фоновом режиме.
Воркер — это длительно работающий PHP-процесс, запускаемый командой Symfony Messenger messenger:consume. Управление асинхронными заданиями может осуществляться через Supervisor, systemd или cron, в зависимости от используемого окружения.
Каждое асинхронное задание проходит следующий жизненный цикл:
Постановка в очередь — задание сканирует записи для обработки и добавляет их партиями в очередь.
Обработка — Воркер обрабатывает каждый элемент индивидуально, регистрируя успех или неудачу обработки для каждого из них.
Завершение — После обработки всех элементов задание выполняет необходимые действия по очистке или подведению итогов.
В SuiteCRM версии 8.10 асинхронные задания используются для миграции данных после обновления, в результате чего существующие данные преобразуются в новые форматы (миграция фотографий, вложений файлов, синхронизаций календаря). Детали описаны в разделе Задания миграции.
В будущих версиях дополнительные операции (такие как массовое создание PDF-файлов, экспорт CSV и другие длительные процессы) также будут выполняться при помощи асинхронных заданий, чтобы использовать вышеописанные преимущества.
Настройте фоновый процесс, используя Supervisor, systemd или cron. |
|
Узнайте, как запускать задания миграции данных после обновления. |
|
Все доступные переменные среды и настройки для Messenger и асинхронных заданий. |
Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.