1、ShardingSphere的基本介绍

1、什么是shardingSphere

​ Apache ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款相互独立,却又能够混合部署配合使用的产品组成。 它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。

​ Apache ShardingSphere 定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。 它通过关注不变,进而抓住事物本质。关系型数据库当今依然占有巨大市场,是各个公司核心业务的基石,未来也难于撼动,我们目前阶段更加关注在原有基础上的增量,而非颠覆。

​ Apache ShardingSphere 5.x 版本开始致力于可插拔架构,项目的功能组件能够灵活的以可插拔的方式进行扩展。 目前,数据分片、读写分离、多数据副本、数据加密、影子库压测等功能,以及 MySQL、PostgreSQL、SQLServer、Oracle 等 SQL 与协议的支持,均通过插件的方式织入项目。 开发者能够像使用积木一样定制属于自己的独特系统。Apache ShardingSphere 目前已提供数十个 SPI 作为系统的扩展点,仍在不断增加中。

​ ShardingSphere 已于2020年4月16日成为 Apache 软件基金会的顶级项目。

1、sharding-JDCB

​ 定位为轻量级Java框架,在Java的JDBC层提供的额外服务。 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。

  • 适用于任何基于JDBC的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。
  • 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。
  • 支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer,PostgreSQL以及任何遵循SQL92标准的数据库。

2、sharding-proxy

​ 定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。 目前先提供MySQL/PostgreSQL版本,它可以使用任何兼容MySQL/PostgreSQL协议的访问客户端(如:MySQL Command Client, MySQL Workbench, Navicat等)操作数据,对DBA更加友好。

  • 向应用程序完全透明,可直接当做MySQL/PostgreSQL使用。
  • 适用于任何兼容MySQL/PostgreSQL协议的的客户端。

3、sharding-sidecar

​ 定位为Kubernetes的云原生数据库代理,以Sidecar的形式代理所有对数据库的访问。 通过无中心、零侵入的方案提供与数据库交互的的啮合层,即Database Mesh,又可称数据网格。

​ Database Mesh的关注重点在于如何将分布式的数据访问应用与数据库有机串联起来,它更加关注的是交互,是将杂乱无章的应用与数据库之间的交互有效的梳理。使用Database Mesh,访问数据库的应用和数据库终将形成一个巨大的网格体系,应用和数据库只需在网格体系中对号入座即可,它们都是被啮合层所治理的对象。

4、三个组件的对比

5、混合架构

​ Sharding-JDBC采用无中心化架构,适用于Java开发的高性能的轻量级OLTP应用;Sharding-Proxy提供静态入口以及异构语言的支持,适用于OLAP应用以及对分片数据库进行管理和运维的场景。

​ ShardingSphere是多接入端共同组成的生态圈。 通过混合使用Sharding-JDBC和Sharding-Proxy,并采用同一注册中心统一配置分片策略,能够灵活的搭建适用于各种场景的应用系统,架构师可以更加自由的调整适合于当前业务的最佳系统架构。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WSvDDaN5-1655347493641)(image/混合架构.png)]

2、核心概念

1、逻辑表

​ 水平拆分的数据库(表)的相同逻辑和数据结构表的总称。例:订单数据根据主键尾数拆分为10张表,分别是t_order_0t_order_9,他们的逻辑表名为t_order

2、真实表

​ 在分片的数据库中真实存在的物理表。即上个示例中的t_order_0t_order_9

3、数据节点

​ 数据分片的最小单元。由数据源名称和数据表组成,例:ds_0.t_order_0

4、绑定表

​ 指分片规则一致的主表和子表。例如:t_order表和t_order_item表,均按照order_id分片,则此两张表互为绑定表关系。绑定表之间的多表关联查询不会出现笛卡尔积关联,关联查询效率将大大提升。举例说明,如果SQL为:

SELECT i.* FROM t_order o JOIN t_order_item i ON o.order_id=i.order_id WHERE o.order_id in (10, 11);

​ 在不配置绑定表关系时,假设分片键order_id将数值10路由至第0片,将数值11路由至第1片,那么路由后的SQL应该为4条,它们呈现为笛卡尔积:

SELECT i.* FROM t_order_0 o JOIN t_order_item_0 i ON o.order_id=i.order_id WHERE o.order_id in (10, 11);SELECT i.* FROM t_order_0 o JOIN t_order_item_1 i ON o.order_id=i.order_id WHERE o.order_id in (10, 11);SELECT i.* FROM t_order_1 o JOIN t_order_item_0 i ON o.order_id=i.order_id WHERE o.order_id in (10, 11);SELECT i.* FROM t_order_1 o JOIN t_order_item_1 i ON o.order_id=i.order_id WHERE o.order_id in (10, 11);

