Rubin's Blog

  • 首页
  • 关于作者
  • 隐私政策
享受恬静与美好~~~
分享生活的点点滴滴~~~
  1. 首页
  2. MySQL
  3. 正文

MySQL之Sharding-JDBC编排治理剖析

2021年 11月 11日 780点热度 0人点赞 0条评论

编排治理模块提供配置中心/注册中心(以及规划中的元数据中心)、配置动态化、数据库熔断禁用、调用链路等治理能力。

官网文档地址:https://shardingsphere.apache.org/document/legacy/4.x/document/cn/manual/sharding-jdbc/usage/orchestration/。本文只做简单的理论介绍,实际使用的话需要结合本文和官网文档

配置中心

配置集中化:越来越多的运行时实例,使得散落的配置难于管理,配置不同步导致的问题十分严重。将配置集中于配置中心,可以更加有效进行管理。

配置动态化:配置修改后的分发,是配置中心可以提供的另一个重要能力。它可支持数据源、表与分片及读写分离策略的动态切换。

配置中心数据结构

配置中心在定义的命名空间的config下,以YAML格式存储,包括数据源,数据分片,读写分离、Properties配置,可通过修改节点来实现对于配置的动态管理。

config
 ├──authentication              # Sharding-Proxy权限配置
 ├──props                   # 属性配置
 ├──schema                   # Schema配置
 ├   ├──sharding_db            # SchemaName配置
 ├   ├   ├──datasource         # 数据源配置
 ├   ├   ├──rule             # 数据分片规则配置
 ├   ├──masterslave_db           # SchemaName配置
 ├   ├   ├──datasource          # 数据源配置
 ├   ├   ├──rule             # 读写分离规则
  • config/authentication
password: root
username: root
  • onfig/sharding/props
sql.show: true
  • config/schema/schemeName/datasource

多个数据库连接池的集合,不同数据库连接池属性自适配(例如:DBCP,C3P0,Druid,HikariCP)。

ds_0:
dataSourceClassName: com.zaxxer.hikari.HikariDataSource
 properties:
  url: jdbc:mysql://127.0.0.1:3306/rubin1?
serverTimezone=UTC&useSSL=false
  password: root
  username: root
  maxPoolSize: 50
  minPoolSize: 1
ds_1:
 dataSourceClassName: com.zaxxer.hikari.HikariDataSource
 properties:
  url: jdbc:mysql://127.0.0.1:3306/rubin2?
serverTimezone=UTC&useSSL=false
  password: root
  username: root
  maxPoolSize: 50
  minPoolSize: 1
  • config/schema/schemeName/rule

数据分片配置,包括数据分片配置、读写分离配置。上文示意结构中只是展示了两种配置示意:数据分片配置和读写分离配置。我们完全可以合在一起配置。注册中心都是以schemeName为隔离单元的。

tables:
 b_order:
  actualDataNodes: ds_$->{0..1}.b_order_$->{0..1}
  databaseStrategy:
      inline:
     shardingColumn: user_id
    algorithmExpression: ds_$->{user_id % 2}
   keyGenerator:
   column: order_id
   logicTable: b_order
  tableStrategy:
   inline:
    shardingColumn: order_id
    algorithmExpression: b_order_$->{order_id % 2}
  b_order_item:
  actualDataNodes: ds_$->{0..1}.b_order_item_$->{0..1}
  databaseStrategy:
   inline:
    shardingColumn: user_id
    algorithmExpression: ds_$->{user_id % 2}
  keyGenerator:
   column: order_item_id
  logicTable: b_order_item
  tableStrategy:
   inline:
    shardingColumn: order_id
    algorithmExpression: b_order_item_$->{order_id % 2}

在注册中心上修改、删除、新增相关配置,会动态推送到生产环境并立即生效。

注册中心

