分布式系统原理-事务和并发控制

上传人:wt****50 文档编号:50615212 上传时间:2018-08-09 格式:PPT 页数:85 大小:471KB
返回 下载 相关 举报
分布式系统原理-事务和并发控制_第1页
第1页 / 共85页
分布式系统原理-事务和并发控制_第2页
第2页 / 共85页
分布式系统原理-事务和并发控制_第3页
第3页 / 共85页
分布式系统原理-事务和并发控制_第4页
第4页 / 共85页
分布式系统原理-事务和并发控制_第5页
第5页 / 共85页
点击查看更多>>
资源描述

《分布式系统原理-事务和并发控制》由会员分享,可在线阅读,更多相关《分布式系统原理-事务和并发控制(85页珍藏版)》请在金锄头文库上搜索。

1、分布式系统事务和并发控制第八章 事务和并发控制n简介 n事务n嵌套事务n锁n乐观并发控制n时间戳排序n并发控制方法的比较n小结简介n事务的目标在多个事务访问对象以及服务器面临故障的情况下, 保证所有由服务器管理的对象始终保持一个一致的状态。n并发控制n增强可靠性n可恢复对象n利用持久存储保存状态信息简介n银行事务事例deposit(amount) /向帐户存amount数量的钱 withdraw(amount) /从帐户中取amount数量的钱 getBalance() - amount /返回帐户中余额 setBalance(amount) /将帐户余额设置成amountcreate(nam

2、e) - account /用给定的用户名创建一个新帐户 lookUp(name) - account /根据给定的用户名查找帐户,并返回该帐户的一个引用branchTotal() - amount /返回支行中所有帐户余额的总和Branch接口中的操作简介n简单的同步机制(无事务)n服务器上的原子操作- 使用多线程可提高服务器的性能- 采用锁机制保证线程同步- 原子操作:免受其它线程中执行的并发操作干扰的操作n通过服务器操作的同步加强客户的协同- 互斥- 生产者消费者Java中的wait和notify方法简介n事务的故障模型Lampson模型n对持久性存储的写操作可能发生故障- 写操作无效或

3、写入错误的值- 文件存储可能损坏- 读数据时可根据校验和发现损坏数据n服务器可能偶尔崩溃- 进程崩溃后,根据持久存储中的信息恢复- 服务器不会产生随机故障n消息传递可能由任意长时间的延迟- 消息可丢失、重复或者损坏- 接收方能够检测受损消息第八章 事务和并发控制n简介 n事务n嵌套事务n锁n乐观并发控制n时间戳排序n并发控制方法的比较n小结事务n事务的概念以原子方式执行的一系列操作,即1. 它们不受其它并发客户操作的干扰2. 所有操作或者全部成功完成,或者不产生任何影响n银行事务示例Transaction T:a.withdraw(100); b.deposit(100); c.withdra

4、w(200); b.deposit(200);事务n全有或全无:或者完全成功,或者不留下任何效果n故障原子性即使服务器崩溃,事务的效果也是原子的。n持久性一旦事务完成,它的所有效果将被保存到持久存储中n隔离性 每个事务的影响不受其它事务的影响事务n使用一个事务n事务协调者- 作用创建和管理事务- 示例openTransaction() - trans; 开始一个新事务,并返回该事务的唯一TID, TID用于事务的其它操作。 closeTransaction(trans) - (commit, abort); 结束事务:若返回commit,则成功提交;否则返回abort,标示放弃。 abortT

5、ransaction(trans); 放弃事务。事务n使用一个事务(续)n事务执行结果- 完全成功- 放弃事务客户放弃事务服务器放弃事务n事务执行历史示例 事务成功执行被客户放弃被服务器放弃 openTransactionopenTransactionopenTransaction操作操作操作 操作操作操作 服务器放弃事务操作操作向客户报告ERRORcloseTransactionabortTransaction事务n并发控制(一)n更新丢失问题初值:帐户A、B、C分别为$100、$200、$300操作:两次转帐(A、BC),每次转帐金额为B当前帐 户余额的10%期望结果:B的终值应为$242

6、事务事务T: balance = b.getBalance(); b.setBalance(balance*1.1); a.withdraw(balance/10)事务U: balance = b.getBalance(); b.setBalance(balance*1.1); c.withdraw(balance/10)balance = b.getBalance();$200balance = b.getBalance();$200b.setBalance(balance*1.1);$220b.setBalance(balance*1.1);$220a.withdraw(balance/1

7、0) $80c.withdraw(balance/10)$280事务n并发控制(二)n不一致检索初值:帐户A、B分别为$200、$200操作:转帐+查询银行所有帐户的总余额期望结果:总余额为$400事务事务V: a.withdraw(100)b.deposit(100)事务W: aBranch.branchTotal()a.withdraw(100);$100total = a.getBalance()$100total = total+b.getBalance()$300total = total+c.getBalance()b.deposit(100)$300事务n并发控制(三)n串行等价

