Skip to content

扩展方向

教学版项目的价值在于它足够小,可以作为继续实验的底座。下面这些扩展会把它逐步推向生产级 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 service

runtime 负责发起 invocation,service 通过协议请求 run/sleep/call。这一步会让你真正理解为什么 Restate 需要 SDK。

6. 增加 workflow 版本

给 invocation 记录 workflow_version,运行中实例继续走旧代码,新实例走新代码。这样可以避免 step 顺序变化破坏 replay。

7. 可观测性

增加:

能力价值
OpenTelemetry trace id串起 invocation、step、外部调用
metrics观察 retry 次数、timer 延迟、运行耗时
管理 APIcancel、retry、purge、pause

这些能力不是 Durable Execution 的核心语义,但会决定系统是否可运维。

Teaching project inspired by Restate's public architecture and documentation.