问题描述
Cadence 是一个容错的有状态代码平台。在各种故障情况下,cadence如何处理故障?
解决方法
分布式系统中存在各种各样的故障,Cadence 为它们提供了多种选择。
这是我自己的清单。它可能不完整。但如果我能想到,我会尝试添加更多。
活动
- 活动失败并重试。见https://cadenceworkflow.io/docs/concepts/activities/#timeouts
- 另请注意,长时间运行的活动可以通过“心跳”从检查点恢复
工作流程
-
通过事件溯源模型的设计,工作流可以从工作人员崩溃时剩下的任何一点恢复。见https://cadenceworkflow.io/docs/concepts/workflows/#state-recovery-and-determinism
-
工作流还可以有重试策略,如活动自动重试失败https://cadenceworkflow.io/docs/concepts/workflows/#workflow-retries
-
在某些情况下,失败是由错误的代码更改导致的,从而导致错误的状态。 Cadence 提供了“重置”工具来将工作流程重置到任何时间点。 见https://cadenceworkflow.io/docs/cli/#reset-and-restart
-
除了重置之外,Cadence 还允许您通过部署进行重置。这对于重置大量工作流(例如数百万)很有用。
Cadence 服务器集群
活动和工作流工作人员都是无状态的。
Cadence 服务器是一种高度可用且可扩展的服务,可提供持久性。
- 持久性来自底层设计和持久性存储(由 Cassandra、MySQL 或 Postgres 提供)
- 在单个集群设置中,Cadence 服务与不同的独立分片一起运行。整个集群由不同的主机组成。任何发生故障的主机都可以被另一个主机替换。
- Cadence 提供跨数据中心复制以提供更高的可用性https://cadenceworkflow.io/docs/concepts/cross-dc-replication/#global-domains-architecture