Изменения документа Движок cccc1808. ProcessEngine
Редактировал(а) Alexandr Fokin 2026/04/27 13:28
От версии 1.1
отредактировано Alexandr Fokin
на 2026/04/10 14:18
на 2026/04/10 14:18
Изменить комментарий:
К данной версии нет комментариев
К версии 1.11
отредактировано Alexandr Fokin
на 2026/04/10 14:37
на 2026/04/10 14:37
Изменить комментарий:
К данной версии нет комментариев
Сводка
-
Свойства страницы (1 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Содержимое
-
... ... @@ -1,27 +1,47 @@ 1 -|(% style="width:132px" %)Теги поиска|(% style="width:1301px" %)cccc1808. ProcessEngine, cccc1808.ProcessEngine 1 +|(% style="width:132px" %)Теги поиска|(% style="width:1301px" %)((( 2 +cccc1808. ProcessEngine, cccc1808.ProcessEngine 2 2 Очередь задач, Система обработки процессов, Движок обработки процессов. 4 +[[Процесс>>doc:Архитектура и модели.Модели.Процесс.WebHome]] 5 +))) 6 +|(% style="width:132px" %) |(% style="width:1301px" %)Универсальный движок для выполнения процессов и очередей задач, позволяющий комбинировать несколько подходов к обработке (см особенности). 7 +|(% style="width:132px" %) |(% style="width:1301px" %)Процесс является единицей выполнения. 8 +Система триггеров используется для таймеров и передачи сигналов для процессов (с оптимизацией нагрузки). 3 3 |(% style="width:132px" %)Особенности|(% style="width:1301px" %)((( 4 -|(% style="width:15 8px" %)Батчинг|(% style="width:1125px" %)(((10 +|(% style="width:159px" %)Батчинг|(% style="width:1168px" %)((( 5 5 Возможность использовать и комбинировать разные типы выполнения как 6 6 7 7 * (1 транзакция - 1 процесс), 8 8 * (1 транзакция - N процессов). 9 9 ))) 10 -|(% style="width:15 8px" %)Изоляция шагов и процессов|(% style="width:1125px" %)(((16 +|(% style="width:159px" %)Изоляция шагов и процессов (внутри оной транзакции)|(% style="width:1168px" %)((( 11 11 * Изоляция через db savepoint. 12 12 * Для [[EntityFramework ~| EntityFrameworkCore>>doc:Разработка.NET.Работа с БД.EntityFramework | EntityFrameworkCore.WebHome]] возможность делать InMemory снимок [[Создание снимка ChangeTracker>>doc:Разработка.NET.Работа с БД.EntityFramework | EntityFrameworkCore.Сценарии и проблемы.Создание снимка ChangeTracker.WebHome]]. 13 13 ))) 14 -|(% style="width:15 8px" %)БД провайдер|(% style="width:1125px" %)(((20 +|(% style="width:159px" %)БД провайдер|(% style="width:1168px" %)((( 15 15 * Сейчас есть реализация под EntityFramework. 16 16 * Но модель позволяет сделать реализацию под другие решения (LinqToDb или чистый Ado.Net). 23 + 24 +Для текущей реализации в качестве хранилище может выступать БД, поддерживающая: 25 + 26 +* транзакции 27 +* savepoint (если используются) 28 +* updatelock 29 +* updatelock skip locked 30 +* sharelock (можно обойтись без него) 17 17 ))) 18 -|(% style="width:15 8px" %)Передача сигналов для процессов через систему триггеров.|(% style="width:1125px" %)(((32 +|(% style="width:159px" %)Передача сигналов для процессов через систему триггеров.|(% style="width:1168px" %)((( 19 19 В том числе для передачи сигналов реализована система триггеров. 20 20 Она позволяет оптимизировать операции с БД. 21 21 22 22 см. пример 1. 23 23 ))) 24 -|(% style="width:158px" %)Soft timeout|(% style="width:1125px" %)Возможность указывать soft timeout, который будет мягко приостанавливать цикл (внутри шага процесса), чтобы ограничить общее время транзакции (не делать транзакции долгими (например горизонт postgres)). 38 +|(% style="width:159px" %)Перехват ошибок|(% style="width:1168px" %)Перехват и обработка ошибок, если процесс выкинул exception в движок. Реализацию простого retry с задержкой (создается триггер на следующую попытку). 39 +|(% style="width:159px" %)Параллельное выполнение|(% style="width:1168px" %)Допускается запуск нескольких раннеров (на разных нодах), работающих с одной таблицей процессов для распределения нагрузки между ними. 40 +Допускается фильтрация типов процессов между нодами (чтобы нода выполняла только определенные типы процессов, в том числе по приоритету). 41 +Доступно для раннеров процессов и триггеров. 42 +\\Также возможна частичная поставка новой версии процесса и этот процесс будет браться в обработку только ограниченным количеством новых нод исполнителей. 43 +\\В перспективе возможны решения с шардированием. 44 +|(% style="width:159px" %)Soft timeout|(% style="width:1168px" %)Возможность указывать soft timeout, который будет мягко приостанавливать цикл (внутри шага процесса), чтобы ограничить общее время транзакции (не делать транзакции долгими (например горизонт postgres)). 25 25 Например родительский процесс может создать N/2 дочерних процессов за 1 сессию и N/2 за 2 сессию выполнения. 26 26 ))) 27 27 |(% style="width:132px" %)Примеры|(% style="width:1301px" %)((( ... ... @@ -35,7 +35,7 @@ 35 35 ))) 36 36 |(% style="width:870px" %)TriggerEvent публикуются без использования TransactionOutbox напрямую в брокер после коммита транзакции (иначе мы бы нагружали БД). 37 37 |(% style="width:870px" %)((( 38 -Предполагаем, что основную часть времени система работает стабильно, но допускается ситуация, что транзакция закоммитилась, но TriggerEvent не смогли опубликоваться (остановка сервиса без graceful shutdown, проблемы соединения или работы с брокером сообщений. 58 +Предполагаем, что основную часть времени система работает стабильно, но допускается ситуация, что транзакция закоммитилась, но TriggerEvent не смогли опубликоваться (остановка сервиса без graceful shutdown, проблемы соединения или работы с брокером сообщений). 39 39 40 40 Для таких случаев создается страхующий триггер (1 общий на тип процесса). Этот триггер запускается периодически и проходится по всем ожидающим процессам, проверяя условие (в реализации можно использовать keyset пагинацию) (в реализации можно использовать join для проверки условия). 41 41 Этот триггер выполняется периодически с более крупной временной задержкой. В случае обнаружения потери TriggerEvent, он поднимет заклинивший родительский процесс и он будет обработан (но позже). Можно установить этому триггеру низкий приоритет.