当前位置:文档之家› 分布式事务中间件JDTX介绍

分布式事务中间件JDTX介绍


原子性 &持久性
客户端
恢复模式 WAL
内存 & 索引
隔离级别:锁实现
可序列化
• 仅持有一把排他锁 • 读读无法并行
可重复读
• 读共享锁和写排它锁互斥 • 读读并行 • 读写 & 写读不可并行
读未提交
• 读不加锁
读已提交
• 读写 & 写读并行
• 写写不可并行 • 读共享锁可升级为写排它锁
• 读写并行
SQL支持
解析引擎对多种数据库的复杂S Q L支持
内存查询引擎
内存快照数据与S Q L计算表达式的适配
刷盘幂等性
在消息超时重试或消费端重新负载均衡时 保证刷盘正确性
高可用
绝大部分组件的失效均不影响事务的正常 运行
J DTX部署架构
应用 业务代码
JDTX
分片
应用 业务代码
JDTX
Redis (主)
Redis (主)
应用 业务代码
JDTX
应用 业务代码
JDTX
无影响 • 应用无状态
Redis (主)
Redis (备)
Redis (主)
Redis (备) Redis 集群
Redis (主)
Redis (备)
WAL
JDTX分布式异常梳理 —— 代码
JDTX
应用 业务代码
JDTX
应用 业务代码
JDTX
高风险 • 应用可继续运行 • Redis不可用将造成数据丢失
Redis (主)
Redis (备)
Redis (主)
Redis (备) Redis 集群
Redis (主)
Redis (备)
WAL
JDTX分布式异常梳理 —— 业务库不可用
应用 业务代码
JDTX
应用 业务代码
created_txid 1000 1001
deleted_txid 1001 1002
First txid:1000
一致性 &基于MVCC的隔离性
隔离级别 读未提交 读已提交 可重复读 可序列化
脏读 无需实现 不可能 不可能 不可能
不可重复读 幻读
写偏序
无需实现
无需实现 可能
可能
可能
可能
不可能
不可能
可能
不可能
不可能
不可能
目录
CONTENTS
1 数据库事务原理 2 分布式事务的得与失 3 J DTX解决方案详解 4 JDTX roadmap
DTP事务模型 &XA协议
两阶段事务模型的得失
分布式
收益
损失
并发性能 可用性 提交阶段失败的处理
柔性事务 &CAP定理
柔性事务模型的得失
分布式 并发性能
通过约束验证来避免使用undo 日志提升性能
异步刷盘
通过W A L和内存的方式异步化刷盘
无损事务方案
使用本地事务A P I完全支持A C ID
活动事务与数据存储分离
充分利用数据库存储引擎的稳定性
开发成本最小化
充分采用论文思路以及第三方开源
实现难点
Difficulty
MVCC内核
完全实现M V C C 机制
读未提交 & 读已提交
实现方案:直接读取M V C C 链表中已提交的最新数据
可重复读 & 可序列化
实现方案:通过当前事务的快照边界判断M V C C 链表中符合的已提交数据
• TXID ∈ [1,快照下界) :过去的事务,对此快照均可见 • TXID ∈ [快照下界,快照上界):
• 仍处于未提交状态的事务不可见 • 处于提交状态的事务可见 • 处于回滚状态的事务不可见 • TXID ∈ [快照上界,∞),未来的事务,对此快照均不可见
收益
损失
一致性 & 隔离性 业务侵入
目录
CONTENTS
1 数据库事务原理 2 分布式事务的得与失 3 J DTX解决方案详解 4 JDTX roadmap
目标
Objective
分布式 &1PC
完全摒弃两阶段提交的透明化实现方案
事务原义支持
完全支持A C ID 的强一致事务
高性能
插入性能高于本地事务 查询性能高于分布式事务
MVCC元组数据结构
IN S E R T
data version_1
created_txid 1000
deleted_txid 0
UPDATE DELETE
data version_1 Version_2
created_txid 1000 1001
deleted_txid 1001 0
data version_1 Version_2
智慧IT
分布式事务中间件JDTX介绍
京东数科强一致、高性能 中间件
目录
CONTENTS
1 数据库事务原理 2 分布式事务的得与失 3 J DTX解决方案详解 4 JDTX roadmap
原子性
一损俱损 & 不能一荣俱荣
隔离性
性能与隔离级别的权衡
A
C
I
D
一致性
强一致 & 最终一致性
持久性
数据持久化 & 恢复模式
JDTX
应用 业务代码
JDTX
无法查询存量数据 • 通过异步恢复机制恢复数据 • 运行过程中数据仍然强一致
Redis (主)
Redis (备)
Redis (主)
Redis (备) Redis 集群
• 写读不可并行
一致性 &基于锁的隔离性
隔离级别 读未提交 读已提交 可重复读 可序列化
脏读 可能 不可能 不可能 不可能
不可重复读 可能 可能 不可能 不可能
幻读 可能 可能 可能 不可能
隔离级别:MVCC实现
时间线 Tx1
Tx2
Tx3
Tx4 已提交 未提交
事务发生时间点快照
Tx5 Tx6
MVCC隔离级别的实现
高可用
无中心化架构模型
跨多元数据库
支持R D B M S 、N o S Q L 、M Q 等多元资源
开启事务 提交 回滚 更新 查询
LS N 生成器
JD TX 内部架构 约束校验引擎
WAL
事务处理器
删除
获取
本地事务元组
更新
MVCC引擎
恢复引擎
落盘执行器 更新执行器 查询执行器
设计亮点
Idea
无UNDO日志
JDTX
不可用
• 系统无法提供在线服务 • 数据落盘W A L不会丢失 • 可通过恢复模式恢复数据
Redis (主)
Redis (备)
Redis (主)
Redis (备) Redis 集群
Redis (主)
Redis (备)
WAL
JDTX分布式异常梳理 —— WAL不可用
应用 业务代码
JDTX
应用 业务代码
Redis (备)
Redis (备)
Redis 集群
应用 业务代码
JDTX
Redis (主)
Redis (备)
优点: 1. 各节点存储部分事
务数据, T P S 可水 平扩展 2. 高可用 缺点: 1 . 查询需要跨节点获 取数据
WAL
JDTX分布式异常梳理 —— 应用节点不可用
应用 业务代码
JDTX
相关主题