Зачастую на больших проектах остро встает вопрос производительности. Для решения данной проблемы, на одном из проектов, нам удалось реализовать механизм очередей. Сам механизм очередей подразумевает последовательное выполнение заданий, что делает потребление ресурсов сервера более равномерном по сравнению с параллельным выполнением.
В качестве провайдера очереди нами был выбран сервис Yandex Message Queue, в виду высокой отказоустойчивости и низкой цены. В качестве исполнителя заданий было разработано JAVA приложение (далее worker).
Реализация на стороне Битрикс представляет собой отдельный модуль, включающий в себя:
- Программный интерфейс совместимый с API Amazon SQS (используемый сервисом Yandex Message Queue)
- Интерфейс для создания процессов исполнения очереди
- JAVA приложение играющее роль worker'а (собранный jar-файл)
- Механизм автоматического запуска процессов worker'ов (например при перезагрузке сервера).
Принцип работы модуля:
Через интерфейс управления задаются параметры авторизации - идентификатор и секретный ключ для сервисного аккаунта в Yandex Cloud. Там же создаются worker'ы (один на одну очередь). Worker'ы запускаются (в ручном режиме через интерфейс или автоматически).
Постановка задач в очередь осуществляется через вызов кода модуля в произвольных местах. Само задание описывает на какой контроллер в Битриксе необходимо сделать запрос для выполнения задания. Получив задание worker делает необходимый запрос и получив успешный ответ от Битрикс убирает задание из очереди. В случае неуспешного выполнения запроса (контроллер не ответил или ответил ошибкой) - задание возвращается в очередь.
Таким образом использования механизма необходимо:
- Написать контроллер реализующий исполнение задания
- В коде системы (в обработчиках, агентах, в целом где угодно) написать код постановки задачи
Системные требования
- Centos Stream 9
- OpenJDK 21
- PHP 8.1+
- Актуальная версия Б24