1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
---
layout: default
lang: zh
---
# 架构概览
> 本文档描述 Rust BPM Engine 的**运行时架构**。
> 重点关注**执行语义**,不涉及建模工具或 BPMN 规范。
---
## 范围
本架构文档定义了:
- 工作流在运行时的执行方式
- 状态如何通过事件推进
- 如何处理并发、故障和恢复
本文档**不涉及**以下内容:
- BPMN XML 规范
- 可视化建模或低代码工具
- UI 相关内容
---
## 核心抽象
### Process Definition(流程定义)
描述工作流结构的静态图。
- Nodes(节点):Start、Service、User、Gateway、End
- Sequence flows(顺序流)
### Process Instance(流程实例)
流程定义的一个运行实例。
- 持有 variables(变量)
- 拥有 tokens(令牌)
- 具有生命周期:Running / Completed / Terminated
### Token(令牌)
> **Token 是执行的最小单位。**
Token 代表在特定节点执行的权利。
- 多个 Token 可以实现并行执行
- Token 独立向前推进
---
## 执行模型
- Token 在流程图中移动
- 节点通过消费 Token 来执行
- 执行过程产生 events(事件)
所有状态转换都由**事件**驱动,而非直接调用。
参见:`execution-model.md`
---
## 事件驱动核心
- Engine 对不可变事件做出反应
- Event handlers 是确定性的且事务性的
- Handler 可以发射新的事件
这保证了:
- 可观测性(Observability)
- 可重放性(Replayability)
- 故障安全(Crash safety)
---
## 并发模型
- 并发是**Token 作用域内**的
- 一个 Token 在任一时刻只能被一个执行器执行
- 乐观锁(CAS)防止冲突
并行 Join 通过唯一性约束保护。
---
## 故障与补偿
- 故障是一等事件
- 长时运行一致性通过 Saga 模式实现
- 补偿按逆序执行
参见:`saga.md`
---
## 故障恢复
- 所有 Engine 状态都是持久化的
- Token 在故障后可以重新恢复
- 执行总是向前继续
参见:`recovery.md`
---
## 设计原则
- Token 优于 thread
- Event 优于 call stack
- Compensation 优于 rollback
- Persistence 优于 memory
---
本文档作为架构与实现之间的**契约**。