对于分布式事务,如果牵涉到的资源都支持事务操作,通常采用两阶段提交协议来处理。但如果分布式事务牵涉的资源不支持事务操作,就需要采用补偿方式来处理。
所谓两阶段:一是准备(预提交);二是提交。
实现分布式事务的关键就是两阶段提交协议。在此协议中,一个或多个资源管理器的活动均由一个称为事务协调器的单独软件组件来控制。此协议中的五个步骤如下:
• |
应用程序调用事务协调器中的提交方法。 |
• |
事务协调器将联络事务中涉及的每个资源管理器,并通知它们准备提交事务(这是第一阶段的开始)。 |
• |
为 了以肯定的方式响应准备阶段,资源管理器必须将自己置于以下状态:确保能在被要求提交事务时提交事务,或在被要求回滚事务时回滚事务。大多数资源管理器会 将包含其计划更改的日记文件(或等效文件)写入持久存储区中。如果资源管理器无法准备事务,它会以一个否定响应来回应事务协调器。 |
• |
事务协调器收集来自资源管理器的所有响应。 |
• |
在 第二阶段,事务协调器将事务的结果通知给每个资源管理器。如果任一资源管理器做出否定响应,则事务协调器会将一个回滚命令发送给事务中涉及的所有资源管理 器。如果资源管理器都做出肯定响应,则事务协调器会指示所有的资源管理器提交事务。一旦通知资源管理器提交,此后的事务就不能失败了。通过以肯定的方式响 应第一阶段,每个资源管理器均已确保,如果以后通知它提交事务,则事务不会失败。 |
图 1 和图 2 通过两个顺序图来说明两阶段提交协议。
两阶段锁定
两阶段锁定协议用于确保事务的连续性。在此协议中,一个事务释放锁定对象之前必须提出锁请求。
此协议可以分成以下两个阶段:
扩展(成长)阶段(Expanding (growing) phase)—此阶段允许事务提出一个新的锁定请求,但不允许解锁请求。
释放阶段(Shrinking phase)—此阶段允许事务释放扩展阶段的锁请求,但不允许提出任何新的锁定请求。
两阶段提交
在数据库管理系统中,维护数据完整性需要维持事务的原子特性(atomic processing),即属于同一事务中的数笔数据操作,必须同时成功或同时失败。
在分布式数据库中,会有许多子事务分散在众多的分布式数据库服务器上。为协调这些子事务,分布式数据库管理系统需要考虑更多的因素。在确认某个事务前,首先必须确认每个子事务的完成,否则该事务必须放弃。相同的,如果任一子事务的动作无法完成,事务管理器就发起一个回滚请求,接下来事务就会被回滚。这种管理分布式事务的方法称为两阶段提交协议。两阶段提交能够确保整个事务的完成或取消。
主要应用范围:
分布式事务的恢复
同步表复制