分布式系统阅读笔记(十七)-----分布式事务

介绍

分布式事务和上篇中说到的普通事务的差别在于他所涉及到的服务器超过1个。分布式事务可能是1层的也可能是嵌套多层的。为了协调分布式事务的,就出现了原子提交协议,比较著名的2pc协议就是其中的一个例子。之前的3种并发控制的方法锁控制,乐观并发控制,时间戳序列方法,经过一定的扩展也可以运用在分布式的事务上面。在分布式的事务上,还提供了恢复管理器用来进行对象,操作的恢复。之前已经讨论过在单一的服务器上面实现对象的访问,但是在一个分离的服务器上,这时候就需要一个协调者 来进行事务的一个协调。

单层和多层嵌套分布式事务

在单层的事务中,一个客户端向一个服务端发出请求,服务端可以通过锁来控制对象的访问在某短时间之中,在多层嵌套的分布式事务中,就可以以做上层的部分作为协调器,对子事务进行协调。每个协调者中维护了一个参与者的列表,每个参与者里面也存有协调者的引用。

原子提交协议

1、一阶段提交协议

事务的原子属性同样要求分布式事务的执行要么全部执行完毕要么全部不执行。最简单的原子协议的实现就是让协调者与所有的参与者进行沟通通讯,直到获取到每个参与者的恢复判断他们是否已经执行完毕,这个叫做一阶段提交协议。一阶段提交协议的缺点是协调者不知道服务端是否已经崩溃或者死锁的一些情况,造成协调者会一直等待请求的回复。

2、2阶段提交协议

为了盖上上面协议的缺陷,就有了这个2pc协议,2阶段提交协议,所以当然是分成2个阶段做的事情了。第一阶段形象的说是在收集参与者投票的阶段,协议者会问参与者是否能够提交事务,等待协调者获取到了所有参与者的回复后,知道了下一步怎么做了就来到了第二阶段。2、第二阶段协调者发出doCommit()或者是doAbort()命令给每个参与者,每个参与者执行完操作,返回操作值代表操作完成,自此2pc整个过程结束。

3、2pc协议的性能

很显然在协调者收集参与者投票的阶段必然会有一定的消息延迟,因为要等那么多的参与者的回复,其次,2个阶段中频繁的消息传送也会消耗很大的时间和带宽。

分布式事务中的并发控制

在分布式的环境中,每个服务器管理着一系列的对象集合,并且他们有责任使这些对象保持一致的状态当他们被分布式的事务访问的时候,

1、锁模式

锁模式在分布式的事务中同样还是可能会出现问题,造成分布式的死锁。

2、时间戳序列

时间戳序列的并发控制手段在分布式中的一个难点在于如何确保全局时间戳的唯一性,每个协调者又他自己的时间戳,这就要求协调者之间需要一定的同步,来分配唯一的时间戳序列号。

3、乐观并发控制

分布式中的乐观并发控制的核心在于全局的validation检测,而不再是本地的单纯的检测了。

分布式死锁

1、wait-for graph等待图

分布式死锁在分布式事务中也是极有可能出现的,分布式死锁的检测手段可以通过超时机制(时间间隔的控制也是一个难点)还有一个是循环引用的寻找在各个事务的等待图中。本地等待图(wait-for graph)可以通过本地服务器上的锁管理器构建,如果在等待图中发现了循环,说明出现了死锁。

2、边缘追踪

edge chasing方法是一种分布式的检测死锁的办法,他通过每个节点发送消息给下一个节点,发送的消息为此节点正在等待的节点,如果最后消息中出现了一个循环,那么说明也出现了死锁,消息的格式为<T->U>,代表事务T等待事务U释放锁,如果发送U,U正好在等待W,则这个消息就会被改为<T->U->W>,以此类推。整体上说是一种消息构建的模式。

事务的恢复

事务的失败处理在整个事务的过程中是非常重要的,你要保证所有的状态又能够恢复到事务之前发生的样子。这里面的主要原理是靠记录在永久存储中的记录来进行数据的恢复的。事务的管理可以通过一个简单的机理实现----recovery manager事务管理器。

1、recovery manager

事务管理器有后面一些功能:(1)、对于提交好的事务,保存对象到永久存储中。(2)、在服务器宕机之后,能够还原这些对象。(3)、能够重新组织恢复文件提高恢复的性能。(4)、重新分配存储空间在恢复文件中。

2、recovery file

恢复文件中主要包含了3个东西:1、Object,对象的值。2、Transaction status事务的状态。3、Intentions list,保存了事务在执行的过程中保存的一个个的临时,格式为<objectID, Pi>,Pi为对象在恢复文件中的位置。借此可以完成对于对象的恢复。

3、logging

日志技术在恢复事务的过程中起到一个记录事务历史记录的作用。通过事务的提交完成,不断在恢复文件的尾部追加内容,以此完成记录,要做恢复操作的时候,就从后往前恢复。

4、shadow versions

shadow versions技术采用了一个可调节的方式去组织一个恢复文件。因为他采用了一个图的方式将本地对象版本映射到一个叫version store的地方,也就是说在version store文件里面,维护了很多版本的Object。shadow version的技术在性能上会比日志技术要好,因为他这里采用的是图映射的方式。


参考文献:<<Distributed Sysytems Concepts And Design>>原版第五版,author:George Coulouris,Jean Dollimore, Tim Kindberg,Gordon Blair

posted @ 2020-01-12 19:09  回眸,境界  阅读(69)  评论(0编辑  收藏  举报