查看原文
其他

国产数据库百态2-分布式数据库

白鳝 白鳝的洞穴
2024-09-30

国产数据库百态(2)分布式数据库篇

分布式关系型数据库在国内发展得很快,在墨天轮上的186个关系型数据库中,分布式数据库占了将近一半,有八十多个。

DB-ENGINE排行榜中,国产数据库收录不多,排名也比较靠后。这和DB-ENGINE对数据库流行度的评估标准有关。DB-Engines 的数据库流行度排名是完全自动计算的,这一排名基于多个因素,包括搜索引擎结果数量、Google趋势、Stack Overflow上的活跃度、社交媒体提及频率以及与特定数据库相关的工作职位数量。这些因素综合考虑,形成了每个数据库管理系统(DBMS)的综合得分,从而决定其排名。在这几个方面,国产数据库的热度都不高,所以国产数据库在DB-ENGINE上的分数与排名不高也很正常。    

虽然如此,我们也可以看出TiDB、OceanBase、GBase、TDSQL for MySQL等在DB-ENGINE上依然进入了关系型数据库的前100(DB-ENGINE的排行榜上总计有160多个关系型数据库)。

分布式数据库有三种流派,流派一:分布式中间件+单机数据库组成多数据库实例的分布式集群,多个数据库实例按照可用组分成多个复制组,数据通过sharding key分散于各个数据库实例中。GoldenDB、HotDB、TDSQL for MySQL、StarDB等都属于这个流派;流派二:非对称计算节点+分布式存储本身在底层的分布式存储上实现了数据的多副本,而只读备库可以随时快速升级为主库,替代故障的主库,从而确保数据的可靠性,这种形态与集中式数据库十分类似,国产数据库中,阿里PolarDB-o,AWS AURORA 、谷歌AlloyDB等属于此流派。此流派的数据库产品目前还在继续演进中,一种类似Oracle RAC的共享存储并发读写的模式也加入进来,比如崖山YashanDB;流派三:原生分布式数据库则天然设计为数据多副本,并通过分布式选举协议自动选主,实现透明故障切换,国产数据库中OceanBase、TiDB、GaussDB、HubbleDb等采用此流派。

实际上随着这些年分布式数据库技术的发展,流派一和流派三在技术上逐渐融合,二者的差异也越来越小。首先流派一的产品在主从多副本上也开始引入Raft或者Paxos,在算子下推上也不仅仅是直接下推SUBQUERY,可以实现更加细粒度的自定义算子下推,从而解决流派一对于大型复杂查询处理性能上的不足。元数据管理也在往更加高效方面改进,从而能够在计算节点数量大幅增加的情况下,确保数据库性能。    

流派三的数据库产品在技术上还分为两派,Oceanbase采用完全对等的计算模式,每个Observer管理自己的分片数据,整个集群是完全对等的,计算与存储是一体的。而TiDB和GaussDB则采用存算分离的模式,计算与存储引擎是分离在不同的服务中的。对于这两种方式的优劣并不在本文讨论范围之内,两年前,我的多篇文章对此有了详细的介绍,大家有兴趣可以去查找。

本文篇幅有限,无法对目前国内的主流分布式书库逐个描述。只能选择某几个典型产品做一些简单的介绍。无论如何,我的这个介绍必须以PingCap的TiDB谈起。一方面是TiDB在DB-ENGINE上长期居国产数据库热度的榜首,是目前国产数据库里在欧美热度最高的数据库产品,另外一方面TiDB也是国产老四家之后数据库新势力中最早萌芽的国产数据库产品。

         

 

TiDB是一种典型的存算分离的分布式数据库,其元数据与集群管理由PD集群负责。SQL层则由TiDB Server实现,对外暴露 MySQL 协议,负责客户端连接,实现SQL 解析和优化,最终生成分布式执行计划。TiDB 层本身是无状态的,可以启动多个 TiDB 实例,提高并发能力。TiDB的存储节点为TiKV或者TiFlash,TiKV是用rust开发的一种使用LSM-TREE存储架构的KV存储引擎。而TiFlash则是被TiDB用于OLAP分析的列存引擎。有朋友一直质疑TiDB套壳了MySQL,实际上这种说法是不公允的,TiDB只是兼容了MySQL语法,其TiDB Server是使用go语言开发的,在客户端协议和SQL语法上与MySQL做了高度兼容而已,到目前为止,TiDB也依然没有做到与MySQL的100%兼容。这些年不少国内的企业以TiDB开源社区版为基础开发了自己的商用数据库,比如平安科技、建信金科等。不过目前似乎PingCap在国内信创市场上一直没有太多行动,而是主要注重于公有云运营,目前在亚马逊、阿里云等云平台上都可以购买TiDB的公有云服务。因为没有把更多的注意力放在国产数据库替代方面,因此TiDB在企业用户销售,数据库产品针对Oracle等其他数据库的语法兼容性上所做不多。    

         

 

GoldenDB是今天我要讨论的第二种分布式数据库产品,对于有些人来说这个数据库有点神秘。    

