【发布时间】: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