京东金融中间件团队在分析了这些实现方式利弊后,根据自身业务特点实现了基于客户端的分库分表中间件CDS,即Completed Database Sharding。
CDS是一个基于客户端开发的分库分表中间件产品,实现了JDBC标准API,支持分库分表、读写分离和数据运维等诸多功能,提供高性能、高并发和高可靠的海量数据路由存取服务,业务系统可近乎零成本进行接入,目前支持MySQL、Oracle和SQL Server三种数据库集群。
CDS原理概述
CDS Driver是CDS中间件的核心模块,实现JDBC标准API,以Jar包形式部署在应用端,完成数据路由、连接池管理、读写分离和异常告警等功能。
SQL解析:CDS采用开源SQL解析器JSqlParser,并在其基础上进行了优化及功能扩充,包括支持自定义的宏、提供指定执行群组、限制结果集大小以及指定切分键定位等功能。同时CDS Driver通过SQL解析对象缓存机制,大大降低SQL解析带来的性能损耗。
连接池管理:CDS内置使用京东金融自主开发的WangyinCP连接池,同时也全面支持目前业界常用的连接池,如:BoneCp、C3p0、DHCP等。
慢语句统计:CDS Driver会实时统计业务查询时间超过指定阈值的SQL语句,便于业务根据慢语句进行业务优化和性能调优。
读写分离:CDS Driver根据集群配置的读写分离规则,完成应用访问的读写分离。
弱XA事务:CDS驱动本身只实现了弱XA支持,即执行阶段分库执行失败后,对事务中已完成执行的其他分库操作进行回滚;而在提交阶段,如果发生分库提交失败,则无法对之前已提交的分库进行回滚;可以通过CDS的分布式事务补偿服务进行基于BASE的最终失败的分布式事务补偿。
自定义路由算法:当CDS的几种默认路由策略无法满足业务特殊需求时,可根据业务自身需求,使用Groovy语法实现自定义路由规则。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/98578.html