Асинхронные задания

Описание актуально для версий для 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 и другие длительные процессы) также будут выполняться при помощи асинхронных заданий, чтобы использовать вышеописанные преимущества.

Начало работы

Настройка Messenger Worker

Настройте фоновый процесс, используя Supervisor, systemd или cron.

Задания миграции

Узнайте, как запускать задания миграции данных после обновления.

Справочник по настройке

Все доступные переменные среды и настройки для Messenger и асинхронных заданий.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.