分布式技术原理与算法解析
聂鹏程
智载云帆CTO,前华为分布式Lab资深技术专家
立即订阅
5969 人已学习
课程目录
已更新 36 讲 / 共 34 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (3讲)
开篇词 | 四纵四横,带你透彻理解分布式技术
免费
01 | 分布式缘何而起:从单兵,到游击队,到集团军
02 | 分布式系统的指标:啥是分布式的三围
第一站:分布式协调与同步 (6讲)
03 | 分布式互斥:有你没我,有我没你
04 | 分布式选举:国不可一日无君
05 | 分布式共识:存异求同
06 | 分布式事务:All or nothing
07 | 分布式锁:关键重地,非请勿入
08 | 分布式技术是如何引爆人工智能的?
第二站:分布式资源管理与负载调度 (6讲)
09 | 分布式体系结构之集中式结构:一人在上,万人在下
10 | 分布式体系结构之非集中式结构:众生平等
11 | 分布式调度架构之单体调度:物质文明、精神文明一手抓
12 | 分布式调度架构之两层调度:物质文明、精神文明两手抓
13 | 分布式调度架构之共享状态调度:物质文明、精神文明多手协商抓
14 | 答疑篇:分布式事务与分布式锁相关问题
第三站:分布式计算技术 (4讲)
15 | 分布式计算模式之MR:一门同流合污的艺术
16 | 分布式计算模式之Stream:一门背锅的艺术
17 | 分布式计算模式之Actor:一门甩锅的艺术
18 | 分布式计算模式之流水线:你方唱罢我登场
第四站:分布式通信技术 (4讲)
19 | 分布式通信之远程调用:我是你的千里眼
20 | 分布式通信之发布订阅:送货上门
21 | 分布式通信之消息队列:货物自取
22 | 答疑篇:分布式体系架构与分布式计算相关问题
第五站:分布式数据存储 (5讲)
23 | CAP理论:这顶帽子我不想要
24 | 分布式数据存储系统之三要素:顾客、导购与货架
25 | 数据分布方式之哈希与一致性哈希:“掐指一算”与“掐指两算”的事
26 | 分布式数据复制技术:分身有术
27 | 分布式数据之缓存技术:“身手钥钱”随身带
特别放送 (3讲)
特别放送 | 分布式下的一致性杂谈
特别放送 | 徐志强:学习这件事儿,不到长城非好汉
特别放送 | 那些你不能错过的分布式系统论文
第六站:分布式高可靠 (5讲)
28 | 分布式高可靠之负载均衡:不患寡,而患不均
29 | 分布式高可靠之流量控制:大禹治水,在疏不在堵
30 | 分布式高可用之故障隔离:当断不断,反受其乱
31 | 分布式高可用之故障恢复:知错能改,善莫大焉
32 | 答疑篇:如何判断并解决网络分区问题?
分布式技术原理与算法解析
登录|注册

04 | 分布式选举:国不可一日无君

聂鹏程 2019-09-30
你好,我是聂鹏程。今天,我来继续带你打卡分布式核心技术。
相信你对集群的概念并不陌生。简单说,集群一般是由两个或两个以上的服务器组建而成,每个服务器都是一个节点。我们经常会听到数据库集群、管理集群等概念,也知道数据库集群提供了读写功能,管理集群提供了管理、故障恢复等功能。
接下来,你开始好奇了,对于一个集群来说,多个节点到底是怎么协同,怎么管理的呢。比如,数据库集群,如何保证写入的数据在每个节点上都一致呢?
也许你会说,这还不简单,选一个“领导”来负责调度和管理其他节点就可以了啊。
这个想法一点儿也没错。这个“领导”,在分布式中叫做主节点,而选“领导”的过程在分布式领域中叫作分布式选举。
然后,你可能还会问,怎么选主呢。那接下来,我们就一起去揭开这个谜底吧。

为什么要有分布式选举?

