JDDL 核心实现原理与架构解析

JDDL 核心实现原理与架构解析1. 简介JDDL(JingDong Data Layer)是京东开源的一款客户端分库分表中间件。目前主要以 Client 模式运行,作为 JDBC 驱动的增强版直接嵌入在业务应用中。其核心目标是解决海量数据下的单机关系型数据库性能瓶颈,对业务提供透明的分库分表、读写分离、分布式主键生成等能力。

  1. 核心架构(三层模型)JDDL 的核心架构采用了经典的 Matrix -> Group -> Atom 三层模型:

Matrix 层(分库分表层):最上层的入口,负责实现 JDBC 规范(如TConnection、TStatement、TResultSet)。它拦截用户的 SQL,调用 Parser 和 Rule 引擎进行路由计算,最终将请求分发给底层的 Group 节点。

Group 层(高可用与读写分离层):主要负责物理集群中的主从复制、读写分离、负载均衡和主备切换(如DBSelector,TGroupStatement等)。对上屏蔽了数据库主从节点的变化。

Atom 层(物理数据源层):最底层,负责管理单一物理数据库的连接池(如TAtomDataSource)。它处理具体的连接创建、状态监控、物理配置解析等。

  1. 核心执行流程与模块解析一次完整的 SQL 执行流程通常会经过:JDBC 拦截 -> SQL 解析 -> 路由计算/优化 -> 抽象执行计划生成 -> 物理 SQL 执行 -> 结果集合并。

3.1 接入与 JDBC 封装 (jddl-matrix)实现机制:通过实现 Java JDBC API 标准(包装了TDataSource,TConnection,TPreparedStatement,TResultSet等),让业务像使用普通单机数据库一样使用 JDDL。

分布式事务:Matrix 层还包含了txc相关的类(如ITxcClient,TxcClientHelper),说明 JDDL 具备或预留了对接分布式事务(如 TXC/GTS)的能力。

3.2 SQL 解析 (jddl-parser)实现机制:JDDL 的 Parser 模块主要基于Cobar的开源代码进行了深度定制和优化。

工作原理:利用手写或类似 JavaCC 的词法/语法解析器,将原始 SQL 转换为抽象语法树(AST,如ASTNode)。支持 MySQL 各种语法树对象的解析,包括 DDL、DML 等(MySQLDMLParser、MySQLDDLParser)。解析出的 AST 是后续路由和改写的基础。

3.3 路由与优化器 (jddl-rule&jddl-optimizer)规则引擎 (Rule):包含分库分表规则的定义(如TableRule,EnumerativeRule)。根据 SQL 中的分片键和预设的规则算法(如哈希、取模、范围等),计算出目标数据节点(DB)和目标表(Table)。

优化器 (Optimizer):包含CostBasedOptimizer(基于代价的优化)。它结合 AST 和RuleSchemaManager,决定最优的执行计划。

3.4 执行器与底层存储抽象 (jddl-executor&jddl-repo-*)执行器抽象 (Executor):定义了IExecutor接口。执行器负责将优化器产生的逻辑执行计划转化为物理执行过程。

Repository 抽象:IRepository定义了对底层存储的抽象操作,使得 JDDL 不仅可以对接 MySQL(jddl-repo-mysql),还可以扩展对接其他存储介质(如jddl-repo-bdb等)。

Cursor 机制 (游标):结果集的处理大量使用了 Cursor 模式。为了支持分布式结果集的合并、排序、分组,实现了诸如MergeCursor(合并游标)、TempTableSortCursor(临时表排序)、JoinSchematicCursor等。通过流式游标操作,极大地降低了客户端合并大量数据时的内存开销。

  1. 总结JDDL 作为一个成熟的 JDBC 客户端中间件,其核心在于高度模块化和抽象。通过 Parser 生成 AST,通过 Optimizer 和 Rule 计算路由,再交由 Executor 构建以 Cursor 为核心的执行计划,最后通过三层数据源架构(Matrix -> Group -> Atom)实现透明化的读写分离和分库分表操作。

graph TD

Client业务应用 --> MatrixMatrix 层 JDBC 接口

复制代码
subgraph 核心路由与执行逻辑
    Matrix --> Parser[Parser: SQL 解析]
    Parser --> AST[生成抽象语法树 AST]
    AST --> Rule[Rule & Optimizer: 路由规则与代价优化]
    Rule --> Plan[生成分布式执行计划]
    Plan --> Executor[Executor: 执行器与结果集游标 Cursor 合并]
end

subgraph 数据源三层模型
    Executor --> Group1[Group 层: 负载均衡与读写分离]
    Executor --> Group2[Group 层: 负载均衡与读写分离]
    
    Group1 --> AtomMaster[Atom 层: 主库连接池与状态监控]
    Group1 --> AtomSlave[Atom 层: 从库连接池与状态监控]
end

AtomMaster --> DB_Master[(物理库: MySQL Master)]
AtomSlave --> DB_Slave[(物理库: MySQL Slave)]

架构图说明:Client / 业务应用:通过标准 JDBC 接口无缝接入 JDDL,对应用透明。

核心路由与执行逻辑:当应用发起 SQL 请求时,请求首先在Matrix 层被拦截,接着交由Parser进行语法解析并生成 AST。随后,结合Rule(分片规则)和Optimizer(优化器)计算出目标节点,并生成执行计划,最后由Executor(执行器)发起实际的并发查询并利用 Cursor 机制进行结果集合并(如 Order By, Group By 等)。

数据源三层模型:

Group 层:对上层暴露,隐藏了底层的物理主从结构,负责将请求路由到对应的主库或从库(实现读写分离)。

Atom 层:真实的物理连接层,封装了具体的数据库连接池(如 Druid/HikariCP),负责连接的保活、心跳检测和物理执行。

物理数据库:最终的数据存储介质(主要是 MySQL 实例)。

相关推荐
ping某几秒前
一个“日志备份”需求,为什么会牵出整个 Linux 日志系统?
后端·架构
阿狸猿4 分钟前
论微服务架构及其应用
java·微服务·架构
终端域名23 分钟前
AI与区块链融合:加密货币的下一前沿——技术架构、企业价值与未来趋势
人工智能·架构·区块链
wb043072011 小时前
阿明的二次创业——从阿明用 AI 开第二家店,看 AI 原生创业的四阶段方法论
大数据·人工智能·架构
AI 小老六2 小时前
Google AX 控制面拆解:分布式 Agent 如何把断点恢复、审计策略和执行调度收进同一条链路
人工智能·分布式·后端·ai·架构·ai编程
硅农深芯2 小时前
解读AUTOSAR:定义现代汽车电子的标准化架构
架构·汽车·autosar
这个DBA有点耶4 小时前
Vibe Coding 是什么?当“感觉编程”遇上数据库
数据库·人工智能·架构·学习方法·ai编程·程序员创富·改行学it
love530love4 小时前
2026年终极防坑指南:基于 EPGF 架构彻底“本地化” UV 环境与工具
人工智能·windows·python·架构·devops·uv·epgf
野生技术架构师5 小时前
从 B+ 树到应用层分表:MySQL 海量数据架构解析
数据库·mysql·架构
Maimai108085 小时前
Web3 前端交易系统如何落地:从下单 UI 到 Operation 编码、签名与实时状态更新
前端·react.js·ui·架构·前端框架·web3