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[业务应用] --> Matrix[Matrix 层 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 实例)。

相关推荐
加号31 小时前
【C#】WPF基于Halcon 的HWindowControlWPF 控件实现图像缩放、移动
开发语言·c#·wpf
fengxin_rou1 小时前
用户模块架构实战:DTO 与 Domain 分层、Optional 空值处理、事务只读优化详解
java·后端·架构·用户实战
零壹AI实验室2 小时前
云原生微服务踩坑记:187个服务降到23个,故障率降低90%
微服务·云原生·架构
郑寿昌2 小时前
AI原生存储架构:存算智一体革命
架构·ai-native
2601_957786772 小时前
星链引擎矩阵系统:流批一体湖仓架构与亿级数据实时数仓技术实践
大数据·矩阵·架构
zandy10112 小时前
HENGSHI SENSE加速引擎架构深度解析:MPP列存与ClickHouse物化视图实战
clickhouse·架构·企业级bi·mpp列存
LT10157974443 小时前
2026年微服务性能测试平台选型指南:分布式架构适配与服务联动测试
分布式·微服务·架构
若兰幽竹3 小时前
【HarmonyOS 6.1 全场景实战】《灵犀厨房》实战之补充【架构进化】灵犀厨房四层分层设计:给鸿蒙 App 搭一副坚不可摧的骨架
架构·鸿蒙系统·harmonyos6.1.0·灵犀厨房
fuquxiaoguang3 小时前
架构模式革新:用“旁路镜像”改造老旧系统——中间件驱动的渐进式AI落地范式
人工智能·中间件·架构