8、性- 多事务正确运行效果推断若每个事务知道它单独执行的正确效果,则可以推 断出这些事务按某种次序一次执行一个事务的效果。- 串行等价的交错执行并发事务交错执行操作的效果等同于按某种次序一 次执行一个事务的效果。- 使用串行等价性作为并发执行的判断标准,可防止 更新丢失和不一致检索问题。事务事务T: balance = b.getBalance() b.setBalance(balance*1.1) a.withdraw(balance/10)事务: balance = b.getBalance() b.setBalance(balance*1.1) c.withdraw(balance/10)

9、balance = b.getBalance()$200b.setBalance(balance*1.1)$220 balance = b.getBalance()$220b.setBalance(balance*1.1)$242 a.withdraw(balance/10) $80c.withdraw(balance/10)$278事务事务V: a.withdraw(100); b.deposit(100)事务W: aBranch.branchTotal()a.withdraw(100);$100b.deposit(100)$300total = a.getBalance()$100tota

10、l = total+b.getBalance()$400total = total+c.getBalance() .事务n并发控制(三)n冲突操作- 冲突两个操作的执行效果和它们的执行次序相关- Read和Write操作的冲突规则不同事务的操作是否冲突原因readread否由于两个read操作的执行效果不依赖这 两个操作的执行次序 readwrite是由于一个read操作和一个write操作的执 行效果依赖于它们的执行次序writewrite是由于两个write操作的执行效果依赖于这 两个操作的执行次序事务n并发控制(三)n冲突操作(续)- 串行等价性两个事务串行等价的充要条件是,两个事务中所

11、有 的冲突操作都按相同的次序在它们访问的对象上执行 。- 非串行等价地执行事务示例事务T:x=read(i); write(i,10); write(j,20);事务U:y=read(j); write(j,30); z=read(i);事务事务T: 事务U: x = read(i)write(i, 10)y = read(j)write(j, 30)write(j, 20)z = read (i)事务n并发控制(四)n并发控制协议- 依据串行等价性- 目的将访问对象的并发事务串行化- 方法锁乐观并发控制时间戳排序事务n事务放弃时的恢复(一)n脏数据读取某个事务读取了另一个未提交事务写入的数据

12、事务T: a.getBalance() a.setBalance(balance + 10)事务U: a.getBalance() a.setBalance(balance + 20)balance = a.getBalance()$100 a.setBalance(balance + 10)$110 balance = a.getBalance()$110a.setBalance(balance + 20)$130commit transaction abort transaction 事务T放弃时的脏数据读取事务n事务放弃时的恢复(二)n事务可恢复性策略:推迟事务提交,直到它读取更新结果的

13、其它事 务都已提交。n连锁放弃- 某个事务的放弃可能导致后续更多事务的放弃- 防止方法:只允许事务读取已提交事务写入的对象事务n事务放弃时的恢复(三)n过早写入- 一些数据库在放弃事务时,将变量的值恢复到该事 务所有wtrite操作的“前映像”。- 为了保证使用前映像进行事务恢复时获得正确的结 果,write操作必须等到前面修改同一对象的其它事务 提交或放弃后才能进行。事务T: a.setBalance(105)事务U: a.setBalance(110)$100a.setBalance(105)$105a.setBalance(110)$110事务n事务放弃时的恢复(四)n事务的严格执行-

14、严格执行:read和write操作都推迟到写同一对象的其 它事务提交或放弃后进行- 可以真正保证事务的隔离性n临时版本- 目的:事务放弃后,能够清除所有对象的更新- 方法事务的所有操作更新将值存储在自己的临时版本中事务提交时,临时版本的数据才会用来更新对象第八章 事务和并发控制n简介 n事务n嵌套事务n锁n乐观并发控制n时间戳排序n并发控制方法的比较n小结嵌套事务n概念n嵌套事务:允许事务由其它事物构成n顶层事务n子事务n示例嵌套事务T : 顶层事务T1 = openSubTransactionT2 = openSubTransactionopenSubTransactionopenSubTr

15、ansactionopenSubTransactionopenSubTransactionT1:T11:mitprov. commitabortprov. commitprov. commitprov. commitcommitT2:T12:T21:T211:嵌套事务n优点n并发度高子事务可并发运行n健壮性强子事务可以独立提交和放弃n提交规则n事务在它的子事务完成以后,才能提交或放弃n子事务完成后,可独立决定是暂时提交或放弃n父事务放弃时,所有的子事务都被放弃n若子事务放弃,则父事务可以决定是否放弃n若顶层事务提交,则所有暂时提交的事务将最终提交第八章 事务和并发控制n简介 n事务n嵌套事务n

16、锁n乐观并发控制n时间戳排序n并发控制方法的比较n小结锁n互斥锁是一种简单的事务串行化实现机制n事务访问对象前请求加锁n若对象已被其它事务锁住,则请求被挂起,直至对象 被解锁n使用示例锁事务T balance = b.getBalance() b.setBalance(bal*1.1) a.withdraw(bal/10)事务U balance = b.getBalance()b.setBalance(bal*1.1) c.withdraw(bal/10) 操作锁操作锁openTransaction bal = b.getBalance()锁住B b.setBalance(bal*1.1)openTransaction a.withdraw(bal/10)锁住Abal = b.getBalance()等待事务T在B上的锁 clo

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号