扩展方向
教学版项目的价值在于它足够小,可以作为继续实验的底座。下面这些扩展会把它逐步推向生产级 Durable Execution runtime。
1. 引入 worker 租约
当前版本默认只有一个 worker。下一步可以给 invocations 增加:
| 字段 | 作用 |
|---|---|
locked_by | 当前 worker id |
lease_until | 租约过期时间 |
epoch | 每次接管递增,用于 fencing |
worker 获取任务时使用条件更新:
sql
UPDATE invocations
SET locked_by = :worker_id, lease_until = :deadline, epoch = epoch + 1
WHERE id = :id
AND (locked_by IS NULL OR lease_until < NOW());2. 拆分 append-only log 和物化视图
现在 journal_entries 同时是日志和查询表。更接近 Restate 的做法是:
text
runtime_log # append-only events
materialized_journal # 从 log 派生出的 step 视图
materialized_timers # 从 log 派生出的 timer index这样可以练习 event sourcing 和 snapshot。
3. 支持 Virtual Object
给每个对象 key 提供单写并发控制:
text
ShoppingCart / user-123
Counter / global
AgentSession / session-42同一个 key 的写 handler 串行执行,不同 key 并行执行。这会让你更接近 Restate 的 key-scoped state 模型。
4. 实现 delayed message
把 timer 从“当前 workflow 的 sleep”扩展成“未来调用另一个 handler”:
python
ctx.send_after("EmailService", "sendReminder", payload, delay_seconds=3600)这需要目标 invocation 的创建、去重和投递状态。
5. 实现服务协议
把业务 handler 独立成另一个 FastAPI 服务:
text
runtime server <--HTTP stream--> user serviceruntime 负责发起 invocation,service 通过协议请求 run/sleep/call。这一步会让你真正理解为什么 Restate 需要 SDK。
6. 增加 workflow 版本
给 invocation 记录 workflow_version,运行中实例继续走旧代码,新实例走新代码。这样可以避免 step 顺序变化破坏 replay。
7. 可观测性
增加:
| 能力 | 价值 |
|---|---|
| OpenTelemetry trace id | 串起 invocation、step、外部调用 |
| metrics | 观察 retry 次数、timer 延迟、运行耗时 |
| 管理 API | cancel、retry、purge、pause |
这些能力不是 Durable Execution 的核心语义,但会决定系统是否可运维。