首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

orchestration简介&使用

有内涵、有价值的文章第一时间送达!

精品专栏

orchestration简介

sharding-jdbc2.x核心功能之一就是orchestration,即编排治理,什么意思呢?官方文档介绍--2.0.0.M1版本开始,sharding-jdbc提供了数据库治理功能,主要包括:

配置集中化与动态化。可支持数据源、表与分片及读写分离策略的动态切换

数据治理。提供熔断数据库访问程序对数据库的访问和禁用从库的访问的能力;

支持Zookeeper和etcd的注册中心;

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

1.架构图

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

2. 注册中心数据结构

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

config节点

config节点信息如下:

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

state节点

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

3.总结

如果熟悉dubbo的注册发现机制,就很容易理解sharding-jdbc的编排治理。服务治理原理都是大同小异:将配置信息持久化并注册监听,如果配置信息改变,通过监听机制可动态改变适应新配置。从而达到不需要重启服务的目的;sharding-jdbc的编排治理核心步骤如下所示:

sharding-jdbc启动时,将相关配置信息以JSON格式存储,包括数据源,分库分表,读写分离、ConfigMap及Properties配置等信息持久化到zookeeper(或者etcd)节点上;

注册zookeeper(或者etcd)的监听。

当节点信息发生变化,sharding-jdbc将刷新配置信息;

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

4.问题

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

附: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.

摘自Conditional updates and watches

orchestration使用

接下来讲解如何在ssm(spring、springmvc、mybatis)结构的程序上集成sharding-jdbc(版本为2.0.3)进行分库分表,并集成sharding-jdbc2.x最新特性orchestration;假设分库分表行为如下:

将authuser表分到4个库(user0~user_3)中;

其他表不进行分库分表,保留在default_db库中;

集成orchestration特性,即编排治理,可动态维护配置信息;

1.POM配置

以spring配置文件为例,新增如下POM配置:

说明

由于引入了maven坐标:sharding-jdbc-orchestration-spring-namespace,所以一定不要同时引入maven坐标:sharding-jdbc-core-spring-namespace。因为前者对应的sharding的namespace为:http://shardingjdbc.io/schema/shardingjdbc/orchestration/sharding,且通过sharding-jdbc-orchestration-spring-namespace模块中spring.handlers的定义得到该namespace的NamespaceHandler的处理类为: 。而后者对应的sharding的namespace为:http://shardingjdbc.io/schema/shardingjdbc/sharding,且通过sharding-jdbc-core-spring-namespace模块中spring.handlers的定义得到该namespace的NamespaceHandler的处理类为: ;如果同时配置两个maven坐标:sharding-jdbc-core-spring-namespace和sharding-jdbc-orchestration-spring-namespace,可能会导致加载出错抛出下面的异常信息:

2.配置数据源

spring-datasource.xml和20. sharding-jdbc2.0.3集成--基于ssm中"配置数据源"保持一致;

3.集成sharding数据源

spring-sharding.xml配置如下:

说明:这些的代码和20. sharding-jdbc2.0.3集成--基于ssm非常类似,但是有几处重要的不同点:

namespace的变更(对应的sharding的命名空间由:http://shardingjdbc.io/schema/shardingjdbc/sharding,变更为:http://shardingjdbc.io/schema/shardingjdbc/orchestration/sharding);

中新增 ,并新增 即配置中心节点配置;

4.Main测试

Main.java用来测试分库分表是否OK,其源码如下:

说明:在执行第二条SQL之前,sleep一段时间,为了留出时间通过zkClient执行set命令动态更新配置信息,执行的set命令如下:

验证日志由于xml文件中初始配置 ,所以执行的第一条SQL不会输出逻辑SQL和实际SQL信息;然后通过set命令动态更新配置后,执行第二条SQL时会输出逻辑SQL和实际SQL信息;

重启问题上面的修改只会影响zookeeper即配置中心里的配置,而程序里的配置并没有变更,如果重启服务的话,配置又会退回去,这个问题怎么办?一般服务都会集成分布式配置管理平台例如disconf,apollo等。这样的话,把spring-sharding.xml以及其他xml文件中的具体配置抽离到一个properties文件中。当我们通过set命令更新配置中心里的配置的同时,也同步修改分布式配置管理平台上维护的配置,这样的话,即使重启也会加载到最新的配置。

END

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180811G08CHZ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券