• 分布式协调与同步之分布式选举


    分布式选举的原因

    分布式系统中需要一个主节点,该节点用于负责对其他节点进行协调和管理。同时主节点的存在能够保证分布式集群数据的一致性。

    分布式选举算法

    1. Bully算法

    选举原则:偏向于让ID更大的节点作为集群的leader

    前提条件:假设集群中所有节点都知道其他节点的id

    消息类型/节点状态

      election消息,用于发起选举

           alive消息,用于对election消息的应答

           victory消息,竞选成功的主节点向其他节点发送宣誓主权的消息

    选举过程

      触发条件: ID比当前主节点大的节点加入集群,主节点故障

           具体过程: 

           (1) 每个节点判断自己的ID是否最大,最大则直接发送victory消息

           (2) 如果ID不是最大的,则向比自己id大的节点发送election消息

           (3) 在给定时间范围内,本节点没有收到其他节点回复的alive消息,则认为自己是主节点,并向其他节点发送victory消息;若收到alive消息,则等待其他节点的victory消息

           (4) 收到比本节点id小的节点发送的election消息则回复一个alive消息

    优缺点

      优点: 选举速度快,算法复杂度低,简单易实现

           缺点:每个节点额外存储信息较多,任意一个ID比前主节点大的节点加入时都会触发重新选举过程

    软件举例: MongoDB

    2. Raft算法

    选举原则:获得多数投票的集群节点成为leader

    前提条件:假设集群中所有节点之间都能相互通信

    消息类型/节点状态

      leader: 主节点

           candidate:候选者,每个节点都可以成功候选者

           follower:leader的跟随者

    选举过程

      触发条件: leader任期到了,新节点加入集群或者主节点故障

           具体过程: 

           (1) 初始化所有节点为follower,开始选举时有follower转化为candidate,并向其他节点发送选举消息

           (2) 收到消息的节点进行投票,票数超过一半的节点成为主节点,其他节点由candidate降为follower

    优缺点

      优点: 选举速度快,算法复杂度低,简单易实现,当有新节点加入或者节点故障恢复时不会触发真正的切主

           缺点:每个节点之间都需要相互通信,所以通信量较大

    软件举例: ETCD

     3. ZAB(Zookeeper Atomic Broadcast)选举算法

    选举原则:少数服从多数,节点id大的或者数据最新的优先成为主节点

    消息类型/节点状态

           投票信息 <epoch, vote_id, vote_zxID>

      leader: 主节点

           follower:leader的跟随者

           observer: 观察者,无投票权

          Looking,Following,Leading,Observing

    优缺点

      优点: 稳定性较好,性能较好

           缺点:容易出现广播风暴,投票时间较长,复杂度较高

    软件举例:zookeeper

    总结图

    说明:

     本文是极客时间付费课程《分布式技术原理与算法解析》笔记

  • 相关阅读:
    Windows JScript 在 游览器 中运行 调试 Shell 文件系统
    autohotkey 符号链接 软连接 symbolink
    软链接 硬链接 测试
    SolidWorks 修改 基准面 标准坐标系
    手机 路径 WebDAV 映射 驱动器
    Win10上手机路径
    explorer 命令行
    单位公司 网络 封锁 屏蔽 深信 AC
    cobbler自动化部署原理篇
    Docker四种网络模式
  • 原文地址:https://www.cnblogs.com/battlescars/p/distributed_system_voting.html
Copyright © 2020-2023  润新知