03分布式

03分布式

  1. lamport
  2. Vector
  3. global state
  4. snapshot快照

lamport

  • 重点在发生顺序,实际时间和发生时间没关系
  • Two distinct events a and b are said to be concurrent (denoted by a||b),就是判断不出来谁先谁后,没有因果和逻辑关系
    • image
  • 两种算法题一般
    • 第一种是多个机器按一定时间间隔做事情,然后某一个机器在某相对时间向另一个发送消息,另一个需要在此相对时间的下一个收到,然后判断时间上是否正确,如果时间大于发送过来的时间,则继续按原间隔,如果不是,则变成发送时间+1。因为这个题一般会说明发送消息会按时间间隔发送过去
      • image
    • 第二个是
      • 每个事件对应一个 Lamport 时间戳,初始值为0
      • 如果事件在节点内发生,时间戳加1
      • 如果事件属于发送事件,时间戳加1并在消息中带上该时间戳
      • 如果事件属于接收事件,时间戳 = Max(本地时间戳,消息中的时间戳) + 1
      • 这个就是说明每个事件和发送事件是分开的,想发送东西必须先在自己节点上算上这个事情,然后再给别人发
      • image
  • 给定两个事件,不能从时间戳判断因果关系。a->b => C(a) < C(b);不可逆

Vector

  • 和第二个情况的lamport很像,只不过加上了其他节点的时间戳
  • image

global state

  • 在分布式系统中,全局状态(Global State)是指系统中所有参与者(节点、进程等)的局部状态的集合,以及它们之间的通信状态。全局状态的概念对于分布式系统的分析、故障诊断和一致性保证非常重要。全局状态有两个主要方面:
    1. 局部状态(Local State): 局部状态是每个参与者(节点、进程等)的本地状态。它包括了该参与者的所有信息,包括变量、数据结构、执行的代码、队列中的消息等。局部状态表示了一个参与者在某一时刻的快照。
    2. 通信状态(Communication State): 通信状态是描述分布式系统中消息传递的状态。它包括了消息发送和接收的信息,例如消息的发送队列、接收队列和消息传递的顺序。通信状态表示了消息在系统中的传递情况。
  • image
    • 意思就是如果有不通信道之间的传输,发送方和接收方必须都割出来

snapshot快照

  • 假设

    • 通道和进程都不会失败,并且通信是可靠的: 这意味着无论是通道还是进程,它们都不会出现崩溃或故障,而且消息传递是可靠的,每条消息都会被完整地传递,且仅传递一次。
    • 通道是单向的且提供FIFO有序消息传递: 这表示通道只能在一个方向上传递消息,并且消息的传递顺序是FIFO(先进先出)的,即按照消息发送的顺序来接收。
    • 进程和通道的图是强连通的: 这意味着系统中的任意两个进程之间都存在一条路径,即可以通过通道相互通信。
    • 任何进程都可以随时发起全局快照: 这表示任何一个进程都可以在任何时候启动全局快照,而不需要等待特定条件。
    • 在捕获全局快照时,进程可以继续执行和发送接收正常消息: 即使在执行全局快照的过程中,进程仍然可以继续它们的正常操作,包括发送和接收普通消息。

    这种系统的特点表明,它是一个强连通的、具有可靠通信的分布式系统,可以随时捕获全局状态快照,而不会中断进程的正常执行

  • 需要两个规则确保获得快照

    • Marker消息发送规则
      • 指示系统进行快照,并且记录通信信道的状态
      • 进程在确保记录自身状态后,发送任何其他消息之前,会向每个输出通道发送Marker信息
    • Marker消息接受规则
      • 进程收到来自信道的Marker消息时,
        • 如果没记录自身状态,直接现在记录状态,记录通道为空集,打开记录其他输入通道上到达的消息的功能
        • 如果记录了,那么进程记录信道的状态是这样的--自从上次保存状态以来接受道的消息的集合
  • Initiating a snapshot: 也就是开始创建 snapshot,可以由系统中的任意一个进程发起

    • 进程 Pi 发起: 记录自己的进程状态,同时生产一个标识信息 marker,marker 和进程通信的 message 不同
    • 将 marker 信息通过 ouput channel 发送给系统里面的其他进程
    • 开始记录所有 input channel 接收到的 message
  • Propagating a snapshot: 系统中其他进程开始逐个创建 snapshot 的过程

  • 对于进程 Pj 从 input channel Ckj 接收到 marker 信息:

    • 如果 Pj 还没有记录自己的进程状态,则
      • Pj 记录自己的进程状态,同时将 channel Ckj 置为空
      • 向 output channel 发送 marker 信息
    • 否则
      • 记录其他 channel 在收到 marker 之前的 channel 中收到所有 message
      • 所以这里的 marker 其实是充当一个分隔符,分隔进程做 local snapshot (记录进程状态)的 message。比如 Pj 做完 local snapshot 之后 Ckj 中发送过来的 message 为 [a,b,c,marker,x,y,z] 那么 a, b, c 就是进程 Pk 做 local snapshot 前的数据,Pj 对于这部分数据需要记录下来,比如记录在 log 里面。而 marker 后面 message 正常处理掉就可以了。
  • Terminating a snapshot: 算法结束条件

    • 所有的进程都收到 marker 信息并且记录下自己的状态和 channel 的状态(包含的 message
  • 感觉就是最后一个发生的进程的前面所有的进程都应该记录状态。一致性快照和一致性切一个道理

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值