主节点,在一个分布式集群中负责对其他节点的协调和管理,也就是说,其他节点都必须听从主节点的安排。
主节点的存在,就可以保证其他节点的有序运行,以及数据库集群中的写入数据在每个节点上的一致性。这里的一致性是指,数据在每个集群节点中都是一样的,不存在不同的情况。
当然,如果主故障了,集群就会天下大乱,就好比一个国家的皇帝驾崩了,国家大乱一样。比如,数据库集群中主节点故障后,可能导致每个节点上的数据会不一致。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《分布式技术原理与算法解析》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(46)

  • 1024
    两主的情况出现在集群因为网络原因,被划分了两部分局部可通信的区域。下面的链接详细讲解了Raft算法,及双主出现后集群是如何恢复的。
    https://www.infoq.cn/article/coreos-analyse-etcd/
    还有一个Raft算法动画链接
    http://thesecretlivesofdata.com/raft/#election
    2019-09-30
    3
    30
  • 每天晒白牙
    今天这篇文章赚到了
    1.分布式选举算法是为了保证数据一致性的
    在集群中存在多个节点提供服务,如果每个节点都可以写数据,这样容易造成数据的不一致,所以需要选举一个leader,往leader节点中写数据,然后同步到follower节点中。这样就能更好的保证一致性
    但因为同步数据存在延迟,所以follower节点的数据不是每时每刻都和leader节点数据保持一致的
    有的框架是由leader提供读写操作,这样能保证写和读都是最新的数据,我没记错的话kafka就属于这种,读写都发生在主副本上。
    而像mysql集群是在主节点写入数据,从节点提供读功能,即主从架构

    总之,我觉得,一个好的分布式选举算法能更好的保证数据的一致性

    2.老师说的集群中存在双主是说选举算法出了问题,出现了两个主,还是说双主是正常情况,两个主互提供写服务,然后再互相同步数据的情况呢?

    作者回复: 从你对分布式选举的总结可以看出,你很善于思考和总结。关于双主的情况,一般是因为网络故障,比如网络分区等导致的。出现双主的期间,如果双主均提供服务,可能会导致集群中数据不一致。所以,需要根据业务对数据不一致的容忍度来决定是否允许双主情况下提供服务。

    2019-09-30
    11
    17
  • cp★钊
    想问下老师,选举的性能,评判的标准是什么?为什么zab的性能最好,是指哪方面的性能?
    2019-09-30
    12
  • kylexy_0817
    老师,本节为何不提及一下Paxos算法?
    2019-10-23
    7
  • AllenGFLiu
    老师,在Raft算法中,每个节点只有一票可以投,要么同意要么拒绝,可是节点是基于什么条件作出的判断呢?Bully算法中我看老师又说到是论资排辈的。
    2019-10-19
    2
    6
  • 清风
    一个问题:如果初始情况下,按照约定,给与奇数节点数,但是选举是这时一个节点挂了?岂不是一定是偶数节点数?只是为了初始选举方便?不考虑故障情况?
    2019-10-04
    6
  • 游弋云端
    1、分布式选举和一致性的关系是什么?
    个人理解选举本身其实就是一致性的一次协商,要求全局认可同一个节点做主节点。选举的目的是为了简化一致性协商的流程,让选出的master来协调各成员针对某项决议达成一致;
    2、你是否见到过一个集群中存在双主的场景?
    双主是可能发生的,例如原主网络与外部中断,集群发生脑裂,则老的集群主还存在,分裂的剩余节点由于与老主失联,大家重新选了新主出来。此时就会产生双主。规避双主的影响,需要通过租约机制,让老主发现在租约到期后与大多数节点失联主动降备;新主的选举也要等待超过这个租约时间后去选举新主,避免业务同一时刻看到双主。但是由于各个服务器资源、负载、调度等问题,时间并不是一个精确的可靠保障,例如定时器失真,还是可能导致同一时刻出现双主,所以每个地方的租约时间配置是个技术点。另外新主产生,生成新的epoch(+1),这样可以避免大家去处理老消息,从而进一步规避双主的问题。
    2019-09-30
    3
  • Will
    问下老师,Bully 和 ZAB 都是根据 ID 的大小投票,那 Raft 算法选举时的投票依据是什么?是随机投票么,如果是随机投的话,奇数节点好像也并不能保证投票结果不会出现同票的情况啊?
    希望老是解答一下
    2019-09-30
    3
    3
  • Lugyedo
    奇数个节点的集群当一个节点故障时会变成偶数个节点吧,这个时候“多数派”算法怎么选主
    2019-10-01
    3
    2
  • 💢 星星💢
    老师本节开头就说为了保证分布式的协调和调度,必须要要有一个主节点。主节点的出现就是保证数据一致性。没有主节点,在分布式环境中数据就会发生混乱。根本达不到一致性。因此在分布式环境中的一致性前提是必须选择一个节点。但是由于网络的原因,或者服务器宕机的原因,而老师上面说了通过心跳机制定时检测主的状况,会触发新的选举,会产生新的主,但此时老的leader又重新恢复过来,就产生双主的情况。此时老的leader会降级成folllower。老师我有个疑问,就是在选举过程中,如果老的leader恢复过来了。那数据的写请求还是给老l的eader么?如果是老的leader又要实行数据同步问题也太复杂了。。。
    2019-11-14
    1
  • Mr.Brooks
    raft算法选举的时候每一轮只有一个选票,这个选票是如何确定投给哪一个节点呢?
    2019-10-31
    1
  • 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-08
    1
  • blackpiglet
    对分布式选举算法的性能评判标准也有点疑惑,课程中感觉性能更多是指选举算法的稳定度,新加入节点或节点反复出现可用性问题对集群状态的影响是否足够可控,似乎主节点选举的速度和选举时产生的消息数量并不是主要的考虑因素。
    2019-10-01
    1
  • 随心而至
    1.分布式选举和一致性,感觉是密不可分的。重新选举依靠一致性提供的数据,一致性又要依靠选举出来的主节点进行。这里我只了解过raft算法
    https://www.cnblogs.com/xybaby/p/10124083.html
    2.有个brain split(脑裂),比如说两个机房原来网络想通,可以正确选主,后来网络不通,每个机房都只知道自己的小山头,他们就容易各自占山为王。
    http://www.ruanyifeng.com/blog/2018/07/cap.html
    也可以搜下维基百科brain split。

    在地铁上写的,有不对之处,请老师指出
    2019-09-30
    1
    1
  • 小明
    raft投票的依据是什么?
    2019-12-10
  • 曾轼麟
    双主的场景应该就是脑裂了
    2019-12-03
  • 王大伟
    关于Raft算法我有些疑问:
    1. 如果某个节点挂了,其他节点怎么知道他挂了,因为如果不知道的话,就不能判断过半是多少
    2. 集群规模不能太大,那么多少是很大呢?100个节点算不算大,10000个节点算不算大,业界有没有常规判断标准
    2019-12-02
  • 明亮
    buly中 id最大能保证数据最权威吗
    2019-11-28
  • 王喜春
    1. https://github.com/sluk3r/Bully-Algorithm
    2. https://github.com/sluk3r/sofa-jraft
    3. http://thesecretlivesofdata.com/raft/#election 动画效果。
    4. 自己搞一个新的算法的微创新?
    2019-11-21
  • 王喜春
    MySQL使用的哪种选主方式?
    2019-11-21
收起评论
46
返回
顶部