• 分布式作业


    简直崩溃

    假设有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的性能容易成为瓶颈。按环顺序相当于串行,又有点浪费时间= =

  • 相关阅读:
    mysql报Fatal error encountered during command execution的解决办法
    C语言之算法初步(汉诺塔--递归算法)
    C语言中变量的作用域和生命周期
    C语言数据在内存分配
    ~~~
    数据结构笔记
    SQL笔记
    Java零碎知识点
    如何让eclipse在程序修改后,点击运行可以自动保存。
    [转载] java中静态代码块的用法 static用法详解
  • 原文地址:https://www.cnblogs.com/froid/p/4620561.html
Copyright © 2020-2023  润新知