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