04 | 分布式选举:国不可一日无君
该思维导图由 AI 生成,仅供参考
为什么要有分布式选举?
- 深入了解
- 翻译
- 解释
- 总结
分布式系统中的选主算法对于集群的稳定运行至关重要。本文介绍了Bully算法、Raft算法和ZAB算法三种常见的选主算法。Bully算法以“长者为大”原则选主,速度快、简单易实现,但需要全局节点信息,且可能导致频繁切主;Raft算法采用多数派投票机制,选主稳定性较好,但需要节点相互通信且通信量大。ZAB算法则是对Raft算法的改进,通过节点ID和数据ID作为参考进行选主,保证数据的最新性。ZAB算法选举稳定性较好,但选举时间相对较长。 在ZAB算法中,每个节点拥有三种角色:Leader、Follower和Observer,以及四个状态:Looking、Leading、Following和Observing。选主的核心原则是“少数服从多数,ID大的节点优先成为主”。ZAB算法的性能高,但容易出现广播风暴,选举时间相对较长。 文章还对Bully算法、Raft算法和ZAB算法进行了对比分析,从消息传递内容、选举机制和选举过程等维度进行了详细比较,帮助读者理解记忆。 此外,文章还解释了为什么“多数派”选主算法通常采用奇数节点,而不是偶数节点,以及分布式选举和一致性的关系。最后,文章总结了分布式选举的重要性,介绍了Bully算法、Raft算法和ZAB算法,并提出了思考题,引发读者深入思考。 总的来说,本文通过对三种选主算法的介绍和对比分析,帮助读者快速了解分布式选主算法的特点和应用,为理解分布式系统的选主问题提供了有益的参考。
《分布式技术原理与算法解析》,新⼈⾸单¥59
全部留言(77)
- 最新
- 精选
- 每天晒白牙今天这篇文章赚到了 1.分布式选举算法是为了保证数据一致性的 在集群中存在多个节点提供服务,如果每个节点都可以写数据,这样容易造成数据的不一致,所以需要选举一个leader,往leader节点中写数据,然后同步到follower节点中。这样就能更好的保证一致性 但因为同步数据存在延迟,所以follower节点的数据不是每时每刻都和leader节点数据保持一致的 有的框架是由leader提供读写操作,这样能保证写和读都是最新的数据,我没记错的话kafka就属于这种,读写都发生在主副本上。 而像mysql集群是在主节点写入数据,从节点提供读功能,即主从架构 总之,我觉得,一个好的分布式选举算法能更好的保证数据的一致性 2.老师说的集群中存在双主是说选举算法出了问题,出现了两个主,还是说双主是正常情况,两个主互提供写服务,然后再互相同步数据的情况呢?
作者回复: 从你对分布式选举的总结可以看出,你很善于思考和总结。关于双主的情况,一般是因为网络故障,比如网络分区等导致的。出现双主的期间,如果双主均提供服务,可能会导致集群中数据不一致。所以,需要根据业务对数据不一致的容忍度来决定是否允许双主情况下提供服务。
2019-09-301337 - 钱阅过留痕 赞,老师的专栏有两个创新点,一是有一个扩展点,另一个是专栏的总结,特别是以脑图的形式展现。 之前也学习过分布式选举算法,不知道是老师有裁剪还是怎么回事,感觉比这复杂难懂,老师讲解的基本能听懂。 OK,记一下自己的理解。 1:分布式选主算法,为选主而生,那为啥非要有一个主哪?人人平等不好嘛?分布式系统和人类社会非常的像,如果没有主,有些事情特别是有冲突的需要协作完成的,有谁来负责呢?针对数据库,好多机器都存数据,为了提高性能和可用性,如果都能接受写请求,各个库中的数据不一致了,又该怎么办呢?这就是要有主的原因了! 2:选主的算法,老师介绍了三种经典的,已经总结的很好了,我就不总结啦!我来个比喻,方便记忆。 bully算法——类似选武林盟主,谁武功最高,谁来当 raft算法——类似选总统,谁票数最高,谁来当 zab算法——类似选优秀班干部,是班干部且票多才行 感觉只有能确定一台电脑为主就行,不管什么方式,比如:一组两台跑定时任务的集群,刚开始无主,谁先启动谁就是主,当启动一台机器后先看有没有主,有主自己就是从,否则就告诉其他机器自己是主。
作者回复: 赞👍,总结得很到位,加油
2020-02-138 - 辉Raft哪有说的这么简单。其他候选者发起选举,在leader在的情况下,可以被认为无效
作者回复: 本文主要是针对raft算法进行选主的原理进行介绍,确实raft算法并没有那么简单,比如,在真正实现过程中,心跳检测及超时的限制,以及你说的leader存在的情况下,其他候选者发起选举。对于你说的问题,又可以进一步深挖,什么情况下导致leader存在时,其他候选者发起选举呢?心跳超时还是其他原因?在实践中,具体问题需要具体分析。
2020-04-285 - 鸭先知核心是为了数据一致性,分布式选举为数据一致性提供了保障;网络分区会导致脑裂
作者回复: 是的,数据一致性是分布式领域中一个非常重要的问题。
2020-03-291 - Lane双主是脑裂吧
作者回复: 双主是网络分区导致的,是脑裂的一种情况。
2020-03-091 - Joe Blackraft算法中每个节点都可以参与选举,也可以发起选举,当有多个节点发起时候,收到消息的节点如何决定投票给谁?或者说自己也是发起投票的节点,但是收到了其它节点的发起投票请求,那么自己是投还是不投呢?
作者回复: 投票的原则通常采用谁的请求先到,就投票给谁。
2019-11-1821 - kylexy_0817老师您好,Raft算法,当Leader降级为Follower的那段新一轮选举的时间里,集群里是否就无主了?
作者回复: 是的,在选举过程中,主未选出,集群中无主。
2019-10-2321 - zhaozp打卡文章学习: 1、选主意义:主节点负责其他节点的协调和管理,保证其他节点有序的运行。 2、选举算法: (1).Bully算法,选择ID最大的节点作为主节点。需要用到3种消息:Election消息用于发起选举;Alive消息对Election消息的应答; Victory消息,宣誓主权。优点:选举速度快、算法复杂度低、实现简单。缺点:每个节点需要有全局的节点信息,额外存储的信息较多;有 频繁切主的风险。 (2).Raft算法,民主投票,少数服从多数。3种角色:Leader,Candidate,Follower。优点:选举速度快、算法复杂度低、易于实现。缺点:要求集群中每个节点都可以互相通信,且需要获取超过半数的投票才能选主成功,通信量大。 (3).ZAB算法,具有优先级的民主投票,尽可能保证数据最新性,ID大的节点优先成为主。3种角色:Leader,Follower,Observer。4种状态:Looking,Leading,Following,Observing。。。每个节点有三元组(server_Id,server_zxID,epoch)。。。选主原则:server_zxID最大者成为Leader,若server_zxID相同,则server_id最大者成为Leader。优点:性能稳定。缺点:选举时间较长,容易出现广播风暴,需要知道所有节点的zxId和serverId,选举时间较长。
作者回复: 积跬步,而终至千里!加油!
2019-10-081 - piboyeraft的优先级是通过超时时间来排列的
作者回复: 你这里说的优先级具体是指的什么优先级呢?
2020-05-052 - piboyeraft在zab之后出现,不应该是zab是raft的改进吧。还有raft选举也要考虑日志高的优先,高日志的拒绝低日志的
作者回复: Zab借鉴了Paxos算法。你说的raft一般有两个作用,一个是选主,一个是写数据的一致性。通常就是根据数据的新旧体现,在选主是,采用心跳,心跳会有版本号等,在写数据事,日志高优先体现在日志数据的新旧。
2020-05-05