相对于配置中心管理配置数据,注册中心存放运行时的动态/临时状态数据,比如可用的proxy的实例、需要禁用或熔断的datasource实例等。通过注册中心,可以提供熔断数据库访问程序对数据库的访问和禁用从库的访问的编排治理能力。治理仍然有大量未完成的功能(比如流控等)。

注册中心数据结构

注册中心在定义的命名空间的state下,创建数据库访问对象运行节点,用于区分不同数据库访问实例。包括instances和datasources节点。

instances
 ├──your_instance_ip_a@-@your_instance_pid_x
 ├──your_instance_ip_b@-@your_instance_pid_y
 ├──....
datasources
 ├──ds0
 ├──ds1
 ├──....
  • state/instances

数据库访问对象运行实例信息,子节点是当前运行实例的标识。 运行实例标识由运行服务器的IP地址和PID构成。运行实例标识均为临时节点,当实例上线时注册,下线时自动清理。注册中心监控这些节点的变化来治理运行中实例对数据库的访问等。

  • state/datasources

可以控制读写分离,可动态添加删除以及禁用。

熔断实例

可在IP地址@-@PID节点写入DISABLED(忽略大小写)表示禁用该实例,删除DISABLED表示启用。

ZooKeeper命令如下:

set
 /your_zk_namespace/your_app_name/state/instances/your_instance_ip_a@-
@your_instance_pid_x DISABLED

禁用从库

在读写分离场景下,可在数据源名称子节点中写入DISABLED表示禁用从库数据源,删除DISABLED或节点表示启用。

ZooKeeper命令如下:

set
 /your_zk_namespace/your_app_name/state/datasources/your_slave_datasource_nam
e DISABLED

支持的配置中心和注册中心

ShardingSphere在数据库治理模块使用SPI方式载入数据到配置中心/注册中心,进行实例熔断和数据库禁用。 目前,ShardingSphere内部支持ZooKeeper和Etcd这种常用的配置中心/注册中心。 此外,您可以使用其他第三方配置中心/注册中心,例如Apollo、Nacos等,并通过SPI的方式注入到ShardingSphere,从而使用该配置中心/注册中心,实现数据库治理功能。

应用性能监控

APM是应用性能监控的缩写。目前APM的主要功能着眼于分布式系统的性能诊断,其主要功能包括调用链展示,应用拓扑分析等。

ShardingSphere并不负责如何采集、存储以及展示应用性能监控的相关数据,而是将SQL解析与SQL执行这两块数据分片的最核心的相关信息发送至应用性能监控系统,并交由其处理。 换句话说,ShardingSphere仅负责产生具有价值的数据,并通过标准协议递交至相关系统。

ShardingSphere可以通过两种方式对接应用性能监控系统:

  • 使用OpenTracing API发送性能追踪数据。面向OpenTracing协议的APM产品都可以和ShardingSphere自动对接,比如SkyWalking、Zipkin和Jaeger
  • 使用SkyWalking的自动探针。 ShardingSphere团队与SkyWalking团队共同合作,在SkyWalking中实现了ShardingSphere自动探针,可以将相关的应用性能数据自动发送到SkyWalking中

以上就是本文的全部内容。欢迎小伙伴们积极留言交流~~~

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: MySQL
最后更新:2022年 6月 9日

RubinChu

一个快乐的小逗比~~~

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
文章目录
  • 配置中心
    • 配置中心数据结构
  • 注册中心
    • 注册中心数据结构
    • 熔断实例
    • 禁用从库
  • 支持的配置中心和注册中心
  • 应用性能监控
最新 热点 随机
最新 热点 随机
问题记录之Chrome设置屏蔽Https禁止调用Http行为 问题记录之Mac设置软链接 问题记录之JDK8连接MySQL数据库失败 面试系列之自我介绍 面试总结 算法思维
ZooKeeper之环境搭建 MySQL之集群架构 java面试系列之Linux Elasticsearch之企业级高可用分布式集群 java面试系列之网络编程 Tomcat之手写简易服务器

COPYRIGHT © 2021 rubinchu.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

京ICP备19039146号-1