概述
当我们的业务发展到一定程度,数据库和表的划分是必然的要求。划分数据库可以实现资源隔离,而划分表可以减少单个表中的数据量,提高访问效率。
子库和子表的技术方案中一般有两个概念:
集中式代理、实现MySQL客户端协议、使用户不知道分布式代理、在代码级增强代理和实现路由程序各有利弊。集中式代理的优点是业务不知道,一切都由数据库管理员来控制。分布式代理支持的语言是有限的,比如ShardingShpere-JDBC只支持Java。
目前我们正在通过MySQL中间件实现读写分离(不改变应用),大家可以看到有很多产品:Atlas、DB Proxy、CEUS、阿米巴、Cobar、MyCAT、ProxySQL.这些中间件哪一个更好用,这里总是推荐JD.COM维护的Sharding-Shpere,所以今天我主要介绍Sharding-Shper。
一、简介
Apache ShardingSphere是一个开源分布式数据库中间件解决方案的生态系统,由三个独立的产品组成,分别是Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(正在规划中),可以混合部署和使用。它们都提供了标准化的数据分片、分布式事务和数据库治理功能,可以应用于Java同构、异构语言、云原生等各种应用场景。
ShardingSphere定位为关系数据库中间件,旨在充分合理地利用分布式场景下关系数据库的计算和存储能力,而不是实现一个全新的关系数据库。它通过关注恒常性来把握事物的本质。关系数据库在今天仍然占据着巨大的市场,是各个公司核心业务的基石,未来将难以撼动。这种中间件更注重在原有基础上的增量,而不是颠覆。
官方网站:https://shardingsphere.apache.org/index_zh.html
文件:https://shardingsphere.apache.org/document/
https://github.com/sharding-sphere
00-1010三个核心模块分别是分片-JDBC、分片-代理和分片-边车。
1、夏丁-JDBC
Sharding-JDBC是ShardingSphere的第一个产品,也是ShardingSphere的前身。它被定位为轻量级spring mvc,这是在Java的JDBC层中提供的附加服务。它使用客户端直接连接到数据库,并以jar包的形式提供服务,不需要额外的部署和依赖。可以理解为JDBC驱动的增强版,完全兼容JDBC和各种ORM框架。
它适用于任何基于JDBC的ORM框架,如JPA、Hibernate、Mybatis、Spring JDBC模板或直接使用JDBC。支持任何第三方数据库连接池,如DBCP、C3P0、Bonecp、Druid、Hikaricp等。支持任意实现JDBC规范的数据库。目前支持MySQL、Oracle、SQLServer、PostgreSQL以及任何符合SQL92标准的数据库。分片-JDBC可以通过Java、YAML、Spring Namespace和Spring Boot Starter进行配置。
2、分片代理
分片代理是分片球体的第二个产品。它被定位为一个透明的数据库代理,并提供了一个封装数据库二进制协议的服务器版本,用于支持异构语言。目前先提供MySQL/PostgreSQL版本,可以使用任何兼容MySQL/PostgreSQL协议的访问客户端(如MySQL命令客户端、MySQL Wor
kbench, Navicat等)操作数据,对DBA更加友好。
向应用程序完全透明,可直接当做MySQL/PostgreSQL使用。适用于任何兼容MySQL/PostgreSQL协议的的客户端。
3、Sharding-Sidecar
Sharding-Sidecar是ShardingSphere的第三个产品,目前仍然在规划中。 定位为Kubernetes或Mesos的云原生数据库代理,以DaemonSet的形式代理所有对数据库的访问。
通过无中心、零侵入的方案提供与数据库交互的的啮合层,即Database Mesh,又可称数据网格。 Database Mesh的关注重点在于如何将分布式的数据访问应用与数据库有机串联起来,它更加关注的是交互,是将杂乱无章的应用与数据库之间的交互有效的梳理。使用Database Mesh,访问数据库的应用和数据库终将形成一个巨大的网格体系,应用和数据库只需在网格体系中对号入座即可,它们都是被啮合层所治理的对象。
三、sharding-sphere不同产品对比
ShardingSphere的3个产品的数据分片主要流程是完全一致的。 核心由SQL解析 => 执行器优化 => SQL路由 => SQL改写 => SQL执行 => 结果归并的流程组成
那他们之间有什么区别呢?
Sharding-JDBC的优势在于对Java应用的友好度。
Sharding-Proxy的优势在于对异构语言的支持,以及为DBA提供可操作入口。
Sharding-Sidecar的优势在于对Kubernetes和Mesos的云原生支持。
觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~