# 编排治理介绍


<!--more-->


了解即可!

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

- 配置中心

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

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

  - 配置中心数据结构

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

    ```
    config
    	├──authentication # Sharding-Proxy权限配置 
    	├──props # 属性配置 
    	├──schema # Schema配置 
    	├ 	├──sharding_db # SchemaName配置 
    	├ 	├ 	├──datasource # 数据源配置 
    	├ 	├ 	├──rule # 数据分片规则配置 
    	├ 	├──masterslave_db # SchemaName配置 
    	├ 	├ 	├──datasource # 数据源配置 
    	├ 	├ 	├──rule # 读写分离规则
    ```

  - confifig/authentication

    ```
    password: root 
    username: root
    ```

  - confifig/sharding/props

    ```
    sql.show: true
    ```

  - confifig/schema/schemeName/datasource

    多个数据库连接池的集合，不同数据库连接池属性自适配（例如：DBCP，C3P0，Druid,HikariCP）。```

    ```yaml
    ds_0: 
    	dataSourceClassName: com.zaxxer.hikari.HikariDataSource 
    	properties: 
    		url: jdbc:mysql://127.0.0.1:3306/demo? 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/demo2? serverTimezone=UTC&useSSL=false 
    		password: root 
    		username: root 
    		maxPoolSize: 50 
    		minPoolSize: 1
    ```

  - confifig/schema/sharding_db/rule

    数据分片配置，包括数据分片配置。

  - confifig/schema/masterslave/rule

    读写分离独立使用时使用该配置。

  - 动态生效

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

- 注册中心

  相对于配置中心管理配置数据，注册中心存放运行时的动态/临时状态数据，比如可用的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命令如下：

    ```
    [zk: localhost:2181(CONNECTED) 0] set /your_zk_namespace/your_app_name/state/instances/your_instance_ip_a@- @your_instance_pid_x DISABLED
    ```

  - 禁用从库

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

    ```
    [zk: localhost:2181(CONNECTED) 0] 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可以通过两种方式对接应用性能监控系统。

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