​ 在配置绑定表关系后,路由的SQL应该为2条:

SELECT i.* FROM t_order_0 o JOIN t_order_item_0 i ON o.order_id=i.order_id WHERE o.order_id in (10, 11);SELECT i.* FROM t_order_1 o JOIN t_order_item_1 i ON o.order_id=i.order_id WHERE o.order_id in (10, 11);

​ 其中t_order在FROM的最左侧,ShardingSphere将会以它作为整个绑定表的主表。 所有路由计算将会只使用主表的策略,那么t_order_item表的分片计算将会使用t_order的条件。故绑定表之间的分区键要完全相同。

5、广播表

​ 指所有的分片数据源中都存在的表,表结构和表中的数据在每个数据库中均完全一致。适用于数据量不大且需要与海量数据的表进行关联查询的场景,例如:字典表。

6、分片键

​ 用于分片的数据库字段,是将数据库(表)水平拆分的关键字段。例:将订单表中的订单主键的尾数取模分片,则订单主键为分片字段。 SQL中如果无分片字段,将执行全路由,性能较差。 除了对单分片字段的支持,ShardingSphere也支持根据多个字段进行分片。

7、分片算法

​ 通过分片算法将数据分片,支持通过=>=<=><BETWEENIN分片。分片算法需要应用方开发者自行实现,可实现的灵活度非常高。

​ 目前提供4种分片算法。由于分片算法和业务实现紧密相关,因此并未提供内置分片算法,而是通过分片策略将各种场景提炼出来,提供更高层级的抽象,并提供接口让应用开发者自行实现分片算法。

  • 精确分片算法

    对应PreciseShardingAlgorithm,用于处理使用单一键作为分片键的=与IN进行分片的场景。需要配合StandardShardingStrategy使用。

  • 范围分片算法

    对应RangeShardingAlgorithm,用于处理使用单一键作为分片键的BETWEEN AND、>、<、>=、<=进行分片的场景。需要配合StandardShardingStrategy使用。

  • 复合分片算法

    对应ComplexKeysShardingAlgorithm,用于处理使用多键作为分片键进行分片的场景,包含多个分片键的逻辑较复杂,需要应用开发者自行处理其中的复杂度。需要配合ComplexShardingStrategy使用。

  • Hint分片算法

    对应HintShardingAlgorithm,用于处理使用Hint行分片的场景。需要配合HintShardingStrategy使用。

8、分片策略

​ 包含分片键和分片算法,由于分片算法的独立性,将其独立抽离。真正可用于分片操作的是分片键 + 分片算法,也就是分片策略。目前提供5种分片策略。

  • 标准分片策略

    对应StandardShardingStrategy。提供对SQL语句中的=, >, <, >=, <=, IN和BETWEEN AND的分片操作支持。StandardShardingStrategy只支持单分片键,提供PreciseShardingAlgorithm和RangeShardingAlgorithm两个分片算法。PreciseShardingAlgorithm是必选的,用于处理=和IN的分片。RangeShardingAlgorithm是可选的,用于处理BETWEEN AND, >, <, >=, <=分片,如果不配置RangeShardingAlgorithm,SQL中的BETWEEN AND将按照全库路由处理。

  • 复合分片策略

    对应ComplexShardingStrategy。复合分片策略。提供对SQL语句中的=, >, <, >=, <=, IN和BETWEEN AND的分片操作支持。ComplexShardingStrategy支持多分片键,由于多分片键之间的关系复杂,因此并未进行过多的封装,而是直接将分片键值组合以及分片操作符透传至分片算法,完全由应用开发者实现,提供最大的灵活度。

  • 行表达式分片策略

    对应InlineShardingStrategy。使用Groovy的表达式,提供对SQL语句中的=和IN的分片操作支持,只支持单分片键。对于简单的分片算法,可以通过简单的配置使用,从而避免繁琐的Java代码开发,如: t_user_$->{u_id % 8} 表示t_user表根据u_id模8,而分成8张表,表名称为t_user_0t_user_7

  • Hint分片策略

    对应HintShardingStrategy。通过Hint指定分片值而非从SQL中提取分片值的方式进行分片的策略。

  • 不分片策略

    对应NoneShardingStrategy。不分片的策略。

