В ELMA365 за валидацию, компиляцию и исполнение серверных скриптов отвечает сервис worker. Чтобы повысить его производительность, вы можете выделить отдельные пулы исполнения:
- для структур системы, где инициируются скрипты. Например, для скриптов виджетов или определённого бизнес-процесса;
- для отдельных типов запросов на обработку скриптов. Например, для их публикации или исполнения.
начало внимание
Настройка отдельных пулов worker доступна для поставки ELMA365 On‑Premises Enterprise начиная с версии 2025.6.
конец внимание
В статье рассмотрим, как в системе:
Алгоритм обработки скриптов в сервисе worker
Для распределения нагрузки на сервис worker используются инструменты:
- Kubernetes — обеспечивает масштабирование экземпляров сервиса, в которых выполняются скрипты;
- RabbitMQ — выступает в качестве маршрутизатора, распределяя запросы на выполнение скриптов между доступными экземплярами worker.
При стандартной конфигурации worker запросы на обработку скриптов поступают в RabbitMQ и распределяются в рамках общей очереди. Это повышает нагрузку на сервис и замедляет выполнение скриптов.
Настройка отдельных пулов для скриптов определённого типа помогает оптимизировать распределение этой нагрузки. После такой настройки :
- в Kubernetes — передаются данные, по которым будут разворачиваться пулы;
- в RabbitMQ — автоматически добавляется отдельная очередь для каждого настроенного пула.
Рассмотрим подробнее, как происходит маршрутизация запросов на скрипты:
- Определение ключа маршрутизации.
При запуске скрипта автоматически формируется запрос, содержащий его параметры: имя компании, публикация или исполнение скрипта, структура системы, из которой направлен скрипт, и т. д. На основе этих данных вычисляется ключ маршрутизации:
- если вы настроили для определённых скриптов отдельные пулы, запросу присваивается ключ, равный идентификатору пула worker;
- если подходящего пула нет — присваивается ключ
default.
- Распределение запросов.
Запросы с присвоенным ключом поступают в RabbitMQ, где происходит их маршрутизация:
- если вы задали для отдельных скриптов свои пулы worker, в RabbitMQ автоматически создаются очереди для таких пулов. Запросы распределятся в эту очередь по присвоенному ключу;
- запросы с ключом
defaultпопадают в общую очередьscript.default.
- Обработка запросов.
Из очередей запросы распределяются между экземплярами worker:
- из выделенных очередей запросы на обработку скриптов передаются на настроенные пулы worker;
- из очереди
script.default— распределяются между общими экземплярами worker.
Настроить пулы worker
Настройка пулов worker состоит из двух этапов:
Шаг 1. Задать конфигурацию пулов worker
Чтобы создать отдельный пул worker для определённых скриптов, в файле values-elma365.yaml задайте его конфигурацию. В ней определите критерии отбора скриптов, параметры автомасштабирования экземпляров в пуле, а также время ожидания выполнения скриптов.
Для этого:
- Создайте резервную копию файла
values-elma365.yaml, заполненного при установке ELMA365. Это требуется перед редактированием, так как некорректная настройка параметров может привести к сбоям в работе приложения ELMA365. - В конфигурационном файле
values-elma365.yamlперейдите к блокуglobalи заполните параметры в секцииworkerPoolCfg.
начало примечание
Пример настройки параметров в секции workerPoolCfg
global:
workerPoolCfg:
pools:
namespacepool: # Наименование пула задаётся в свободной форме строчными латинскими буквами и цифрами длиной до 20 символов
sources: # Фильтры для отбора скриптов, которые будут распределяться на пул
- company: head
operation: execute
type: process
namespace: crm
code: createlead
autoscaling: # Параметры автомасштабирования для пула
enabled: true
type: "hpa"
minReplicas: 1
maxReplicas: 9
options: # Дополнительные опции для пула — таймауты
defaultScriptTimeoutSeconds: 180
maxScriptTimeoutSeconds: 1200
конец примечание
Для этого укажите:
- Идентификатор пула (
pools) — наименование пула worker. Задайте пользовательское название для пула, используя строчные латинские буквы и цифры длиной до 20 символов. - Источники запросов на обработку скриптов (
sources).
Когда в системе запускается скрипт, автоматически генерируется запрос на его обработку. В этом запросе передаются параметры скрипта. Укажите, по каким параметрам отбирать скрипты для настраиваемого пула:
сompany— имя компании в кластере;operation— тип запроса: публикация или исполнение скрипта. Добавьте одно из доступных значений:compileилиexecute. Например, обрабатывать только публикацию скриптов, указав конфигурацию:
workerPoolCfg:
pools:
publishpool:
sources:
- operation: compile
type— структура системы, из которой направлен запрос на обработку скрипта. Укажите одно из доступных значений:process— бизнес-процесс;customactivity— действие БП в модуле;widget— виджет;eventhandler— обработчик события;apihandler— обработчик методов API;
namespace— название пространства имён для структуры системы, из которой направлен запрос на обработку скрипта. Например, для раздела — это его код;code— код структуры системы, из которой направлен запрос на обработку скрипта. Например, код бизнес-процесса, действия БП в модуле и т. д.
Чем больше условий задано, тем точнее отбор скриптов для пула. Если параметр не заполнен, он не учитывается.
Примеры конфигураций для отбора скриптов
workerPoolCfg:
workerPoolCfg:
workerPoolCfg:
workerPoolCfg: |
- Параметры для автомасштабирования пула (
autoscaling).
В зависимости от нагрузки на пул worker, задайте настройки для его автоматического масштабирования. На их основе в оркестраторе Kubernetes будет создаваться указанное количество экземпляров worker. Для этого заполните параметры в блокеautoscaling:
enabled— значениеtrueвключает автомасштабирование;type— выбор метода автомасштабирования. Определите, какой инструмент использовать. Доступные значения:"hpa"— Horizontal Pod Autoscaler. Используется по умолчанию. Не требуется дополнительных настроек;"keda"— Kubernetes Event-driven Autoscaling. Используется, если настроен дополнительный компонент KEDA;
minReplicas— минимальное количество экземпляров в пуле;maxReplicas— максимальное количество экземпляров в пуле.
- Дополнительные опции для пула (
options).
Для серверных скриптов существует время ожидания их исполнения — таймаут. Если скрипт не выполнился в течение этого времени, он прерывается. Таким образом работа пула не блокируется из‑за долгого выполнения скриптов. Для установки таймаутов в секцииoptionsзаполните параметры:
defaultScriptTimeoutSeconds— стандартное время ожидания исполнения скрипта в секундах. После истечения этого времени исполнение скрипта прерывается;maxScriptTimeoutSeconds— максимальное время ожидания исполнения скрипта в секундах. После истечения этого времени исполнение скрипта прерывается.
Шаг 2. Применить настроенную конфигурацию пулов worker
Когда в файле values-elma365.yaml вы задали конфигурацию для отбора скриптов и для автомасштабировния пулов worker, примените обновлённые параметры.
Пример настройки отдельного пула для обработки скриптов бизнес-процесса
Допустим, в файле values-elma365.yaml мы настроили отдельный пул worker для бизнес-процесса по созданию лида в разделе CRM:
workerPoolCfg:
pools:
processpool: # Идентификатор пула задаётся в свободной форме строчными латинскими буквами и цифрами длиной до 20 символов
sources:
- company: head # Имя компании
namespace: crm # Код раздела, на уровне которого создан бизнес-процесс
operation: execute # Тип операции — исполнение скриптов
type: process # Отбираются только скрипты из бизнес-процесса
code: createlead # Отбираются только скрипты с кодом бизнес-процесса для создания лида
autoscaling:
enabled: true
type: "hpa"
minReplicas: 1
maxReplicas: 9
После применения этих настроек автоматически создались:
- в Kubernetes пул worker;
- в RabbitMQ отдельная очередь для этого пула, чтобы распределять запросы на обработку скриптов по бизнес-процессу для создания лида.
Когда в системе запустился процесс для создания лида, автоматически сгенерировался запрос на обработку скрипта. В этом запросе передались данные:
- компания:
head; - операция:
execute; - тип структуры системы:
process; - пространство имён структуры системы:
crm; - код структуры системы:
createlead.
Поскольку мы указали эти данные в настройках выделенного пула worker, запрос автоматически ставится в отдельную очередь этого пула и выполняется в нём.
Удалить созданный пул worker
Чтобы удалить настроенный пул worker, в файле values-elma365.yaml уберите ранее заданные параметры и примените их. После этого в RabbitMQ все необработанные запросы на обработку скриптов из его очереди перенаправятся в очередь script.default. Из неё распределятся на общие экземпляры worker.