Sharding-JDBC 2.0.0,在经过 3 个里程碑的迭代之后终于正式发布。Sharding-JDBC 集分库分表、读写分离、分布式主键、柔性事务和数据治理与一身,提供一站式的解决分布式关系型数据库的解决方案。
从 2.x 版本开始,Sharding-JDBC 正式将包名、Maven 坐标、码云仓库、Github 仓库和官方网站统一为 io.shardingjdbc。这意味着除了当当的无私奉献,我们也乐于采纳第三方公司的代码贡献。本次 2.0.0 的版本,由当当与数人云共同开发。
Sharding-JDBC 是一款基于 JDBC 的数据库中间件产品,对 Java 的应用程序无任何改造成本,只需配置分片规则即可无缝集成进遗留系统,使系统在数据访问层直接具有分片化和分布式治理的能力。
Sharding-JDBC 1.x 关注 SQL 兼容性、分库分表、读写分离、分布式主键、柔性事务等分片功能;Sharding-JDBC 2.x 提供了全新的 Orchestration 模块,关注数据库和数据库访问层应用的治理。2.0.0 在治理方面的主要更新是:
- 配置动态化。可以通过 zookeeper 或 etcd 作为注册中心动态修改数据源以及分片规则。
- 数据治理。提供熔断数据库访问程序对数据库的访问和禁用从库的访问的能力。
- 跟踪系统支持。可以通过 sky-walking 等基于 Opentracing 协议的 APM 系统中查看 Sharding-JDBC 的调用链,并提供 sky-walking 的自动探针。
- 提供 Sharding-JDBC 的 spring-boot-starter。
通过 2.x 提供的数据治理能力,sharding-jdbc 的架构图是:
2.x 沿用了 1.x 的 SQL 解析、SQL 路由、SQL 改写、SQL 执行以及结果归并的这一套分片化体系。与 1.x 的最大区别是增加了为数据治理使用的注册中心模块,目前支持最常用的 zookeeper 和 etcd 两种注册中心的实现。Sharding-JDBC 对分布式配置、分布式治理以及调用链路追踪分析这几个分布式应用的几个核心关注点进行了实现,与服务治理框架类似,数据库访问层的治理可以提供更加细粒度的层级进行熔断等操作。
配置动态化将 Sharding-JDBC 的配置信息放入注册中心。Sharding-JDBC 的配置较为灵活,同时支持 Java Config、YAML、Spring 命名空间和 Spring-boot-starter 四种方式。配置动态化模块将不同的配置方式统一转换为 JSON,并存储至注册中心,并通过监听配置节点的来探知配置信息的修改。配置信息修改会触发 Sharding-JDBC 数据源的重建,可以在不重启应用的前提下刷新数据源配置,以动态增减数据库和修改分片策略。
数据治理部分,Sharding-JDBC 目前主要提供熔断和禁用相关的能力,未来会做进一步的扩展。熔断是针对数据库访问的应用,可以通过设置注册中心相关节点达到熔断某一运行中的应用对数据库的访问,而不间断其其他行为。在实际应用场景中,对于某些对整体数据库带来操作压力的服务,可以采用该方式减轻数据库的压力,而相关服务会自动降级,所有对数据库的访问将返回空结果集,或通过订阅异常的方式自定义降级行为。禁用功能主要是针对于读写分离中的从库,Sharding-JDBC 支持可支持分库分表 + 读写分离或独立使用读写分离的两种方式。读写分离目前采用一主多从的方式,可以通过对某个从库的禁用以做到从库的不停机动态切换。
和服务化调用链类似,数据库访问同样需要采集、追踪和分析其调用链路。Sharding-JDBC 完全遵守 Opentracing 协议,将数据库的分片 SQL 和数据源发送至支持 Opentracing 协议的 APM 产品。Sharding-JDBC 还与 sky walking 深度合作,提供了 sky walking 的自动探针,可以让使用 Sharding-JDBC 的应用自动将调用链路追踪对接至任何标准系统。
本次 2.0 版本的开发,受到了数人云的大力支持,他们不但贡献了 Sharding-JDBC 的核心代码,还提供了 hawk 的统一配置中心平台,也会于近期开源。通过对 Sharding-JDBC 注册中心的读写,提供了对配置的图形化界面支持。Hawk 的架构图如下:
著名的apm 开源软件Sky-walking 也将于近期采用Sharding-JDBC 作为其底层存储追踪日志的存储引擎。整合了Sharding-JDBC 作为存储引擎的Sky-walking 架构图如下:
Sharding-JDBC 将与配置中心 hawk,APM 的 sky-walking 一起打造分布式服务的生态圈。
欢迎访问 Sharding-JDBC 的官网: http://shardingjdbc.io/。
评论