当前位置:文档之家› 分布式系统设计

分布式系统设计


全局状态
全局状态GS是一致的当且仅当 ij,inconsistent(LSi,LSj)= 全局状态GS是非传送中的当且仅当 ij,transit(LSi,LSj)= 如果一个全局状态是一致的并且是非传送中 的,那么它就是强一致的,也就是说,局 部状态集是一致的并且没有消息正在传送 中。
全局状态快照

Chandy和Lamport[6]提出了一个简单的分 布式算法用于捕获一致的全局状态,也叫 做全局状态的快照。它假设所有的通道都 是FIFO并且有一套标志沿着这些通道传送。 在每个节点上有一个进程在运行。
全局状态快照
发送方P的规则: [P记录它的局部状态 || P在所有还没发送过 标志的通道上发送 一个标志 ]
时空视图例子

规则1:
a0 a1 a2 a3 b0 b1 b2 b3 c0 c1 c2 c3

规则2:
a0 b3 b1 a3, b2 c1, b0 c2

还可以从b1b2, b2c1,c1c2推出 b1c2。

事件a2和c0是并发的, 即a2||c0。
全局状态
时间片的概念还可以通过一种图形化称之为 切割(cut)的表示法来得到。 分布式计算的切割是一个集合C = {c1, c2,…,c3},其中ci是进程Pi的切割事件, 也就是对应于切割的一个局部状态,设e i 是Pi的一个事件。一个切割C是一致的当且 仅当 PiPj, e ie j (e i e j) (e j c j) (e i e i) 其中,ci和cj在C中。符号代表“不存在”。
全局状态


在图3-10c中,虽然切割线跨越了通信线,但两 个切割事件不是因果关联的,所以它不会导致切 割的不一致。实际上,这种情况对应于正在传送 中的消息——一个一致的但非强一致的状态。 在图3-10d中,两个切割事件是因果关联的,所 以它们形成了一个不一致的切割。
全局状态

在图3-9中,初始状态 和最后状态是强一致 的全局状态,其他的 是一致的(但不是强 一致的)。
全局状态


例3.3考虑一个由三个支行A、B和C通过单向通 道连网组成的分布式银行系统(见图3-8)。 图3-8表示了银行系统的事件(事务)的时空视 图。图3-8中的系统的全局状态序列在图3-9中表 示。注意,全局状态是基于图3-8中事件的位置 (时刻)得到的。在这个例子中,全局状态的改 变是由一个外部事件触发的:发送或接收。在图 3-8的例子中,有四对发送和接收事件,对应于 八个外部事件。
在集合A中,有下列特殊的关系:

全域关系:EA=A A={<ai, aj> | ai, aj A} 恒等关系:IA = {<a, a> | a A} 空关系: ZA =
如果R和S都是A中的二元关系,则下列关系:

RS= {<ai, aj> | <ai, aj> R <ai, aj> S} RS= {<ai, aj> | <ai, aj> R <ai, aj> S} R-S= {<ai, aj> | <ai, aj> R <ai, aj> S}
关系图:集合中的元素用结点表示,当且仅 当<ai, bj>R时,从ai到bj有一条有向边。
关系
例如,设A={1,2,3,4},R={<a, b>|ab},则关 系矩阵为左下图,关系图为右下图。
1 1 MR 1 1
0 1 1 1
0 0 1 1
0 0 0 1
关系
接收方Q的规则: /* 沿着通道chan收到一个标志 */ [Q还没有记录它的状态 [记录通道chan的状态为一个空序 列并遵循“发送方的规则” ] □Q已经记录了它的状态 [记录通道chan的状态为沿着通道 chan按收到的消息序列,这些消 息序列是在最后一次记录状态之 后、接收到标志之前收到的 ] ]
关系
笛卡尔乘积AB的任意一个子集R确定了 一个由集合A到集合B的二元关系。 如果<a, b> R,则可以写成aRb,否则写 成aRb。 关系R的定义域定义为 D(R) = {a | (b)(<a, b> R)} 关系的值域定义为 R(R) = {b | (a)(<a, b> R)} 特别,称A到A的关系为A中的关系。

关系
从有限集合A={a1, a2, …, am}到有限集合 B={b1, b2, …, bn}的二元关系R可以有三种 表示方法: 集合方法 关系矩阵:对应于R有一个矩阵[rij]mn
1 rij 0 当 ai , b j R时 当 ai , b j R时

5月9日(周日)调上5月7日(周五)的课程; 5月10日(周一)开始恢复正常上课。

关系




