高级分布式系统-HW2

从分布式系统的角度,如果事件 a 和 b 具有 happens-before 的关系,a->b,我们说 b 对 a 有因果依赖。那么,从现实世界的角度,事件 b 的发生一定是与 a 有关系吗?为什么?

不一定有关系,分布式系统中的因果关系指的是时序关系,即时间的前后,并不是逻辑上的结果。用一个例子说明:某人分别收到了来自两个朋友的消息,这两个事件存在 happens-before 的关系,但实际上两条消息并不一定存在因果。

基于环的选举算法中,如果两个 Election 消息同时在循环时,可以杀掉其中一个。设计一个机制实现这个功能。

当一个进程接收到 Election 消息时:

  • 如果自己没有参选,则按照正常方式传递;
  • 如果自己参选了,则将消息发送方的编号与自己的比较:
    • 如果发送者的编号大于自己的编号,则丢弃这条消息;
    • 如果发送者的编号小于自己的编号,则继续传递这条消息;
    • 如果发送者的编号等于自己的编号,则说明消息已经传递一圈没有异议,将消息变成协调者消息。