05分布式

本文详细介绍了分布式系统中常用的选举算法,如Bully算法和Ring算法,探讨了它们如何基于进程ID选择领导者,以及性能评估指标如网络带宽利用和周转时间。算法涉及节点间的通信、故障恢复和选举流程.
摘要由CSDN通过智能技术生成

05分布式

  1. Election选举算法

    1. ring算法
    2. bully霸凌算法

Election选举算法

在分布式系统中,有时候需要选举一个特定的进程来担任特殊的角色,比如“中央服务器”或者“领导者”。这种情况下,就需要使用一种称为“选举算法”(Election Algorithm)的机制来选择这个“领导者”进程。

选举算法的目标是从所有相关的进程中选择一个进程,使得这个选择被所有进程接受。这个被选举的进程将会担任特定的角色,执行相应的任务,直到它“退休”(或者完成任务)或者发生故障。选举算法需要满足以下要求:

  1. 公平性: 所有相关的进程都应该有机会参与到领导者的选举中,保证公平性和平等性。
  2. 一致性: 所有进程最终应该同意选择的结果,避免分歧和混乱。
  3. 可靠性: 算法需要能够处理进程的故障和恢复,确保在进程故障后能够重新选举出新的领导者。

选举算法可以基于不同的原则和策略来设计。一些常见的选举算法包括:

  • Bully Algorithm(霸权算法): 进程之间按照优先级进行选举,具有更高优先级的进程可以成为领导者。
  • Ring Algorithm(环形算法): 进程按照顺时针或逆时针方向组成环,每个进程将消息传递给下一个进程,直到最终选择出领导者。
  • Flooding Algorithm(泛洪算法): 进程将选举消息发送给所有其他进程,确保所有进程都收到消息,然后按照某种规则选择领导者。

这些算法和更多其他变种都被用于不同的分布式系统场景,以确保在系统中选择合适的领导者进程。选举算法在构建分布式系统中扮演着关键角色,因为它们能够帮助系统在没有中心化控制的情况下进行自组织和协作。

  • 霸凌算法和环形算法。都是用进程ID来达成一致。
  • 如何衡量性能:
    • 总的网络带宽利用率,这与发送的消息总数成正比
    • 算法的周转事件,即在单个运行的启动和终止之间串行消息传输的次数

ring算法

  • 选出一个单一的进程,被称作协调器,拥有最大的ID

  • 进程组织在一个逻辑环里

    • 每个进程从左边邻居接收消息,向右边邻居发送消息
    • 每个进程存储一个本地活动列表,保持系统中每个活动进程的ID
  • GPT说的

    • 初始化: 每个进程开始时都认为自己是唯一的活跃进程,并将自己的ID加入本地的活跃列表。
    • 消息传递: 每个进程接收来自左侧邻居的消息,包括邻居的活跃列表。进程将自己的ID添加到接收到的活跃列表中,并将这个新的列表传递给右侧邻居。
    • 比较与更新: 每个进程在接收到消息后,将接收到的活跃列表与自己的本地列表进行比较。如果接收到的列表更长(表示有更大的ID进程存在),则更新本地列表。然后,将更新后的列表传递给右侧邻居。
    • 终止条件: 当一个进程的活跃列表中只包含自己的ID时,它成为了选举的协调者。此时,选举过程终止。
    • 这种算法确保了最终只有拥有最大ID的进程在它的活跃列表中只包含自己,从而成为了协调者。这个算法的关键在于,随着信息的传递,活跃列表中的信息逐渐变得完整,从而最终只有一个进程的列表中只包含自己,其他进程的列表中包含了自己和其他更小ID的进程,使得拥有最大ID的进程成为了协调者。
  • 环形结构: 系统中的进程被组织成一个逻辑环。每个进程知道它的后继进程是谁,即在环上的下一个进程。

  • 故障检测和选举消息: 如果任何一个进程检测到了它的后继进程(即环中下一个进程)的故障,它会构建一个选举消息,包含自己的进程ID(例如,网络地址和本地进程ID),并将该消息发送给它的后继进程。

  • 消息的传递: 如果后继进程正常运行,它会接收到选举消息。但如果后继进程也发生了故障,发起消息的进程会跳过这个故障进程,将消息发送给下一个正常运行的进程。这个过程会一直持续,直到找到一个正在运行的进程。

  • 消息列表的构建: 在消息中,每个接收到消息的进程都会将自己的进程ID添加到消息的列表中。这样,列表会包含从消息发起进程到当前进程的所有经过的进程ID。

  • 选举协调者: 最终,当消息回到发起它的进程时,它会在消息列表中找到自己的进程ID。然后,它将消息的类型修改为“协调者”(coordinator),并再次将消息发送出去。

  • 最终选举: 在消息中,每个进程会选择列表中具有最大进程ID的值作为协调者。这个消息会在环上循环传递,每个进程都选择最大的进程ID,最终确定了哪个进程拥有最大的ID,成为协调者。

  • 选举消息的删除: 一旦协调者消息完全传递一圈,它就被删除,选举过程结束。

  • image

    • 比如此时的P6是领导者,如果此时它坏了,那么其他进程会注意到P6没响应,接着这个进程会开始选举,会向下一个节点发送自己的id,比如此时的发送者是P3
    • P3发送3给5,P5发送35给P0,P0 发送350给P1,P1发送3501给P4,P4发送35015给P3,P3发现已经循环一周了,因为自己的ID在里面,然后从里面选出最大的5作为新的领导者。然后把P5是新的leader再发送一圈,发到P3之后就停止了
  • 带宽

    • 在选举过程中,消息的传递需要一定的带宽。在最坏情况下,需要N−1 条消息才能使最终的胜者收到选举消息(每个节点都向其他节点发送一条消息,总共 N−1 条消息)。然后,还需要额外的 N 条消息,使选举消息返回,以便胜者知道它已经胜出。最后,再有 N条消息用于通知所有人选举结果(即选举完成消息)。因此,带宽的总数是3N−1。
  • 周转时间

    • 周转时间是指在选举过程中传递的消息的总数。每个节点依次传递每个消息。在这种情况下,每个节点需要发送 3N−1 条消息,其中N−1 条用于选举消息的传递,N 条用于选举结果的返回,再加上一条用于选举完成消息的通知
  • GPT的例子,感觉不大对

    在一个有 N*=5 个节点的分布式系统中,每个节点需要向其他 N−1=4 个节点发送选举消息。

    1. 带宽计算:
      • 每个节点发送 N−1=4 条选举消息,总共4×5=20 条消息。
      • 选举消息返回需要N=5 条消息。
      • 通知选举结果需要 N=5 条消息。
      • 总带宽为20+5+5=30 条消息。
    2. 周转时间计算:
      • 每个节点需要传递 3N−1=14 条消息。每个节点需要发送4+1+1=6 条消息给其他节点。
      • 所有节点传递的消息总数为5×14=70 条消息。
    3. 所以,在这个修正后的例子中,带宽是30条消息,周转时间是70条消息。这个例子可以用来说明带宽和周转时间的概念。

