首页 > 编程语言 >分布式概念及选举算法

分布式概念及选举算法

时间:2024-09-02 10:54:24浏览次数:7  
标签:选举 Follower 节点 算法 ID Leader 分布式

概念

    由很多自主的计算机组成。很容易地把运行在不同计算机上的不同应用程序集成到单个系统中。
清晰的记录接口。轻松的扩展。
分布式类型:分布式计算系统、分布式信息系统(数据处理)

互斥

        集中式算法

            每个程序在需要访问临界资源时,先给协调者发送一个请求。
如果当前没有程序使用这个资源,协调者直接授权请求程序访问;否则,按照先来后到的顺序为请求程序“排一个号”。
如果有程序使用完资源,则通知协调者,协调者从“排号”的队列里取出排在最前面的请求,并给它发送授权消息。
拿到授权消息的程序,可以直接去访问临界资源。

        分布式算法

            当一个程序要访问临界资源时,先向系统中的其他程序发送一条请求消息,在接收到所有程序返回的同意消息后,才可以访问临界资源。其中,请求消息需要包含所请求的资源、请求者的 ID,以及发起请求的时间。这就是民主协商法。在分布式领域中称之为分布式算法,或者使用组播和逻辑时钟的算法。


        令牌环算法

         
            所有程序构成一个环结构,令牌按照顺时针(或逆时针)方向在程序之间传递,收到令牌的程序有权访问临界资源,访问完成后将令牌传送到下一个程序;若该程序不需要访问临界资源,则直接把令牌传送给下一个程序。


选举算法

        Bully算法

1、集群节点角色类型
      主节点、普通节点,主节点负责对其他节点的协调和管理

2、选举策略
        在所有活着的节点中,选取 ID 最大的节点作为主节点,当选主成功后,有且仅有一个节点成为主节点,其他所有节点都是普通节点,当且仅当主节点故障或与其他节点失去联系后,才会重新选主。

3、选举过程
        a、选举使用到的消息

        Election消息: 用于发起选举; Alive消息: 对Election 消息的应答; Victory消息: 竞选成功的主节点向其他节点发送的宣誓主权的消息
        b、选举流程
                前提条件:集群中每个节点均知道其 他节点的 ID,流程如下:
               1、集群中每个节点判断自己的ID是否为当前活着的节点中 ID 最大的,如果是,则直接向其他节点发送 Victory 消息,宣誓自己的主权;
               2、如果自己不是当前活着的节点中 ID 最大的,则向比自己 ID 大的所有节点发送 Election 消息,并等待其他节点的回复;
               3、若在给定的时间范围内,本节点没有收到其他节点回复的 Alive 消息,则认为自己成为 主节点,并向其他节点发送 Victory 消息,宣誓自己成为主节点;若接收到来自比自己 ID 大的节点的 Alive 消息,则等待其他节点发送 Victory 消息;
               4、若本节点收到比自己 ID 小的节点发送的 Election 消息,则回复一个 Alive 消息,告知 其他节点,我比你大,重新选举。

4、选举条件

        -集群初始化
        -主节点故障或与其他节点失去联系
        -任意一个比当前主节点 ID 大的新节点加入集群
        -某个节点从故障中恢复

            
            实例:MongoDB、Elasticsearch


        Raft算法

三个角色
• Leader(领导者) :负责日志的同步管理,处理来自客户端的请求,与Follower保持heartBeat的联系;
• Follower(追随者) :响应 Leader 的日志同步请求,响应Candidate的邀票请求,以及把客户端请求到Follower的事务转发(重定向)给Leader;
• Candidate(候选者) :负责选举投票,集群刚启动或者Leader宕机时,状态为Follower的节点将转为Candidate并发起选举,选举胜出(获得超过半数节点的投票)后,从Candidate转为Leader状态。

通过leader节点,Raft算法将一致性问题简化为3个子问题: 
• 领导选举:当前leader节点崩溃下线或集群刚启动时,需要选举一个新的leader。 
• 日志复制:leader节点将自己接收的请求记录到日志中,并将日志广播给其他节点,从而保证集群数据达到一致。 
• 数据安全:如果某个日志已经被集群提交,那么该日志不能再被覆盖或者修改。

Heartbeats and Timeouts
1.       所有的Server均以Follower角色启动,并启动选举定时器
2.       Follower期望从Leader或者Candidate接收RPC
3.       Leader必须广播Heartbeat重置Follower的选举定时器
4.       如果Follower选举定时器超时,则假定Leader已经crash,发起选举

Leader election
自增currentTerm,由Follower转换为Candidate,设置votedFor为自身,并行发起RequestVote RPC,不断重试,直至满足以下任一条件:
1.       获得超过半数Server的投票,转换为Leader,广播Heartbeat
2.       接收到合法Leader的AppendEntries RPC,转换为Follower
3.       选举超时,没有Server选举成功,自增currentTerm,重新选举

            
            实例:Redis


        ZAB算法

            ZAB(ZooKeeper Atomic Broadcast)选举算法: ZooKeeper 为实现分布式协调功能而设计的。相较于 Raft 算法的投票机制,ZAB算法增加了通过节点 ID 和数据 ID 作为参考 进行选主,节点 ID 和数据 ID 越大,表示数据越新,优先成为主。相比较于 Raft 算法, ZAB 算法尽可能保证数据的最新性。所以,ZAB 算法可以说是对 Raft 算法的改进。
 1、集群节点角色类型与状态
        角色:Leader(主节点)、Follower(跟随者节点)、Observer(观察者,无投票权)

