找回密码
 立即注册
查看: 290|回复: 5

为什么几乎所有的开源数据库中间件都是国内公司开源的?而且几乎都遏制了更新?

[复制链接]
发表于 2023-6-16 15:57 | 显示全部楼层 |阅读模式
随着业务的增长,数据库里有几张表已经打破千万,而且增长速度很快,虽然暂时没感觉出大表对性能的影响,但是想要做一些读写分手/分区/分表/分库的操作优化为此后的业务量作筹备。
为了实现业务代码尽量少的改削,调研了很大都据库中间件,发现这些东西都有两个特点,1.基本都是国内大厂开源的。2.基本都遏制了更新一年以上,看似最多人提及的mycat已经2年没有更新了。
为何 Google/facebook/Microsoft 等国际大厂没有这样面的开源软件,而且开源出来的都遏制了更新?是数据库中间件本身就是一个伪需求?为何还是各家开源的质量不高所以没人用?
发表于 2023-6-16 15:58 | 显示全部楼层
前面专家回答的非常全面。补充一点:如果目前数据库尚且不能收敛到一款,结合那么多的业务场景组合:分库分表、大表、分析查询等等,从理论上看,中间件更不可能收敛。这就需要持续投入。不论是公司或者个人贡献者,都不太可能永远维护这些中间件。
数据库这个领域,除了不断发明新的数据库或者中间件,还有一个思路是让应用适配现有的数据库,多种数据库。之前曾经使用过“组合库去O”的方案,有不错的效果。
仅供参考。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2023-6-16 15:59 | 显示全部楼层
没有必要开发。
数据库中间件和业务是紧密结合的。很难开发一套通用的框架。
开发量也不大,自己开发的话,可以结合业务特点来优化,拓展也方便。
这样看的话,数据库中间件用第三方的没省什么事,缺点又很多, 为什么要用第三方的东西呢?
发表于 2023-6-16 16:00 | 显示全部楼层
感谢金卫老板的邀请。@kimmking
我以Apache ShardingSphere(https://github.com/apache/incubator-shardingsphere)的发起人的角度来回答一下这些问题。以及看到了一些评论的同学,对关系型数据库和数据库中间件有明显的误解,也想一并讨论一下。

首先回答下楼主的问题:

  • 数据库中间件是不是都是国内大厂开源的?
答案是并不是。正如@kimmking 所罗列的列表中的产品,严格意义上来说,没有一个数据库中间件是大厂开源的。并不是说大厂没有数据库中间件,其实每个大厂都有自己的数据库中间件,如阿里的drds、京东的弹性数据库、京东数科的cds、美团点评的zebra等等。之所以没有开源,是因为其他的产品(比如各个大厂的RPC框架、缓存框架、MQ、配置管理、大数据等)同样没有开源,只是这些大厂并没有完全注重开源战略而已。随着国内大厂对开源战略的愈加重视,相信开源的产品会越来越多,不仅仅指数据库中间件这一类产品。
2. 是否都基本都停止了更新一年以上了?
答案也是否定的。我作为Apache ShardingSphere项目的负责人,不太好评价其他的同类产品。我只用Apache ShardingSphere的提交数据来列举。
最近7天:11个贡献者推送了16个pull requests;98个文件被修改,1980个增加项,779个删除项;处理了31个issues,新建过16个issues。
最近1个月:29个贡献者推送了90个pull requests;2602个文件被修改,13472个增加项,7599个删除项;处理了134个issues,新建过32个issues。
并且从2016年开源至今,始终以这种频度来更新的。因此,活跃不活跃可以让大家来评判;但是,停止更新一年以上这个回答肯定是否定的。
3. 为何 Google/facebook/Microsoft 等国际大厂没有这样面的开源软件?
答案是国际大厂也是有关系型数据库\数据库中间件产品的。Vitess出身于Youtube,之后被Google收购,后来独立成为名为PlanetScale的公司,并且已经进入CNCF孵化器。因此,Vitess正是Google的数据库中间件产品。
Microsoft有著名的商用数据库SQLServer。他们可以在这个领域继续深耕,商业版的SQLServer集群具备所有数据库中间件的功能。
国际大厂同国内大厂一样,在技术方面,没有一统天下的产品。因此,Google也有Spanner的数据库解决方案,这并不冲突。就好比阿里同样有PolarDB、AliSQL、Oceanbase、TDDL、DRDS等数据库相关的产品一样。对于技术产品,并不是非此即彼。不能以单一的角度看问题。

楼主的问题解答完毕之后,我想对帖子中的一些对关系型数据库/数据库中间层有误解的留言进行解答。

  • 大厂是不是都不用关系型数据库了?
在这里,我不讨论这个问题,只是列举事实,事实胜于雄辩。从我就职的京东来说,核心的OLTP系统中,关系型数据库是唯一的选择。在任何大厂,现状也是如此的。除了互联网行业,其他行业也一样,感兴趣的同学可以自行调研。负责任的说,关系型数据库现在仍然是OLTP应用的绝对主流的选择,NoSQL\NewSQL是现有市场的尝试和有效补充。
2.关系型数据库是不是伪需求?
前面列举了这么多事实,我不想在去辩论这个问题,只想说,存在即合理。
3. 都大数据时代了,传统数据库起码在大厂没什么应用空间了吧?
答案仍然是否定的。大数据系统大多是OLAP型应用,与OLTP应用并不相同。因此互联网大厂,都会将大数据团队和数据库完全分开,互不干涉。虽然现在有HTAP这样的概念,但是也仅在尝试中,目前没有哪个核心系统会通过HTAP让分析型需求占用OLTP应用的宝贵资源。

最后,我想和大家聊一下,什么是我心目中的数据库中间件,以及它是不是伪需求。

  • 数据库中间件是不是与NewSQL是势不两立的存在?
回答这个问题之前,我向大家推荐一篇知名论文<What’s Really New with NewSQL?>(https://db.cs.cmu.edu/papers/2016/pavlo-newsql-sigmodrec2016.pdf)。文中明确的描述了,NewSQL的三种类型:新架构、透明化分片中间件和云数据库,即BaaS。
因此,数据库中间件是NewSQL的一种。它只是以与新架构和BaaS不同的角度去实现NewSQL的功能。
2. 数据库中间件和新架构或BaaS的NewSQL有本质上的不同吗?
回答这个问题之前,我先说一下数据库中间件这个概念。正如上一个问题所说,透明化分片数据库中间件是NewSQL的一种,而数据库中间件并不见得特指可以分片的数据库中间件。那么,对于这个问题,我想回答的是“分片类型的数据库中间件和新架构或BaaS的NewSQL有本质上的不同吗?”
我不在列举其他数据库中间件,只以ShardingSphere来进行说明。
ShardingSphere的功能包括MySQL\PostgreSQL协议接入层、SQL解析层、分片层、事务处理层、数据存储层。这一套架构,和MySQL\PostgreSQL以及其他的NewSQL并无本质区别,这些是组成一个数据库的最基本模块。下面我分别解释一下这几个模块的用途:
2.1. MySQL\PostgreSQL协议接入层。用于透明化的对接MySQL和PostgreSQL协议,可以让用户像使用MySQL\PostgreSQL一样使用ShardingSphere。
2.2. SQL解析层。通过标准化的词法解析器(Lexer)+ Parser(语法解析器)= AST(抽象语法树)的方式解析并理解SQL。
2.3. 分片层。通过用户自定义的分片策略对SQL进行路由、改写、并发执行以及结果的归并处理。
2.4. 分布式事务层。ShardingSphere采用SPI开放的方式将分布式事务的处理完全开放出去,可以对接XA或者柔性事务。也可以使用京东数据自研的JDTX。JDTX是自己实现的MVCC和WAL引擎,相当于把活跃事务数据和落盘存储数据相分离,MVCC和WAL引擎与标准的数据库实现并无二致。可以参考这篇文章获取更多细节:https://www.infoq.cn/article/BAXzcfjRTcgmKisa7JHm
2.5 数据存储层。将数据落盘在最终数据库。数据库只负责最终的存储,而分片和分布式事务的处理,都将交于ShardingSphere来负责。虽然现在还不能支持非关系型数据库,但未来ShardingSphere会将支持NoSQL存储加入到roadmap。
因此,在数据库的本质上来说,ShardingSphere与其他的数据库并没有不同。区别只是在用于ShardingSphere没有完全重写最终的数据存储引擎,而是利用了更加成熟的关系型数据库做为最终的保证。
3. Apache ShardingSphere到底是什么?
这是我今天想提到的最后一个问题。现在的ShardingSphere确实是以分片为核心、其他功能为辅助的中间件。但Apache ShardingSphere的定位并不仅仅是用于分片的数据库中间层,它其实是一个可插拔平台。无论分片、读写分离、分布式事务、高可用治理、SQL审计、数据脱敏、数据扩容等功能,都将以SPI的形式加入到ShardingSphere平台中,ShardingSphere最终只是一个空白的可以跑的数据库协议+高性能IO的骨架。
ShardingSphere的目标不是数据库,而是站在数据库之上的数据库管理层。数据库和ShardingSphere的关系,就像Docker和Kubernetes的关系类似。ShardingSphere不去负责最终的最底层存储,而是通过更上一层的管理,将数据库管理起来。至于终端存储是什么类型的数据库,ShardingSphere并不关注。
因此,数据库中间层能做到数据库所做不到的东西,就是站着更上一层,去以管理者的视角去管理这些多元异构数据,并在他们之上增量的负责处理分片、扩容、治理、高可用、脱敏、审计、融合等能力。
技术是多元化的,无论是现在还是未来,都不可能出现只有一种数据库碾压其他的情况出现,多元数据库、多元技术一定是长期并存的。因此ShardngSphere的存在并不是为了替换哪个数据库,而是提供融合平台,提供更多的增量能力。
看完了这篇回答,各位同学请留下您的建议,欢迎讨论,您认为数据库中间层真的是伪需求么?
发表于 2023-6-16 16:00 | 显示全部楼层
题主,恭喜你,你深入思考了一系列重要问题,作为一个开源技术人员+数据中间件的爱好者,试着回答一下题主的几个问题:

  • 什么时候需要数据中间件,中间件能干什么
  • 数据中间件的实现原理,有哪些开源数据中间件
  • 为什么都是国内开源的,并且大都停止了更新
  • 推荐使用什么数据中间件,有什么优势
<hr/>一、什么时候需要数据中间件,中间件能干什么
就像题主说的那样,随着业务的发展,MySQL、Oracle数据库里的表越来越大,一两年以后,2千万、甚至上亿记录的表就会出现了(一般可以简单认为表比较复杂的时候,MySQL几百万上千万的时候,Oracle几千万的时候,就会出现复杂查询或变更有性能问题),这时候可能会导致复杂的查询慢,插入和修改数据慢,修改表的DDL执行太慢导致无法修改列类型或者加索引或者加字段等等。怎么办呢?这时候我们可以由几个处理办法:

  • 历史表:按时间拆分历史表出去,降低数据量,这个以前比较常见,其实也是一种特殊的水平拆分,对业务有侵入性
  • 垂直拆分:按列,将上百列的宽表拆分成多个列少(也就是每条记录数据量小)的表,不降低记录数,但是降低整个表的数据量和索引量大小
  • 水平拆分:按某个或某些个列的值哈希后,均匀的将数据拆分到多个同样的库or表里,这样就直接降低了单库单表的数据量,比如说拆分成1024个子表,就可以将单表的数据量降低3个数量级,原来一亿的表,现在单表10万数据,在单表上做复杂操作都可以很快速了。这样的缺点就是,原来只需要操作一个表,现在操作之前需要先知道要操作那张表,比如一个用户表,按uid分表:原来的SQL1: select * from users where uid=1025,现在得先知道uid是1025,然后知道1025%1024==1,SQL就变成了SQL2: select * from users_0001 where uid=1025,看起来对业务也是于侵入型的。怎么能对业务变得透明,这就需要一个中间件,帮我们自动的把SQL1变成SQL2,从而使得我们分不分库、分不分表,分多少个,代码都差不多,不用太多修改。
  • 读写分离:比如MySQL的TPS/QPS都已经很高了,几千上万,而且已经做了1主3从的时候,我们希望这4个实例都能分担一些压力,特别是读多写少的情况,如果把读的压力大家平分,就可以降低主库的读压力,让主库关注与写。这时候也需要一个中间件来把数据请求路由到不同的库上。
如果我们的业务发展到了需要降低单库单表的压力、或者读写分离,而研发团队又不大,自己对这一块的技术积累不足以自己开发一些中间层代码去搞定问题,就像题主一样,需要考虑引入数据中间件了。为什么都是国内大场开源的数据中间件,小公司数据量不够,或技术不够,不需要自己开发中间件,量上来以后,如果使用场景简单,采用开源技术是最经济的解决办法。大公司有能力自己搞定数据中间件,我们现在知道的都是这部分里面开源出来的,特别是近几年,就像有个答主说的一样,大家都在搞分布式数据库了,分布式数据库的容量上限,远大于传统的关系数据库MySQL/Oracle,可以考虑是把中间件的部分功能固化到数据库里了,这些公司不太关注这些问题了。另一方面,有些数据中间件,融入云的体系,变成闭源的RDS里的一部分了。
二、数据中间件的实现原理,有哪些开源数据中间件
简单的说,有两种原理:

  • 客户端JDBC模式:中间件作为一个jar包之类的库,例如下图中的示意,只需要直接在项目里引用,配置好分库分表规则,用中间件包装一层JDBC数据源,即可每次在调用的时候,JDBC包装类里自动替换好SQL,再调用实际的JDBC和SQL,即可完成操作。但是由于需要直接操作单个库和表,所以对于SQL会有一些限制,必须带上确定的分库分表条件,不能有太复杂的聚合操作等。



  • 代理Proxy模式:


早期主流的开源中间件如下图:
引自:https://blog.csdn.net/w892824196/article/details/82660415



  • Cobar:阿里巴巴B2B开发的关系型分布式系统,管理将近3000个MySQL实例。 在阿里经受住了考验,后面由于作者的走开的原因cobar没有人维护 了,阿里也开发了tddl替代cobar。
  • MyCAT:社区爱好者在阿里cobar基础上进行二次开发,解决了cobar当时存 在的一些问题,并且加入了许多新的功能在其中。目前MyCAT社区活 跃度很高,目前已经有一些公司在使用MyCAT。总体来说支持度比 较高,也会一直维护下去,
  • OneProxy:数据库界大牛,前支付宝数据库团队领导楼总开发,基于mysql官方 的proxy思想利用c进行开发的,OneProxy是一款商业收费的中间件, 楼总舍去了一些功能点,专注在性能和稳定性上。有朋友测试过说在 高并发下很稳定。
  • Vitess:这个中间件是Youtube生产在使用的,但是架构很复杂。 与以往中间件不同,使用Vitess应用改动比较大要 使用他提供语言的API接口,我们可以借鉴他其中的一些设计思想。
  • Kingshard:Kingshard是前360Atlas中间件开发团队的陈菲利用业务时间 用go语言开发的,目前参与开发的人员有3个左右, 目前来看还不是成熟可以使用的产品,需要在不断完善。
  • Atlas:360团队基于mysql proxy 把lua用C改写。原有版本是支持分表, 目前已经放出了分库分表版本。在网上看到一些朋友经常说在高并 发下会经常挂掉,如果大家要使用需要提前做好测试。
  • MaxScale与MySQL Route:这两个中间件都算是官方的吧,MaxScale是mariadb (MySQL原作者维护的一个版本)研发的,目前版本不支持分库分表。MySQL Route是现在MySQL 官方Oracle公司发布出来的一个中间件。
  • ShardingSphere,后起之秀,源于当当网架构部的ShardingJDBC框架。
上面都是提到了分布分表和读写分离的中间件,其实还有一些专注于分布式事务的、数据复制传输的等等,比如fescar,canal、outter等等。
其实淘宝早期开源了TDDL,淘宝分布式数据中间层,但是只开源了客户端jdbc模式,没有开源proxy代理模式。
三、为什么都是国内开源的,并且大都停止了更新
国内的开源,部分是大公司主导的技术影响力输出,部分是个人的兴趣之作贡献给社区,总而言之是没有直接的显著回报的。也就是说,这一块一直没有一个稳定可行的商业模式来支持,所以一直以来,大公司实际上也看不上,因为赚不了钱,而没有回报的事情就无法长久,所以自然就停止了更新。对于个别有云服务的公司,这一块技术发展好了,其实可以并到云里提供数据服务,或者进一步的发展成为分布式数据库,这样可以变现了,那就闭源,所以,现在活跃的开源数据中间件,已经不多了,下面就推荐一个活跃的项目。
四、推荐使用什么数据中间件--ShardingSphere
推荐使用近期加入Apache基金会的第一款数据中间件,也是国人开发的,ShardingSphere项目。可以直接在这个项目的github commits记录看到,非常活跃,每天都有提交记录,issue也一直在持续维护。为什么还活得这么好呢?因为有张亮团队的专职在开发、维护和推广。
详细文档和代码参见:
ShardingSphereapache/incubator-shardingsphereShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。 他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、云原生等各种多样化的应用场景。
ShardingSphere定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。 它与NoSQL和NewSQL是并存而非互斥的关系。NoSQL和NewSQL作为新技术探索的前沿,放眼未来,拥抱变化,是非常值得推荐的。反之,也可以用另一种思路看待问题,放眼未来,关注不变的东西,进而抓住事物本质。 关系型数据库当今依然占有巨大市场,是各个公司核心业务的基石,未来也难于撼动,我们目前阶段更加关注在原有基础上的增量,而非颠覆。
稍后我推荐ShardingSphere项目的两个主要PMC,@张亮 和 @曹昊,来关注一下这个问题。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2023-6-16 16:01 | 显示全部楼层
谷歌 微软 亚马逊等公司都直接开发分布式数据库了!国内的好用的也都上云了!
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-1 07:31 , Processed in 1.060165 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表