【问题标题】:Are messages dropped on RAFT?RAFT 上是否丢弃了消息?
【发布时间】:2019-04-06 20:31:46
【问题描述】:

我正在阅读有关 raft 的内容,但在网络分区后达成共识时我有点困惑。

因此,考虑一个包含 2 个节点、1 个 Leader、1 个 Follower 的集群。

在分区之前,那里有X条消息写入,成功复制,然后想象是网络问题导致了分区,所以有2个分区,A(ex-leader)和B(ex-follower),现在都是leader (接收写入):

before partition | Messages  |x| Partition   | Messages  
Leader           | 0 1 2 3 4 |x| Partition A | 5  6  7  8  9
Follower         | 0 1 2 3 4 |x| Partition B | 5' 6' 7' 8' 9'

在分区事件之后,我们已经弄清楚了,会发生什么?

a) 我们选出 1 个新的领导者并考虑它的日志? (删除新追随者的消息? 例如:

0 1 2 3 4 5 6 7 8 9 (total of 10 messages, 5 dropped)

甚至:

0 1 2 3 4 5' 6' 7' 8' 9' (total of 10 messages, 5 dropped)

(取决于哪个节点成为领导者)

b) 我们选出一个新的领导者并找到一种方法来就所有消息达成共识?

0 1 2 3 4 5 5' 6 6' 7 7' 8 8' 9 9' (total of 15 messages, 0 dropped)

如果是b,有什么具体的方法吗?还是取决于客户端的实现? (例如:消息时间戳...)

【问题讨论】:

    标签: raft


    【解决方案1】:

    The leaders log is taken to be "the log" when the leader is elected and has successfully written its initial log entry for the term.但是,在您的情况下,起始前提不正确。在一个有 2 个节点的集群中,一个节点需要 2 票才能成为领导者,而不是 1 票。因此,给定网络分区,任何一个节点都不会成为领导者。

    【讨论】:

      猜你喜欢
      • 2011-12-11
      • 1970-01-01
      • 2021-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多