选举过程中的状态
Looking(选举状态)当节点处于该状态时,认为集群中没有 Leader, 节点会进入选举状态
Leading(领导者状态)已经选出主,且当前节点为 Leader
Following(跟随者状态)集群中已经选出主后,其他非主节点状态更新为Following,表示对 Leader 的追随
Observing(观察者状态)当前节点为 Observer,持观望态度,没有投票 权和选举权

ZAB 算法性能高,对系统无特殊要求,采用广播方式发送信息,若节点中有 n 个节点,每个节点同时广播,则集群中信息量为 n*(n-1) 个消息,容易出现广播风暴;除了投票,还增加了对比节点 ID 和数据 ID,这就意味着还需要知道所有节点的 ID 和数据 ID,所以选举时间相对较长。但该算法选举稳定性比较好,当有新节点加入或节点故障恢复后,会触发选主,但不一定会真正切主,除非新节点或故障后恢复的节点数据 ID 和节点 ID 最大,且获得投票数过半,才会导致切主

            
            实例:Zookeeper

标签:选举,Follower,节点,算法,ID,Leader,分布式
From: https://blog.csdn.net/RossiLover/article/details/141724692

相关文章

  • 探索Java中的分布式任务调度:从理论到实践
    引言在现代企业级应用中,定时任务调度是一项至关重要的功能。无论是数据备份、日志清理还是批处理任务,都离不开任务调度系统。随着系统的规模和复杂度的增加,传统的单机任务调度已经无法满足需求。因此,分布式任务调度应运而生。本篇博文将详细介绍Java中的分布式任务调度,从基本......
  • 基于FP-Growth算法进行数据集中频繁项集挖掘
    FP-Growth算法的主要步骤构建FP树(FrequentPatternTree):首先,扫描数据集一次,找出频繁项,并按支持度降序排列。然后,构建FP树,这是一个压缩表示的数据结构,其中每个项集对应树中的一个路径。挖掘FP树:从FP树中递归地挖掘频繁项集。这个过程通常从支持度最低的频繁项开始,逐步向上挖掘......
  • 基于C语言的选择排序算法
    一、选择排序算法的基本原理        选择排序算法是一种简单直观的排序算法。其基本原理为:        首先,将待排序的数组划分为已排序和未排序两部分。初始时,已排序部分为空,未排序部分为整个数组。        在每一轮排序中,从未排序部分找出最小(或最大)......
  • 基于C语言的归并排序算法
    一、归并排序的基本概念        归并排序(MergeSort)是一种基于分治法思想的高效稳定排序算法。其基本原理是将一个待排序的数组不断地分割成较小的子数组,直到每个子数组只包含一个元素,此时每个子数组都被认为是有序的。然后,再将这些有序的子数组合并成一个更大的有序......
  • 求从一固定点到其余点的最短路算法及其matlab程序详解
    #################本文为学习《图论算法及其MATLAB实现》的学习笔记#################算法用途从一固定点到其他所有点的最短路的求法算法思想利用求任意两点间最短路的程序,即可求出从固定点到其他所有点的最短路,从而得到所有的最短路和最短距离。若想查看每条通路所包......
  • 排序算法之二叉树排序详细解读(附带Java代码解读)
    二叉树排序(BinaryTreeSort)是一种基于二叉搜索树(BinarySearchTree,BST)实现的排序算法。它的基本思想是利用二叉搜索树的性质来实现排序,通过将元素插入到二叉搜索树中,然后对树进行中序遍历来获取排序后的元素。基本概念二叉搜索树(BST):对于二叉搜索树中的每一个节点,其左......
  • 安全帽ai自动识别算法
    安全帽ai自动识别算法是人工智能与视觉系统算法技术性的结合。通过10年的工艺累积,SuiJivision具备深层次的人工智能自主学习、图像识别、行为分析、发展趋势认知、风险预警等工作能力,安全帽ai自动识别算法可以根据认知情景动态性、即时解析和管理方法情景个人行为来预知未来的风......
  • 【工程应用十二】Bayer图像格式中Hamilton-Adams及Zhang Wu 基于LMMSS算法的Demosaic
    Demosaic,中文直接发翻译为去马赛克,但是其本质上并不是去除马赛克,这让很多第一次接触这个名词或者概念的人总会想的更多。因此,一般传感器在采集信息时一个位置只采集RGB颜色中的一个通道,这样可以减少采集量,降低成本,由于人的视觉对绿色最为敏感,所以一般情况下,绿色分量会比红色......
  • Git 基本工作(最先进的分布式版本控制系统)
    1、Git,首先,在https://github.com注册一个新用户。2、下载安装Git,http://git-scm.com/downloads3、或者用淘宝镜像:https://registry.npmmirror.com/binary.html?path=git-for-windows4、Git配置:打开gitbash命令窗口,执行:其中""的内容为个人内容gitconfig--globaluser.......
  • 代码随想录算法day4 - 哈希表2
    题目1454.四数相加II给你四个整数数组nums1、nums2、nums3和nums4,数组长度都是n,请你计算有多少个元组(i,j,k,l)能满足:0<=i,j,k,l<nnums1[i]+nums2[j]+nums3[k]+nums4[l]==0示例1:输入:nums1=[1,2],nums2=[-2,-1],nums3=[-1,2],nums4......