ShardingSphere产品介绍![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/73d14dc635dbdb9a893b37be9eda0cb3.png)
Apache ShardingSphere
是一款分布式的数据库生态系统, 可以将任意数据库转换为分布式数据库,并通过数据分片、弹性伸缩、加密
等能力对原有数据库进行增强。
设计哲学为 Database Plus
,旨在构建异构数据库上层的标准和生态。 它关注如何充分合理地利用数据库的计算和存储能力,而并非实现一个全新的数据库。 它站在数据库的上层视角,关注它们之间的协作多于数据库自身。
连接:打造数据库上层标准
通过对数据库协议、SQL 方言以及数据库存储的灵活适配
,快速构建多模异构数据库上层的标准,同时通过内置 DistSQL 为应用提供标准化的连接方式。
增强:数据库计算增强引擎
在原生数据库基础能力之上,提供分布式及流量增强方面的能力。前者可突破底层数据库在计算与存储上的瓶颈,后者通过对流量的变形、重定向、治理、鉴权及分析能力提供更为丰富的数据应用增强能力。
可插拔:构建数据库功能生态
Apache ShardingSphere
的可插拔架构划分为 3
层,它们是:L1
内核层、L2
功能层、L3
生态层。
L1 内核层
是数据库基本能力的抽象,其所有组件均必须存在,但具体实现方式可通过可插拔的方式更换。 主要包括查询优化器、分布式事务引擎、分布式执行引擎、权限引擎和调度引擎等。
L2 功能层
用于提供增量能力,其所有组件均是可选的,可以包含零至多个组件。 组件之间完全隔离,互无感知,多组件可通过叠加的方式相互配合使用。 主要包括数据分片、读写分离、数据库高可用、数据加密、影子库等。 用户自定义功能可完全面向 Apache ShardingSphere
定义的顶层接口进行定制化扩展,而无需改动内核代码。
L3 生态层
用于对接和融入现有数据库生态,包括数据库协议、SQL 解析器和存储适配器,分别对应于 Apache ShardingSphere
以数据库协议提供服务的方式、SQL 方言操作数据的方式以及对接存储节点的数据库类型。
ShardingSphere包含三个重要的产品,
ShardingJDBC、ShardingProxy和ShardingSidecar。其中sidecar是针对service mesh定位的一个分库分表插件,目前在规划中。而我们今天学习的重点是ShardingSphere
的JDBC
和Proxy
这两个组件。
ShardingJDBC
是用来做客户端分库分表
的产品,ShardingProxy
是用来做服务端分库分表
的产品。
这两者定位有什么区别呢?我们看下官方资料中给出的两个重要的图:
shardingJDBC定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务。
- 使⽤客户端直连数据库;
- jar 包形式提供服务,⽆需额外部署和依赖;
- 可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架;
- 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等;
- 支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer,PostgreSQL以及任何遵循SQL92标准的数据库。
引入依赖
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>4.1.1</version>
</dependency>
ShardingSphere-Proxy 定位为透明化的数据库代理端,通过实现数据库二进制协议,对异构语言提供支持。 目前提供 MySQL 和 PostgreSQL 协议,透明化数据库操作,对 DBA 更加友好。
- 向应用程序完全透明,可直接当做
MySQL/PostgreSQL
使用; - 兼容
MariaDB
等基于MySQL
协议的数据库,以及openGauss
等基于PostgreSQL
协议的数据库; - 适用于任何兼容
MySQL/PostgreSQL
协议的的客户端,如:MySQL Command Client, MySQL Workbench, Navicat
等。
那这两种方式有什么区别呢?
很显然,ShardingJDBC
只是客户端的一个工具包,可以理解为一个特殊的JDBC
驱动包,所有分库分表逻辑均由业务方自己控制,所以他的功能相对灵活,支持的数据库也非常多,但是对业务侵入大,需要业务方自己定制所有的分库分表逻辑。而ShardingProxy
是一个独立部署的服务,对业务方无侵入,业务方可以像用一个普通的MySQL
服务一样进行数据交互,基本上感觉不到后端分库分表逻辑的存在,但是这也意味着功能会比较固定,能够支持的数据库也比较少。这两者各有优劣。