bully霸凌算法

霸凌算法是一种简单而有效的选举算法,其基本思想是,当一个节点发现自己的领导者不再响应时,它会发起一次选举,争夺领导权。不需要明确的环

  1. 发起选举: 当一个节点发现自己无法联系到领导者时,它会发送选举消息给其他节点,通知它们当前的情况。
  2. 比较优先级: 如果一个节点收到了选举消息,它会比较自己的优先级(通常使用节点的ID作为优先级)和发起选举的节点的优先级。如果收到选举消息的节点的优先级更高,它会回复一个确认消息,表示自己愿意成为领导者。
  3. 成为领导者: 如果一个节点发起选举的消息没有得到回应,或者得到的回应中有节点的优先级比它高,那么它就放弃领导者的权利,新的领导者将是优先级最高的那个节点。
  4. 通知其他节点: 选举完成后,新的领导者会发送领导者选举成功的消息给所有其他节点,通知它们当前的领导者是谁。
  5. 霸凌算法的优势在于它的简单性和快速响应。然而,它也有一些限制,例如,如果网络中的节点数量很大,或者网络中的节点频繁加入或离开,可能会导致频繁的选举,增加通信开销

霸凌算法是一种基于消息传递的分布式选举算法,其中的节点在网络中可以任意连接,不需要形成特定的拓扑结构

  • 1.Election Message: Sent to announce election. 2.Answer (Alive) Message: Responds to the Election message. 3.Coordinator (Victory) Message: Sent by winner of the election to announce victory
  • image
  • 恢复和故障检测:
    • 当一个进程P从故障中恢复,或者故障检测器指示当前的协调者(Coordinator)已经失败时,进程P会执行以下操作。
  • 自我竞选:
    • 如果进程P的ID最高(即没有其他进程的ID比它大),它会向所有其他进程发送一个胜利(Victory)消息,并成为新的协调者。
    • 如果进程P的ID不是最高的,它会向所有比自己ID大的其他进程广播一个选举(Election)消息。
  • 等待回应:
    • 如果进程P发送了选举消息但没有收到回应,它会认为自己是新的协调者,然后向所有其他进程发送胜利消息。
  • 处理其他进程的消息:
    • 如果进程P收到了来自ID更高的进程的回应,它不再发送其他消息,而是等待接收来自新协调者的胜利消息。
    • 如果进程P收到了来自ID更低的进程的选举消息,它会回复一个回应消息,并重新开始选举过程,向比自己ID更高的进程发送选举消息。
  • 处理协调者消息:
    • 如果进程P接收到了一个协调者消息,它会将消息发送者视为新的协调者。
  • image
    • P6又死了,然后P3发现了,所以向ID比自己大的发送选举消息提醒他们要选举了;P4,P5都会发送answer回去;P4会向比自己高的P5,P6发送选举消息;P5也会向P6发送,但是没有回应,同时P5会answerP4的消息;此时P5是最厉害的了,向其他所有进程发送自己的胜利消息,成为最终的管理者
  • image
  • image
  • image

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值