Руководство по системному администрированию#
Термины и сокращения#
Термин |
Определение |
|---|---|
АС |
Автоматизированная система |
АРМ |
Автоматизированное рабочее место |
БД |
База данных |
Дросселирование нагрузки |
принудительное ограничение работы приложения, применяемое для защиты от чрезмерной нагрузки и потери данных |
ЕИП |
Единое информационное пространство |
Зона (Zone) |
Отдельный кластер серверов для распределения нагрузки на приложение |
ИФТ |
Интеграционно-функциональное тестирование |
НТ |
Нагрузочное тестирование |
ПСИ |
Приемо-сдаточные испытания |
ПЖ |
Сервис Прикладной журнал отвечающий за распределение нагрузки |
СУДИР |
Сервис аутентификации (система управления доступом к информационным ресурсам) |
Точки персистирования |
это точки сохранения в БД информации для внутреннего использования Engine |
ТУЗ |
Технологическая учетная запись |
bpmn модели |
Модели процессов в нотации и формате .bpmn |
MMT |
Протокол межмодульного транспорта |
StandIn |
Резервный контур серверов для обеспечения надежности БД и защиты от перегрузок. Надежность обеспечивается за счет выделения дополнительной БД, на которую можно выполнить переключение в случае технологических работ или отказа основной БД. Прикладная репликация осуществляется посредством платформенного сервиса Прикладной журнал |
Сценарии администрирования#
Загрузка моделей процессов#
Фабрики (потребители), работающие с Engine Platform V Flow, должны самостоятельно загружать (деплоить) модели в Engine.
Загрузка моделей на стенд Engine при автоустановке своей поставки#
Шаги:
Выполнить начальную настройку ТУЗ Jenkins Credential. Если стенд:
ПСИ или ПРОМ, то:
Создать ТУЗ в домене Альфа;
Создать Jenkins Credential с этим ТУЗ'ом;
Запросить права для ТУЗ'а на запуск job по развертыванию моделей;
Тестовый (ИФТ, НТ) – начальные настройки уже выполнены (переходим к следующему пункту);
Прописать шаг по развертыванию моделей в job автоустановки. Настройки в файлах actions.xml (на уровне АС) и smoke.conf (на уровне стенда);
Выполнить вызов job автоустановки.
Загрузка моделей процессов с помощью Jenkins job#
Jenkins job Deploy_Models_By_Zones/Deploy_Models_Cred
Развертывание моделей на стенды Engine выполняется только через вызов Jenkins job.
Целевой вариант: развертывание моделей с использованием ТУЗ на заданные ММТ-зоны.
Права на запуск job развертывания моделей выдаются ТУЗ.
На Тестовых стендах используется общая ТУЗ, находящаяся в общем Jenkins Credential. На ПСИ и ПРОМ у каждой фабрики своя ТУЗ, прописанная в Jenkins Credential фабрики.
Загрузка моделей вручную на стенды Engine не выполняется.
Формат поставки моделей#
Есть два варианта предоставления моделей для загрузки:
Архив с моделями входит в поставку, при этом:
Дистрибутив соответствует формату поставки;
Архивы с моделями в дистрибутиве должны находиться в архиве:
other/bpmnModels*.zip, при этом:ограничение на размер каждого найденного архива с моделями
other/bpmnModels*.zip: 1'048'576 байт;ограничение на количество архивов с моделями по маске
other/bpmnModels*.zip: нет.
Дистрибутив выложен на Nexus SBRF;
Только при соблюдении этих условий job сможет успешно извлечь и обработать модели из поставки;
Модели (bpmn-файлы) запакованы в архив, при этом:
Дистрибутив выложен на Nexus SBRF;
Модели (bpmn-файлы) находятся на верхнем уровне;
Данный способ можно использовать для отладки, когда вместо всей поставки пересобирается и выкладывается только архив с моделями.
Job развертывания моделей автоматически определяет формат поставки моделей:
Если в архиве по полученной ссылке (
distrib_url) есть файлыother/bpmnModels*.zip, то развертываются все модели из найденных по маске файлов;Иначе модели берутся из корня архива, полученного по ссылке (
distrib_url).
Подготовка для вызова Deploy_Models_By_Zones job#
Данный раздел относится только к ПСИ и ПРОМ стендам.
Для Тестовых стендов (ИФТ, НТ) настройки уже выполнены.
Каждая фабрика для вызова job Deploy_Models_By_Zones должна получить права на его запуск.
Надо понимать, что на каждом Jenkins-сервере существует свой job Deploy_Models_By_Zones.
Поэтому работы на стороне Jenkins'а (создание Credential и предоставление прав на запуск job от имени ТУЗ'а) надо выполнять на каждом Jenkins-сервере.
Для этого надо:
Создать ТУЗ для фабрики: Создание ТУЗ в рамках DevOps активностей;
Создать Jenkins Credential с типом
Username with passwordи указать в качествеUsername- вашу ТУЗ; Пример создания сredentialsome_cred, хранящего логин пользователя и его пароль:
Запросить для ТУЗ из Jenkins Credential права на запуск job по развертыванию моделей. В результате ваша ТУЗ получит права на запуск нужного job по развертыванию моделей.
Вызов Deploy_Models_By_Zones/Deploy_Models_Cred job из автоустановки поставки
Если BPM-модели входят в поставку фабрики их можно устанавливать на стенд в виде одного из шагов процедуры автоустановки.
Задать параметры вызова job загрузки моделей.
Для этого в файле smoke.conf (находится в репозитории в папке стенда), в блоке
прописать параметры. Важно: Имя подсистемы (Subsystem) может быть произвольным, но должно совпадать в файлах actions.xml и smoke.conf. Выберите пример в зависимости от способа запуска job:
Вызов job Deploy_Models_By_Zones с использованием ТУЗ. Целевой вариант
Вызов job Deploy_Models_Cred с использованием ТУЗ, без учета ММТ зон. Планируется к выведению
Оформить вызов job загрузки моделей из автоустановки.
Для этого в файле actions.xml, в блок
добавить шаг по загрузке моделей. Важно: Имя подсистемы (Subsystem) может быть произвольным, но должно совпадать в файлах actions.xml и smoke.conf. Выберите пример в зависимости от способа запуска job:
Вызов job Deploy_Models_By_Zones с использованием ТУЗ. Целевой вариант
Вызов job Deploy_Models_Cred с использованием ТУЗ, без учета ММТ зон. Планируется к выведению
Далее необходимо запустить ваш job автоустановки (в автоматическом или ручном режиме).
На шаге install_BPM_models будет выполнено обращение к job Deploy_Models_By_Zones от имени и с правами указанного ТУЗ (в рекомендуемом варианте запуска).
Для тестовых стендов будет использоваться Jenkins Credentials BPM_models_cred, в котором используется ТУЗ sbt-bpms-tech.
Для ПСИ и ПРОМ стендов будут использоваться Jenkins Credentials и ТУЗ, созданные для каждой фабрики.
В job будут переданы:
Имя стенда (параметр
stand);Ссылка на дистрибутив с моделями (параметр
distrib_url);Список зон, на который будет выполняться загрузка моделей (параметр
zones).
В результате модели будут развернуты на указанный стенд Engine.
Вызов job Deploy_Models_By_Zones из произвольного job
Вызывать job Deploy_Models_By_Zones можно не только из EIP-автоустановки, но и из произвольных job.
Сделать это можно с помощью Groovy-кода в pipeline и вызова triggerRemoteJob через генератор кода.
Пример:
node ("masterLin") {
model_url='https://sbrf-nexus.ca.sbrf.ru/nexus/service/local/repositories/Nexus_PROD/content/Nexus_PROD/CI00642471_BPM/TESTMODELS/1.0.3/TESTMODELS-1.0.3-distrib.zip'
stand="BOSTON"
triggerRemoteJob (
remoteJenkinsUrl: 'https://sbt-qa-jenkins.ca.sbrf.ru/jenkins',
job: 'OASABP/PPRB_BPM_UBP/Deploy_Models_By_Zones',
auth: CredentialsAuth(credentials: 'id_of_your_Jenkins_credential'),
parameters: "stand=${stand}\ndistrib_url=${model_url}",
enhancedLogging: true,
maxConn: 1
)
}
В качестве значения параметра Credentials укажите ID созданного Jenkins Credentials. Не путайте с логином ТУЗ, который прописан внутри Jenkins Credentials.
Автоматическая загрузка моделей на тестовых стендах Engine после очистки базы данных.#
Периодически на тестовых стендах Engine выполняется очистка хранилища моделей (Oracle база данных). В этом случае после очистки хранилища, модели надо заново загрузить.
Администраторы Engine после очистки хранилища запускают специальный Jenkins job. Этот job вызывает Jenkins job фабрик, работающих со стендами BPM.
Назначение job фабрик:
выбрать нужную поставку с моделями процессов этой фабрики (потребителя);
установить ее на заданный стенд Engine.
Установка выбранных моделей выполняется через job Deploy_Models_By_Zones.
Другими словами, Jenkins job внешних команд реализуют логику выбора – какую именно модель/модели загрузить на стенд. И затем вызывают загрузку выбранных моделей.
Действия после очистки хранилища
Действия команд фабрик по интеграции с job автоматической загрузки моделей на стенд Engine после очистки хранилища:
Создать в Jenkins job. В качестве устанавливаемой поставки фабрики с моделями процессов можно использовать и фильтры. В этом случае отпадает потребность в актуализации ссылки в job фабрик;
Дать права на запуск своего job, если требуется.
Управление конфигурацией#
Настройка режима работы#
Предусмотрено 2 режима предоставления услуг Flow:
Без поддержки мультитенантности;
С поддержкой мультитенантности - Один потребитель в одной инсталляции (multiinstance);
Режим работы определяется переменной multitenancy.mode в файле application.yml:
Режим работы |
multitenancy.mode |
|---|---|
Без поддержки мультитенантности |
off |
multiinstance |
singletenant |
Для режима multiinstance файл конфигурации должен содержать заполненные переменные:
multitenancy.resourceName - идентификатор ресурса потребителя;
multitenancy.commonName - commonName из сертификата потребителя.
При валидации конфигурационного файла, должны быть соблюдены следующие правила:
Режим работы Flow |
Режим работы Аудит |
Режим работы сервиса авторизации |
Конфигурация переменных |
|---|---|---|---|
Без поддержки мультитенантности |
Без поддержки мультитенантности |
Без поддержки мультитенантности |
multitenancy.mode - off audit.multitenant - false auth.multitenant - false |
multiinstance |
Без поддержки мультитенантности/С поддержкой мультитенантности |
С поддержкой мультитенантности |
multitenancy.mode - singletenant audit.multitenant - false/true auth.multitenant - true multitenancy.resourceName - заполнен multitenancy.commonName - заполнен |
Если валидация не прошла успешно, приложение не запускается. В лог приложения добавляется соответствующая запись.
Настройка аутентификации#
Режимы авторизации описаны в документе "Руководство разработчика" п. Авторизация и аутентификация пользователя в системе.
Dev режим#
Для Dev режима аутентификационные параметры настраиваются в файле application.yml в блоке auth.
Доступны настройки:
Адреса ресурсов для получения и обновления токена;
Время жизни токена/refresh токена.
auth:
refreshToken:
path: '/user/auth/refresh'
token:
path: '/user/auth/token'
accessLifetime: 3000
refreshLifetime: 86400
Режим Keycloak#
Аутентификация с помощью сервиса Keycloak в режиме Direct Access Grants настраивается в файле application.yml в блоке auth.
Доступны настройки:
Адреса ресурсов для получения и обновления токена;
Время жизни токена/refresh токена.
auth:
refreshToken:
path: 'Ресурс получения токена'
token:
path: 'Ресурс обновления токена'
keycloak:
realm: 'Название Realm'
auth-server-url: 'URL сервера аутентификации'
resource: 'Имя ресурса'
credentials:
secret: 'Секрет сервера авторизации'
В режиме Keycloak к ролям ресурсов добавляется префикс с именем ресурса.
Например, если в токене ролевая модель выглядит как:
{
"resources": {
"res1": [
"role1",
"role2"
],
"res2": [
"role1",
"role3"
]
}
}
В приложении роли будут следующие: res1_role1, res1_role2, res2_role1, res2_role3.
Режим ОСА#
Аутентификация с помощью сервиса ОСА в режиме настраивается в файле application.yml в блоке auth.
Доступны настройки:
auth.multitenant - true/false - режим работы ОСА.
auth.multitenant: true
Очистка истории#
Устаревшие данные в таблицах истории, по выполненным процессам, занимают место в БД и их необходимо периодически очищать.
В качестве концепции решения было выбрано декларативное секционирование.
Достоинства декларативного подхода
Триггеры больше не нужны:
Вставка проходит быстрее
Появилось автоматическое перенаправление вставляемых данных в правильную секцию
Генерируется ошибка в случае направления в неподходящую секцию
При работе с секциями:
Можно присоединять/отсоединять секции
Есть явные ограничения целостности секций
Возможно секционирование по выражению в ключе разбиения
Можно создавать подсекции
Описание алгоритма разбиения таблиц на партиции и очистка устаревших записей
Созданы скрипты для разбиения таблиц с префиксом Historic и таблицы BpmsByteArrayEntityImpl на партиции
Алгоритм создания скрипта:
Создано поле cdate (поле, по которому идет партиционирование таблиц), которому присвоено значение даты старта процесса, либо, если это новая запись, то текущая дата.
Сгенерированы партиции по cdate на пол года вперед, т.к. нет функции автоматического создания партиций для записей выходящих за максимальное значение границы партиции.
Все глобальные индексы переделаны на локальные.
Созданы скрипты для создания новых процедур, которые будут нарезать будущие партиции для таблиц уже партиционированных с префиксом Historic и таблицы BpmsByteArrayEntityImpl по cron.
Созданы скрипты для создания новых процедур, которые будут удалять целиком партиции по глубине очистки, для таблиц уже партиционированных с префиксом Historic и таблицы BpmsByteArrayEntityImpl по cron.
Если включена опция engine.cleaner.transferRunningEnable, то перенести данные по незавершенным процессам в партицию дата очистки + 7 дней, что гарантирует то, что они не будут удалены во время очистки
Удалены будут партиции, которые соответствуют условию: текущее время - глубина очистки > времени старта процесса!!!
Создана таблица InsertLockJobEntityImpl, которая блокируется на запись целиком, в то время пока идет вставка строки с job.
В каждый момент в таблице может содержаться только одна запись с job на очистку истории.
Создан scheduler, необходимый для вставки job insertLockJob для очистки истории, которые будут вызывать процедуры очистки
Создан scheduler, необходимый для вызова процедур по созданию партиций на будущее
Для настройки очистки внутренних таблиц Engine, необходимо указать соответствующие опции в файле application.yml.
Параметр |
Название опции в .yaml |
Рекомендуемое значение |
Значение по умолчанию |
|---|---|---|---|
Вкл/выкл очистку истории |
engine.cleaner.enable |
true |
false |
Настройка глубины хранения в сутках |
engine.cleaner.depth |
30 |
30 |
Настройка очистки переменных контекста процесса |
engine.cleaner.byteArrayCleanEnable |
true |
true |
Настройка расписания автоочистки (рекомендуется ставить на период наименьшей нагрузки) |
engine.cleaner.cron |
0 0 2 * * SAT |
0 0 2 * * SAT |
Вкл/выкл перенос процессов в статусе RUNNING в новую партицию (чтобы незавершенные процессы не очистились) |
engine.cleaner.transferRunningEnable |
true |
true |
Технические параметры очистки |
engine.cleaner.mode |
BPMSHISTORICIDENTITYLINKENTITYIMPL, BPMSHISTORICEXTRAATTRIBUTEENTITYIMPL, BPMSHISTORICVARIABLEINSTANCEENTITYIMPL, BPMSHISTORICACTIVITYINSTANCEENTITYIMPL, HISTORICRETRYPOLICYENTITYIMPL, BPMSHISTORICTASKINSTANCEENTITYIMPL, BPMSBYTEARRAYENTITYIMPL, BPMSHISTORICDETAILENTITYIMPL, BPMSHISTORICPROCESSINSTANCEENTITYIMPL |
BPMSHISTORICIDENTITYLINKENTITYIMPL, BPMSHISTORICEXTRAATTRIBUTEENTITYIMPL, BPMSHISTORICVARIABLEINSTANCEENTITYIMPL, BPMSHISTORICACTIVITYINSTANCEENTITYIMPL, HISTORICRETRYPOLICYENTITYIMPL, BPMSHISTORICTASKINSTANCEENTITYIMPL, BPMSBYTEARRAYENTITYIMPL, BPMSHISTORICDETAILENTITYIMPL, BPMSHISTORICPROCESSINSTANCEENTITYIMPL |
Настройка расписания автоматического создания партиций |
engine.cleaner.cronForCreatingPartitions |
0 0 2 * * SAT |
0 0 2 * * SAT |
Количество дней, для которых необходимо создать секции по неделям |
engine.cleaner.numberOfDaysToCut |
180 |
180 |
Интервал сканирования сбрасывания lockExpirationTime и lockOwner для Insert Lock Jobs |
engine.resetExpiredInsertLockJobsInterval |
10000 |
10000 |
Настройка дросселирования нагрузки#
Дросселирование нагрузки – это принудительное ограничение работы приложения, применяемое для защиты от чрезмерной нагрузки и потери данных.
В процессе оценки загруженности анализируются:
Пул подключений к БД;
Пул потоков исполнения процессов.
Для оценки загруженности используется рассчитанное процентное соотношение текущего значения подключений или потоков к заданному максимальному значению.
Дросселирование нагрузки работает в двухфазном режиме:
первая фаза - ввод ограничений на создание новых подключений к БД или новых потоков исполнения процессов;
вторая фаза - сброс части подключений или потоков находящихся в работе.
Для настройки дросселирования нагрузки в Engine необходимо указать соответствующие опции в файле application.yml блок Engine:
throttlingEnable- Включение/выключение дросселирования нагрузки;throttlingStateIntervalInMilliseconds- интервал проверки работоспособности системы в миллисекундах;executeProcessThreadPoolSize- Размер пула потоков для исполнения экземпляров процессов (числовое значение);executeProcessThreadPoolThrottlingMark- Максимальная утилизация пула процессов - верхняя граница (в процентах) до включения второй фазы дросселирования нагрузки;jdbcPoolThrottlingMark- Максимальная утилизации пулов потоков подключения к БД - верхняя граница (в процентах) до включения второй фазы дросселирования нагрузки;jdbcPoolThrottlingMarkForNewProcesses- Максимальная утилизации пулов потоков подключения к БД - верхняя граница (в процентах) до включения первой фазы дросселирования нагрузки;executeNewProcessThreadPoolThrottlingMark- Максимальная утилизация пула для новых процессов - верхняя граница (в процентах) до включения первой фазы дросселирования нагрузки;executeJobThreadPoolThrottlingMark- Максимальная утилизация пула Job (пока не используется);executeNewJobThreadPoolThrottlingMark- Максимальная утилизация пула для новых Job (пока не используется).
throttlingEnable: false
throttlingStateIntervalInMilliseconds: 5000
executeJobThreadPoolThrottlingMark: 80
executeNewJobThreadPoolThrottlingMark: 50
executeNewProcessThreadPoolThrottlingMark: 50
executeProcessThreadPoolSize: 135
executeProcessThreadPoolThrottlingMark: 80
Размер пула соединений с БД задается в блоке Database файла application.yml.
Настройки персистирования#
Точки персистирования - это точки сохранения в БД информации для внутреннего использования Engine (сохраняется текущее состояние процесса (execution)).
Список возможных точек персистирования:
START_EVENT(StartEvent);
END_EVENT(EndEvent);
SERVICE_TASK(ServiceTask);
SCRIPT_TASK(ScriptTask);
USER_TASK(UserTask);
CATCH_EVENT(IntermediateCatchEvent) - промежуточное событие перехватчик (шаг процесса для которого необходим определенный триггер);
RECEIVE_TASK(ReceiveTask);
DEACTIVATE(Deactivate) - выключение точек персистирования.
Для настройки персистирования в Engine необходимо указать соответствующие опции в файле application.yml.
Настройки персистирования содержатся в блоке Engine:
persistPoints- перечисление точек персистирования для шагов бизнес процессов (для отключения необходимо указатьDeactivate).
persistPoints: 'StartEvent,UserTask,IntermediateCatchEvent,ReceiveTask,ServiceTask'
Настройки подключения к БД#
Для работы Engine Platform V Flow необходимо настроить подключение к БД.
Для настройки подключения к БД необходимо указать соответствующие опции в файле application.yml.
Работа с БД осуществляется через pg_bouncer. Для этого в URL для подключения должен быть указан не порт БД, а порт pg_bouncer.
В данный момент используются две БД master и StandIn.
Приложение может работать с 3мя типами БД:
postgresql(версия не ниже 11.14);oracle(версия не ниже 12);H2(нет требований по версионированию).
Для подключения необходимо указать следующую информацию:
driverClassName- имя класса драйвера;idleTimeout- максимальное время бездействия, по истечении этого времени соединение будет автоматически прервано;jdbcUrl- путь к БД, в качестве порта должен быть указан порт pg_bouncer:prepareThreshold=0 - в конце строки отключает механизм preparedstatement (этот механизм временно не работает сpg_bouncer);
maximumPoolSize- максимальный размер пула соединений;username- имя пользователя для подключения к БД (пароль хранится в разделеsecrets);isolatedLockPool- настройки отдельного пула для записи блокирующих событий (включается настройкойdatabase.isolatedLockPool.enabled):maximumPoolSize- максимальный размер пула соединений;minimumIdle- минимальное количество незанятых соединений пула;idleTimeout- таймаут бездействия пула.
retry- настройки повторных попыток выполнения запросовbackOffPeriod- период между повторными запросами в БДmaxAttempts- количество попыток повторных запросов в БД
database:
master:
driverClassName: org.postgresql.Driver
idleTimeout: 12000
jdbcUrl: jdbc:postgresql://tkled-pprb00112.vm.esrt.cloud.sbrf.ru:5433/bdengine
maximumPoolSize: 250
minimumIdle: 125
username: BPMS
isolatedLockPool:
maximumPoolSize: 40
minimumIdle: 20
idleTimeout: 12000
standin:
driverClassName: org.postgresql.Driver
idleTimeout: 12000
jdbcUrl: jdbc:postgresql://tkled-pprb00112.vm.esrt.cloud.sbrf.ru:5433/bdengine
maximumPoolSize: 250
minimumIdle: 125
username: BPMS
isolatedLockPool:
maximumPoolSize: 40
minimumIdle: 20
idleTimeout: 12000
isolatedLockPool:
enabled: true
retry:
backOffPeriod: 200
maxAttempts: 3
Настройки идемпотентности#
Ключ идемпотентности может быть использован пользователем для запуска нового экземпляра процесса.
В случае когда 2 экземпляра процесса запускаются с одним ключом идемпотентности, повторный запуск не производится, пользователю возвращается уже запущенный ранее процесс.
Если при запуске экземпляра процесса ключ не указан, то каждый раз производится старт нового экземпляра процесса.
В конфигурации системы также задается параметр - окно идемпотентности т.е. временной диапазон в который не допустимо создавать экземпляры процессов с одинаковым ключом идемпотентности;
Настройки идемпотентности содержатся в файле application.yml в блоке Engine:
waitForProcessIdempotenceStarted- время ожидания идемпотентного старта процесса;idempotenceMaxRetryCount- максимально допустимое количество retry при идемпотентном старте;apiMessageLogInterval- окно идемпотентности.
engine:
idempotenceMaxRetryCount: 5
waitForProcessIdempotenceStarted: 200
apiMessageLogInterval: 3600000
Функциональный StandIn#
Для обеспечения возможности проведения технологических работ с БД без недоступности системы используется механизм функционального StandIn. Данный механизм предполагает наличие двух контуров БД (master и StandIn) и один набор подов sberflow-engine и engine-replica, подключенных к обоим контурам БД.
Master контур используется как основной, StandIn контур как резервный. Sberflow engine осуществляет логическую репликацию данных между контурами БД, используя внешний сервис - Прикладной журнал (далее ПЖ).
Для применения векторов изменений на резервной базе используется отдельный экземпляр - engine-replica. Данный экземпляр разворачивается из того же образа, что и основной engine, однако имеет другую конфигурацию, отключающую возможность внешней интеграции, и выполнение job.
Диаграмма взаимодействия контуров: Master & StandIn

