用于保证分布式数据库事务原子性的两阶段提交[Two-phase commit]

帮大家翻译一下,非专业人员,错误之处请大家谅解:

简介:

    二阶段提交协议是事务处理、数据库和计算机网络中的一种原子性提交协议。 它是一种分布式算法,用于协调所有参与同一个分布式原子性事物的进程(提交或忽略事务)。此协议进程,网络节点,通信等失效的情况下仍然能保证事物原子性,所以它被广泛地使用。然而,它无法容忍所有可能的失败的配置,并且偶尔为获得正确结果而需要人为介入。为容纳从失败中恢复,此协议的参与者用日志记录协议状态。这种经常缓慢但挽救错误的日志记录被用于协议的恢复性存储过程。许多不同的协议的主要不同点在于日志记录策略和恢复机制。尽管恢复性存储过程经常有意被频繁的使用,但是它是二阶段提交协议的本质部分!许多可能的失败场景在这协议中都被考虑了进去。

 

协议使用的环境:

    一个节点作为协调者[主站],其余的网络节点作为队列[cohorts]

 

协议的几点假设:

    前两点必须严格遵守,否则数据可能丢失,最后一点不必严则遵守,因为网络会被重新路由:

    1.每个节点都是有预写式日志[write-ahead log]的稳定存储设备

    2.永远没有节点崩溃

    3.预写式日志中的数据绝不会丢失或因为崩溃而损坏

    4.任意两节点都能互相通信

 

缺点:

    如果协调者[主站]永久性失效的话,一些队列[cohorts]就不能解决其事务。

 

基本算法:

提交请求阶段[投票阶段]
    1.协调者给所有cohorts发送一个Commit请求,然后等待所有cohorts的回复
    2.当cohorts收到Commit请求时,执行事务。每一个cohort在undo log和redo log中各写入一条信息
    3.如果事务执行成功,则cohort返回一条同意[agreement]的信息,反之,则返回忽略[abort]信息

提交阶段[完成阶段]
    投票成功:如果所有的cohorts都返回同意的信息
        1.协调者发送一个Commit请求给所有的cohort.
        2.每个cohort完成操作,释放事务的资源和锁
        3.每个cohort发送确认[acknowledgment]信息给协调者
        4.当协调者收到所有cohort的确认信息后,完成事务
    投票失败:如果任何cohort返回不同意信息
        1.协调者发送一个Rollback请求给所有的cohort.
        2.每个cohort通过undo log取消事物,释放事物的资源和锁
        3.每个cohort发送确认[acknowledgment]信息给协调者
        4.当协调者收到所有cohort的确认信息后,取消事务

    

参考文献:

[Wiki]: http://en.wikipedia.org/wiki/Two-phase_commit

posted @ 2012-09-13 23:35  猪尬亮  阅读(1118)  评论(0编辑  收藏  举报