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 实例)。

相关推荐
歪歪歪比巴卜2 小时前
服务商批量接手客户跨平台社媒账号的技术落地:体检体系与重启架构
矩阵·架构·aigc
BerryS3N2 小时前
2026年AI前沿技术全景深度解析:大模型推理范式变革、Agentic AI工程架构与底层基础设施演进
人工智能·架构
神王宝宝 王者小学3 小时前
面向领域驱动架构的查询实现方式
前端·python·架构
计算机魔术师3 小时前
传统基础架构 - 微服务
大数据·后端·微服务·架构·开发工具·编程语言
晨米酱4 小时前
Matt Pocock Skills v1.2:控制从主流程深入到每一步
面试·架构·agent
大卫陈4 小时前
PCB 拼版系统近期迭代复盘:大小拼跃迁、横直料重构与引擎打磨
后端·架构
谢白羽5 小时前
SGLang源码剖析-2-sglang双层体系架构全景
分布式·架构·llm·vllm·sglang
茨球是只猫5 小时前
A 股 AI 量化全链路系统技术拆解:分层架构、双引擎验证与低换手实盘闭环
人工智能·机器学习·架构·量化交易
用户7754963581586 小时前
从 Socket 到网卡:数据包在 Linux 内核里的全生命周期
架构
Geek-Chow7 小时前
在 EKS Fargate 上做微服务蓝绿发布:把切换点放在 ALB 上
微服务·云原生·架构·devops·蓝绿部署