一对以固定顺序排列着的客体叫有序对。常用 <a,b>表示有序对。 如果一个有序对的第一元素是一个n-1重序元 (n 3),则该有序对是n重序元。常将n重序 元<<x1, x2, …, xn-1>, xn>简写成 <x1, x2, …, xn-1, xn>。 集合A和B的笛卡尔乘积定义为 AB={<a, b> | a A b B} 集合A1, A2, …, An的笛卡尔乘积定义为 A1A2…An={<a1, a2, …, an> | i(ai Ai )}
全局状态
类似地,对于每个进程一般有以下假设: (a)正常情况下,每个进程有一个唯一 的id,并且每个进程知道它自己id和其 他进程的id。 (b)每个进程知道它们的邻居包括它们 的id。
全局状态
基本想法是把时间片看做是事件的一个划分: 发生在时间片“之前”(表示为)的事 件和发生在时间片之后的事件。 我们正式定义时间片为事件的前集E: 如果bE并且ab,则aE。 如果EE’,则时间片E比时间片E’早。 不像真正的时钟时间,时间片不是全序的。
全局状态
给定一个时间片E,我们如下定义和该时间 片相关的全局状态GS(E): 如果E中没有进程Pi的事件,则LSi就是Pi的 初始状态;否则,LSi定义为Pi在E中最后 一个事件的最终状态。 对每个通道c,我们定义c在GS(E)中的状 态为一个消息序列,这些消息是所有被E 中的某个事件发送但被一个不在E中的事 件接收的所有消息。
关系

存在既不是自反的,又不是反自反的的关 系。例如A = {1, 2}中的二元关系 R = {<1, 1>, <1, 2>}
存在既是对称的,又是反对称的的关系。 例如A = {1, 2}中的二元关系 R = {<1, 1>, <2, 2>}

关系
设R是A中的二元关系, 如果R是自反的、对称的和传递的,则称R 是A中的等价关系。 如果R是自反的和对称的,则称R是A中的 相容关系。 如果R是自反的、反对称的和传递的,则 称R是A中的半(偏)序关系。 如果A中的任意两个元素a和b都是可比较 的,即aRb或bRa至少有一个成立,则称R 是A中的全(线性)序关系。
发生在先关系 Happened-Before Relation
发生在先关系(用符号表示)的定义如下: 1)如果a和b是同一个进程中的事件并且a在b之前 被执行,则ab。 2)如果a是某个进程发送消息的事件,b是另外一 个进程接收该消息的事件,则ab。 3)如果ab且bc,则ac。 一般,aa对任何事件a都成立。这说明是一个 非自反的偏序。
关系
A中的二元关系可能具有如下基本性质: R是自反的当且仅当(a)(aRaRa) R是对称的(a)(b)(a, bAaRbbRa) R是传递的 (a)(b)(c)(a, b, cA aRb bRcaRc) R是反自反的(a)(aAaRa) R是反对称的 (a)(b)(a, bA aRb bRaa = b)
全局状态
一般,在一致的全局状态中,通信通道的状 态应为在发送方记录状态之前沿着该通道 发送的消息序列扣除掉在接收方记录状态 之前沿着该通道接收到的消息序列。注意, 要记录通道的状态以保证以上规则是很难 的。另一种记录全局状态的选择是不使用 通道状态。记录下来的状态可能是一致的 也可能是不一致的。
全局状态
发生在先关系
如果ab或ba,则事件a和b是因果关联的。 如果两个不同的事件a和b,ab并且ba, 则称事件a和b是并发的(记为a||b)。
时空视图time-space view
发生在先关系的定义可以通过时空视图最好 地说明。 在时空视图中,水平方向代表空间,垂直方 向代表时间,带标志的垂直线代表进程, 带标志的点代表事件,带箭头的线代表消 息。
图3-8银行系统的网络实例 图3-9图3-8中的系统的全局状态序列
全局状态
令LSi为进程Pi的局部状态,则全局状态GS = (LS1,LS2,…,LSn)。 这里的全局状态仅由局部状态定义,也就是 说,不包括每个通道的状态。 所以状态可能是一致的也可能是不一致的。
全局状态
传送中:transit(LSi,LSj)= {m | send(m)LSi receive(m) LSj} 集合transit包括了进程Pi和Pj之间的通道上 的所有消息。 不一致的:inconsistent(LSi,LSj)= {m | send(m) Lsi receive(m) LSj} 集合inconsistent包括了所有接收事件记录在 Pj而发送事件没记录在Pi的消息。
全局状态

实际上,一个切割C是一致的当且仅当没 有两个切割事件是因果关联的。一个切割 可以图形化地表示为由一条点线连按的切 割事件集。如图3-10,点线可能“跨越” 也可能不“跨越”通信线。
相关主题