最近看到几个微信群关于分布式数据库是否是伪需求等相关讨论非常的激烈。作为一个10多年的数据库从业者,我也想来谈一谈自己的观点。
主流分布式数据库有哪些?
首先我这里指的分布式数据库是国内的主流分布式,简单梳理了一下,大概有如下一些主流产品,大部分产品个人都接触或者使用过、测试过。
1、Oceanbase
蚂蚁金服内部孵化的原生分布式数据库,据称在内部早就大量应用,并承担了大量核心系统,近几年开始对外输出,在toB行业大行其道,有燎原之势。个人也参与过几个客户Oceanbase项目,其中一个客户之前一套Oracle 双节点RAC,其中大部分业务后面切换到了Oceanbase,差不多几个月之后才逐步稳定。之所以需要很久才能稳定运行,其中根本原因在于用户希望应用改动越少越好(Oracle上再烂的SQL都可以跑,在OB上就不一定了,分布式数据库对应用的要求相对高的多),尽管OceanBase现在来看相比2年前,在Oracle兼容性方面有了极大的提高,但仍然面临不少问题。比如不定时随机OBserver cpu 100%,然后发现通过OCP平台去排查原因,也不是特别的方便,不太能够直接关联起来。举个最简单的例子,比如某个时间点某个OBServer cpu消耗较高,需要通过OCP定位该节点该故障点的问题SQL。
当然说到这里,我并不是要吐槽OCP,相反,我认为目前OceanBase OCP做算是非常不错的,为什么这么讲呢?因为8月份,我自己利用公司虚拟机环境,部署了OAT,然后再去部署OCP,最后通过OCP去创建OB集群和租户进行测试。我几乎没有看过任何官方文档,全靠自己摸索,半天也就搞定了。整个安装过程,我个人认为还是比较傻瓜式的,很多选项也容易理解,上手比较快。
那么这个如日中天的分布式数据库就完美无瑕么,肯定不是的,相比Oracle、DB2、SQL Server之类的国外商业数据库来讲,还显得比较年轻,问题也在所难免。比如前几天就看到一个微信群网友提到,提及单位正在测试Oceanbase数据库,在OBserver上通过DBLink访问Oracle数据库,发现Observer直接crash了。我想大概率是遇到Bug了吧。有问题不可怕,数据库软件都是用出来的,迭代出来的。需要经过各种复杂场景的打磨,才能成为一款真正优秀的全场景数据库软件。
2、TDSQL
TDSQL是腾讯出品的分布式数据库,在之前腾讯的数据库有很多,后面做了产品升级,统一对外称TDSQL;如果细分也是TDSQL-A、TDSQL-c等。对于TDSQL的架构,我相信大家都比较熟悉了,这里不过多介绍,有兴趣可以去看看腾讯云的官网。
从我个人的观点来看,我认为TDSQL(MySQL分布式版本)是传统MySQL分库分表解决方案的集大成者,其后面也有一些类似产品,比如中国电信的TeleDB、HotDB等。过去一些年,分库分表在互联网公司大行其道,用的非常多,主要是为了解决传统MySQL数据库的一些扩展性问题。这种方案有人觉得相对落后,不过我不这么认为,这种架构是相对稳定且十分成熟的,因为其底层就是一个一个的Set组,每个Set组都是MySQL主从(经过大量定制的版本,并非MySQL社区版).难道你能说主从架构不好么,不稳定么?答案是肯定的。稳定性非常高。事实上你会发现,现在很多MySQL企业用户就是MySQL主从,随着近些年硬件的发现,普通的MySQL主从已经可以支撑非常大型的业务系统了。
不过这种方案也有一些缺陷,底层无法实现无感弹性扩容,如果个别set组的数据量过大,需要新加节点,那么需要去进行重平衡,虽然这些操作都可以通过赤兔运维平台来实现。为了解决这些问题,TDSQL后面推出了基于LSM-Tree 结构的TDstore存储引擎,看上去类似RocksDB、Tikv。官网对这方面介绍不是太多,是否大面积应用还不得而知。
3、GoldenDB
GoldenDB是中兴推出的一款高度兼容MySQL的分布式数据库,实际上大家看GoldenDB的架构,你会发现跟TDSQL-C(前生是Tbase,也是基于Pgxc)似乎有点类似,不同的是,GoldenDB引入了额外的GTM(全局事务管理器).7月份在某项目上使用了GoldenDB的管理平台,总体来讲,感觉还是不错,简单、简洁、直观。
同样这种分库分表解决方案的数据库产品,对应用都有较高的要求,把它们当Oracle RAC集群去使用,那肯定是不行的,性能一定很差。如果要用的好,那么必须要遵守相应的开发规范。
我清楚的记得3年内部测试GoldenDB的时候还是5.0版本,最近看好像已经迭代了7.x了,可见迭代速度还是非常快,这今年也是在金融行业低调的攻城略地,而且也进入了中国移动的集采名单,我们部分客户近期都或多或少上线了一些GoldenDB。总之,这是一家非常低调的公司,虽然看起来没有像OceanBase这样大力宣传,生态看起来也不太好。不过这或许与中兴的文化有关吧,不像菊花厂。曾经接触过GoldenDB的几位朋友,都非常nice且低调,还是非常看好这个数据库产品。
4、TiDB
TiDB 这些年很火,就不多说了,过去年一直霸榜摩天轮No 1的开源分布式数据库,目前也是github stars No1 的开源分布式数据库。
从架构上来讲是存算分离,存储层是魔改之后的Tikv,弹性扩容。使用范围很广,据官方宣传应该有数千家企业用户案例了吧。如果按toB企业用户数来看,在国内应该是No 1(全球范围不知道),当然这里指的是使用用户,并不代表付费用户,毕竟是开源分布式数据库,我知道不少客户都在免费使用,效果还不错;但是都是一些曾经的MySQL重度使用用户,对于使用MySQL的用户来讲,如果面临分库分表问题,那么迁移到TiDB是非常不错的选择。传统toB行业客户也有不少在用的,但是量都比较小,我猜可能是运维能力跟不上吧,不仅如此,应用开发能力也跟不上,这或许是主要原因。说到运维成本,实际上不仅仅是TiDB,所有的分布式数据库运维成本都是较高的,如果你要去综合算一下TCO,或许没省几个钱甚至更多。
个人没有去全面测试过TiDB,没有太多发言权,主要是参考其官网或者一些公开的资料、技术文章。
5、PolarDB-X
PolarDB是阿里云推出的数据库,有多个版本,后面又推出了云原生分布式数据库版本Polardb-X,因为是云厂商嘛,肯定要对标AWS Aurora。
从架构上来看PolarDB-X也是存算分离,但是进行了很多的创新,从官网资料来看,比如其基于混合逻辑时钟的HLC-Si来实现跨中心、跨分片的数据一致性,其性能要比基于TSO的分布式数据库性能要高20%左右。虽然架构看上去跟Aurora很像,但是很多机制完全不同,比如为了实现超低延迟,Polardb-x在DN层来复制redo,通过RDMA来实现超低延迟;而Aurora是在计算层来实现的。
另外从一些公开的对比测试来看,很多场景下性能还是很不错,甚至比OB都要高,比如大事务处理能力。
6、GaussDB
GaussDB是华为云推出的全球首款AI-native 原生分布式数据库,实际上gaussDB也是一个品牌升级之后的统称;细分有很多种,比如GaussDB for MySQL、GaussDB for openGauss等。官方宣传是非常无敌的,简单讲就是:具备企业级复杂事务混合负载能力,同时支持分布式事务,同城跨AZ部署,数据0丢失,支持1000+的扩展能力,PB级海量存储同时拥有云上高可用,高可靠,高安全,弹性伸缩,一键部署,快速备份恢复,监控告警等关键能力。
从架构层面来讲,GaussDB也属于存算分离,类似PolarDB、Aurora;单写多读节点,最大可以支撑15个RO节点,官网宣称性能可以达到开源MySQL版本的7倍;当然也支持多多AZ、跨region能力。
对于这种单写的分布式架构,我认为其实不算是原生分布式,只能算是存算分离+读写分离的集大成者。不过这是个人看法,每个人看法不同,因人而异。
同样,如果你要想把GaussDB用好,那么也必须参考其相关的开发规范,如果你去看官方文档就会发现,其开发规范建议都数十条。。。。实际上所有的分布式数据库都一样,肯定不能当Oracle用。
关于分布式数据库的打榜行为
之前群里很多网友讨论这个很激烈,认为OceanBase和TDSQL的TPCC打榜行为完全是SB行为,人傻钱多。对于这个话题,我有不同的看法。虽然Oracle是10多年的测试,近10年没有厂家再去进行挑战,那么也不代表什么?难道能说明其他厂家能力不行吗?我看未必,或者是认为没有必要或者浪费钱。那么为啥OB和TDSQL又愿意花这么大的代价去打榜呢,先前是OceanBase来一个世界第一,然后TDSQL 后来居上。
这里我们先不去说人家为啥愿意浪费,毕竟确实有钱。更主要的是,我认为打榜的目的在于:消除大家对于国产数据库的一些认识误区,比如很早之前,可能大部分用户是认为国产数据库不行,无法支持高并发等等,虽然互联网厂商平时宣传的都非常厉害(毕竟是口嗨);但TPCC不一样,相对来讲还是很有权威性,尽管这并不代表真实的业务场景,然而我认为仍然具备很强的说服力,最起码说明这个数据库经过合理规划、调优之后能跑这么高的性能吧?而且是高压持续一段时间。。。。
甲方用户怎么看?怎么选数据库?
最后对于企业用户来讲,用户怎么选?这其实很头疼。作为一家中立的数据库服务提供商,我们过去几年也帮助过一些用户做了不少的测评,我认为相对来讲还是比较客观、公平公正的。会从多个维度去测试,总之最终测试下来,各有所长。
简单来讲,关心的无非就是几个大的方面:基本功能支持(数据类型、DML、DDL、查询转换、PL/SQL、分析函数等)、事务处理、高可用、备份恢复以及运维管理平台等等。我们可以看到,实际上用户几乎不会去关心你跑了多少tpmC,毕竟99%的客户系统可能tps 3000就满足了。毕竟一个MySQL主从+SSD 基本就可以达到1万 tps。
其次这几年由于xc的原因,很多用户是非常关心数据库兼容性的;MySQL类型的系统相对来讲简单,为什么这么说呢?长期以来大家对MySQL的认识就是整体功能较弱,不能重度使用,业务要尽量简单。我清楚的记得去年疫情期间,我们帮助一个省级客户把疫情防控系统从MySQL迁移到MogDB,几乎100%兼容,使用MTK 迁移,非常的丝滑。毕竟这个系统不复杂;当然,这里我并不是说我们MogDB无非支持复杂的系统,实际上近2年我们不少客户都从Oracle迁移到了MogDB,而且不少是Oracle重度使用用户,大量存储过程,大量应用SQL代码需要进行改写。总的来讲最后都能顺利上线,也间接提高了产品的兼容性和性能。
今天主要是谈谈国产主流分布式数据库的一些事儿,最后来个总结供参加参考(因为个人水平的问题,文章难免有错误,大厂的朋友不要介意,也不要喷,欢迎私信指正)。
主流国产分布式数据库全方位对比