23. sharding-jdbc源码之orchestration简介&使用

本文介绍了sharding-jdbc2.x的orchestration(编排治理)功能,包括配置中心化与动态化、数据治理,并详细阐述了其架构图、注册中心的数据结构。通过实例展示了在SSM项目中集成sharding-jdbc的分库分表配置,并实现了通过Zookeeper进行动态配置更新。最后讨论了配置更新后的验证和重启服务的处理策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

阿飞Javaer,转载请注明原创出处,谢谢!

sharding-jdbc2.x核心功能之一就是orchestration,即编排治理,什么意思呢?官方文档介绍–2.0.0.M1版本开始,sharding-jdbc提供了数据库治理功能,主要包括:
- 配置集中化与动态化。可支持数据源、表与分片及读写分离策略的动态切换
- 数据治理。提供熔断数据库访问程序对数据库的访问和禁用从库的访问的能力;
- 支持Zookeeper和etcd的注册中心;

摘自sharding-jdbc编排治理,官方文档也有比较详细的使用文档;

1.架构图

sharding-jdbc2.0.3架构图
由sharding-jdbc2.x新的架构图可知,sharding-jdbc2.x与sharding-jdbc1.x版本最大的变化就是最左边的sharding-jdbc-orchestration。即为了动态修改配置引入的注册中心和编排模块。而sharding-jdbc内部实现架构几乎没有任何改变。

2. 注册中心数据结构

注册中心在定义的命名空间下,创建数据库访问对象运行节点,用于区分不同数据库访问实例。命名空间中包含2个数据子节点,分别是config和state。

config节点

config节点信息如下:

config
    ├──datasource                                数据源(可能多个,数据结构为json数组)配置
    ├──sharding                                  分库分表(包括分库分表+读写分离)配置根节点
    ├      ├──rule                               分库分表(包括分库分表+读写分离)规则
    ├      ├──configmap                          分库分表ConfigMap配置,以K/V形式存储,如:{
  "k1":"v1"}
    ├      ├──props                              Properties配置
    ├──masterslave                               读写分离独立使用配置
    ├      ├──rule                               读写分离规则
    ├      ├──configmap                          读写分离ConfigMap配置,以K/V形式存储,如:{
  "k1":"v1"}

首先大概了解持久化在注册中心的数据结构图,更容易理解后面的源码分析。各节点详细信息可参考官方文档;

state节点

state节点包括instances和datasource节点。
instances节点信息如下:

instances
    ├──your_instance_ip_a@-@your_instance_pid_x
    ├──your_instance_ip_b@-@your_instance_pid_y
    ├──....    

3.总结

如果熟悉dubbo的注册发现机制,就很容易理解sharding-jdbc的编排治理。服务治理原理都是大同小异:将配置信息持久化并注册监听,如果配置信息改变,通过监听机制可动态改变适应新配置。从而达到不需要重启服务的目的;sharding-jdbc的编排治理核心步骤如下所示:
1. sharding-jdbc启动时,将相关配置信息以JSON格式存储,包括数据源,分库分表,读写分离、ConfigMap及Properties配置等信息持久化到zookeeper(或者etcd)节点上;
2. 注册zookeeper(或者etcd)的监听。
3. 当节点信息发生变化,sharding-jdbc将刷新配置信息;

下一篇文章基于源码分析这三步骤sharding-jdbc的编排治理是如何实现的;

4.问题

遗憾的是,sharding-jdbc2.x没有提供可视化操作途径。以zookeeper配置中心为例,用户需要自己登陆zkClient,并通过set命令修改某节点对应的值;例如在zkClient中执行如下命令开启输出sql日志:

set /orchestration-yaml-test/demo_ds_ms/config/sharding/props {
  "sql.show":false}

附:zookeeper监听机制

ZooKeeper supports the concept of watches. Clients can set a watch on a znodes. A watch will be triggered and removed when the znode changes. When a watch is triggered the client receives a packet saying that the znode has changed.

摘自

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值