分布式—事务

《分布式系统原理与范型》

1、    与互斥紧密相连的一个概念是 事务。事务保护一个共享资源不会被几个并发进程同时访问。事务允许进程把访问和修改数据项做为一项单独的原子操作来完成。如果进程在事务处理期间中途退出,所有数据恢复到事务开始前的状态。

 

2、事务的ACID特征:参考http://zh.wikipedia.org/zh-cn/ACID

  • 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
  • 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的默认规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
  • 隔离性:当两个或者多个事务并发访问(此处访问指查询和修改的操作)数据库的同一数据时所表现出的相互关系。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
  • 持久性:在事务完成以后,该事务对数据库所作的更改便持久地保存在数据库之中,并且是完全的。

     目前主要有两种方式实现ACID:第一种是Write ahead logging,也就是日志式的方式。第二种是Shadow paging。

 

 3、原子性、持久性的实现,两种技术 write ahead logging ;  shadow paging

a\  shadow paging ,也可以叫做私有空间。

   当一个进程开始处理一个事务时,它被分配一个私有空间,该空间包含所有他有权访问的文件。在事务提交或终止前,它的所有读写操作都在该私有空间内进行。

把所有东西都复制到私有空间开销很大,可以进行优化。

第一种优化: 当一个进程只是读一个文件而不修改时,不需要私有拷贝。当进行修改操作时,如果没有复制到私有空间,则将文件复制到私有空间。

第二种优化:不复制整个文件,只是将索引复制到私有空间,读操作时可以不复制文件块,如果对文件块进行修改时,将相应文件块先复制到私有空间,修改私有空间内的索引节点。(因为文件系统都是分块存储在磁盘上的,这样不用复制整个文件)

b\ 写前日志

使用这种方法,文件被正在修改,任何一个数据块被修改前,一条记录写到日志中,记录哪个事务对文件修改,哪个文件、哪个数据被访问了,旧值、新值是多少。

如果事务提交,一条提交记录写入日志。

如果事务终止,利用日志退回到原来状态。

 

4、事务的并发控制

并发控制的目的是允许几个事务同时执行,但是被操作的数据项集合要保持一致的状态。

通过允许事务以某一特定的顺序存取数据项,藉此使最后得到的结果跟事务顺序执行的一样,从而实现这种一致性。

并发控制的总体思想是正确地调度相冲突的操作,如果两个操作对同一个数据操作则可能发现 读写冲突、写写冲突。

 

并发控制通常根据读写操作同步的方式来分类,可以通过共享数据上的互斥机制(例如锁), 或者 使用时间戳排序来实现;并发控制算法可以进一步分为悲观算法,乐观算法。(悲观锁,乐观锁,悲观时间戳,乐观时间戳)

 

5、两阶段锁定(是一种悲观锁)

two-phase locking  ,2PL,(区别分布式事务提交协议 2PC)

1. 在对任何数据进行读、写操作之前, 事务首先要获得对该数据的封锁
2. 在释放一个封锁之后, 事务不能再获得任何其他封锁。
“两段”锁的含义
事务分为两个阶段:
第一阶段是获得封锁,也称为扩展阶段;
第二阶段是释放封锁,也称为收缩阶段。
 
可能发生死锁:例如:两个进程以不同的顺序请求几个相同的锁。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值