- 1、本文档共43页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七章 分布式事务处理 * 分布式 2PC 协调者启动 2PC 参与者运行分布式算法达成全局提交/流产 T22 T21 T12 T11 T2 T1 T S2 S5 S4 S1地 S3 S000 T11流产 T12临时提交 T2流产 T22临时提交 T1临时提交 协调者 T21临时提交 第七章 分布式事务处理 * 2PC的问题 2PC协议是最为常用的分布式事务处理提交协议,但是,由于协议中涉及“等待” 问题,人们也把这种协议称为阻塞提交(blocking commit)协议。 就绪隐喻参与者“阻塞等待”协调者 如果协调者发生故障,参与者无法知晓 无法实现独立恢复。 如果多台服务器发生故障,无法进行独立的故障恢复工作。 第七章 分布式事务处理 * 分布式死锁 在各种涉及互斥的算法中,只要算法采用互斥锁,就有可能发生“死锁” 现象。 死锁的典型特征是一组事务处理形成了一条循环等待链 死锁处理: 置之不理 – 由程序员对其负责 预防 – 不存在运行系统支持 避免 – 运行系统支持 检测恢复 – 不同的算法 第七章 分布式事务处理 * T U V W W U T V (a) 简单循环链 (b) 复杂循环链 互斥 持有并等待 (a) T?U?V?W?T 不容抢占 (b) V?W?T?V 循环链 V?W?V 死锁 - 循环等待链 第七章 分布式事务处理 * 分布式事务处理的死锁例子 事务处理U 事务处理V 事务处理W 存款(D,100) 锁定D @ S3 ? ? ? ? ? ? 存款(B,300) 锁定B @ S2 ? ? 存款(A,200) 锁定A @ S1 ? ? ? ? ? ? ? ? 存款(C,500) 锁定C @ S3 取款(B,200) 等待B @ S2 ? ? ? ? ? ? 取款(C,100) 等待C @ S3 ? ? ? ? ? ? 取款(A,300) 等待A @ S1 死锁 第七章 分布式事务处理 * 分布式事务处理的死锁例子 S1 A S2 S3 D C B V W U 等待 锁定 锁定 锁定 锁定 等待 等待 S1: U ? V S2: V ? W S3: W ? U 第七章 分布式事务处理 * 等待-消亡规则: 如果 (ts(Ti) ts(Tj)) 则 Ti 等待, 否则 Ti 消亡 Ti不容许抢占Tj 新事务处理优先 回卷-等待规则: 如果 (ts(Ti) ts(Tj)) 则 Tj 回卷,否则 Ti 等待 如果Ti 先于Tj,抢占 Tj 旧事务处理优先 问题: 代价太高,死锁难得发生,随机性很强。强制性避免死锁算法需要检测每一次互斥操作,给系统带来过多的开销。 避免死锁算法 第七章 分布式事务处理 * 死锁检测 死锁是一种稳定的状态 尽管无法从局部状态检测分布式事务处理的死锁,但死锁依旧是环形等待链。 死锁检测算法: 中央式 – 周期性地收集等待状态 分布式 – 推出等待状态 提示式 – 构造检测体系 第七章 分布式事务处理 * S1 A S2 S3 D C B V W U wait lock lock lock lock wait wait S1 :U → V S2 :V → W S3 :W → U 中央检测算法 第七章 分布式事务处理 * 分布式检测算法 分布式死锁检测技术,称之为边跟踪(edge chasing) 算法。 这个算法并不需要构造全局等待图,而是由每一台服务器根据自己掌握的等待信息(局部等待图的边)来判断是否出现死锁。 这个算法的关键是在服务器之间传送的一种叫作探测(probe)的信件,一封探测信件代表全局等待图里的一条有向(等待)路径(path)。如果这封探测信件到达某个服务器,而该服务器发现信件里描述的路径已经构成一条有向环,则这条路径上的结点(事务处理)便陷入死锁。 第七章 分布式事务处理 * 边跟踪算法 [初始] :当服务器Si发现事务处理T开始等待事务处理U,而U已经在等待另一台服务器Sj管辖的数据,则Si向Sj发送一封探测信件,信中内容为等待边T → U。假如U所等待的是共享锁,则这封探测信就必须发往所有相关的服务器。 [检测] :当服务器Sj接到探测信件,便根据自己掌握的局部等待图判断是否出现死锁,并且进一步决定是否要把探测信件转发到其它服务器。例如,当Sj接收到探测信T → U,它首先检查U是否也在等待。如果U正在等待V,则Sj把这条边加入到探测信的路径中,T→U→V,如果V所等待的是服务器Sk中的数据锁,则这封更新后的探测信被转发到Sk。按照这种方法,探测信件沿着全局等待图逐步形成一条路径,每次经过转发时,
您可能关注的文档
- 南华大学电气工程学院电子测量技术课件 第9章.ppt
- 南华大学电气工程学院电子测量技术课件 第10章.ppt
- 南华大学电气工程学院电子电路设计与仿真课件第1章 NI Multisim 10系统(1).ppt
- 南华大学电气工程学院电子电路设计与仿真课件第1章 NI Multisim 10系统(2).ppt
- 南华大学电气工程学院电子电路设计与仿真课件第1章 NI Multisim 10系统(3).ppt
- 南华大学电气工程学院电子电路设计与仿真课件第2章 晶体管放大器电路(1).ppt
- 南华大学电气工程学院电子电路设计与仿真课件第2章 晶体管放大器电路(2).ppt
- 南华大学电气工程学院电子电路设计与仿真课件第2章 晶体管放大器电路(3).ppt
- 南华大学电气工程学院电子电路设计与仿真课件第2章 晶体管放大器电路(4).ppt
- 南华大学电气工程学院电子电路设计与仿真课件第2章 晶体管放大器电路(5).ppt
文档评论(0)