RAFT:运行过程中Leader改变会发生什么
RAFT: What happens when Leader change during operation
我想了解以下场景:
- 3 节点集群 ( n1, n2, n3 )
- 假设 n1 是领导者
- 客户端发送 operation/request 到 n1
- 由于某种原因,在操作过程中,即(appendentry,commitEntry ...)领导者更改为 n2
- 但 n1 已成功写入其日志
这算不算operation/request的失败?或者它应该 return "Leader Change"
这是一个不确定的结果,因为我们当时不知道该值是否会被提交。也就是说,新领导者可以决定保留或覆盖该值;我们只是没有要知道的信息。
在我维护的一些系统中,下层系统(共识层)为每个请求给出了两个成功结果。它首先 returns Accepted
当领导者将它放入其日志时,然后 Committed
当该值被充分复制时。
Accepted
结果意味着值 可能会 稍后提交,但可能不会。
包裹共识层的层对于客户端的 return 值可以更智能一些。他们对系统有更广阔的视野,并且可能会重试请求 and/or 向新领导询问有关价值的信息。这样整个系统就可以有习惯的 single return 值。
我想了解以下场景:
- 3 节点集群 ( n1, n2, n3 )
- 假设 n1 是领导者
- 客户端发送 operation/request 到 n1
- 由于某种原因,在操作过程中,即(appendentry,commitEntry ...)领导者更改为 n2
- 但 n1 已成功写入其日志
这算不算operation/request的失败?或者它应该 return "Leader Change"
这是一个不确定的结果,因为我们当时不知道该值是否会被提交。也就是说,新领导者可以决定保留或覆盖该值;我们只是没有要知道的信息。
在我维护的一些系统中,下层系统(共识层)为每个请求给出了两个成功结果。它首先 returns Accepted
当领导者将它放入其日志时,然后 Committed
当该值被充分复制时。
Accepted
结果意味着值 可能会 稍后提交,但可能不会。
包裹共识层的层对于客户端的 return 值可以更智能一些。他们对系统有更广阔的视野,并且可能会重试请求 and/or 向新领导询问有关价值的信息。这样整个系统就可以有习惯的 single return 值。