一、什么是事务
对于一个软件系统来说,需要相应的数据资源(数据库、文件系统等)来保存系统状态。为了保证系统状态始终处于“正确”的状态,我们必须对数据访问操作进行一些必要的限定,以保证系统状态的完整性。事务就是以可控的方式对数据资源进行访问的一组操作。事务有4个限定属性,即ACID属性。
二、事务的家族成员
在一个典型的事务处理场景中,有如下几个参与者:
1、Resource Manager,简称RM,负责存储并管理系统数据资源的状态。数据库服务器、JMS消息服务器等都是相应的RM。
2、Transaction Processing Monitor,简称TP Monitor,负责在分布式事务场景中协调包含多个RM的事务处理。TP Monitor通常对应特定的软件中间件,如J2EE规范中的应用服务器就是TP Monitor的角色。
3、Transaction Manager,简称TM,它是TP Monitor的核心模块,直接负责RM之间事务处理的协调工作,并且提供事务界定、事务上下文传播等功能接口。
4、Application,以独立形式存在的或者运行于容器中的应用程序,是事务边界的触发点。
三、事务的分类
1、全局事务:整个事务处理过程中有多个RM参与,需要引入TP Monitor来协调多个RM之间的事务处理。TP Monitor将采用“两阶段提交(Two-Phase Commit)”协议来保证整个事务的ACID属性。
2、局部事务:当前事务只有一个RM参与其中。这种情况应用程序可以直接与RM打交道(无需TP Monitor参与),相应的RM都有内置的事务支持。这样可以极大的减少事务处理的复杂度,提高性能。