zoukankan      html  css  js  c++  java
  • 分布式-选举算法

    分布式-选举算法

    本文是《分布式系统原理与范型》读书笔记。

    分布式选举,现在大家都知道的是Paxos算法。。。。。

              许多分布式算法需要一个进程充当协调者、发起者或者其他某种特殊的角色。通常由哪个进程充当这个较色并不重要,重要的是它们中要有一个进程来充当。我们假设每个进程有一个唯一的编号,同时还假设每个进程知道所有其他进程的编号。但是进程不知道当前哪个进程正在运行,以及哪些进程崩溃了。

    1、bully算法。

    当任何一个进程发现协调者不响应请求时,他发起一次选举,选举过程如下:

    a P进程向所有编号比他大的进程发送一个election消息;

    b 如果无人响应,则P获胜,成为协调者

    c 如果编号比他大的进程响应,则由响应者接管选举工作,P的工作完成。

       任何一个时刻,一个进程只能从编号比他小的进程接受election消息,当消息到达时,接受者发送一个OK消息给发送者,表明它在运行,接管工作。

    最终除了一个进程外,其他进程都放弃,那个进程就是新的协调者。

        他将获胜消息发送给其他所有进程,通知他们新的协调者。

         当一个以前崩溃的进程恢复过来了后,它将主持一场选举。如果该进程恰好是当前运行进程中编号最大的进程,它将获胜,故此成为欺负算法。

    2、环算法

    该环算法不适用令牌,假设进程按照物理或者逻辑顺序进行排序,那么进程都知道它的后继者。

    当任何一个进程注意到协调者不工作时,它构造一个带有自己的进程号的election消息,并将消息发送给后继者。如果后继者崩溃了,发送者沿着此环跳过它的后继者发送给下一个进程,或者再下一个进程。直到找到一个正在运行的进程。

    在每一步中,发送者将自己的进程编号加入到消息中,以使自己成为协调者候选人之一。

    最终消息返回到发起这次选举的进程,当发起者收到一条包含自己进程编号的消息时,识别出来。此时消息编程coordinator消息,并再一次绕环运行,向所有进程通知谁是协调者(成员列表中进程号最大的那个)

     
     
  • 相关阅读:
    jq insertBefore 的返回值
    微信公众号-定位之地址逆解析&导航
    微信JS-SDK
    Vue
    ES6-函数的扩展
    ES6-数组的扩展
    JSP
    JS
    HTML+CSS
    jdbc操作数据库
  • 原文地址:https://www.cnblogs.com/developer-ios/p/5300430.html
Copyright © 2011-2022 走看看