分布式系统(三)

Global State 全局状态

是某一时刻在一个系统中每个进程和通道的状态
以下是两个不同时间的全局状态
在这里插入图片描述
在这里插入图片描述

进程,状态,事件

1.每个进程p与一个状态s相关
该状态包括了所有的局部变量和相关文件

2.每个通道也与一个状态相关

3.一个事件发生,会让进程或者通道中的状态发生变化
事件有三类(详见 分布式(二))

捕获一次全局状态很有用

1.可以检查系统状态
2.找到一些未引用变量
3.死锁检测
4.分布式debug

捕获全局变量

捕获系统的全局变量很难,因为精确的时钟同步很难同步。
如果我们不能同步时间,要怎么在进程之间捕获全局变量?

一些符号与定义

进程:p 事件:e
在这里插入图片描述
每个进程的历史,进程历史有一个有限前缀k,k个时间发生之后的状态为s

在这里插入图片描述
那么对于一个系统中,所有进程
在这里插入图片描述
如何知道某个特定的时间的全局变量?
**割集(cut)**是系统全局历史的自己,是进程历史前缀(prefix history)的并集
进程1到c1事件的历史前缀并上进程2到c2事件的历史前缀…
在这里插入图片描述

割集的边界(frontier)
每个进程处理最后一个事件的集合为
在这里插入图片描述
全局状态就是每个进程状态的集合
在这里插入图片描述

例子:
在这里插入图片描述

左边的割集是不一致的(inconsistent)
原因是消息没发就收到了,因果关系不对
右边割集是一致的(consistent)

要让割集一致,就要让它包含每个事件都包含了所有在这个事件之前发生的所有事件
在这里插入图片描述
一致割集对应的状态为一致的全局状态(consistent global state)

如何找到一致的全局状态

Chandy-Lamport Algorithm

记录的状态组合可能没有在同一时间发送,但是全局状态是一致的。
1.确认一个一致割集
2.记录对应每个进程的状态

系统模型需要基于以下假设:

1.系统有n个进程
2.通信通道是单向,且任意两个进程只有一个通道,而且FIFO(first in first out)
3.没有通道或者进程发生错误
4.所有信息是无损且不会重复的

要求:
1.快照不会影响进程其他的动作
2.任何进程都可以开始这个算法

算法步骤:

1.在进程pi里面 initial
(1)pi记录自己的状态
(2)创造一个特殊的marker message
(3) 发送marker给其他进程
(4)开始记录从其他通道收到的信息直到收到一个marker
2.当一个进程收到marker
(1)如果第一次收到
记录它自己的的状态
发送markers给其他通道
开始记录从其他通道收到的信息直到收到一个marker
在这里插入图片描述

标记接收与发送规则

进程pi标记接收规则:
当一个进程收到marker
(1)如果第一次收到
记录它自己的的状态
将发送marker过来的进程pk和自己的通道状态cki记为空集
记录从其他接入通道到达的消息
(2)不是第一次收到
pi把c的状态记录成保存其状态以来它在通道c上接收到的消息集合(之前第一次收到就开始记录其他通道的消息了)

进程pi标记发送规则:
pi记录自己状态后,向其他外出通道发送marker

算法何时停止

1.所有进程都收到了marker
记录了他们自己的状态
2.所有进程都从其他n-1个进入通道收到了marker
记录了所有通道的状态

如何找到这个割集frontier 和 channel state

frontier:找收到第一个marker前一个事件
channel state:看是否有没发送到的消息
在这里插入图片描述

Chandy-Lamport Algorithm的特性

事件i发生在事件j之前,而事件j发生在进程j记录状态之前,那么事件i也一定发生在进程i记录状态之前
在这里插入图片描述
在这里插入图片描述
反证:假设事件j发生在进程j记录状态之前,但是事件i发生在进程i记录状态之后
在这里插入图片描述
在这里插入图片描述
根据FIFO原则,考虑几个消息序列证明了I和J的关系,(消息m后发送,肯定是会比marker慢)假设不成立。

Chandy-Lamport Algorithm的有用性

1.safety
2.liveness

一些符号与定义

run是几个进程内顺序没问题,但是进程之间事件顺序不保证
在这里插入图片描述
linearization是全局事件都能保证happens-before规则
在这里插入图片描述
linearization不止一种情况,有些事件是并行的,所以顺序会不一样。

如果状态j对于状态i是可达的(reachable),那肯定有一个linearization将状态i转化为状态j。

状态转化(State Transition)

状态与状态之间的转化通过linearization实现,但是linearization也许不止一种
像这样,每一条路径都是一种linearization
在这里插入图片描述

Global-State Predicate(全局状态谓词)

从系统P的进程全局状态集映射到{True,False}的函数

两种办法推理(Liveness Safety)

Liveness
从任意一个状态S0,开始线性化走向L,对S可达的状态Sl,谓词为True

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
Safety

设有不希望有的性质(一个全局状态谓词)a,系统初始状态为S0,它的安全性是一个断言,即对所有可从S0可达的状态SL,a值都为false在这里插入图片描述
对于从S0可达的所有状态,P(S)=true
在这里插入图片描述

稳定状态谓词

liveness stable:一个状态一旦是true,它所有可达的(之后的)状态都要是true。
在这里插入图片描述
safety stable:一个状态一旦是false,它所有可达的(之后的)状态都要是false

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值