Skip to content

常见错误 ​

把 retry 当成 Durable Execution ​

retry 只负责“再试一次”,不负责“哪些步骤已经发生”。没有 Journal 的 retry 仍然可能重复扣款、重复发消息、重复创建资源。

在 ctx.run 之外执行副作用 ​

错误示例:

python
payment = charge_card(order)
ctx.run("record-payment", lambda: {"payment_id": payment.id})

charge_card 没有被 Journal 保护,重放时会重复执行。

在 durable step 里调用 context ​

在 Restate SDK 中,ctx.run 内部不能嵌套使用 context action。教学版也建议遵守这个规则。step 函数应该只做一个外部副作用或非确定性计算。

随意修改 step 顺序 ​

未完成 invocation 的 replay 依赖 step 顺序。改动 workflow 时要考虑版本兼容。

忽略外部系统幂等 ​

如果外部 API 成功但 Journal 写入前崩溃,运行时可能不知道副作用已经发生。外部系统支持 idempotency key 是重要补充。

用进程内 sleep 实现长等待 ​

进程内 sleep 丢失恢复语义,也浪费线程或计算资源。长等待应该持久化成 timer。

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