Adds the Persistence vNext proof of concept, including provider-neutral schema/document abstractions, relational and document provider POCs, Elsa integration, runtime-defined entities, physicalization planning, workflow runtime evaluation, and focused tests.
3.7 KiB
Persistence vNext Workflow Runtime Evaluation
Decision
Persistence vNext is viable for Elsa management, catalog, metadata, admin-defined entity, and small module stores. It should not replace workflow runtime hot-path stores yet.
The current go/no-go decision is:
- Go: workflow definitions, metadata stores, secrets, labels, tenants, admin-defined entities, and other document-friendly module data.
- Conditional go: workflow instance management/query surfaces if provider benchmarks prove the declared indexes are fast enough, preferably with physicalization policies for common filters.
- No-go for now: bookmarks, triggers, bookmark queues, dispatch/outbox queues, activity execution records, and workflow execution logs.
Why Runtime Stores Are Different
Workflow runtime stores are not only persistence concerns. They encode runtime semantics:
- bookmark and trigger lookup latency
- distributed locking
- queue visibility, retry, and dead-letter behavior
- append-heavy log/event volume
- cleanup and retention behavior
- concurrency under multiple workers
A portable document/index layer can represent these records, but representation alone is not enough. The provider must also prove that runtime semantics are correct and fast under load.
Recommended Runtime Strategy
Keep specialized runtime providers until three conditions are met:
- Representative benchmarks exist for SQLite, SQL Server, PostgreSQL, and MongoDB.
- Provider contract tests validate concurrency, locking, retry, and cleanup behavior.
- Hot-path storage units have explicit physicalization policies with rollback guidance.
Use Persistence vNext first for stores where the risk profile is lower:
- management/catalog data
- module configuration/state
- runtime-defined entities
- operational metadata
- queryable admin data
Physicalization Requirement
If workflow instances or other high-volume records move to vNext, they should use portable documents by default in development, but production providers should be able to opt into:
- relational dedicated tables
- relational generated or typed index columns
- MongoDB dedicated collections
- native provider indexes
- retention/cleanup commands
This keeps module intent provider-neutral while letting providers own the physical performance shape.
Required Evidence Before Migrating Hot Paths
Benchmarks should cover:
- workflow instance queries by status, sub-status, definition id, version, correlation id, and updated timestamp
- bookmark lookup by activity type, hash, workflow instance id, and tenant id
- trigger lookup by hash, workflow definition id, and tenant id
- queue dequeue/lease/retry/dead-letter behavior
- log append and retention cleanup throughput
Contract tests should cover:
- optimistic concurrency failures
- distributed lock behavior
- duplicate startup materialization
- worker retry behavior
- transactional index updates
- recovery after partial materialization failure
Migration Strategy
- Keep current EF Core runtime persistence intact.
- Add vNext-backed stores only for low-risk module and management data.
- Add benchmark fixtures for workflow runtime query shapes.
- Add provider contract tests for locking, queues, and append-heavy logs.
- Introduce physicalization policies for workflow instance and bookmark indexes.
- Pilot one non-critical runtime-adjacent store.
- Only migrate runtime hot paths after benchmarks and contract tests pass across the supported providers.
POC Status
The POC now includes a small evaluator that codifies this decision. It classifies metadata stores as vNext candidates, hot distributed lookups as benchmark-gated, and queue/log workloads as specialized-provider territory for now.