收藏 分享(赏)

分布式管理.ppt

上传人:无敌 文档编号:1376888 上传时间:2018-07-07 格式:PPT 页数:58 大小:210.50KB
下载 相关 举报
分布式管理.ppt_第1页
第1页 / 共58页
分布式管理.ppt_第2页
第2页 / 共58页
分布式管理.ppt_第3页
第3页 / 共58页
分布式管理.ppt_第4页
第4页 / 共58页
分布式管理.ppt_第5页
第5页 / 共58页
点击查看更多>>
资源描述

1、分布式事务管理与恢复,事务概念,事务是访问或更新各种数据项的程序执行单元.事务必须保证数据库的一致性事务执行期间数据库可能不一致,事务概念-续,当事务提交(commit)时数据库必须是一致的,Database,Consistent,Consistent,事务概念-续,两个问题:故障 各种软硬件故障并发执行 多个事务同时执行,事务性质,ACID原子性(Atomicity) 事务的操作要么全部执行, 要么全部不执行 一致性(Consistency) 并发执行的多个事务,其操作的结果应与以某种顺序串行执行这几个事务所得的结果相同. 持久性(Durability) 当事务提交后, 其操作的结果将永久化

2、, 而与提交后发生的故障无关,事务性质-续,独立性( Isolation) 虽然可以有多个事务同时执行,但是单个事务的执行不应该感知其他事务的存在,因此事务执行的中间结果应该对其他并发事务隐藏 一对事务 Ti 和 Tj的执行, 看起来好像是或者 Ti 在Ti 执行结束之后才开始执行,或者Tj,是在 Ti执行结束之后才开始执行,举例,从账号A向账号B转账 $50: 1. read(A) 2. A := A 50 3. write(A) 4. read(B) 5. B := B + 50 6. write(B),举例-续,一致性要求 事务执行后A 和 B账号的总金额不变原子性要求 如果事务在第3步

3、和第6步之间故障, 系统应该保证事务对数据库的修改没有产生,否则将导致不一致性,举例-续,持久性要求 一旦用户通知说事务已经完成(即$50 转账成功),那么由该事务对数据库的修改就必须保证是永久的,即使是发生故障也如此,举例-续,独立性要求 如果在第 3步和第6步之间, 允许其他事务访问被修改的数据库的中间结果, 那么它将见到一个不一致的数据库 (也就是说, A + B 的和少于它的正确值) 当然事务的串行执行将不会出现这种情况,但是数据库中事务并行执行的优点就损失了,事务状态,活动 从事务开始执行的初始状态始, 事务执行中保持该状态部分提交 事务的最后一个语句执行后进入该状态失败 一旦发现事

4、务不能正常执行时进入该状态夭折 当事务被回滚后,数据库恢复到事务开始执行前的状态。 事务夭折后有两种选择重启动 仅当没有内部逻辑错误时KILL提交 当事务成功执行后.,事务状态-续,aborted,committed,failed,Partiallycommitted,active,分布式事务,分布式事务是由若干个不同Site上的子事务组成的事务事务的ACID性质此时事务的原子性、一致性、持久性、独立性等都要将每个Site上的子事务考虑在内,分布式事务结构,Begin Trans . . . .Abort/Commit,Begin Trans T1 T2 . . . Tn Abort/Comm

5、it,进程协作,进程 系统中可以并行执行的一段操作序列,分布式事务中的子事务序列是进程方式完成过程 不可并行执行的操作序列,事务代理(Agent) 应用在各个Site上执行的若干进程,称作应用在该Site上的代理。代理可以执行应用程序员写的程序,也可以执行系统的原语函数,不同代理间通过报文实现通讯,根代理(Root Agent) 应用启动Site上的代理。根代理所在的Site称作原发Site。 一般,根代理负责发系统原语,只有根代理可以请求创建新代理。,事务代理,转账应用,事务在两个账户之间执行“基金汇兑”操作。全局关系 Account (Account-number, Amount)假设账户

