вторник, 11 августа 2009 г.

Настройка подсистемы управления процессами (Workflow)

Подсистема "Управление процессами" содержит ряд настроек, которые касаются производительности. Задача установки оптимальных параметров возникает довольно часто. В данной статье описано из каких критериев нужно исходить при выборе значений.

Значение параметров приведено в руководстве администратора.
Время между тиками (сек) — пауза между периодами активности сервера бизнес-процессов («тиками»); по умолчанию этот интервал равен 10 секундам, при большом количестве активных процессов рекомендуется его увеличить;

Максимальный объем памяти (Мб), который может использовать при работе сервер управления процессами; по умолчанию его значение равно 512 Мб;

Время ожидания выполнения функции в потоке (сек) — период задержки перед повторным исполнением функции в циклическом бизнес-процессе; этот период используется, если в настройках функции в поле "Период опроса" не указан другой интервал;

Время тика — продолжительность активности сервера бизнес-процессов;

Функций за тик — количество функций одного бизнес-процесса, обрабатываемых сервером бизнес-процессов за один период активности;

Число процессов в одном пакете — максимальное количество бизнес-процессов в одной «порции» (пакете), которые обрабатываются одновременно; общая продолжительность тика зависит от количества пакетов, однако размер пакета следует ограничивать соразмерно с объемом оперативной памяти компьютера;

Размер пула шлюза, где пул шлюзов — это совокупность параллельно работающих экземпляров шлюзов одного типа с одинаковыми настройками, выделяемых для обработки процессов;

Размер пула сессий, где пул сессий — это совокупность параллельно работающих сессий с одинаковыми настройками подключения, выделяемых для обработки процессов;

Время ожидания выполнения метода Storage Server (сек) — период ожидания ответа сервера, после которого возвращается сообщение об ошибке (Сервер недоступен»).

Оценивая возможности подсистемы Workflow необходимо учитывать, что разные функции дают разную нагрузку на систему. Например, ф-ции, которые работают с карточками или любыми данными в базе выполняют соединение с сервером DocsVision и скорость их работы определяется так же производительностью сервера (выполнение запросов в базе, обработка результатов и т.п.). А функции сценарий, практически не задействуют сервер и БД (разве, что, для чтения настроек). Т.о. функция "Мониторинг DocsVision" может выполняться долго, если в поисковом запросе участвует много карточек. А функция задание может выполниться мгновенно если ожидает изменений в карточке.

Поэтому, довольно трудно дать формулу, в которую можно подставить число экземпляров, частоту процессора, количество ядер и объем ОЗУ, и в результате получить значение параметров.

Какие же профили можно использовать для решения конкретных задач?

1. Если необходимо более часто брать в обработку процессы - уменьшаем число функций за тик. Максимально частой обработке новых процессов соответствует 1 функция за тик (при неизменном желаемом времени тика).
Т.е. чтобы проходило меньше времени между тем как пользователь или функция подпроцесс запустит новый процесс, и тем моментом, как функция "Старт" в них станет обработанной.

2. Если хочется максимально быстро обрабатывать "длинные" процессы - увеличиваем число функций за тик. Например до 50-100. Но тут уже возникает опасность постоянной обработки какого-нибудь цикла, который не несет полезной нагрузки (например, какая-нибудь функция зацикленная на себя при помощи связи по ошибке)

3. Чтобы не зависеть от функций, которые долго выполняются или вообще подвисают на какой-нибудь операции с внешней системой, можно уменьшить "Время ожидания функции в потоке". С 900 секунд, до 180.

Параметры справедливы для машины с любым количеством ядер. Ну разве что не стоит выставлять размер пакета процессов меньше, чем число потоков, которые система может обрабатывать параллельно.
(Чисто теоретически это число вычислительных ядер в системе. Если поддерживается HyperThreading - то число ядер умножается на 2. Т.е. в принципе, в современном однопроцессорном четырехядерном сервере может параллельно обрабатываться до 8 потоков. А сверху число потоков ограничено максимальным размером пула потоков: 64 т.е. ставить размер пакета больше 64 тоже смысла нет)

Средними настройками, подходящими под большинство решений, являются:
  • Время между тиками – от 2 до 10 с;
  • Количество функции за тик – от 5 до 15;
  • Число процессов в пакете- от 10 до 40;
  • Время ожидания выполнения функции в потоке – 900 с;
  • Время ожидания выполнения метода Storage Server – 600 c;
  • Время тика – 300 с;
  • Максимальный объем памяти – от 512 до 1536 Mb.

4 комментария:

  1. Спасибо, сделал для себя некоторые выводы.

    Вопрос по параметру "Время ожидания выполнения функции в потоке (сек)". Сказано, что этот параметр определяет период задержки между повторным выполнением функции кубика. Значение по умолчанию: 900 сек. Значит ли это, что если кубик "мониторинг DV" осуществил поиск по сложному какому-то запросу, который выполняется секунд 30, и ничего не нашёл, то повторный поиск карточек произойдёт только через 15 минут, если в поле период опроса стоит 0 минут?

    Вроде бы повторный поиск запускается сразу же безо всякого периода, поэтому если поиск в мониторинге сложный, то WF начинает сииильно тормозить, т.к. каждый тик выполняется ооочень долго. Для избежания таких ситуаций в случае неудачного поиска, я передаю управление функции расписания, чтобы как раз вставить таймаут между поисками.

    ОтветитьУдалить
  2. На самом деле, в руководстве дана неверная формулировка, которая приводит к непониманию - это мы поправим в ближайшее время.

    Это параметр - допустимое время выполнения функции. При привышении этого значения, ф-ция считается превысившей допустимое время выполнения и фиксируется таймаут.

    ОтветитьУдалить
  3. Михаил, вот просветите ещё по параметру размер пула сессий. Т.е. получается сколько сессий, столько одновременно и тиков выполняется сервером Workflow? А иначе как объяснить в логе Workflow сообщения вида:
    ProcessManager: 22.10.2009 9:57:52 Execution takes 15,9217731 seconds, processed 82 functions in 23 active instances

    Если параметр функций за тик равен 15?

    ОтветитьУдалить
  4. Пул сессий никак не связан с тиком. Это набор готовых подключений к серверу DocsVision. Функция может выбрать уже созданное подключение из пула, либо создать новое, если верхний лимит не достигнут

    ОтветитьУдалить