ShardingSphere-ShardingSphere的基本介绍相关推荐

  1. 高性能分布式事物中间件Sharding-Sphere介绍

    原作者:Sharding-Sphere 转载来源:http://shardingsphere.io/index.html  , https://github.com/sharding-sphere/s ...

  2. sharding-jdbc(ShardingSphere )、mycat、DRDS 三个分布式数据库中间件的简单介绍(纯理论说明)

    文章目录 1.前言 2.sharding-jdbc 3.mycat 4.DRDS 5.总结 1.前言 一般对于业务记录类随时间会不断增加的数据,当数据量增加到一定量(一般认为整型值为主的表达到千万级, ...

  3. 分布式事务在Sharding-Sphere中的实现

    分布式事务的使用场景 01 ACID 一切从ACID开始说起.ACID是本地事务所具有的四大特征: Atomicity:原子性 事务作为整体来执行,要么全部执行,要么全不执行. Consistency ...

  4. ShardingSphere源码解析 初步准备

    简介 源码阅读解析前,肯定是要对其有一个初步的了解,其用于解决问题,用于哪些场景.并上手本地跑一跑官方示例之类,开始阅读解析的第一步,为后面做准备. 阅读解析准备 GitHub和项目官网是了解的好途径 ...

  5. 京东sdk调用实例_Apache ShardingSphere(Incubating)对接京东白条实战

    作者 张永伦,京东数科高级软件工程师,Apache ShardingSphere(Incubating) PPMC.长期从事分布式系统的高可用.高并发相关工作.热衷于网络IO.性能优化方面的技术挑战. ...

  6. Sharding-Sphere的新一代Zookeeper注册中心实现剖析

    作者简介 最近的业余时间多用于做这件事: https://github.com/sharding-sphere/sharding-sphere/issues/717 由于是以完成现有功能为目标的,同时 ...

  7. Sharding-Sphere的应用性能监控实践

    Sharding-Sphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它为分布式数据存储提供了多种形式的解决方案.其中的Sharding-JDBC产品在甜橙金融的技术架构中得到了广泛应用, ...

  8. Mysql的分库分表(基于shardingsphere)

    一.名词解释 库:database:表:table:分库分表:sharding 二.数据库架构演变 刚开始我们只用单机数据库就够了,随后面对越来越多的请求,我们将数据库的写操作和读操作进行分离, 使用 ...

  9. apache 版本_Apache官宣!ShardingSphere首个Apache版本发布

    竹外桃花三两枝,春江水暖鸭先知.四月春回大地之时,Apache ShardingSphere 4.0.0-RC1终于在今天与大家见面了! 距离ShardingSphere 3.x的时代已有半年之久.在 ...

  10. 【分库分表】ShardingSphere分库分表实战

    一.参考资料 概览 :: ShardingSphere ShardingSphere之分库&分表_JustryDeng-CSDN博客_shardingsphere 分表 利用ShardingS ...

最新文章

  1. 如何确保TCP协议传输稳定可靠?
  2. 精通CSS+DIV网页样式与布局——CSS文字效果
  3. 前端必知必会--JSON.stringify()犀利的第三个参数
  4. 你能打动客户的C++理由,一定要先说服自己相信
  5. LEADTOOLS Multimedia SDK更新:改进RTSP和H.265/H.264的硬件加速
  6. 在CentOS 6上用Samba Client访问windows共享文件夹
  7. win10家庭版安装iis 微软web服务器 windows安装IIS web服务器
  8. 【ANSYS命令流】定义单元类型与实常数
  9. java实现生命游戏
  10. 【电脑运用及修理】6套台式组装机电脑配置清单大全(2022年618)
  11. MSP430开发环境配置
  12. C语言男性标准体重,男性的标准体重是多少又如何计算?
  13. springboot配置https
  14. 计算机每天早上自动开机,win10设置每天自动开机(电脑可以设置自动开机时间)...
  15. installshield java_使用InstallShield打包java程序exe以及jdk,安装完成自动运行
  16. vue-json-editor json编辑器
  17. 【openlayers】ol3入门一基础篇
  18. 为什么 K8s 在阿里能成功(转)
  19. 5分钟了解《代码整洁之道》精华
  20. easyexcel处理合并单元格数据

热门文章

  1. ros(29):a message of over a gigabyte was predicted in tcpros. that seems highly unlikely, so I‘ll as
  2. 新生代、老生代垃圾收集器总结
  3. Java编程——输出一个三角形
  4. 什么是期权,50ETF期权投资要点是什么?
  5. 华为怎么改输入法皮肤_怎么设置华为手机输入法皮肤
  6. 智能时代——大数据与智能革命重新定义未来
  7. 一个向上帝买了挂的男人
  8. 《Small Memory Software:Patterns For System With Limited Memory》读书笔记
  9. batocera_旧电脑变身影音游戏主机,支持70多个平台上万个游戏
  10. C51串口的SCON寄存器及工作…