行为"提交以前条款中的条目"木筏造成意想不到的结果?

时间:2018-02-28 16:20:02

标签: raft

在筏纸上,图中描述了一种情况。 enter image description here

可以在server1重启后提交entry2。

我的问题是:

如果错误地请求了entry2,则由于server1的失败,客户端的请求失败。因此,客户端可能会认为错误的行为不是由状态机应用的,这实际上是在重启server1之后执行的,如图(e)所示。

1 个答案:

答案 0 :(得分:3)

对于Raft以及基于不可靠通信的任何其他交易系统,客户端的请求总是有可能返回" undefined"如果网络在错误的时间出现故障,则会产生结果。

这个问题是固有的;见Two Generals' Problem

这里" undefined"表示客户端不知道事务是否实际提交。要告诉的唯一方法是打开一个新的交易并查看。

在软件中,这通常被报告为可重试的"异常。

解决这个问题的一个实际方法是(a)在获得可重试异常时始终重试事务,(b)确保客户端事务始终是幂等的。