ELMA365 On-Premises > Администрирование ELMA365 Enterprise / Настройка отдельных пулов worker для обработки скриптов

Настройка отдельных пулов worker для обработки скриптов

В ELMA365 за валидацию, компиляцию и исполнение серверных скриптов отвечает сервис worker. Чтобы повысить его производительность, вы можете выделить отдельные пулы исполнения:

  • для структур системы, где инициируются скрипты. Например, для скриптов виджетов или определённого бизнес-процесса;
  • для отдельных типов запросов на обработку скриптов. Например, для их публикации или исполнения.

начало внимание

Настройка отдельных пулов worker доступна для поставки ELMA365 On‑Premises Enterprise начиная с версии 2025.6.

конец внимание

В статье рассмотрим, как в системе:

Алгоритм обработки скриптов в сервисе worker

Для распределения нагрузки на сервис worker используются инструменты:

  • Kubernetes — обеспечивает масштабирование экземпляров сервиса, в которых выполняются скрипты;
  • RabbitMQ — выступает в качестве маршрутизатора, распределяя запросы на выполнение скриптов между доступными экземплярами worker.

При стандартной конфигурации worker запросы на обработку скриптов поступают в RabbitMQ и распределяются в рамках общей очереди. Это повышает нагрузку на сервис и замедляет выполнение скриптов.

Настройка отдельных пулов для скриптов определённого типа помогает оптимизировать распределение этой нагрузки. После такой настройки :

  • в Kubernetes передаются данные, по которым будут разворачиваться пулы;
  • в RabbitMQ автоматически добавляется отдельная очередь для каждого настроенного пула.

Рассмотрим подробнее, как происходит маршрутизация запросов на скрипты:

  1. Определение ключа маршрутизации.

При запуске скрипта автоматически формируется запрос, содержащий его параметры: имя компании, публикация или исполнение скрипта, структура системы, из которой направлен скрипт, и т. д. На основе этих данных вычисляется ключ маршрутизации:

  1. Распределение запросов.

Запросы с присвоенным ключом поступают в RabbitMQ, где происходит их маршрутизация:

    • если вы задали для отдельных скриптов свои пулы worker, в RabbitMQ автоматически создаются очереди для таких пулов. Запросы распределятся в эту очередь по присвоенному ключу;
    • запросы с ключом default  попадают в общую очередь script.default.
  1. Обработка запросов.

Из очередей запросы распределяются между экземплярами worker:

    • из выделенных очередей запросы на обработку скриптов передаются на настроенные пулы worker;
    • из очереди script.default — распределяются между общими экземплярами worker.

Настроить пулы worker

Настройка пулов worker состоит из двух этапов:

  1. Задать конфигурацию пулов worker.
  2. Применить настроенную конфигурацию.

Шаг 1. Задать конфигурацию пулов worker

Чтобы создать отдельный пул worker для определённых скриптов, в файле values-elma365.yaml задайте его конфигурацию. В ней определите критерии отбора скриптов, параметры автомасштабирования экземпляров в пуле, а также время ожидания выполнения скриптов.

Для этого:

  1. Создайте резервную копию файла values-elma365.yaml, заполненного при установке ELMA365. Это требуется перед редактированием, так как некорректная настройка параметров может привести к сбоям в работе приложения ELMA365.
  2. В конфигурационном файле 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

конец примечание

Для этого укажите:

  1. Идентификатор пула (pools) — наименование пула worker. Задайте пользовательское название для пула, используя строчные латинские буквы и цифры длиной до 20 символов.
  2. Источники запросов на обработку скриптов (sources).
     
    Когда в системе запускается скрипт, автоматически генерируется запрос на его обработку. В этом запросе передаются параметры скрипта. Укажите, по каким параметрам отбирать скрипты для настраиваемого пула:
    • сompany — имя компании в кластере;
    • operation — тип запроса: публикация или исполнение скрипта. Добавьте одно из доступных значений: compile или execute. Например, обрабатывать только публикацию скриптов, указав конфигурацию:

workerPoolCfg:
  pools:
    publishpool:
      sources:
      - operation: compile

    • type — структура системы, из которой направлен запрос на обработку скрипта. Укажите одно из доступных значений:
      • process — бизнес-процесс;
      • customactivity — действие БП в модуле;
      • widget — виджет;
      • eventhandler — обработчик события;
      • apihandler — обработчик методов API;
    • namespace — название пространства имён для структуры системы, из которой направлен запрос на обработку скрипта. Например, для раздела — это его код;
    • code — код структуры системы, из которой направлен запрос на обработку скрипта. Например, код бизнес-процесса, действия БП в модуле и т. д.

 

Чем больше условий задано, тем точнее отбор скриптов для пула. Если параметр не заполнен, он не учитывается.

Примеры конфигураций для отбора скриптов

  1. Параметры для автомасштабирования пула (autoscaling).
     
    В зависимости от нагрузки на пул worker, задайте настройки для его автоматического масштабирования. На их основе в оркестраторе Kubernetes будет создаваться указанное количество экземпляров worker. Для этого заполните параметры в блоке autoscaling:
    • enabled — значение true включает автомасштабирование;
    • type — выбор метода автомасштабирования. Определите, какой инструмент использовать. Доступные значения:
      • "hpa" Horizontal Pod Autoscaler. Используется по умолчанию. Не требуется дополнительных настроек;
      • "keda" Kubernetes Event-driven Autoscaling. Используется, если настроен дополнительный компонент KEDA;
    • minReplicas — минимальное количество экземпляров в пуле;
    • maxReplicas — максимальное количество экземпляров в пуле.
  1. Дополнительные опции для пула (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.