zoukankan      html  css  js  c++  java
  • 分布式作业

    简直崩溃

    假设有3个节点,其ID分别为1、2、3。开始运行时,每个节点的leaderId都为1

    (1)节点1、2、3启动后,都进入looking状态,开始leader选举。令1为始发节点,将其加入nowNodes中,并设置它的isStart为真。则节点1查找全局变量totalNodes,发现除了自己还有2和3节点,则向2,3发送自己的nowNode消息。

    (2)节点2收到节点1的消息,首先查看当前状态,发现STATE处于looking状态。查看自己的状态isStart是否为真[初始化均为假],发现否,则不能结束。然后节点2在nowNodes中查找是否已存在自己,不存在,将自己加入nowNodes中。查找全局变量totalNodes,发现3还不在nowNodes中,然后向3发送nowNodes

    感觉不可能建一个全局变量,得到所有进程的id号,并存入链表中。

    如果发送规则,是向除了我,并且没有响应过的节点发,则死掉的节点一直不会回应,有很多冗余的发送【第一次不回应,就该标记为死亡节点,但是万一中途活了呢】,而且重要的是消息不会回到始发节点,算法没法结束。

    如果向除了自己的节点发,冗余消息则太多了。

    或者,传递的消息中就应该包含始发节点的id,当前的节点,发现没有未响应的活着的节点的时候,就将消息发送给始发节点,传递结束。

    但是,我感觉环顺序是没有用的。

    问题就是要选择一个leader,让leader广播不是挺好吗?当然广播,leader的性能容易成为瓶颈。按环顺序相当于串行,又有点浪费时间= =

  • 相关阅读:
    awk应用
    字符串应用,expect预期交互,数组,正则表达式
    for,while循环,case分支,shell函数
    数值运算,if结构
    shell基础应用,变量的扩展应用
    rsync基本用法与配置,split分离解析
    PXE自动装机
    配置DNS服务器
    进程查看,终止
    应用技巧,vim用法,编译安装软件包
  • 原文地址:https://www.cnblogs.com/froid/p/4620561.html
Copyright © 2011-2022 走看看