事务模型解析
平面事务模型:本地事务和JTA 事务。
事务管理涉及到的几个参与者:
1 资源管理器( Resource Manager) :资源管理器一般是数据库管理系统。
2 分布式事务协调者( Distributed Transaction Coordinator,DTC):此功能一般是由我们所用的 JavaEE 应用服务器实现,比如 jboss,websphere,weblogic 等。这个角色只有在 JTA 事务中才会存在。
3 事务管理器 (Transaction manager) :每一个事务管理器都与相应的资源管理器所关联,它负责对分布式事务进行提交或者回滚。
4 应用程序( Application)
以上四者的关系可以用以下的图形来形象的表述:
在日常的系统开发中,我们一般都会使用数据资源(比如数据库)来对系统的状态进行保存,那么我们根据系统涉及的数据资源的多少,将事务分为RESOURCE-LOCAL事务或者JTA全局分布式事务。
1 RESOURCE-LOCAL事务
RESOURCE-LOCAL事务是指只有一个资源管理(RM) 的事务,事务操作都是对同一个数据库进行操作。
此时事务协调着和事务管理器的作用就有底层的资源管理器来实现了。比如目前我们在采用Spring来管理事务的时候,其实spring并没有事务功能,它仅仅是封装了底层数据库的事务操作而已。
2 全局事务或者JTA事务
国际上提出了一种分布式事务解决方案的标准OTS (Object Transaction Service),JavaEE 对OTS 做了实现,即JTS (Java Transaction Service ),对于开发者,不需要了解它们是怎么实现的,因为java 为我们提供了操作JTS 的上层接口 JTA (Java Transaction API )
全局事务是涉及多个资源管理器,此时需要引入事务协调者(可以理解为全局事务管理器,可基于可靠消息实现)来进行调节
通信协议:
1、应用服务器与事务管理器通过TX协议通信。
2、事务管理器与资源管理器通过XA协议通信。
3、事务管理器之间通过XA+(XA协议超集)协议通信。
提交过程:
两阶段提交协议2PC(two phase commit)
第一阶段:事务协调者发送“准备提交”消息给事务所涉及的所有的事务管理器,然后事务管理器又分送此消息给相应的资源管理器,然后事务管理器又将资源管理的响应情况告诉分布式事务协调着(DTC). 只有此阶段顺利完成后(既所有的资源管理器都同意提交事务),才会进入第二阶段。
第二阶段:当第一个阶段顺利完成后,事务协调者告诉事务管理器去提交事务
分布式最终一致性理论:
CAP
C(一致性)在分布式环境下多个节点数据是否一致;
A(可用性)服务一直保持可用的状态;
P(分区容忍性)在分布式应用中,可能因为一些分布式的原因导致系统无法运转,好的分区容忍性,使应用虽然是一个分布式系统,但是好像一个可以正常运转的整体
BASE
BA: Basic Availability 基本业务可用性;
S: Soft state 柔性状态;
E: Eventual consistency 最终一致性;