zoukankan      html  css  js  c++  java
  • 分布式协调与同步之分布式选举

    分布式选举的原因

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

    分布式选举算法

    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

    总结图

    说明:

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

  • 相关阅读:
    使用某些 DOCTYPE 时会导致 document.body.scrollTop 失效
    VB.NET 笔记1
    知识管理系统Data Solution研发日记之一 场景设计与需求列出
    知识管理系统Data Solution研发日记之五 网页下载,转换,导入
    折腾了这么多年的.NET开发,也只学会了这么几招 软件开发不是生活的全部,但是好的生活全靠它了
    分享制作精良的知识管理系统 博客园博客备份程序 Site Rebuild
    知识管理系统Data Solution研发日记之四 片段式数据解决方案
    知识管理系统Data Solution研发日记之二 应用程序系列
    知识管理系统Data Solution研发日记之七 源代码与解决方案
    知识管理系统Data Solution研发日记之三 文档解决方案
  • 原文地址:https://www.cnblogs.com/battlescars/p/distributed_system_voting.html
Copyright © 2011-2022 走看看