分布式系统设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
全局状态
全局状态由局部状态集和通信通道的状态集 组成。 注意,这是全局状态的细化定义,原来全局 状态只是定义为局部状态集。仅仅定义为 局部状态集可能产生不完全的系统视图。
全局状态
考虑一个银行系统,它有两个支行A和B。假设我 们从账户A(原来有$500)转账$100到账户B (原来有$200)。如果两个账户都在它们的局部 状态发生变化后才记录下它们的变化,那么当 $100还在传送途中时,也就是说,当$100还在连 接账户A和B的通道上时,账户A的余额为$400, 账户B的余额为$200。注意,以上情况将产生不 完全的系统视图,但它仍然是(弱)一致的。然 而,如果我们假设账户A在传送之前记录它的状 态而账户B在传送完成后记录它的状态,那么总 的余额就是$500 + $300 = $800。显然,这是一个 不一致的全局状态。
全局状态
在图3-10c中,虽然切割线跨越了通信线,但两 个切割事件不是因果关联的,所以它不会导致切 割的不一致。实际上,这种情况对应于正在传送 中的消息——一个一致的但非强一致的状态。 在图3-10d中,两个切割事件是因果关联的,所 以它们形成了一个不一致的切割。
全局状态
在图3-9中,初始状态 和最后状态是强一致 的全局状态,其他的 是一致的(但不是强 一致的)。
发生在先关系
如果ab或ba,则事件a和b是因果关联的。 如果两个不同的事件a和b,ab并且ba, 则称事件a和b是并发的(记为a||b)。
时空视图time-space view
发生在先关系的定义可以通过时空视图最好 地说明。 在时空视图中,水平方向代表空间,垂直方 向代表时间,带标志的垂直线代表进程, 带标志的点代表事件,带箭头的线代表消 息。
时空视图例子
规则1:
a0 a1 a2 a3 b0 b1 b2 b3 c0 c1 cபைடு நூலகம் c3
规则2:
a0 b3 b1 a3, b2 c1, b0 c2
还可以从b1b2, b2c1,c1c2推出 b1c2。
事件a2和c0是并发的, 即a2||c0。
发生在先关系 Happened-Before Relation
发生在先关系(用符号表示)的定义如下: 1)如果a和b是同一个进程中的事件并且a在b之前 被执行,则ab。 2)如果a是某个进程发送消息的事件,b是另外一 个进程接收该消息的事件,则ab。 3)如果ab且bc,则ac。 一般,aa对任何事件a都成立。这说明是一个 非自反的偏序。
全局状态
一般,在一致的全局状态中,通信通道的状 态应为在发送方记录状态之前沿着该通道 发送的消息序列扣除掉在接收方记录状态 之前沿着该通道接收到的消息序列。注意, 要记录通道的状态以保证以上规则是很难 的。另一种记录全局状态的选择是不使用 通道状态。记录下来的状态可能是一致的 也可能是不一致的。
全局状态
关系
笛卡尔乘积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中的二元关系可能具有如下基本性质: 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)
接收方Q的规则: /* 沿着通道chan收到一个标志 */ [Q还没有记录它的状态 [记录通道chan的状态为一个空序 列并遵循“发送方的规则” ] □Q已经记录了它的状态 [记录通道chan的状态为沿着通道 chan按收到的消息序列,这些消 息序列是在最后一次记录状态之 后、接收到标志之前收到的 ] ]
全局状态
全局状态GS是一致的当且仅当 ij,inconsistent(LSi,LSj)= 全局状态GS是非传送中的当且仅当 ij,transit(LSi,LSj)= 如果一个全局状态是一致的并且是非传送中 的,那么它就是强一致的,也就是说,局 部状态集是一致的并且没有消息正在传送 中。
全局状态
例3.3考虑一个由三个支行A、B和C通过单向通 道连网组成的分布式银行系统(见图3-8)。 图3-8表示了银行系统的事件(事务)的时空视 图。图3-8中的系统的全局状态序列在图3-9中表 示。注意,全局状态是基于图3-8中事件的位置 (时刻)得到的。在这个例子中,全局状态的改 变是由一个外部事件触发的:发送或接收。在图 3-8的例子中,有四对发送和接收事件,对应于 八个外部事件。
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中,有下列特殊的关系:
全域关系: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
关系
全局状态
时间片的概念还可以通过一种图形化称之为 切割(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中。符号代表“不存在”。
关系
从有限集合A={a1, a2, …, am}到有限集合 B={b1, b2, …, bn}的二元关系R可以有三种 表示方法: 集合方法 关系矩阵:对应于R有一个矩阵[rij]mn
1 rij 0 当 ai , b j R时 当 ai , b j R时
全局状态快照
Chandy和Lamport[6]提出了一个简单的分 布式算法用于捕获一致的全局状态,也叫 做全局状态的快照。它假设所有的通道都 是FIFO并且有一套标志沿着这些通道传送。 在每个节点上有一个进程在运行。
全局状态快照
发送方P的规则: [P记录它的局部状态 || P在所有还没发送过 标志的通道上发送 一个标志 ]
关系
性质
自反 反自反 对称
关系矩阵
对角线上所 有元素均为1 对角线上所 有元素均为0 对称矩阵
关系图
每个结点都有一个圈 每个结点都没有圈 当ij时如果从ai到aj有条弧,则从aj 到ai必有弧
反对称
传递
当rij =1时 rji=0
当ij时如果从ai到aj有条弧,则从aj 到ai必没有弧
如果从ai到aj有条首尾相接的弧序列, 则从ai到aj必有一条直接相连的弧
图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的消息。
基于传送的假定,通道可以分为: FIFO(先进先出):如果一个通道保持通过它 发送的消息的顺序,就被称做是FIFO。 因果顺序传送:假设进程P1和P2分别在事件e1和 e2中给进程广发送消息m1和m2。如果e1在e2之前 发生,则进程P3在接收m2之前接收m1。 随机顺序传送:对于随机顺序传送的通道没有限 制。 在没有明确说明给定通道的类型时,我们都假设它 是FIFO通道。
全局状态
给定一个时间片E,我们如下定义和该时间 片相关的全局状态GS(E): 如果E中没有进程Pi的事件,则LSi就是Pi的 初始状态;否则,LSi定义为Pi在E中最后 一个事件的最终状态。 对每个通道c,我们定义c在GS(E)中的状 态为一个消息序列,这些消息是所有被E 中的某个事件发送但被一个不在E中的事 件接收的所有消息。
全局状态
实际上,一个切割C是一致的当且仅当没 有两个切割事件是因果关联的。一个切割 可以图形化地表示为由一条点线连按的切 割事件集。如图3-10,点线可能“跨越” 也可能不“跨越”通信线。
全局状态
在图3-10a和3-10b中,切割线都没有跨越 通信线,所以对应的状态是一致的。
全局状态
在图3-10a和3-10b中,切割线都没有跨越 通信线,所以对应的状态是一致的。
全局状态快照
标志的作用是“清除”对应的通道,虽然发送一个 标志后仍然可以沿着一个通道发送正常的消息, 如果一个节点上的进程在它的每个输入通道上已 经执行并接收到一个标志消息的话,就称它已经 完成它的那部分算法。 很容易说明如果至少有一个进程启动了算法,也就 是说,它扮演发送方P的角色,那么每个进程都 将最终完成它的那部分算法。而且,同时启动快 照算法的进程数无关紧要。
关系
存在既不是自反的,又不是反自反的的关 系。例如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中的全(线性)序关系。
全局状态
类似地,对于每个进程一般有以下假设: (a)正常情况下,每个进程有一个唯一 的id,并且每个进程知道它自己id和其 他进程的id。 (b)每个进程知道它们的邻居包括它们 的id。
全局状态
基本想法是把时间片看做是事件的一个划分: 发生在时间片“之前”(表示为)的事 件和发生在时间片之后的事件。 我们正式定义时间片为事件的前集E: 如果bE并且ab,则aE。 如果EE’,则时间片E比时间片E’早。 不像真正的时钟时间,时间片不是全序的。