📜  Chandy–Lamport 的全局状态记录算法

📅  最后修改于: 2022-05-13 01:56:11.289000             🧑  作者: Mango

Chandy–Lamport 的全局状态记录算法

每个分布式系统都有许多进程在许多不同的物理服务器上运行。这些进程使用文本消息通过通信渠道相互通信。这些进程既没有共享内存也没有公共物理时钟,这使得确定瞬时全局状态的过程变得困难。

一个进程可以在给定的时间记录它自己的本地状态,但传输中的消息(在其传递途中)不会包含在记录状态中,因此系统的实际状态在时间之后将是不正确的传递消息。

ChandyLamport是第一个提出一种算法来捕获分布式系统的一致全局状态的人。所提出算法背后的主要思想是,如果我们知道一个进程发送的所有消息都已被另一个进程接收,那么我们可以记录系统的全局状态。

分布式系统中的任何进程都可以使用称为MARKER的特殊消息启动这种全局状态记录算法。该标记跨越所有通信通道遍历分布式系统,并使每个进程记录自己的状态。最后记录整个系统的状态(全局状态)。该算法不会干扰进程的正常执行。

算法假设:



  • 分布式系统中有有限数量的进程,它们不共享内存和时钟。
  • 通信通道的数量是有限的,它们是单向的和 FIFO 有序的。
  • 系统中任意两个进程之间都存在通信路径
  • 在通道上,消息的接收顺序与发送顺序相同。

算法:

  • 进程 P 的标记发送规则:
    • 进程p记录自己的本地状态
    • 对于来自进程P 的每个传出通道CP在沿 C发送任何其他消息之前沿C发送标记。
      注意:进程 Q 将在他的传入通道 C1 上收到此标记。)
  • 进程 Q 的标记接收规则:
    • 如果进程Q还没有记录它自己的本地状态,那么
      • 将传入通道 C1 的状态记录为空序列或空。
      • 记录传入通道C1的状态后,进程Q遵循标记发送规则
    • 如果进程Q已经记录了它的状态
      • 记录输入信道C1沿着通道C1接收到的消息的序列的状态Q的状态被记录后和Q之前,从处理P.接收的标记一起C1

需要对系统进行快照或记录全局状态:

  • 检查点:它有助于创建检查点。如果应用程序以某种方式失败,则可以重新使用此检查点
  • 垃圾收集:它可以用来删除没有任何引用的对象。
  • 它可用于死锁和终止检测。
  • 它也有助于其他调试。