| Батчинг при выполнении. | Возможность использовать и комбинировать разные типы выполнения как - (1 транзакция - 1 процесс),
- (1 транзакция - N процессов).
|
| Изоляция шагов и процессов (внутри оной транзакции) | |
| | - Сейчас есть реализация под EntityFramework.
- Но модель позволяет сделать реализацию под другие решения (LinqToDb или чистый Ado.Net).
Для текущей реализации в качестве хранилище может выступать БД, поддерживающая: - транзакции
- savepoint (если используются)
- updatelock
- updatelock skip locked
- sharelock (можно обойтись без него)
|
| Передача сигналов для процессов через систему триггеров. | В том числе для передачи сигналов реализована система триггеров. Она позволяет оптимизировать операции с БД и уменьшить конкуренцию между процессами за общее состояние (родительский процесс). см. пример 1. |
| Stream process | Возможность реализации stream процессов. Которые обрабатываются некоторый поток сообщений. Через использование триггеров (при поступлении сообщения публикуется TriggerEvent) и системы гарантированного пробуждения (процесс гарантировано не уснет, если есть необработанные сообщения). Например: TransactionOutbox. |
| Перехват ошибок | Перехват и обработка ошибок, если процесс выкинул exception в движок. Реализацию простого retry с задержкой (создается триггер на следующую попытку). |
| Параллельное выполнение | Допускается запуск нескольких раннеров (на разных нодах), работающих с одной таблицей процессов для распределения нагрузки между ними. Допускается фильтрация типов процессов между нодами (чтобы нода выполняла только определенные типы процессов, в том числе по приоритету). Доступно для раннеров процессов и триггеров.
Также возможна частичная поставка новой версии процесса и этот процесс будет браться в обработку только ограниченным количеством новых нод исполнителей.
В перспективе возможны решения с шардированием. |
| Soft timeout | Возможность указывать soft timeout, который будет мягко приостанавливать цикл (внутри шага процесса), чтобы ограничить общее время транзакции (не делать транзакции долгими (например горизонт postgres)). Например родительский процесс может создать 1) N/2 дочерних процессов за первую сессию выполнения (транзакцию) и 2) N/2 за вторую сессию выполнения (транзакцию) и уснуть до окончания дочерних процессов. |
| Range preload process data | (Необязательно) возможность в начале сессии обработки пакетно предзагружать данные и бизнес сущности для процессов (Range query) из обрабатываемого батча для оптимизации чтения (если используется обработка пакета процессов в одной транзакции). |