【发布时间】:2020-08-02 14:39:30
【问题描述】:
我正在用 golang 构建一个应用程序,我希望它具有容错性。我查看了不同的算法,如 RAFT 和 Paxos 以及它们在 golang 中的实现(etcd 的 raft,hashicorp 的 raft),但我觉得它们对于我的特定用例来说可能是矫枉过正。
在我的应用程序中,节点只是在待机状态下等待,并在领导者失败时充当故障转移。我不需要在整个集群中复制任何状态。我只需要以下属性:
如果一个节点是领导者:
- 运行给定的代码
如果节点不是领导者:
- 等待领导失败
- 在现有领导失败后重新选举领导
有什么建议吗?
【问题讨论】:
-
骑在 etcd 的木筏上是个好主意。我想你可以看看leases。
-
这很吸引人,但是,我仍然有问题。没有会向该应用程序发出请求的“客户端”。因此,我并没有真正尝试跨应用程序实例复制任何日志(在我看来,RAFT 是在考虑这些假设的情况下构建的)。我要做的就是确保一次只运行一个实例,如果该实例失败,另一个实例将接手它。
标签: go failover etcd raft paxos