В 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.