6、分布在网络的不同站点上。,全局级转帐事务FUND_TRANSFER:read (terminal,$AMOUNT,$FROM_ACC,$TO_ACC);begin_transaction;select AMOUNT into $FROM_AMOUNT from ACCOUNT where ACCOUNT_NUMBER=$FROM_ACC;if $FROM_AMOUNT-$AMOUNT0 then abortelse begin update ACCOUNT set AMOUNT = AMOUNT-$AMOUNT where ACCOUNT_NUMBER = $FROM_ACC; update

7、ACCOUNT set AMOUNT = AMOUNT+$AMOUNT where ACCOUNT_NUMBER = $TO_ACC; commitend,输入:汇出金额和转入/转出帐号,事务开始:检查转出帐号中是否 有足够的转出资金?,更新转出帐号存款余额创建AGENT1向代理1送消息:转入帐号,金额,等待来自AGENT1的消息,成功?,提交事务:成功结束,撤消事务:失败结束,ROOT_AGENT,AGENT,接收来自根代理的信息,更新转入帐号存款余额,发送执行消息给根代理(成功或失败),是,否,否,转账应用处理流程,ROOT_AGENT;read(terminal,$AMOUNT,$FRO

8、M_ACC,$TO_ACC);begin_transaction;select AMOUNT into $FROM_AMOUNT from ACCOUNT where ACCOUNT_NUMBER=$FROM_ACC;if $FROM_AMOUNT-$AMOUNT0 then abortelse begin update ACCOUNT set AMOUNT = AMOUNT-$AMOUNT where ACCOUNT_NUMBER = $FROM_ACC;create AGENT;send to AGENT($AMOUNT,$TO_ACC);commit/*这里省略了等待消息和判别*/end

9、AGENT;receive from ROOT_AGENT($AMOUNT,$TO_ACC);update ACCOUNT set AMOUNT=AMOUNT+$AMOUNT where ACCOUNT=$TO_ACC;send to ROOT_AGENT(SUCCESS/FALL),转账事务的两个代理,事务管理目标,效率的几个重要方面CPU和主存的使用控制报文响应时间可用性目标维护事务的ACID性质获得最小的主存和CPU开销,降低报文数目,加快响应时间获得最大限度的可靠性和可用性,事务管理,DTM功能 保证分布式Trans的特征,特别是原子性支持分布式Trans执行的位置传递LTM功能保证本

10、地Trans的特征代替DTM把分布Trans的执行与恢复信息记入Log接收并遵从本Site上DTM发来的Log原语,记入Log并执行之,DTM,LTM,Site,Log原语: Local Begin-Trans, Local-Commit, Local-Abort,分布式Trans执行的控制模型,主从模型 LTM之间无通信三角模型 LTM之间有通信层次控制模型 LTM之间有通信,并且LTM还可再创建Agent,控制其它LTM执行,分布式事务管理器,局部事务管理器,局部事务管理器,局部事务管理器,数据库,数据库,数据库,命令,命令,命令,回答,回答,回答,主从控制,分布式事务管理器,局部事务管理

11、器,局部事务管理器,数据库,数据库,命令,命令,回答,回答,临时数据,三角控制,分布式事务管理器,局部事务管理器,数据库,命令,命令,回答,回答,局部事务管理器,局部事务管理器,局部事务管理器,局部事务管理器,局部事务管理器,命令,命令,命令,命令,回答,回答,回答,回答,数据库,数据库,数据库,数据库,数据库,层次控制,故障类型,事务故障由非预期的、不正常的程序结束所造成的故障,即事务没有执行到Commit或显示Rollback语句的故障,如:溢出、死循环等内存、磁盘上信息没有损失,使用Log做Rollback系统故障造成系统停止运行的任何事件,要求系统重启动内存、I/O Buffer内容皆

