ShardingSphere 5.x 系列【3】分库分表中间件技术选型

有道无术,术尚可求,有术无道,止于术。

本系列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 最新的更新时间也停留在20226月。
在这里插入图片描述

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:在 JavaJDBC 层进行增强,应用程序引入jar包方式使用
  • ShardingSphere-Proxy:透明化的数据库代理端,介于应用程序与数据库之间,需要单独部署(类似于MyCat

核心功能:

  • 数据分片
  • 读写分离
  • 分布式事务
  • 数据迁移
  • 联邦查询
  • 数据加密
  • 影子库

产品优势:

  • 极致性能:驱动程序端历经长年打磨,效率接近原生 JDBC,性能极致。
  • 生态兼容:代理端支持任何通过MySQL/PostgreSQL 协议的应用访问,驱动程序端可对接任意实现 JDBC 规范的数据库。
  • 业务零侵入:面对数据库替换场景,ShardingSphere 可满足业务无需改造,实现平滑业务迁移。
  • 运维低成本:在保留原技术栈不变前提下,对 DBA 学习、管理成本低,交互友好。
  • 安全稳定:基于成熟数据库底座之上提供增量能力,兼顾安全性及稳定性。
  • 弹性扩展:具备计算、存储平滑在线扩展能力,可满足业务多变的需求。
  • 开放生态:通过多层次(内核、功能、生态)插件化能力,为用户提供可定制满足自身特殊需求的独有系统。

4. Dble

官方文档
GitHub

dble是一个用于MySQL分片的高可扩展性中间件,由上海爱可生信息技术股份有限公司出品和维护。

核心特性:

  • MySQL协议兼容
  • 高可用性,支持集群部署,避免单节点故障
  • SQL 92标准和MySQL方言支持,支持复杂的SQL查询,如group-byorder-bydistinctjoinunionsub-query
  • 复杂查询优化
  • 分布式事务支持

5. Vitess

官方网站
GitHub

VitessYoutube出品的一个开源分布式MySQL工具集,用于自动分片存储MySQL数据表,将单个SQL查询改写为分布式发送到多个MySQL Server上。

2011年以来,Vitess一直是YouTube数据库基础设施的核心组件,并已发展到包含数万个MySQL节点。

相关特性:

  • 连接池:将应用程序查询复用到MySQL连接池中,以优化性能,支持缓存和事务管理器
  • 安全性保护:查询重写和净化;支持自定义规则以防止潜在的问题查询访问数据库;终止返回数据所花费的时间过长的查询;支持ACL
  • 监控:提供性能分析工具监视、诊断和分析数据库性能;群集管理工具处理计划内和计划外故障切换
  • 分片:几乎无缝的动态重新分片,支持垂直和水平分片;多个分片方案,具有插入自定义方案的能力

Vitess目前只支持MySQLPercona Server for MySQL,对于目前国产化要求的政企项目并不友好。

6. 大厂开源

在十几年前的2010年,移动互联网、电子商务产业呈现高速发展的趋势,阿里、腾讯、58骗城、携程等互联网大厂迎来一大波起飞,数据量呈现爆炸式增长。对于核心业务数据存储的关系型数据库,在之前基本都是基于分库分表方案,它们大多都研发并开源了相应的中间件,不过这些开源基本都在多年前停止维护,大多都自研或替换为商业版分布式数据库。

下面会介绍下它们的前世今生,大家了解下即可,切勿尝试。

6.1 Cobar

GitHub
最后发版时间:2014年5月

2008年,当时就职于阿里的大佬陈思儒发布了Amoeba,并应用于阿里巴巴生产环境,Amoeba专注于MySQL分布式数据库代理层,实现了高可用、负载均衡、数据切片等功能,但不支持事务、存储过程。

之后,由于对游戏更感兴趣,大佬跳槽到了盛大,任职了高级研究员,从事相关分布式框架研究工作。
在这里插入图片描述
由于Amoeba作者的离职,阿里重新建立了分库分表项目组,并更新为Cobar,于20126月正式对外开源。

目前已知的,支付宝相关业务数据,使用的是OceanBase原生分布式数据库,运行着数十亿条不同的SQL、数据量达数百PB、服务器核数过百万。

6.2 Atlas

GitHub
最后发版时间:2015年5月

Atlas是由Qihoo 360公司基础架构团队开发维护的一个基于MySQL协议的数据中间件。在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。

Atlas2013发布,当时在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基金会,团队维护,生态和文档完整🤔🤔🤔🤔🤔🤔

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/669373.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker 一小时从入门到实战 —— Docker commands | Create your own image | vs VM ... 基本概念扫盲

Docker crash course 文章目录 Docker crash course1. What and Why of Docker?2.1 What2.2 What problem does it solve?2.2.1 before containers2.1.2 with containers 2. Docker vs Virtual Machines2.1 Difference2.2 Benefits 3. Install docker locally4. Images vs Co…

【CSS】外边距折叠(margin 塌陷)

外边距折叠(collapsing margins) 毗邻的两个或多个margin会合并成一个margin,叫做外边距折叠。 规则如下: 两个或多个毗邻的普通流中的块元素垂直方向上的 margin会折叠浮动元素 / inline-block元素 / 绝对定位元素 / 行内元素的margin不会和垂直方向上的其他元素…

【网站项目】046人事管理信息系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

锁优化的方法

减少锁持有时间 减少锁粒度 将大对象拆分成小对象,增加并行度,降低锁竞争。ConcurrentHashMap允许多个线程同 时进入 锁分离 根据功能进行锁分离ReadWriteLock在读多写少时,可以提高性能。 锁消除 锁消除是发生在编译器级别的一种锁优化…

解放网工双手-SNMP如何做好运维辅助?

1. SNMP为什么被誉为“网管神器”? 2. SNMP不同版本有何区别? 3. SNMP有哪些问题及Telemetry有何优势? ---- SNMP ----- 简单网络管理协议 U2000:传输设备管理 企业,银行 esight:华为 iMaster NCE-Camp…

编码世界探秘:原反补码与实数表示,含定点、浮点及BCD编码

数值的编码表示 整数编码表示 在计算机中,因为只有0和1这两种形式,但为了表示数的正(),负(-)号,就要将数的符号以0和1编码。 通常把一个数的最高位定义为符号位,用0表…

#Z0458. 树的中心2

题目 代码 #include <bits/stdc.h> using namespace std; struct ff {int z,len; }; vector<ff> vec[300001]; int n,u,v,w,dp[300001][2],ans 1e9; void dfs(int x,int fa) {for(int i 0;i < vec[x].size();i){ff son vec[x][i];if(son.z ! fa){dfs(son.z,…

保护个人信息安全,避免成为“互联网中的裸泳者”

⚽️ 一、互联网中的裸泳者&#x1f3c0; 二、代理 IP 的应用 - 解锁无限可能⚾️ 三、代理 ip 的几种类型 3.1 动态住宅代理&#xff08;Rotating Residential Proxy&#xff09;3.2 静态住宅代理&#xff08;Static Residential Proxy&#xff09;3.3 动态长效ISP&#xff08…

LLM之RAG实战(二十四)| LlamaIndex高级检索(三):句子窗口检索

这是本系列关于高级检索技术的第三篇文章&#xff0c;之前的两篇分别介绍构建基本的RAG和父文档检索技术&#xff0c;本文我们将深入研究句子窗口检索技术。我将介绍如何设置它&#xff0c;并使用TruEval来测量其性能&#xff0c;并将其性能与我们在前几篇文章中介绍的其他技术…

华清作业day52

代码&#xff1a; #include <stdlib.h> #include <stdio.h> typedef struct Node {char data;struct Node *lchild;struct Node *rchild; }*Tree; //申请空间 Tree create_space() {Tree t (Tree)malloc(sizeof(struct Node));if(NULL t){return NULL;}t->da…

深度神经网络中的BNN和DNN:基于存内计算的原理、实现与能量效率

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言引言内存计算体系结构深度神经网络&#xff08;DNN&#xff09;随机梯度的优…

中国好书2024推荐│《富而喜悦》唐乾九 片段节选

当你打开了这枚锦囊时&#xff0c;我为你感到骄傲&#xff0c;相信阅读至此&#xff0c;你已经比很多人更能了解如何过上富而喜悦的人生了。如果你不只是阅读&#xff0c;甚至已经把先前的内容带到生活中去见习过的话&#xff0c;此刻的你一定有更多的感触。我希望你能试着去组…

【Linux网络编程二】网络基础2(网络框架)

【Linux网络编程二】网络基础2&#xff08;网络框架&#xff09; 一.数据如何跨网络传输1.源ip和目的ip2.路由器的使命3.Mac地址的使命 二.网络通信的本质三.端口号1.存在意义2.实现原理 四.认识协议1.TCP协议2.UDP协议 五.网络字节序六.通用网络接口 一.数据如何跨网络传输 在…

【算法与数据结构】718、1143、1035、392、115、LeetCode最长重复子数组+最长公共子序列+不相交的线+判断子序列+不同的子序列

文章目录 一、718、最长重复子数组二、1143、最长公共子序列三、1035、不相交的线四、392、判断子序列五、115、不同的子序列六、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、718、最长重复子数组 思路分析&#xff1…

问题:下列哪些属于历史文化资源的特征( ). #学习方法#学习方法

问题&#xff1a;下列哪些属于历史文化资源的特征( ). A、稀缺性 B、脆弱性 C、可再生性 D、多样性 参考答案如图所示

C语言函数递归详解

递归是什么&#xff1f; 递归&#xff0c;顾名思义&#xff0c;就是递推和回归。 递归是一种解决问题的方法&#xff0c;在C语言中&#xff0c;递归就是函数自己调用自己。 #include <stdio.h> int main() {printf("hehe\n");main();//main函数中⼜调⽤了main…

如何部署Linux AMH服务器管理面板并结合内网穿透远程访问

文章目录 1. Linux 安装AMH 面板2. 本地访问AMH 面板3. Linux安装Cpolar4. 配置AMH面板公网地址5. 远程访问AMH面板6. 固定AMH面板公网地址 AMH 是一款基于 Linux 系统的服务器管理面板&#xff0c;它提供了一系列的功能&#xff0c;包括网站管理、FTP 管理、数据库管理、DNS 管…

复旦大学NLP团队发布86页大模型Agent综述

复旦大学自然语言处理团队&#xff08;FudanNLP&#xff09;发布了一篇长达86页的综述论文&#xff0c;探讨了基于大型语言模型的智能代理的现状和未来。该论文从AI Agent的历史出发&#xff0c;全面梳理了基于大型语言模型的智能代理现状&#xff0c;包括LLM-based Agent的背景…

优秀学习网站推荐-第一辑

原文地址&#xff1a;https://jaune162.blog/2024/02/15/study-website-recommend Developer Roadmaps&#xff08;开发者路线图&#xff09; 官网地址&#xff1a;https://roadmap.sh/ 该网站包含了各个方向、各个语言的开发人员从零开始学习的路线图。 下图为Java方向的学…

Jenkins配置http请求github,发布release

学无止境&#xff0c;气有浩然&#xff01; Jenkins配置http请求github&#xff0c;发布release 前言Jenkins配置github配置在这里插入图片描述 打完收工! 前言 工作中进行了github迁移&#xff0c;原先的gitlab中配置的Jenkins的CI/CD步骤需要发布到Github发布release版本&am…