有道无术,术尚可求,有术无道,止于术。
本系列Spring Boot 版本 3.1.0
本系列ShardingSphere 版本 5.4.0
源码地址:https://gitee.com/pearl-organization/study-sharding-sphere-demo
文章目录
- 1. 前言
- 2. My Cat
- 3. ShardingSphere
- 4. Dble
- 5. Vitess
- 6. 大厂开源
- 6.1 Cobar
- 6.2 Atlas
- 6.3 Oceanus
- 6.4 TSharding
- 6.5 Ctrip DAL
- 7. 总结
1. 前言
在使用分库分表时,已经有成熟的开源解决方案,接下来我们进行相关技术选型。
2. My Cat
官网地址
GitHub
码云
2013
年阿里发布了Cobar
,但是社区发现了一些严重问题和使用限制,于是有个第一代改良版MyCat
。
其原理是拦截了用户发送过来的SQL
语句,首先对SQL
语句做了一些特定的分析,比如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL
发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。
典型应用场景:
- 读写分离,主从切换
- 分表分库,对于超过
1000
万的表进行分片,最大支持1000
亿的单表分片 - 多租户应用
- 报表系统,借助于
Mycat
的分表能力,处理大规模报表的统计 - 替代
Hbase
,分析大数据 - 作为海量数据实时查询的一种简单有效方案,比如
100
亿条频繁查询的记录需要在3
秒内查询出来结果(除了基于主键的查询)
早些年间,Mycat
打着阿里出品的旗号,可谓是大名鼎鼎。随着最近这些年的发展,味道越来越不对。首先是Mycat 1.0
从2017
年持续断更到2020
,并遗留了很多Issues
没有解决。
Mycat 2.0
最新的更新时间也停留在2022
年6
月。
3. ShardingSphere
官网地址
GitHub
Apache ShardingSphere
是一款分布式SQL
事务和查询引擎,可通过数据分片、弹性伸缩、加密等能力对任意数据库进行增强。
发展历史:
2016
年,当当网发布了Sharding-JDBC 1.0
版本2018
年,更名为ShardingSphere
,并发布了3.0
版本,支持代理端Proxy
,并加入了Apache
孵化器2019
年,发布4.0
版本2020
年,正式成为Apache
顶级项目2021
年,发布5.0
版本,基于可插拔架构对内核进行了全面改造, 核心团队成立了商业公司SphereEx
(思斐软件)。
ShardingSphere
包含以下两大产品:
ShardingSphere-JDBC
:在Java
的JDBC
层进行增强,应用程序引入jar
包方式使用ShardingSphere-Proxy
:透明化的数据库代理端,介于应用程序与数据库之间,需要单独部署(类似于MyCat
)
核心功能:
- 数据分片
- 读写分离
- 分布式事务
- 数据迁移
- 联邦查询
- 数据加密
- 影子库
产品优势:
- 极致性能:驱动程序端历经长年打磨,效率接近原生
JDBC
,性能极致。 - 生态兼容:代理端支持任何通过
MySQL/PostgreSQL
协议的应用访问,驱动程序端可对接任意实现JDBC
规范的数据库。 - 业务零侵入:面对数据库替换场景,
ShardingSphere
可满足业务无需改造,实现平滑业务迁移。 - 运维低成本:在保留原技术栈不变前提下,对
DBA
学习、管理成本低,交互友好。 - 安全稳定:基于成熟数据库底座之上提供增量能力,兼顾安全性及稳定性。
- 弹性扩展:具备计算、存储平滑在线扩展能力,可满足业务多变的需求。
- 开放生态:通过多层次(内核、功能、生态)插件化能力,为用户提供可定制满足自身特殊需求的独有系统。
4. Dble
官方文档
GitHub
dble
是一个用于MySQL
分片的高可扩展性中间件,由上海爱可生信息技术股份有限公司出品和维护。
核心特性:
MySQL
协议兼容- 高可用性,支持集群部署,避免单节点故障
SQL 92
标准和MySQL
方言支持,支持复杂的SQL查询,如group-by
、order-by
、distinct
、join
、union
、sub-query
等- 复杂查询优化
- 分布式事务支持
5. Vitess
官方网站
GitHub
Vitess
是Youtube
出品的一个开源分布式MySQL
工具集,用于自动分片存储MySQL
数据表,将单个SQL
查询改写为分布式发送到多个MySQL Server
上。
自2011
年以来,Vitess
一直是YouTube
数据库基础设施的核心组件,并已发展到包含数万个MySQL
节点。
相关特性:
- 连接池:将应用程序查询复用到
MySQL
连接池中,以优化性能,支持缓存和事务管理器 - 安全性保护:查询重写和净化;支持自定义规则以防止潜在的问题查询访问数据库;终止返回数据所花费的时间过长的查询;支持
ACL
- 监控:提供性能分析工具监视、诊断和分析数据库性能;群集管理工具处理计划内和计划外故障切换
- 分片:几乎无缝的动态重新分片,支持垂直和水平分片;多个分片方案,具有插入自定义方案的能力
Vitess
目前只支持MySQL
和Percona Server for MySQL
,对于目前国产化要求的政企项目并不友好。
6. 大厂开源
在十几年前的2010
年,移动互联网、电子商务产业呈现高速发展的趋势,阿里、腾讯、58
骗城、携程等互联网大厂迎来一大波起飞,数据量呈现爆炸式增长。对于核心业务数据存储的关系型数据库,在之前基本都是基于分库分表方案,它们大多都研发并开源了相应的中间件,不过这些开源基本都在多年前停止维护,大多都自研或替换为商业版分布式数据库。
下面会介绍下它们的前世今生,大家了解下即可,切勿尝试。
6.1 Cobar
GitHub
最后发版时间:2014年5月
2008
年,当时就职于阿里的大佬陈思儒发布了Amoeba
,并应用于阿里巴巴生产环境,Amoeba
专注于MySQL
分布式数据库代理层,实现了高可用、负载均衡、数据切片等功能,但不支持事务、存储过程。
之后,由于对游戏更感兴趣,大佬跳槽到了盛大,任职了高级研究员,从事相关分布式框架研究工作。
由于Amoeba
作者的离职,阿里重新建立了分库分表项目组,并更新为Cobar
,于2012
年6
月正式对外开源。
目前已知的,支付宝相关业务数据,使用的是OceanBase
原生分布式数据库,运行着数十亿条不同的SQL
、数据量达数百PB
、服务器核数过百万。
6.2 Atlas
GitHub
最后发版时间:2015年5月
Atlas
是由Qihoo 360
公司基础架构团队开发维护的一个基于MySQL
协议的数据中间件。在MySQL
官方推出的MySQL-Proxy 0.8.2
版本的基础上,修改了大量bug
,添加了很多功能特性。
Atlas
于2013
发布,当时在360
公司内部得到了广泛应用,每天承载的读写请求数达几十亿条。
360
网盾发展期,针对业务爆发式增长的数据量,MySQL
读写出现瓶颈,分库分表及大表改表实施困难。其核心业务总数据达到千亿级别,单表数据量 1.2~1.5
亿,查询维度包括时间维度、地域、行业、关键词等等,同时满足多样化的展示,基于MySQL
的分库分表无法进行全局统计。
目前360
已基于TiDB
搭建了分布式数据库,完全解决了分库分表问题。
6.3 Oceanus
GitHub
最后发版时间:未发布正式版
2014
年,58
同城发布了数据库中间件Oceanus
,致力于打造一个功能简单、可依赖、易于上手、易于扩展、易于集成的DB
中间件解决方案。该项目在2015
后,已经停止更新。
58
集团目前完成了分库分表到TiDB
的技术转型,目前,内部TiDB
集群已经达到80
套,涵盖的业务线包括 58
招聘、TEG
、安居客、用户增长、信息安全、金融公司及车业务。
6.4 TSharding
GitHub
最后发版时间:2017年I月
TSharding
是蘑菇街开源的一个分库分表解决方案,目前也已停止维护多年。
6.5 Ctrip DAL
GitHub
最后发版时间:22020年I月
2016
年,作为中国在线旅游行业的翘楚,携程发布了数据库访问框架Ctrip DAL
,支持代码生成和水平扩展。由携程技术中心框架部DAL
团队开发,历经3
年不断打磨,并在长期的实际使用中基于大量的用户反馈不断优化。开源范围包括代码生成器,Java
客户端和C#
客户端。
随着携程规模扩张和业务量的急剧增加,其中标签持久化场景采用了 TiDB
来存储业务持久化的标签,其他业务数据使用OceanBase
(阿里自研关系型数据库)。
7. 总结
首先MyCat
不考虑,被吹的太过,基本属于没人维护状态,听说该项目现在只是用来引流,加群付费,营销卖课。
Vitess
国外开源,生态良好,更新频繁,但是只支持MySql
,对于现在国内某些有数据库要求的产品来说,不太友好。
不是大型公司开源类的,不用考虑,现在经济形势这么差,谁也说不好能走多久,而且大部分都是给商用引流。
大厂开源类的,不用考虑,基本都是他们不玩了,然后拿出来乐呵乐呵的。
所以最后,只有一个选择,就是ShardingSphere
,背靠Apache
基金会,团队维护,生态和文档完整🤔🤔🤔🤔🤔🤔