Mysql学习笔记—ShardingSphere的ShardingJDBC简介
-
Apache ShardingSphere
是一款开源的分布式数据库中间件组成的生态圈。它由Sharding-JDBC
、Sharding-Proxy
和Sharding-Sidecar(规划中)
这3款相互独立的产品组成。 他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构
、异构语言
、容器
、云原生
等各种多样化的应用场景。 -
ShardingSphere项目状态如下:
-
ShardingSphere
定位为关系型数据库
中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库
。
Sharding-JDBC
:被定位为轻量级Java框架,在Java的JDBC层提供的额外服务,以jar包形式使用。Sharding-Proxy
:被定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。Sharding-Sidecar
:被定位为Kubernetes或Mesos的云原生数据库代理,以DaemonSet的形式代理所有对数据库的访问。
-
Sharding-JDBC
和Sharding-Proxy
的作用位置查看:
-
Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar三者区别如下:
2. Sharding-JDBC功能介绍
Sharding-JDBC
定位为轻量级Java框架
,在Java的JDBC层提供的额外服务。- 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架的使用。
- 适用于任何基于Java的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。
- 基于任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。
- 支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer和PostgreSQL。
3. Sharding-JDBC主要功能:
数据分片
- 分库、分表
- 读写分离
- 分片策略
- 分布式主键
分布式事务
- 标准化的事务接口
- XA强一致性事务
- 柔性事务
数据库治理(治理等于管理)
- 配置动态化
- 编排和治理
- 数据脱敏
- 可视化链路追踪
4. Sharding-JDBC内部结构:
- 图中黄色部分表示的是
Sharding-JDBC
的入口API
,采用工厂方法的形式提供。 目前有ShardingDataSourceFactory
和MasterSlaveDataSourceFactory
两个工厂类。ShardingDataSourceFactory
支持分库分表、读写分离操作MasterSlaveDataSourceFactory
支持读写分离操作
- 图中蓝色部分表示的是
Sharding-JDBC
的配置对象,提供灵活多变的配置方式。 - 蓝色部分ShardingRuleConfiguration是分库分表配置的核心和入口,它可以包含多个
TableRuleConfiguration
和MasterSlaveRuleConfiguration
。TableRuleConfiguration
封装的是表的分片配置信息,有5种配置形式对应不同的Configuration
类型。MasterSlaveRuleConfiguration
封装的是读写分离配置信息。
- 图中红色部分表示的是内部对象,由Sharding-JDBC内部使用,应用开发者无需关注。
ShardingJDBC
通过ShardingRuleConfiguration
和MasterSlaveRuleConfiguration
生成真正供
ShardingDataSource
和MasterSlaveDataSource
使用的规则对象。ShardingDataSource
和MasterSlaveDataSource
实现了DataSource
接口,是JDBC
的完整实现方案。
5. Sharding-JDBC的初始化流程:
- 根据配置的信息生成Configuration对象
- 通过Factory会将Configuration对象转化为Rule对象
- 通过Factory会将Rule对象与DataSource对象封装
- Sharding-JDBC使用DataSource进行分库分表和读写分离操作
6. Sharding-JDBC的使用过程:
引入Maven
:<dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-core</artifactId> <version>${latest.release.version}</version> </dependency>
修改规则配置
Sharding-JDBC
可以通过Java,YAML,Spring命名空间和Spring Boot Starter四种方式配置,开发者可根据场景选择适合的配置方式。
创建DataSource
- 通过
ShardingDataSourceFactory
工厂和规则配置对象获取ShardingDataSource
,然后即可通过DataSource选择使用原生JDBC开发,或者使用JPA, MyBatis等ORM工具。
DataSource dataSource = ShardingDataSourceFactory.createDataSource(dataSourceMap, shardingRuleConfig, props);
- 通过