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

news2024/11/20 15:24:13

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

本系列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.coloradmin.cn/o/1434512.html

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

相关文章

Chronos靶机渗透

Chronos靶机 一.信息收集1.靶机IP地址确认2.目录扫描3.常见漏洞扫描5.web网站探测1.网页2.源代码 二.网站渗透1.命令执行2.抓包---burp suite3.反弹shell 三.提权1.node.js原核污染第一个flag 2.sudo提权第二个flag 一.信息收集 1.靶机IP地址确认 ┌──(root㉿kali)-[/] └─…

Codeforces Round 914 (Div. 2)(D1/D2)--ST表

Codeforces Round 914 (Div. 2)(D1/D2)–ST表 D1. Set To Max (Easy Version) 题意: 给出长度为n的数组a和b,可以对a进行任意次数操作,操作方式为选择任意区间将区间内值全部变成该区间的最大值, 是否有可能使得数组a等于数组b…

centos跟新时间为网络时间

安装ntp yum install ntp -y 从本地获取网络时间并更新 ntpdate pool.ntp.org 时间设置成功

简单实验 java spring cloud 自定义负载均衡

1.概要 1.1 说明 这个是在前一个测试上的修改,所以这里只体现修改的内容。前一个测试的地址:检查实验 spring cloud nacos nacos-server-2.3.0-CSDN博客 1.2 记忆要点 1.2.1 引入对象 Autowired DiscoveryClient discoveryClient; 1.2.2 获取服务实…

简单说说redis分布式锁

什么是分布式锁 分布式锁(多服务共享锁)在分布式的部署环境下,通过锁机制来让多客户端互斥的对共享资源进行访问/操作。 为什么需要分布式锁 在单体应用服务里,不同的客户端操作同一个资源,我们可以通过操作系统提供…

Java SPI 代码示例

Java Service Provider Interface 是JDK自带的服务提供者接口又叫服务发现机制更是一种面向接口的设计思想。即JDK本身提供接口类, 第三方实现其接口,并作为jar包或其他方式注入到其中, 在运行时会被JDK ServiceLoader 发现并加载&#xff0c…

锐捷VSU和M-LAG介绍

参考网站 堆叠、级联和集群的概念 什么是堆叠? 框式集群典型配置 RG-S6230[RG-S6501-48VS8CQ]系列交换机 RGOS 12.5(4)B1005版本 配置指南 总结 根据以上的几篇文章总结如下: 级联:简单,交换机相连就叫级联,跟搭…

SaaS 电商设计 (八) 直接就能用的一套商品池完整的设计方案(建议收藏)

目录 一.前言1.1 在哪些业务场景里使用1.2 一些名词搞懂他1.3 结合业务思考一下-业务or产品的意图 二.方案设计2.1 业务主流程2.2 一步步带你分析B端如何配置2.3 数据流2.3.1 ES 数据表建设2.3.2 核心商品池流程2.3.2.1 商品池B端维护流程2.3.2.2 商品池版本更新逻辑 2.4 核心代…

PySpark(三)RDD持久化、共享变量、Spark内核制度,Spark Shuffle

目录 RDD持久化 RDD 的数据是过程数据 RDD 缓存 RDD CheckPoint 共享变量 广播变量 累加器 Spark 内核调度 DAG DAG 的宽窄依赖和阶段划分 内存迭代计算 Spark是怎么做内存计算的? DAG的作用?Stage阶段划分的作用? Spark为什么比MapReduce快? Spar…

Java项目服务器部署

Java项目服务器部署 Tomocat Java项目进行云服务器部署 如果有需要比赛部署的同学也可以联系我,我后续还会对于这个专栏继续展开 1、云服务器选购 1.1 阿里云选购(宝塔面板) 1.2 端口放行 这里说的就是端口放行,后面一些访问比…

打造直播带货商城APP:源码开发技术全解析

直播带货商城APP的创新模式吸引了用户,提升销售业绩,已经成为了近期开发者讨论的热门话题。今天,小编将深入讲解如何打造一款功能强大的直播带货商城APP,着重分析源码开发技术,为开发者提供全方位的指导。 一、前期准…

电商推荐系统

此篇博客主要记录一下商品推荐系统的主要实现过程。 一、获取用户对商品的偏好值 代码实现 package zb.grms;import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.Doub…

docker自定义镜像并使用

写在前面 本文看下如何自定义镜像。 ik包从这里 下载。 1:自定义带有ik的es镜像 先看下目录结构: /opt/program/mychinese [rootlocalhost mychinese]# ll total 16 -rw-r--r-- 1 root root 1153 Feb 5 04:18 docker-compose.yaml -rw-rw-r-- 1 el…

2024智慧城市新纪元:引领未来,重塑都市生活

随着科技的飞速发展和数字化转型的不断深入,2024年智慧城市领域迎来了全新的发展格局。 这一年,智慧城市的建设更加注重人性化、可持续性和创新性,为城市居民带来了前所未有的便捷与舒适。以下将重点关注智慧城市的几个核心内容,…

Java设计模式-模板方法模式(14)

行为型模式 行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对…

【UE 材质】扇形材质

目录 效果 步骤 (1)控制扇形的弧宽度 (2)控制扇形的角度 (3)完整节点 效果 步骤 (1)控制扇形的弧宽度 创建一个材质,混合模式设置为“Additive”,着色…

代码随想录算法训练营DAY13 | 栈与队列 (3)

一、LeetCode 239 滑动窗口最大值 题目链接&#xff1a;239.滑动窗口最大值https://leetcode.cn/problems/sliding-window-maximum/ 思路&#xff1a;使用单调队列&#xff0c;只保存窗口中可能存在的最大值&#xff0c;从而降低时间复杂度。 public class MyQueue{Deque<I…

On the Spectral Bias of Neural Networks论文阅读

1. 摘要 众所周知&#xff0c;过度参数化的深度神经网络(DNNs)是一种表达能力极强的函数&#xff0c;它甚至可以以100%的训练精度记忆随机数据。这就提出了一个问题&#xff0c;为什么他们不能轻易地对真实数据进行拟合呢。为了回答这个问题&#xff0c;研究人员使用傅里叶分析…

mysql+node.js+html+js完整扫雷项目

一.下载 可以直接下载绑定资源&#xff0c; 也可以访问&#xff1a;克隆仓库&#xff1a;mine_clearance: mysqlnode.jshtmljs完整扫雷项目 (gitee.com) 二.运行sql数据文件 将mysql数据文件导入到本地 先在本地localhost里创建数据库 mine_clearance&#xff0c; 然后如图&…

编译原理本科课程 专题5 基于 SLR(1)分析的语义分析及中间代码生成程序设计

一、程序功能描述 本程序由C/C编写&#xff0c;实现了赋值语句语法制导生成四元式&#xff0c;并完成了语法分析和语义分析过程。 以专题 1 词法分析程序的输出为语法分析的输入&#xff0c;完成以下描述赋值语句 SLR(1)文法的语义分析及中间代码四元式的过程&#xff0c;实现…