Для возможности работы платформы Engine в режиме StandIn, необходимо настроить параметры подключение к БД для обоих экземпляров (sberflow-engine и engine-replica) согласно пункту Настройки подключения к БД.
Включение и настройка StandIn осуществляется через секрет engine-appjounalsettings-secret:
standin.enabled- Вкл/выкл функционального StandIn;standin.func.retryEnabled- Вкл\выкл повторов при получении статуса STANDIN\NORMAL;standin.func.retryCount- Количество попыток повтора получения статуса STANDIN\NORMAL;standin.func.retryBackOffTime- Временной диапазон на повтор получения статуса STANDIN\NORMAL;standin.journal-log-expiration-interval- Время жизни записей в таблице с логом векторов;journal-log-cleaner-schedule- Выражение в формате cron для job очистки записей из таблицы с логом векторов;standin.cloud.client.zoneId- Код зоны в прикладном журнале;standin.cloud.client.kafka- Настройки подключения к kafka прикладного журнала;
Пример конфигурации:
standin:
enabled: true
func:
retryBackOffTime: 5000
retryCount: 18
retryEnabled: false
journal-log-expiration-interval: '5 hour'
journal-log-cleaner-schedule: '0 0 3 * * ?'
cloud:
client:
zoneId: 'SBERFLOW'
stub: false
heartBeatPeriod: 1000
kafka:
bootstrapServers: 10.116.72.65:9092
producerConfig:
"[security.protocol]": SSL
"[ssl.key.password]": ${SSL_KEY_PASSWORD}
"[ssl.keystore.location]": /opt/keystore/kafka/server.keystore.jks
"[ssl.keystore.password]": ${SSL_KEYSTORE_PASSWORD}
"[ssl.truststore.location]": /opt/keystore/kafka/trust.jks
"[ssl.truststore.password]": ${SSL_TRUSTSTORE_PASSWORD}
"[ssl.keystore.type]": JKS
"[ssl.truststore.type]": JKS
"[ssl.protocol]": TLS
"[ssl.enabled.protocols]": TLSv1.2
"[ssl.endpoint.identification.algorithm]": ~
consumerConfig:
"[security.protocol]": SSL
"[ssl.key.password]": ${SSL_KEY_PASSWORD}
"[ssl.keystore.location]": /opt/keystore/kafka/server.keystore.jks
"[ssl.keystore.password]": ${SSL_KEYSTORE_PASSWORD}
"[ssl.truststore.location]": /opt/keystore/kafka/trust.jks
"[ssl.truststore.password]": ${SSL_TRUSTSTORE_PASSWORD}
"[ssl.keystore.type]": JKS
"[ssl.truststore.type]": JKS
"[ssl.protocol]": TLS
"[ssl.enabled.protocols]": TLSv1.2
"[ssl.endpoint.identification.algorithm]": ~
concurrency: 10
groupId: group_1
Настройка spring actuator#
Блок Management содержит настройки spring actuator, необходимые для получения метрик для модуля Контроль инцидентов.
Для настройки доступа к данным spring actuator, необходимо указать порт на котором будут доступны данные: server.port 8888, а также список endpoint по которым необходимо получать данные.
endpoint |
Описание |
|---|---|
auditevents |
Предоставляет информацию о событиях аудита для текущего приложения. Требуется bean AuditEventRepository. |
beans |
Отображает полный список всех компонентов Spring в приложении. |
caches |
Открывает доступные кеши. |
conditions |
Показывает условия, которые были созданы для классов конфигурации и автоконфигурации, а также причины, по которым они совпадают или не совпадают. |
configprops |
Отображает упорядоченный список @ConfigurationProperties. |
env |
Показывает свойства от Spring's ConfigurableEnvironment. |
flyway |
Показывает все примененные миграции базы данных Flyway. Требуется один или несколько Flyway beans. |
health |
Показывает информацию о состоянии приложения. |
httptrace |
Отображает информацию HTTP-трассировки (по умолчанию последние 100 обменов HTTP-запросом-ответом). Требуется bean HttpTraceRepository. |
info |
Отображает произвольную информацию о приложении. |
integrationgraph |
Показывает график интеграции Spring. Требуется зависимость от spring-integration-core. |
loggers |
Показывает и изменяет конфигурацию логгеров в приложении. |
liquibase |
Показывает все примененные миграции базы данных Liquibase. Требуется один или несколько Liquibase beans. |
metrics |
Показывает информацию «метрики» для текущего приложения (список метрик приведен ниже). |
mappings |
Отображает упорядоченный список всех @RequestMapping путей. |
scheduledtasks |
Отображает запланированные задачи в приложении. |
sessions |
Позволяет получать и удалять пользовательские сеансы из хранилища сеансов Spring Session. Требуется веб-приложение на основе servlets, использующее Spring Session. |
shutdown |
Позволяет корректно завершить работу приложения. По умолчанию отключено. |
startup |
Показывает данные о шагах запуска, собранные платформой ApplicationStartup. Требует, SpringApplication чтобы был настроен файл BufferingApplicationStartup. |
threaddump |
Выполняет дамп потока. |
heapdump |
Возвращает hprof дамп файл. |
logfile |
Возвращает содержимое файла журнала (если установлены свойства logging.file.name или logging.file.path). Поддерживает использование Range заголовка HTTP для получения части содержимого файла журнала. |
prometheus |
Предоставляет метрики в формате, который может быть извлечен сервером Prometheus. Требуется зависимость от micrometer-registry-prometheus. |
Список метрик приложения
Метрика |
Описание |
|---|---|
START_PROCESS_COUNTER |
Счетчик количества запущенных экземпляров процессов за единицу времени. Только успешные. |
SEND_MESSAGE |
Счетчик количества переданных сообщений в экземпляры процессов (sendMessage) за единицу времени. Только успешные |
SEND_RESPONSE |
Счетчик количества переданных сообщений в экземпляры процессов (sendResponse) за единицу времени. Только успешные. |
SEND_SIGNAL |
Счетчик количества переданных сигналов в экземпляры процессов за единицу времени. Только успешные. |
SI_MESSAGE_SAVED_COUNTER |
Количество сообщений полученных через Прикладной журнал по которым произошла ошибка при сохранении |
SI_MESSAGE_FAILED_COUNTER |
Количество сообщений полученных через Прикладной журнал по которым произошла ошибка при сохранении |
SI_MESSAGE_RECEIVED_COUNTER |
Количество сообщений полученных через Прикладной журнал |
AVAILABILITY |
Метрика фиксации состояния приложения |
BEAN_AVAILABILITY |
Метрика фиксации доступности spring beans sberflow-engine |
STANDIN_FUNC_STATE |
Метрика функционального StandIn |
ASYNC_PROCESS_THREAD_POOL_EXECUTOR_CURRENT_SIZE |
Текущее значение размера threadPoolProcessInstanceExecutor |
ASYNC_PROCESS_THREAD_POOL_EXECUTOR_MAX_SIZE |
Максимальное установленное значение threadPoolProcessInstanceExecutor |
ASYNC_JOB_EXECUTOR_THREAD_POOL_CURRENT_SIZE |
Текущее значение размера executorService |
ASYNC_JOB_EXECUTOR_THREAD_POOL_MAX_SIZE |
Максимальное установленное значение executorService |
THROTTLING_STATE |
Статус работы всех сканеров (1 - работает, 0 - нет) |
NEW_PROCESS_THROTTLING_STATE |
Статус работы всех сканеров для работы новых экземпляров процессов (1 - работает, 0 - нет) |
SI_MESSAGE_SENT_ERROR_COUNTER |
Количество сообщений отправленных через Прикладной журнал по которым произошла ошибка |
SI_MESSAGE_SENT_COUNTER |
Количество сообщений отправленных через Прикладной журнал |
management:
server:
port: 8888
endpoints:
enabled-by-default: false
web.exposure.include: health,metrics,threaddump,prometheus
endpoint:
metrics.enabled: true
health:
enabled: true
show-details: always
threaddump.enabled: true
prometheus.enabled: true
Настройка параметров для API#
Список методов пользовательского API доступен для просмотра в Confluence.
Список методов системного API доступен для просмотра в Confluence.
Дополнительно в файле конфигурации application.yml в блоке API должны быть настроены следующие переменные:
api.validation.enabled: true– включение валидации http запросов (некорректные запросы будут отброшены сразу с ошибкой 400 не доходя до исполнения);api.system.uri– префикс для системных запросов (/system);api.user.uri- префикс для пользовательских запросов (/user);api.user.validation.enabled- включение валидации для системных запросов;api.system.validation.enabled– включение валидации для пользовательских запросов.
api:
validation:
enabled: true
user:
uri: '/user'
validation:
enabled: true
system:
uri: '/system'
validation:
enabled: true
Настройка spring части системы#
В файле конфигурации application.yml в блоке spring должны быть настроены следующие переменные:
spring.flyway.enabled: false– отключает автоматическую конфигурацию flyway, настройки конфигурации будут взяты из блоков datasource и flyway;cloud.config.enabled: false–выключение конфигурации через cloud config server (т.е. все настройки будут взяты из текущего файла).
spring:
flyway:
enabled: false
main:
allow-bean-definition-overriding: true
cloud:
config:
enabled: false
Настройки адаптивного retry#
Подробно работа адаптивного retry описана в "Руководстве прикладного разработчика", раздел Настройка политик повторного вызова, Adaptive
Конфигурирование настроек для адаптивного retry осуществляется через файл application.yml, блок Engine.
Для конфигурирования доступны следующие переменные:
engine.no.api.wait.time- Время ожидания срабатывания адпативного retry для ошибок тип no api;engine.no.api.maximum.time- Максимальное время ограничения адаптивного retry для ошибок типа no api, после которого ограничение по ошибке удаляется с узла;engine.no.resources.wait.time- Время ожидания срабатывания адпативного retry для ошибок тип no resources;engine.no.resources.maximum.time- Максимальное время ограничения адаптивного retry для ошибок типа no resources, после которого ограничение по ошибке удаляется с узла;engine.cron.no.api.wait.time- Расписание срабатывания адпативного retry для ошибок типа no api в формате cron;engine.cron.no.resources.wait.time- Расписание срабатывания адпативного retry для ошибок типа no resources в формате cron.
engine:
noApi:
maximumTime: 'PT180S'
waitTime: 'PT60S'
noResources:
maximumTime: 'PT180S'
waitTime: 'PT60S'
cron:
noApiWaitTime: '0 0/1 * * * ?'
noResourcesWaitTime: '0 0/1 * * * ?'
Настройка отправки событий истории исполнения процесса#
Настройки отправки событий:
enableProcessModelEvents- Включение/отключение отправки событий по моделям процессов;enableProcessInstanceEvents- Включение/отключение отправки событий по экземплярам процессов;enableVariableFiltering- Включение/отключение фильтрации переменных по категории (пример: К1,К2);enableVariables- Включение/отключение фильтрации переменных;format- Формат событий (none, cloud-events-spec, synapse-eda-spec);processInstanceUpdateEventTopic- Имя топика для событий обновления экземпляра процесса;processModelUpdateEventTopic- Имя топика для событий изменения модели;source- Источник события (в формате URI);variableTagsWhiteList- Список меток для фильтрации переменных (пример: К1,К2);kafka.producer- Параметры подключения к kafka брокеру:bootstrap-servers- список node kafka кластера (пример: localhost:9093,localhost:9193);client-id- идентификатор клиента, нужен для логирования на стороне брокера;retries- количество повторных попыток отправки сообщения в случае ошибки;buffer-memory- размер буфера отправки сообщений;batch-size- размер пакета сообщений;compression-type- Тип сжатия (none, gzip, snappy, lz4, zstd);acks- Необходимое количество подтверждений для успешной записи;ssl:key-password- пароль от приватного ключа;key-store-location- пусть к хранилищу ключей;key-store-password- пароль от хранилища;key-store-type- тип хранилища;trust-store-location- путь к доверенному хранилищу ключей;trust-store-password- пароль от хранилища;trust-store-type- тип хранилища;protocol- протокол безопасности (TLSv1.2, TLSv1.3).
security:protocol- протокол взаимодействия с брокером (PLAINTEXT, SSL, SASL_PLAINTEXT, SASL_SSL).
properties:max.block.ms- время для аллокации сообщения в буфере(включая время для получения метаданных от брокера);delivery.timeout.ms- суммарное время ожидания отправки сообщения включая время хранения сообщения в буфере, время подтверждения доставки от брокера(должен быть не менее суммы параметров request.timeout.ms и linger.ms);request.timeout.ms- время ожидания ответа на запрос от брокера;linger.ms- время задержки перед отправкой сообщений из буфера в топик.
engine:
events:
enableProcessModelEvents: false
enableProcessInstanceEvents: false
enableVariableFiltering: false
enableVariables: false
format: none
processInstanceUpdateEventTopic: process-instance-update-event
processModelUpdateEventTopic: process-model-update-event
source: bpms
variableTagsWhiteList: К1,К2
kafka:
producer:
bootstrap-servers: host1:9093, host2:9093
client-id: bpms
retries: 0
buffer-memory: 1m
batch-size: 16384
compression-type: none
acks: 1
ssl:
key-password: secret
key-store-location: /path/to/key-store.jks
key-store-password: secret
key-store-type: JKS
trust-store-location: /path/to/trusted-store.jks
trust-store-password: secret
trust-store-type: JKS
protocol: TLSv1.2
security:
protocol: SSL
properties:
max.block.ms: 1000
delivery.timeout.ms: 10000
request.timeout.ms: 5000
linger.ms: 1000
Схема события для процессов#
Элемент |
Описание |
|---|---|
processId |
Идентификатор модели процесса |
processName |
Наименование модели процесса |
processVersion |
Внешняя (задаваемая в среде разработки) версия модели процесса |
schema |
XML модель процесса, которая получена при установке в Engine в формате Base64 encoded |
bamProjectId |
Идентификатор тенанта платформы |
resourceName |
Имя ресурса |
state |
Статус модели процесса, 0 - снята с публикации, 1 - опубликована |
Схема события для экземпляров процессов#
Элемент |
Описание |
|---|---|
id |
Идентификатор экземпляра процесса |
parentInstanceId |
Идентификатор экземпляра родительского процесса |
rootInstanceId |
Идентификатор экземпляра корневого процесса |
processId |
Идентификатор типа процесса |
rootProcessId |
Идентификатор родительского типа процесса |
processName |
Имя процесса |
startDate |
Дата-время старта экземпляра процесса |
endDate |
Дата-время завершения экземпляра процесса |
state |
Статус экземпляра процесса, допустимые статусы Стартует = 0, Выполняется = 1, Выполнен = 2, Прерван = 3, Приостановлен = 4, Прерван по ошибке = 5 |
extIds |
Набор внешних идентификаторов экземпляра процесса, используется для систем трассировки |
bamProjectId |
Идентификатор тенанта платформы |
resourceName |
Имя ресурса |
nodeInstances |
Массив шагов (узлов исполнения) экземпляра процесса |
variables |
Массив переменных экземпляра процесса |
error |
Ошибка, возникшая в экземпляре процесса |
Настройка интеграции с TaskList#
Настройка подключения к стенду HTM осуществляется через файл application.yml, блок Engine.
Для конфигурирования доступны следующие переменные:
url стенда HTM;url.
htm:
app:
url: 'http://htm-portal-test-ci00636574-edevgen-utm.apps.dev-gen.sigma.sbrf.ru/htm-portal'
engineBalancerHost: 'http://sberflow-engine-dev-ci00636574-edevgen-ts-bpm-dev.apps.dev-gen.sigma.sbrf.ru'
Настройка подключения к grafana#
Настройка подключения к grafana осуществляется через файл application.yml, блок Engine.
Для конфигурирования доступны следующие переменные:
root- URL сервера grafana;orgId.
grafana-config:
root: 'https://tkles-pprb00078.vm.esrt.cloud.sbrf.ru'
orgId: 1
Настройка зон для работы Engine#
Создание перечня зон, в которых работает приложение, осуществляется через файл application.yml, блок available-zones.
Для каждой зоны должно быть задано:
code- Уникальный идентификатор;name- Наименование;url- адрес сервера на котором развернут дополнительный экземпляр Engine.
available-zones:
zones:
- default:
code: 'DEFAULT_ZONE'
name: 'DEFAULT'
url: http://sberflow-engine-dev-ci00636574-edevgen-ts-bpm-dev.apps.dev-gen.sigma.sbrf.ru
dynamic-invoker#
Параметр конфигурации равертывания системы:
useBootstrap: true- Использоватьbootstrap class loaderдля загрузки классов;useBootstrap: false- ИспользоватьspringBootдля загрузки классов.
dynamic-invoker:
useBootstrap: false
Настройки работы с JOB#
Описание JOB и работа с ними описана в "Руководстве разработчика", п.Работа с job
Настройки работы с JOB осуществляются через файл application.yml, блок Engine.
Общие настройки для работы с job:
resetExpiredJobsPageSize- количество job в «пачке» для возвращения в общую очередь;maxAsyncJobsDuePerAcquisition- размер «пачки» job, которые будут исполняться на одном ядре;asyncExecutorThreadPoolSize- размер пула потоков для исполнения jobs из таблицы JOB;activityAsyncExecutorMinThreadPoolSize- размер пула потоков для исполнения всех типов job кромеStatelessAsyncJobs;executeProcessMinThreadPoolSize- минимальное значение пула потоков для stateless jobs.
Настройки для таблицы InsertLockJob:
insertJobLockExpirationTime- время исполнения InsertLockJobs в рамках одного ядра, по истечении которого lockExpirationTime и lockOwner будут сброшены для тех InsertLockJobs, где lockExpirationTime истекло;resetExpiredInsertLockJobsInterval- интервал сканирования сбрасывания lockExpirationTime и lockOwner
Настройки для таблицы TimerJob:
timerJobAcquireWaitTimeInMillis- интервал(мс) сканирования Timer Jobs;asyncExecutorTimerLockTimeInMillis- время(мс) в пределах которого исполняются timerJobs, в рамках одного ядра.
Настройки для таблицы RetryPolicyJob:
retryPolicyJobInterval- интервал(мс) сканирования retryPolicyJob;resetExpiredRetryPolicyJobsInterval- интервал(мс) сканирования сбрасывания lockExpirationTime и lockOwner для Retry Policy Jobs.
Настройки для таблицы Job:
statelessResetExpiredJobsInterval- интервал(мс) сканирования сбрасывания lockExpirationTime и lockOwner для Stateless Async Jobs;statelessAsyncJobAcquireWaitTimeInMillis- интервал(мс) сканирования Stateless Async Jobs;JobLockExpirationTime- время исполнения Job в рамках одного ядра по истечении которого lockExpirationTime и lockOwner будут сброшены для всех Job в таблице кроме Stateless Async Jobs;asyncExecutorResetExpiredJobsInterval- интервал(мс) сканирования сбрасывания lockExpirationTime и lockOwner для Stateless Async Jobs.
engine:
asyncExecutorResetExpiredJobsInterval: 10000
insertJobLockExpirationTime: 1200000
maxAsyncJobsDuePerAcquisition: 5
resetExpiredJobsPageSize: 1000
asyncExecutorThreadPoolSize: 10
activityAsyncExecutorMinThreadPoolSize: 1
jobLockExpirationTime: 1200000
resetExpiredRetryPolicyJobsInterval: 10000
resetExpiredInsertLockJobsInterval: 10000
retryPolicyJobInterval: 10000
statelessAsyncJobAcquireWaitTimeInMillis: 10000
statelessResetExpiredJobsInterval: 10000
timerJobAcquireWaitTimeInMillis: 10000
asyncExecutorTimerLockTimeInMillis: 1200000
asyncJobAcquireWaitTimeInMillis: 10000
Настройка трейсинга#
Структура идентификаторов OpenTracing должна позволять отслеживать информацию по бизнес процессам, исполняемым в среде исполнения Engine.
Информация должна позволять понять, в рамках исполнения какого процесса, и на каком шаге, был сделан тот или иной удаленный вызов.
Для обеспечения такой возможности стандартизирована трансляция определенных HTTP заголовков из входящих запросов в среду исполнения Engine во все исходящие вызовы,
реализованные с помощью поддерживаемых протоколов интеграции. Заголовки трейсинга будут сгруппированы в переменной контекста tracingHeaders.
Поддерживается транслирование заголовков в следующие типы взаимодействий:
REST API;
JSON-RPC API;
MMT API.
Настройки работы трейсинга осуществляются через файл application.yml, блок tracing.
Общие настройки для работы трейсинга:
enabled- включение/выключение трейсинга;url- URL трейсинг-коллектора;name- наименование элемента трейсинга;spanKind- вид спана;responseSuccessCode- код успешного ответа от сервера;apiVersion- версия апи системы трейсинга;threadCount- размер пула потоков для отправки сообщений трейсинга.
Настройки фильтрации заголовков:
useUFSHeaders- использование заголовков ufs-*;useMTHeaders- использование заголовков x-mt-*;useBaseHeaders- использование заголовков x-*;useX3Headers- использование заголовков x-b3-*;connectTimeout- таймаут (мс) для подключения к span-коллектору;readTimeout- таймаут (мс) для получения ответа от span-коллектора.
tracing:
enabled: true
url: http://some-host:8080/
name: BPMS
spanKind: CLIENT"
responseSuccessCode: 202
apiVersion: 2
threadCount: 20
useUFSHeaders: true
useMTHeaders: true
useBaseHeaders: true
useX3Headers: true
readTimeout: 30
connectTimeout: 30
Транслируемые заголовки#
Группа заголовков |
Заголовки Http |
Заголовки MMT |
Описание |
|---|---|---|---|
OpenTracing |
x-request-id; x-b3-traceid; x-b3-spanid; x-b3-parentspanid; x-b3-sampled; x-b3-flags; x-ot-span-context |
x-request-id; x-b3-traceid; x-b3-spanid; x-b3-parentspanid; x-b3-sampled; x-b3-flags; x-ot-span-context |
Заголовки OpenTracing передаются в исходящие вызовы REST, JSON-RPC 2.0 и вызовы Межмодульного транспорта. |
CorePlatform |
x-request-chain-id; x-mt-request-chain-depth; x-mt-session-id; x-mt-login; x-mt-source-system-id; ufs-client-id; ufs-business-id; ufs-user-login; ufs-forward-sid |
x-request-chain-id; x-mt-request-chain-depth; x-mt-session-id; x-mt-login; x-mt-source-system-id; ufs-client-id; ufs-business-id; ufs-user-login; ufs-forward-sid |
Заголовки CorePlatform передаются в исходящие вызовы REST, JSON-RPC 2.0 и вызовы Межмодульного транспорта без изменений их названий и содержимого. |
Блок Engine (Черновик)#
Настройки мониторинга:
mbpEnabled- Вкл/выкл отправки точек мониторинга в систему мониторинга бизнес процессов;
Настройки cci (межкластерный индекс):
cciIndexesEnabled- Вкл/выкл отправки process definition key в cci;
Настройки исполнения процессов:
mmtTaskEnabled- Вкл/выкл функционала MMT task (Включает возможность загрузки моделей с наличием mmt task);databaseSchemaUpdate- Режим автоматического обновления/удаления схемы данных (при работе с Flyway необходимо указать false; drop-create - поддерживается);asyncExecutorActivate- Вкл/выкл асинхронных задач;processOwnerRestrictionEnabled- Вкл/выкл функционала Владелец процесса (ограничивает область видимости процессов для администраторов.
Настройки кеша:
availableTaskCountCacheTimeToLiveInMilliseconds- время жизни кеша с данными о количестве доступных пользовательских задачах;availableTaskCountCacheMaxSize- Максимальное количество значений в кеше с данными о количестве доступных пользовательских задачах.
Настройки пула:
springAsyncExecutorPoolSize- Размер пула потоков для Srping async executor (используется для подготовки сообщений в StandIn);springAsyncExecutorPoolQueueCapacity- Размер очереди сообщений пула потоков для Srping async executor (используется для подготовки сообщений в StandIn).
engine:
activityAsyncExecutorMinThreadPoolSize: 1
apiMessageLogInterval: 3600000
asyncExecutorActivate: true
asyncExecutorResetExpiredJobsInterval: 10000
asyncExecutorTimerLockTimeInMillis: 1200000
asyncJobAcquireWaitTimeInMillis: 10000
availableTaskCountCacheMaxSize: 1000
availableTaskCountCacheTimeToLiveInMilliseconds: 60000
cciIndexesEnabled: true
classLoaderScannerIntervalInMilliseconds: 30000
cleaner:
batchSize: 1000
byteArrayCleanEnable: true
cron: '0 2 * * * SAT'
depth: 30
enable: false
mode: 'BPMSHISTORICIDENTITYLINKENTITYIMPL,BPMSHISTORICEXTRAATTRIBUTEENTITYIMPL,BPMSIDENTITYLINKENTITYIMPL,BPMSVARIABLEINSTANCEENTITYIMPL,BPMSEXTRAATTRIBUTEENTITYIMPL,BPMSHISTORICVARIABLEINSTANCEENTITYIMPL,BPMSHISTORICACTIVITYINSTANCEENTITYIMPL,BPMSEVENTSUBSCRIPTIONENTITYIMPL,HISTORICRETRYPOLICYENTITYIMPL,BPMSEXECUTIONENTITYIMPL,BPMSJOBENTITYIMPL,BPMSTIMERJOBENTITYIMPL,MULTIINSTANCECOUNTERIMPL,BPMSTASKENTITYIMPL,RETRYPOLICYJOBENTITYIMPL,BPMSHISTORICTASKINSTANCEENTITYIMPL,BPMSBYTEARRAYENTITYIMPL,BPMSHISTORICDETAILENTITYIMPL,BPMSHISTORICPROCESSINSTANCEENTITYIMPL'
cron:
noApiWaitTime: '0 0/1 * * * ?'
noResourcesWaitTime: '0 0/1 * * * ?'
databaseSchemaUpdate: false
executeJobThreadPoolThrottlingMark: 80
executeNewJobThreadPoolThrottlingMark: 50
executeNewProcessThreadPoolThrottlingMark: 50
executeProcessMinThreadPoolSize: 1
executeProcessThreadPoolSize: 135
executeProcessThreadPoolThrottlingMark: 80
executionMode: 'STICKY'
namepsaceURL: ''
htm:
enabled: true
idempotenceMaxRetryCount: 5
insetJobLockExpirationTime: 1200000
jdbcPoolThrottlingMark: 80
jdbcPoolThrottlingMarkForNewProcesses: 50
jobLockExpirationTime: 1200000
maxDepthForScanner: 10
maxAsyncJobsDuePerAcquisition: 5
mbpEnabled: true
mmtTaskEnabled: true
noApi:
maximumTime: 'PT180S'
waitTime: 'PT60S'
noResources:
maximumTime: 'PT180S'
waitTime: 'PT60S'
persistPoints: 'StartEvent,UserTask,IntermediateCatchEvent,ReceiveTask,ServiceTask'
processOwnerRestrictionEnabled: false
resetExpiredJobsInterval: 10000
resetExpiredJobsPageSize: 1000
resetExpiredRetryPolicyJobsInterval: 10000
resetExpiredInsertLockJobsInterval: 10000
retryPolicyJobInterval: 10000
springAsyncExecutorPoolQueueCapacity: 15
springAsyncExecutorPoolSize: 10
statelessAsyncJobAcquireWaitTimeInMillis: 10000
statelessResetExpiredJobsInterval: 10000
throttlingEnable: false
throttlingStateIntervalInMilliseconds: 5000
timerJobAcquireWaitTimeInMillis: 10000
waitScannerTimeAfterNoWait: 200
waitForProcessIdempotenceStarted: 200
Использование компонента#
Доставка моделей процессов#
Общая схема#

Дев стенды#
Загрузка моделей выполняется через curl (или аналогичные инструменты, которые позволяют передавать файлы), пример команды:
curl -F "name=@АРХИВ_С_МОДЕЛЯМИ.zip" http://ХОСТ:ПОРТ/activiti-rest/service/repository/deployments --user kermit:kermit
Формат поставки#
Плоский zip архив с XML моделями процесса Для поставки дистрибутива в платформу, архив с моделями должен находиться в каталоге <other/bpmModels.zip>.
Интеграция с внешними системами#
Аудит#
В связи с требованиями безопасности необходимо осуществлять передачу информации о произведенных действиях в АС Аудит.
Для настройки отправки сообщений в модуль «Аудит» необходимо в файле application.yml определить следующие переменные:
Название |
Описание |
Значение |
|---|---|---|
audit.enabled |
Разрешить запись в АС Аудит |
true |
audit.proxyUri |
Идентификатор прокси-сервера аудита |
https://proxyhost:8443 |
audit.proxyVersion |
Версия протокола взаимодействия |
v1 |
audit.openApiVersion |
Источник для определения версии метамодели |
v4 |
audit.ssl.enabled |
Разрешить ssl соединение |
true |
audit.ssl.keystore.location |
Расположение keystore |
/opt/keystore.jks |
audit.ssl.keystore.password |
Пароль для keystore |
psw |
audit.ssl.truststore.location |
Расположение truststore |
/opt/truststore.jks |
audit.ssl.truststore.password |
Пароль для truststore |
psw |
audit.ssl.keyPassword |
Пароль закрытого ключа |
psw |
audit.multitenant |
Режим работы сервиса Аудит (с поддержкой мультитенантности/ без поддержки мультитенантности). Поддержка мультитенантности осуществляется только в том случае, когда Engine также устанавливается в режиме multitenant или multiinstance |
true/false |
Взаимодействие производится через Rest API.
Среда исполнения осуществляет отправку следующих данных для фиксации события в АС Аудит:
Метамодель;
Событие.
Вызываемое АПИ зависит от режима работы Аудит (с поддержкой мультитенантности/ без поддержки мультитенантности):
Регистрация метамодели. В режиме мультиинстанс регистрация метамодели должны быть произведена разово для каждого потребителя (каждого уникального resourceName):
http://audit2-client-proxy.apps.test-ose.ca.sbrf.ru/v1/metamodel;
http://audit2-client-proxy.apps.test-ose.ca.sbrf.ru/v1/rn/{rn}/metamodel;
Отправка события:
http://audit2-client-proxy.apps.dev-gen.sigma.sbrf.ru/v1/event;
http://audit2-client-proxy.apps.dev-gen.sigma.sbrf.ru/v1/rn/{rn}/event.
Метамодель
curl -X POST http://audit2-client-proxy.apps.test-ose.ca.sbrf.ru/v1/metamodel -d @proxy-metamodel.json -H "Content-Type: application/json"
Пример содержимого proxy-metamodel.json (метамодель):
{
"metamodelVersion": "00001",
"module": "test_proxy_module",
"description": "Тестовый модуль для тестирования proxy-приложения",
"events": [
{
"name": "test-name-1",
"description": "Тестовое событие №1",
"success": true,
"mode": "speed",
"params": [
{
"name": "test-name-11",
"description": "Тестовый параметр 1 события 1"
}
]
}
]
}
Событие
curl -X POST http://audit2-client-proxy.apps.dev-gen.sigma.sbrf.ru/v1/event -d @proxy-event.json -H "Content-Type: application/json"
Пример proxy-event.json (событие)
{
"metamodelVersion": "00001",
"name": "test-name-1",
"session": "test_user_ticket:1234567987987987",
"module": "test_proxy_module",
"createdAt": 1585198271185,
"userLogin": "test-proxy-user",
"userName": "Иванов Иван Иванович",
"userNode": "proxy-audit",
"params": [
{
"name": "test-name-11",
"value": "Значение параметра 1 события 1"
}
],
"tags": [
"tag 1",
"tag 2",
"tag 3"
]
}
Журналирование#
Протоколирование операций для их дальнейшего анализа осуществляется в следующую директорию:
DloggingDir = home/logs
DloggingJSONFile = log.json
Для отправки событий журнала в Logger, sidecar-контейнер должен быть подключен к тому же каталогу, что обеспечит ему возможность чтения и обработки событий.
Для корректного разбора событий необходимо, чтобы формат событий соответствовал шаблону разбора fluent-bit. Формат событий описан в xml-файле конфигурации для библиотеки logback-spring.xml.
Для режима multiinstance файл logback-spring.xml содержит дополнительные атрибуты:
RN- идентификатор ресурса (тип строка) - содержится в конфигурации экземпляра;
CN из сертификата потребителя (тип строка) - содержится в конфигурации экземпляра;
traceId - идентификатор трейса, с которым связан лог (тип строка), получение из заголовка x-b3-traceid.
Запись лога производится в json формате и требует подключения зависимости в pom.xml:
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.3</version>
</dependency>
Интеграция с MMT (mmt-envoy) (опционально)#
В проекте ose необходимо развернуть proxy mmt envoy.
Template OpenShift envoy входит в поставку дистрибутива и требует:
Подготовку секретов с сертификатами:
envoy-secret- включает сертификаты envoy;fluent-bit-sct- включает сертификаты подключения к брокерам кафки логгера;
Настройку стендозависимых параметров:
NAMESPACE- Имя namespace в котором разворачивается дистрибутив, берется из job. При использовании install_eip можно дополнительно не указывать;CONTROL_PLANE- адрес control-plane (<имя сервиса control-plane>.<имя namespace control-plane>.svc.cluster.local) - Адреса подключений можно посмотреть на странице;CONTROL_PLANE_PORT=8888- порт control-plane;BROKERS- брокеры Kafka логгер. адреса можно посмотреть на странице;CLUSTER_NAME- Имя кластера OS (в формате dev-gen или dev-gen2);
Для работы интеграции htm-bridge с envoy mmt необходимо в jvm опциях htm указать адрес envoy на стенде: -Dtransport.url.endpoint=<envoy_route>/pprb-mmt
Интеграция с Прикладным журналом (опционально)#
Интеграция с Прикладным журналом осуществляется через kafka.
Для работы с ПЖ необходимо настроить подключение к kafka используя секрет engine-appjounalsettings-secret
Пример настройки:
standin:
enabled: true
func:
retryBackOffTime: 5000
retryCount: 18
retryEnabled: false
journal-log-expiration-interval: '5 hour'
journal-log-cleaner-schedule: '0 0 3 * * ?'
cloud:
client:
zoneId: 'SBERFLOW'
stub: false
heartBeatPeriod: 1000
kafka:
bootstrapServers: 10.116.72.65:9092
producerConfig:
"[security.protocol]": SSL
"[ssl.key.password]": ${SSL_KEY_PASSWORD}
"[ssl.keystore.location]": /opt/keystore/kafka/server.keystore.jks
"[ssl.keystore.password]": ${SSL_KEYSTORE_PASSWORD}
"[ssl.truststore.location]": /opt/keystore/kafka/trust.jks
"[ssl.truststore.password]": ${SSL_TRUSTSTORE_PASSWORD}
"[ssl.keystore.type]": JKS
"[ssl.truststore.type]": JKS
"[ssl.protocol]": TLS
"[ssl.enabled.protocols]": TLSv1.2
"[ssl.endpoint.identification.algorithm]": ~
consumerConfig:
"[security.protocol]": SSL
"[ssl.key.password]": ${SSL_KEY_PASSWORD}
"[ssl.keystore.location]": /opt/keystore/kafka/server.keystore.jks
"[ssl.keystore.password]": ${SSL_KEYSTORE_PASSWORD}
"[ssl.truststore.location]": /opt/keystore/kafka/trust.jks
"[ssl.truststore.password]": ${SSL_TRUSTSTORE_PASSWORD}
"[ssl.keystore.type]": JKS
"[ssl.truststore.type]": JKS
"[ssl.protocol]": TLS
"[ssl.enabled.protocols]": TLSv1.2
"[ssl.endpoint.identification.algorithm]": ~
concurrency: 10
groupId: group_1
Обновление сервиса#
Обновление БД с помощью flyway#
Установка базовой линии:
Выкачать дистрибутив flyway;
Настроить его на работу с БД под владельцем схемы BPMS;
Выполнить команду:
flyway -user=BPMS -password=ПАРОЛЬ_ХОЗЯИНА_СХЕМЫ -url=jdbc:oracle:thin:@ХОСТ_СУБД:1521:SID_СУБД baseline;Проверить создание таблицы с историей:
select * from BPMS."flyway_schema_history".
Обновление БД:
Выкачать дистрибутив flyway;
Настроить его на работу с БД под владельцем схемы BPMS;
Выполнить команду:
flyway -user=BPMS -password=ПАРОЛЬ_ХОЗЯИНА_СХЕМЫ -url=jdbc:oracle:thin:@ХОСТ_СУБД:1521:SID_СУБД -locations=filesystem:ПРИМЕР/path/to/distrib/sql/flyway/update/folder migrate;Проверить наличие актуальных версий в таблице с историей:
select * from BPMS."flyway_schema_history".
Настроить конфигурационные параметры в файле application.yml,
блок
flyway:enabled- Управление запуском обновления схемы баз данных Master и StandIn при старте приложения;readonlyUser- Настройка пользователя с правами доступа к базе данных Master и StandIn в режиме чтения;
блок
engine:databaseSchemaUpdate- Режим автоматического обновления/удаления схемы данных (при работе с Flyway необходимо указатьfalse);
блок
spring:spring.flyway.enabled: false– отключает автоматическую конфигурацию flyway, настройки конфигурации будут взяты из блоков datasource и flyway.
flyway:
master:
readonlyUser: BPMS_READONLY
migrationEnabled: true
standin:
readonlyUser: BPMS_READONLY
События системного журнала#
Все события, собираемые приложением во время работы, публикуются в АС Аудит и Журналирование.
Метод |
Описание |
Base URI |
|---|---|---|
post/usertasks/notifyassignee |
Информирование о назначении пользовательской задачи на пользователя |
bpm.sbrf.ru/system/v4 |
post/usertasks/notifyDischarge |
Возвращение задачи в общую очередь |
bpm.sbrf.ru/system/v4 |
post/usertasks/notifyComplete |
Завершение пользовательской задачи |
bpm.sbrf.ru/system/v4 |
post/usertasks/notifyAbort |
Прервать пользовательскую задачу |
bpm.sbrf.ru/system/v4 |
delete/deployment/{deploymentId} |
Удаление пакета моделей процессов |
bpm.sbrf.ru/user/v4 |
post/processes/activate |
Публикация процессов определенных версий, снятых с публикации |
bpm.sbrf.ru/user/v4 |
post/processes/suspend |
Снятие активных процессов с публикации |
bpm.sbrf.ru/user/v4 |
post/processes/{processId}/start |
Старт процесса |
bpm.sbrf.ru/system/v4 bpm.sbrf.ru/user/v4 |
post/instances/{instanceId}/message |
Отправить сообщение |
bpm.sbrf.ru/system/v4 bpm.sbrf.ru/user/v4 |
post/instances/{instanceId}/respond |
Отправить триггерное сообщение для Receive Task |
bpm.sbrf.ru/system/v4 bpm.sbrf.ru/user/v4 |
post/instances/retry |
Перезапуск экземпляра процессов |
bpm.sbrf.ru/system/v4 bpm.sbrf.ru/user/v4 |
post/instances/retryall |
Перезапуск всех экземпляров процессов, удовлетворяющих условиям фильтров |
bpm.sbrf.ru/user/v4 |
post/instances/{instanceId}/{executionId}/retry |
Повтор шага экземпляра процесса |
bpm.sbrf.ru/user/v4 |
post/instances/{instanceId}/terminate |
Прерывание исполнения списка экземпляров процессов |
bpm.sbrf.ru/user/v4 |
createDeployment |
Смонтировать пакет |
|
startClearHistory |
Старт очистки истории |
|
createClearHistoryJob |
Создание job для очистки истории |
|
clearHistoryCompleted |
Очистка истории выполнена |
|
shutdownStarted |
Выполняется остановка приложения |
События мониторинга#
В режиме мультиинстанс метрики отвечающие за работу приложения (Engine/Tasklist) дополнены:
rn - соответствует resourceName потребителя.
Предварительно потребитель должен создать подключение к Unimon используя соответствующий resourceName.
Метрика |
Описание |
|---|---|
START_PROCESS_COUNTER |
Счетчик количества запущенных экземпляров процессов за единицу времени. Только успешные. |
SEND_MESSAGE |
Счетчик количества переданных сообщений в экземпляры процессов (sendMessage) за единицу времени. Только успешные |
SEND_RESPONSE |
Счетчик количества переданных сообщений в экземпляры процессов (sendResponse) за единицу времени. Только успешные. |
SEND_SIGNAL |
Счетчик количества переданных сигналов в экземпляры процессов за единицу времени. Только успешные. |
SI_MESSAGE_SAVED_COUNTER |
Количество сообщений полученных через Прикладной журнал по которым произошла ошибка при сохранении |
SI_MESSAGE_FAILED_COUNTER |
Количество сообщений полученных через Прикладной журнал по которым произошла ошибка при сохранении |
SI_MESSAGE_RECEIVED_COUNTER |
Количество сообщений полученных через Прикладной журнал |
AVAILABILITY |
Метрика фиксации состояния приложения |
BEAN_AVAILABILITY |
Метрика фиксации доступности spring beans sberflow-engine |
STANDIN_FUNC_STATE |
Метрика функционального StandIn |
ASYNC_PROCESS_THREAD_POOL_EXECUTOR_CURRENT_SIZE |
Текущее значение размера threadPoolProcessInstanceExecutor |
ASYNC_PROCESS_THREAD_POOL_EXECUTOR_MAX_SIZE |
Максимальное установленное значение threadPoolProcessInstanceExecutor |
ASYNC_JOB_EXECUTOR_THREAD_POOL_CURRENT_SIZE |
Текущее значение размера executorService |
ASYNC_JOB_EXECUTOR_THREAD_POOL_MAX_SIZE |
Максимальное установленное значение executorService |
THROTTLING_STATE |
Статус работы всех сканеров (1 - работает, 0 - нет) |
NEW_PROCESS_THROTTLING_STATE |
Статус работы всех сканеров для работы новых экземпляров процессов (1 - работает, 0 - нет) |
Часто встречающиеся проблемы и пути их устранения#
Не выявлено.
Сценарии связанные с администрированием Engine Platform V Flow описаны в данном руководстве.