12、丢失,DB没有破坏,恢复时,搜索Log, 确定Rollback的Trans。设置检查点,故障类型-续,介质故障辅助存储器介质遭破坏数据丢失, 日志无损失 从某个Dump状态开始执行已提交事务数据与日志都丢失 不可能完全恢复通讯故障前三种统称为站点故障.,通讯故障,通讯发生, 既有某个报文Message从Site x 发往Site y, 正常情况:(a) 在 参与者在将“Ready”记录入Log之前故障此时协调者达到超时,Abort发生。站点(P)恢复时,重启动程序将执行Abort,不必从其他站点获取信息。b 当将“Ready”写入Log后,P故障此时所有运行的站点都将正常结束事务(Commit

13、/Abort)。P恢复时,因为P已Ready,所以不可判定C的最终决定。因此恢复时,重启动程序要询问C或其他站点。c 当C将“Prepare”写入Log,但“G-commit”/”G-abort”还没有写入是故障所有回答“Ready”的P等待C恢复。C重启动时,将重开提交协议,重发“Prepare”,于是P要识别重发。d C在将“G-commit”/”G-abort”写入Log后,“Complete”没有写入前故障收到命令的P正常执行,C重启动程序必须再次向所有P重发命令。以前没有收到命令的P也必须等待C恢复,P要识别两次命令。e “Complete”写入Log后故障无任何动作发生,2PC与故

14、障恢复-续,2. 报文丢失a 从P发出的“Ready”/“Abort”报文丢失C达到超时,整个事务执行“G-abort”。该故障仅能被C识别,此时C认为P故障,但P并无故障,不需执行重启动程序。b “Prepare”报文丢失P等待,C得不到回答,结果同2.ac “G-commit”/”G-abort”报文丢失P处于不确定状态。回答“Abort”的可以确定其工作,回答“Ready”的不行。此时可以修改加入计时器,超时则申请重发命令。d “Ack”报文丢失C超时,可重发“G-commit”/”G-abort”命令,P无论是否有活动,都重发“Ack”报文,2PC与故障恢复-续,网络分割假设分成两组。

15、一组是协调者,一组是参与者。于是从协调者看是参与者组故障,结果同1.a, 1.b。 从参与者组看是协调者站点故障,动作如1.c, 1.d。,初始,写begin_commit到日志,等待,有要求撤消的?,写commit到日志,提交,写Complete到日志,初始,准备提交?,写ready到日志,就绪,消息类型?,写abort到日志,写commit到日志,提交,撤消,撤消,写abort到日志,写abort到日志,协调者,参与者,no,no,abort,commit,2. b 准备,2.a撤消,2.a 提交,2.c全局撤消,全局提交,ACK,ACK,1.c,1.d,1.e,1.a,1.b,2.d,业

16、务规则的一致性,有效性约束 域约束数据依赖约束 实体完整性和引用完整性例子取现金时 一个账户的存款余额必须等于或大于零转账时一个账户的存款余额必须等于或大于零. 事务结束时,两账户中存款总和, 必须与事务开始时两账户存款之和相同定期利息计算事务执行后, 所有账户存款之和比事务开始前各账户存款总和大于10%,冗余数据的一致性,冗余数据必须保持一致例子,site1,site2,T1: Read(x) x=x*1.1 write(x),T2: Read(x) x=x-20 write (x),设数据x在两个站点都有副本. 两个事务分别执行, 这样两个事务的执行会产生不同的结果.处置x=50, T2T

17、1的执行顺序得到 x=33 (x-20)*1.1=(50-20)*1.1 T1T2的执行顺序得到 x=35 (x*1.1)-20=50*1,1),冗余数据的一致性-续,异步复制器 冗余数据绝对保持一致是不可能的, 一般允许对冗余数据的修改有暂时的不一致.复制数据库的应用向分站点发送只读数据在一个周期结束时从分站点对中心站点复制这个周期内改变过的数据复制数据并建立决策支持系统建立关键数据的备份副本,冗余数据的一致性-续,不同复制器的差别a 何时在主copy上获取数据b 何时把主副本上的数据用到辅助副本上对a有方法 1. 数据驱动: 当事务修改主副本时, 获取有关数据修改信息, 并将其写到一个获取文件或队列中. 2. 计时器驱动: 由系统在用户定义的时间间隔自动获取相关数据修改信息 3. 应用程序驱动: 由应用中的事件引发系统从主副本把数据复制到获取文件或队列中,冗余数据的一致性-续,对b有方法 1. 数据驱动: 在主副本上由修改Trans所做的修改, 立即复制, 传输和应用于辅存储器 2. 计时驱动: 修改Trans在主副本上的修改, 在用户定义的区间应用于辅助副本 3. 应用程序驱动: 由应用中的事件引发系统获取文件或队列对辅助副本进行修改,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报