您的位置:首页 > 数据库

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

2012-09-13 23:35 190 查看
帮大家翻译一下,非专业人员,错误之处请大家谅解:

[b]简介:[/b]

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

[b]协议使用的环境:[/b]

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

[b]协议的几点假设:[/b]

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

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

2.永远没有节点崩溃

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

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

[b]缺点:[/b]

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

[b]基本算法:[/b]

提交请求阶段[投票阶段]
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: