[ELMA3] Разделение серверов в кластере на фронт и бэк

Внимание!
Данная статья актуальна только для версий системы 3.15.0 и выше.

В версии системы 3.15.0 реализована возможность специализировать узлы фермы на определенные работы: в зависимости от ситуации можно полностью отключить выполнение фоновых операций на отдельных узлах (в том числе и выполнение элементов очереди выполнения процессов) и одновременно с этим некоторые узлы фермы можно оставить на обработку веб-запросов.

Настройка узла на выполнение только фоновых операций (без веб-запросов)

Для того чтобы настроить узел на выполнение только фоновых операций, нужно:

  • вывести узел фермы из балансировщика (чтобы на него не распределялись веб-запросы);
  • настроить необходимые параметры в файле settings.config.
Настройка settings.config для узла фермы, который обрабатывает фоновые операции

Планировщик на таких узлах должен быть включен и правильно настроен. Следующие параметры планировщика можно настраивать:

  • Enabled – включение/отключение планировщика;
  • PoolSize – максимальный размер пула для планировщика (максимальное количество потоков);
  • Interval – интервал (в секундах) между выполнением операций;
  • ProcessingOnceTasksCount – максимальное число одиночных (не периодических) задач планировщика, выбираемых для исполнения на каждую итерацию;
  • PeriodicEnabled – включены ли периодические задачи планировщика;
  • PoolSize – максимальный размер пула для планировщика, работающего в цикле (максимальное количество потоков);
  • Timeout – время жизни результата выполнения задачи планировщика. По истечении задача в статусе "Выполняется" считается не активной. Значение по умолчанию 720.

После настройки планировщика нужно настроить параметры выполнения очереди исполнения процессов:

  • QueuePoolSize – максимальный размер пула очереди Workflow (максимальное количество потоков);
  • QueueTimeout – максимальное время (в секундах) выполнения элемента очереди;
  • QueueLockTimeout – отвечает за блокировку сущности IWorkflowQueueItem с ожиданием в течение указанного времени (в секундах);
  • WaitNextTaskTime – время ожидания, пока для экземпляра процесса есть запланированные элементы очереди.
  • QueuePoolScale – коэффициент к размеру пула очереди для получения элементов очереди из базы (по умолчанию 4). Данный коэфиуиент влияет на выборку элементов из очереди в очередном цикле выборки:

"Кол-во для выборки" = ( Workflow.QueuePoolSize * Workflow.QueuePoolScale ) - "Сколько осталось в очереди"

  • ImmediatelyExecuteItem – параметр, который определяет сразу выполнять вновь создаваемый WorkflowQueueItem на том же сервере в новом фоновом потоке или положить в очередь на общих основаниях. Данная настройка позволяет управлять загрузкой серверов в кластере и выделять отдельные бэк-сервера для обработки очереди процессов.

При установке в "false" веб-запрос на исполнение или запуск процесса НЕ порождает новый поток на текущем сервере для выполнения процесса.

  • DeleteInstanceInfoState – удалять состояние State сущности экземпляра процесса WorkflowInstance при завершении процесса. При переходе из статуса Запущен в статусы: Завершен, Прерван пользователем, Прерван из-за ошибки.
  • Timeout – таймаут потока обработки пула очереди Workflow [мс]. Значение по умолчанию 50мс.
  • System.Timeout – таймаут брокера пула потоков Workflow [мс]. Значение по умолчанию 50мс.
  • Timeout – таймаут потока обработки элемента очереди Workflow [мс]. Значение по умолчанию 50мс.
  • System.Timeout - таймаут брокера пула потоков обработки элемента очереди Workflow [мс]. Значение по умолчанию 50мс.
Внимание!
Для обеспечения работы узлов, которые обрабатывают только фоновые операции, в обязательном порядке на всех узлах фермы должна быть установлена настройка Workflow.ImmediatelyExecuteItem = false

Настройка узла фермы, который обрабатывает только веб-запросы

Настройки в файле settings.config

В настройках в обязательном порядке нужно выключить планировщик через настройку Scheduler.Enabled.

На узлах также должно быть отключено выполнение очереди исполнения процессов, это делается установкой в "0" параметра Workflow.QueuePoolSize.