GoldenDB是基于MySQL数据库开发的一款国产分布式数据库。包含计算节点(SQL代理层)、全局事务管理节点(GTM)和数据节点(分布式MySQL数据库组)构成,这种架构在基于MySQL的国产分布式数据库中被广泛使用。大家可能会觉得有些意外的是,目前GoldenDB在市场上做得还是很成功的。其主要用户集中在金融行业,从2016年开始,GoldenDB就在中信实业银行实现了银行核心系统的国产化替代。目前在一些银行中都有GoldenDB的应用,很多都是核心、次核心系统。其中不乏工商银行这样的大行。在中国移动,GoldenDB也有BOSS系统替代的成功案例,浙江移动的BOSS系统就是用GoldenDB实现了对Oracle的替代的。GoldenDB的成功来自于中兴通讯良好的售后支持服务,对于能够投入大量资金改造核心系统的企业级用户来说,数据库产品技术上的某些问题都是可以克服的,通过应用系统的适配与优化,基本上可以搞定数据库本身存在的一些缺陷。只要数据库厂商的配合态度比较好,那么国产化替代工作是完全可以顺利进行下去的。GoldenDB目前的主要客户也是集中在这种大型企业级客户上。

         

 

接下来要说说OceanBase了,在DB-ENGINE和摩天轮上,OceanBase的排名都是靠前的,在这些年里OceanBase产品的迭代发展速度也是令人惊讶的。最近一段时间里,我写过的关于Oceanbase的文章比较多,主要原因是在去年年底D-SMART推出了Oceanbase专版,在开发专版的过程中,我们团队对Oceanbase做了十分详细的了解。Oceanbase分社区版和企业版两个版本,企业版中有兼容Oracle数据库的Oracle租户,在我们参与的一些客户的数据库国产化替代的测试项目中,OB与Oracle的兼容性仅次于达梦,在第二梯队中处于前列。这对于OB在信创工作中的竞争力是一个十分有力的支撑。Oceanbase是采用存算一体,完全对等模式的,每个OBServer都可以独立完成数据库的所有操作,因此也支持仅有一个Observer的集中式部署模式。    

         

 

Oceanbase目前的主要市场是在金融、政企和公有云三个方面。银行、保险、证券公司都已经有大量的Oceanbase应用场景。在中国移动也已经入围了核心系统替代,山东移动、江苏移动、广东移动等大型移动运营商使用OB在BOSS系统中替代了Oracle。

         

 

GaussDB与上面几家相比是一个后来者,不过这个后来者势头很猛。与OB,GoldenDB相同的是,GaussDB同样是首先在金融行业发力。我想这些企业这些年在金融行业势头很猛的主要原因是这个行业在数据库国产化方面走得比较坚决,目前进度也比较快。GaussDB有集中式部署模式与分布式部署模式两种,两种模式使用的是同一套核心介质。    

当GaussDB使用分布式部署模式时,包含了计算节点CN,存储节点DN,全局事务管理节点GTM,集群管理组件CM,ETCD等。数据也通过sharding key分布到不同的存储节点上。每个DN实际上是一组,包含一个MASTER和数个SLAVER。平时只有Master节点对外提供服务。

自从GaussDB去年高调召开发布会以来,在党政、金融、能源等行业进展迅猛。在国网陕西电力的用电信息采集系统上也实现了国产数据库对Oracle的首次替代。在这样大型OLTP系统上实现对Oracle的替代,其意义十分重大。

         

 

PolarDB实际上是一个数据库家族,而不是一个简单的数据库产品。这些年发展过程中也有过数次变迁,到目前为止已经比较稳定了。

从阿里云的介绍上看,PolarDB目前分为MySQL版,Postgresql版和分布式版三种。其中PolarDB MySQL版和Postgresql版都是类似亚马逊Aurora的架构,共享存储,计算存储分离的架构。虽然说PolarDB MySQL版在语法上兼容MySQL,不过其代码已经做了完全的重构,不能说是MySQL套壳。其Postgresql版基于PG开源代码开发,做了大量的改造,其语法上依然兼容Postgresql,同时也对Oracle有比较好的支持。PolarDB的分布式版本是兼容MySQL生态的,可以实现对阿里云DRDS的替代。    

PolarDB的分布式版本和Postgresql版本除了公有云和专有云版本外,还提供DBSTACK部署模式,也就是说支持客户在云下独立部署。

         

 

因为时间原因,介绍完TDSQL,本文就暂时告一段落吧。与PolarDB类似,TDSQL也不是一个数据库产品,而是一个数据库家族的统称。

从腾讯云的数据库产品家族可以看出,TDSQL-C和TDSQL分布式是TDSQL的两个主要分支,其中都有MySQL与Postgresql版本。其中集中式版本也是与AWS AURORA类似的,共享存储,存算分离的模式,这一点与PolarDB十分类似。TDSQL分布式 MySQL版采用的是分布式数据库的流派一的技术,与GoldenDB、HotDB等采用类似的架构。而TDSQL分布式 Postgresql版本则是基于PGXC/PGXL开源项目经过多年的迭代升级而形成。目前还衍生出了大量的与Oracle兼容的特性。

TDSQL目前在金融、证券、税务等行业有大量的应用,在某些用户那边用得还相当不错。其成功的主要原因是TDSQL不仅仅是一个数据库产品,而是一个十分不错的数据库云平台。其良好的管理能力让用户可以很方便地管理大量的数据库实例。

十分抱歉,写到现在已经快九点了,我只能先写到这里,周一还有一堆工作等着完成呢。大家有什么问题,给我留言吧。

         

 

         

 

   

         

 

   

继续滑动看下一个
白鳝的洞穴
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存