1. 1
Jakarta EE 应用服务器的事务处理
马震 金蝶天燕云
September 27, 2023
@mazhen
mazhen.tech
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
2. 2
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
● 事务的基本概念
● 事务处理系统回顾
● JTA & JTS & Jakarta Transactions
● 云原生时代的分布式事务处理
Outline
3. 3
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
● Transaction 是将多个读取和写入操作”打包”在一起,作为一个完整的执行单元
● 要么整个 Transaction 成功(提交),要么失败(回滚),永远不能只是部分完成
● Transaction 是一层抽象,简化了应用程序模型
○ 应用可以忽略部分失败和并发问题
○ 系统的完整性始终处于一致性状态
Transaction
4. 4
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
● ACID 是1983年由 Theo Härder 和 Andreas Reuter 在论文《 Principles of Transaction-Oriented Database
Recovery》中首次提出。
● 原子性 Atomicity
○ 将多个操作组合在一起,如果遇到故障那么整体将被中止,并撤消之前的所有操作
● 一致性 Consistency
○ 会保证事务前后,数据的状态都是“好”的
● 隔离性 Isolation
○ 多个事务并发执行时,一个事务的执行不应影响其他事务的执行,每个事务都假装他
们是唯一正在运行的事务
● 持久性 Durability
○ 一旦事务成功提交,它所写入的任何数据都不会丢失,即使出现硬件故障
ACID Properties
5. 5
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
● 分布式系统可能遇到各种问题
○ 数据包丢失,乱序,重复和延迟
○ 时钟不同步
○ 节点可能在任意时刻暂停或crash
○ 节点故意发送虚假消息,试图欺骗其他节点
● Distributed Transaction的实现更加困难
○ 没有全局变量,没有共享内存,不能在节点间共享状态
○ 唯一可以做的就是从一个节点向另一个节点发送消息
Distributed Transaction
6. 6
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
● JimGray 在“Notes on Database Operating Systems”(1979)中描述了两阶段提交(2PC)
● 2PC 出现了新的组件: coordinator (也称为transaction manager )
Two-Phase Commit (2PC)
7. 7
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
● 如果 coordinator 在收到参与者的Yes后挂掉,此时参与者只能等待,不能再单方面中止
● Coordinator 实际的决定是commit,它在只发送了commit请求给DB2,还没发commit给DB1时挂掉。
DB1不知道该提交还是终止,即使设置了超时也没用
● 此时协议被blocked,只能等待coordinator恢复
Two-Phase Commit (2PC) 的局限性
8. 8
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
● 问题本质
○ 在phase 2阶段, coordinator向所有参与者发送commit/abort前,这时只有它知道当前事务
的结果
● 如何恢复coordinator
○ Coordinator 需要在持久性存储中记录协议状态
■ 强一致性的分布式存储(基于Paxos/raft实现)
○ 由其他节点手工/自动take over
如何解决
9. 9
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
● 事务的基本概念
● 事务处理系统回顾
● JTA & JTS & Jakarta Transactions
● 云原生时代的分布式事务处理
Outline
10. 10
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
● 现代事务处理技术出现在20世纪60年代的大型机主机(mainframe)环境
● 最早的事务处理系统是由IBM开发的SABRE航空公司预订系统
○ IBM意识到这种技术可以应用到其他行业,由此产生了CICS(Customer Information Control
System)
○ CICS最初是完全用汇编语言编写,并没有使用现代意义上的数据库,而是依赖于扁平
文件和其他低级数据结构
事务处理系统回顾——CICS
11. 11
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
● 1970年 Edgar F. Codd 发表了一篇名为《A Relational Model of Data for Large Shared Data Banks》的论
文,首次提出了关系模型的概念,这一模型为后来的关系数据库管理系统(RDBMS)奠定了
基础。
● IBM 的 System R 项目是一个关键的里程碑
○ 它是 SQL 的第一个实现
○ 事务处理技术被引入到关系数据库领域
事务处理系统回顾——关系数据库
12. 12
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
● 在分布式环境中实现事务处理面临着许多挑战,传统的单机事务处理系统无法满足需求
● 为了管理这些分布式事务,提供更好的并发控制和容错能力,事务处理监视器(Transaction
Processing Monitor 或 TP Monitor)被引入。
○ TP Monitor 为应用程序提供了一个完整的运行时,允许应用以安全和事务性的方式访问
后端系统(包括数据库)。
○ AT&T贝尔实验室最初于1984年开发了Tuxedo系统,后来成为BEA Systems的主要交易产
品
○ Tuxedo遵循X/Open DTP标准
事务处理系统回顾——Tuxedo
13. 13
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
● CORBA Object Transaction Service (OTS) 是一个定义在 CORBA(Common Object Request Broker
Architecture) 规范中的分布式事务服务。
○ OTS 将分布式事务处理模型(DTP)扩展到了对象领域,它提供了一种在分布式对象系
统中进行事务处理的方法。
● Java EE 应用服务器是在 X/Open DTP 模型和 CORBA OTS 的基础上发展出来的事务处理监视器,
TP Monitor 开始融入 Java EE应用服务器。
● Java EE 应用服务器中的许多功能都源于TP Monitor
○ TP Monitor 本质上是一个具有事务感知功能的应用服务器。
事务处理系统回顾——应用服务器
14. 14
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
● 事务的基本概念
● 事务处理系统回顾
● JTA & JTS & Jakarta Transactions
● 云原生时代的分布式事务处理
Outline
15. 15
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
● X/Open 是一家成立于1984年的非营利性质的技术联盟,其目标是制定开放系统标准。1996 年,
X/Open 与 Open Software Foundation合并,组成 The Open Group。
● X/Open 在1991年开发了一个分布式事务处理(DTP)模型
● X/Open DTP 模型由事务管理器(TM)、资源管理器(RM)、通信资源管理器(CRM)和应用
程序(AP)组成。X/Open DTP 标准规定了这些组件功能,以及组件之间的标准接口。
X/Open DTP
16. 16
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
• 事务管理器:提供识别,监视,
完成或恢复全局顶级事务所需的
服务和管理功能。
● 通信资源管理器:CRM为通信系
统提供API,该API可用于分布式
事务系统
● 资源管理器:RM代表事务参与
者,包括数据库,消息队列,文
件系统等
X/Open DTP
17. 17
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
● 在1999年,Sun Microsystems将Java Transaction API(JTA)定义为Open Group规范到Java的映射。
随着JTA的引入,Java平台获得了基于标准的分布式事务支持。
● JTA是面向对象的,与严格的过程式TX和XA规范不同。
● JTA最初被认为是在现有事务处理系统(例如IBM的CICS产品)之上的API层。
● 随着JAVA EE应用服务器的成熟,使用在越来越多的任务关键型应用中。
JTA
18. 18
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
● 事务管理接口事务管理接口
● 应用程序事务划分接口
● Open Group XA接口的直接映射
JTA的三类接口
19. 19
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
● CORBA Object Transaction Service (OTS) 将分布式事务处理模型(DTP)扩展到了对象领域,,
它提供了一种在分布式对象系统中进行事务处理的方法。
● Java Transaction Service (JTS) 是 OTS 的 Java 映射, JTA 推荐使用 JTS 作为其底层事务系统的实
现。
● Java EE应用服务器间的事务互操作性是通过底层使用 JTS 实现获得的。
Java Transaction Service (JTS)
20. 20
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
● Java Transaction Service(JTS)规范是 OTS 规范的
Java语言映射
● JTS 使用 CORBA OTS 接口来实现互操作性和可移
植性,这些接口为利用 IIOP 在 JTS 之间生成和
传播事务上下文的实现定义了标准机制。
● JTA 是暴露给用户和应用服务器使用的接口,应
用服务器内部可以使用 JTS 作为其底层事务系统
的实现,应用服务器间的事务互操作性是通过
底层使用 JTS 实现获得的。
Java Transaction Service (JTS)
21. 21
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
● Jakarta Transactions 1.3
○ Jakarta EE 8的第一个版本
○ Java Transaction API 1.3
● Jakarta Transactions 2.0
○ 包含在 Jakarta EE 9 中发布
○ Moved to the jakarta.* namespace
Jakarta Transactions
22. 22
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
● 事务的基本概念
● 事务处理系统回顾
● JTA & JTS & Jakarta Transactions
● 云原生时代的分布式事务处理
Outline
23. 23
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
● CORBA
● EJB
● SOAP
● JAX-PRC + JAX-WS
● REST
● Dubbo
● Spring Cloud
● Service Mesh
微服务的演进
24. 24
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
● 所有的模块部署在一个应
用服务器上,业务数据都
保存在单个数据库中,这
种场景本地事务就可以满
足需求
单体应用
25. 25
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
● 如果数据库按照业务模块
进行水平拆分,完成一个
业务请求会涉及到跨库的
资源访问和更新,这时候
就需要使用应用服务器的
JTA进行两阶段提交,保证
跨库操作的事务完整性。
数据库水平拆分
26. 26
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
● 应用按照业务模块进一步拆分,每一
个模块都作为EJB,部署在独立的应用
服务器中。
● 完成一个业务请求会跨越多个应用服
务器节点和资源
● 当访问入口EJB时JTA会自动开启全局
事务,事务上下文随着EJB的远程调用
在应用服务器之间传播,让被调用的
EJB也加入到全局事务中。
微服务化
27. 27
COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0)
● JTA/XA支持数据的实时一致性,对业务开发更加
友好
● 客户对原有的系统进行微服务改造时,如果把
业务模型假定成数据最终一致性,就不得不做
出很大的妥协和变更。特别是金融客户对一致
性的要求比较高
● 可以抛弃沉重的EJB/RMI-IIOP,让Spring Bean通过
dubbo等RPC框架直接对外暴露服务,同时事务
上下文可以在RPC调用时进行传递
● 实现云原生事务日志记录和恢复服务,允许应
用节点在没有持久性存储的情况下运行,所有
的事务日志记录和恢复都由云服务管理
● 增加对TCC和Saga模式的支持
应用服务器进入云原生时代
28. COPYRIGHT (C) 2022, ECLIPSE FOUNDATION | THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE (CC BY 4.0) 28
Thank you!
Questions?
@mazhen
mazhen.tech