NewSQL分布式数据库发展策略讨论

NewSQL分布式数据库发展策略讨论,第1张

作者 石默研

本文对新一代NewSQL分布式数据发展策略中的普遍困扰进行讨论,包括云原生(Cloud Native)与本地部署(On Premise)、HTAP进展方向、分布式与单机需求等分布式数据库商业与技术发展中难以决策的问题。

1. 困扰

分布式NewSQL数据库近年来蓬勃兴起,其原因显而易见:切中了业务与数据量不断增长的用户对关系型数据库RDBMS需求,这在传统RDBMS到大数据的发展阶段中,有相当一段时间是空白。同时,随着互联网技术的不断发展与普及,用云计算模式满足IT需求似乎已经成为未来 社会 产业互联网发展的明确趋势,也就是说,有一种共识:不久的将来,绝大多数产业的IT服务是从公共的、行业的或者私有的、混合的云计算中心提供的。这一共识又带来了云原生(Cloud Native)概念与技术的兴起,而分布式NewSQL数据库自然也应该是云原生的,这决定了其相当多的产品设计决策应以符合这一趋势为原则。然而,在当今的现实中,满足业务与数据量不断增长的RDBMS需求的用户,与云原生的用户,除了互联网企业外,大多数情况下,并不重合,需要On-Premise部署的用户仍然占有很大比重,这就带来了第一个困扰:云原生(Cloud Native)与本地部署(On Premise)对产品发展要求的矛盾。

另一个困扰,是关于HTAP,即交易与分析混合负载。HTAP是当今非常火的一个概念与技术,在交易库上直接进行分析,而不再是将“数据从交易库搬下来,挪到另一个数据库中去”这样的繁琐过程。可以毫不夸张的说: 历史 上规模性企业IT复杂度的相当一部分,都来自于“搬数据”,这导致了数据采集、实时采集、全增量合并、数据传输、数据加载、数据建模、数据质量、数据标准、企业级元数据管理等繁杂多样的技术环节的产生,导致了企业数据分布、数据流向、数据模型、主数据、基础数据平台、ODS/数据仓库/数据集市、数据治理等复杂的数据架构设计优化领域,导致了由于多系统大规模数据搬迁而带来的如数据交换平台之类的复杂调度工程......。咋眼一看,感觉该企业的数据技术好厉害,相关各领域的技术产品好丰富,技术人员的相关技能也好受欢迎。但如果在交易库就能直接满足分析需求而不影响生产效能的话,这些复杂高级的技术环节不都成了“自己给自己造了一座山,还说自己爬的好辛苦”?然而,现实却是,问题并不这么简单,除了在交易库中进行分析会影响业务效能外,还有很多原因导致这一现象产生:交易库并不需要存储那么长的 历史 数据,而分析往往是需要建立在大量 历史 数据之上的;交易库的模型往往并不适合分析需求,多数情况下需要重要建模,如非常流行且价值不菲的各行业数仓主题模型;用于交易的OLTP数据库与用于分析的OLAP数据库,其技术体系完全不同;以及大型企业已固化的内部业务结构并没有留给交易/分析整合可实施的可行空间......等等。由于, 历史 积累的企业级数据体系相当复杂,HTAP的发明者迄今为止都没有系统表达完全替代数据分析需求、自顶而下重构企业数据体系的架构级策略,而是将产品重点定位在技术优化层面:在交易库上直接完成实时统计分析,满足高并发需求且不影响业务效能;或者是为实时分析统计/查询而建设的数据服务中间平台。然而,即使是暂时没有这种策略性的意向,在面向AP的产品具体研发中,又会发现明确的界限确实不好把握,随着一个个具体功能的不断完善,似乎假以时日,技术上也不是没有完全替代纯OLAP平台的可能性。那么,HTAP究竟如何定位呢?

再者就是规模化的分布式需求,与小规模的单机数据库需求(这里指逻辑上的单机)之间的矛盾:分布式数据库,自然而然是要应对规模化的数据管理需求的,长尾的小规模需求当然不应在产品设计考虑之列,同时,大炮轰苍蝇经常还打不好;然而,分布式NewSQL数据库又应该是云原生的,如果把云原生的业务含义理解为“全自助”,它应该以支持什么样的需求为主呢?现实看来,小规模长尾业务对云原生数据库的需求最起码应该是占据相当大的比重的。显而易见,如果是大规模的数据管理需求,即使是部署在云上,DBPaaS的“全自助”是其核心需求吗?这种规模化的业务,如果是云上的On-Premise又需要做出哪些方面的改变?从互联网与云计算发展的 历史 来看,“云自助”,其最核心的商业动机当然包括给用户侧的运维带来了方便,但更重要的可能是给云服务运营商应对海量长尾客户的安装与运维带来了极大的成本优势。这正如银行的小微及个人消费贷款都要走互联网线上模式,而重客、大客甚至中小企业信贷仍然是以线下为主的策略一样,本质是成本问题,而不是客户方便性问题。于是,矛盾显而易见:分布式是面向规模客户的,起码是中、大型客户,而云原生却有可能、最起码相当一段时间内是要以长尾客户为主要服务对象的。

以上困扰实质上,都涉及到了NewSQL分布式数据库的产品发展策略问题。

2. 讨论

问题是客观而又普遍的,但分析与应对策略往往包含主观因素:人们的一个决定与决策,很多情况下并不由严格推理而来,而是心中已经有一个答案,再来找理由支持它。这里的讨论或许也并不能例外。

首先,来看看Cloud Native与On Premise。云原生本应是数据库即服务,然而目前真正有规模化数据增长需求的NewSQL应用相当多的情况下却是付费On Premise与免费On Premise区别,很多互联网企业的应用也可能只是部署在云基础设施上而已,真正的云原生更多是一些实验性、尝试性的需求。但云原生数据库在公有云、行业云以及大型私有云上已经逐渐在形成一种意识上的共识,其商业前景不可限量。也就是说,未来的数字化转型进程中,产业互联网的数据库部署,会逐渐向云基础设施迁移,长在云上。它可能是公有云,也可能是行业云,也可能是私有云,它们都是被定义为云原生NewSQL数据库的市场范围。当然,肯定还会有相当一部分数据库长在云下,这也不用纠结,将其排除在云原生市场战略目标之外即可,就是说,不需要考虑这部分客户需求对产品规划的影响,因为前一部分的份额已经足够大了。这样看来,以云原生为目标进行产品规划的逻辑没有问题,不过,还是要明确一点:长在云上的数据库是不是一定符合我们对“云原生”的既有理解?这里认为,即使未来,在云上形成了产业互联网数据库市场的主体,需要“全自助”的数据库即服务可能也是以面向长尾客户最为迫切、必不可少并且是核心本质,而对中大型以上的需求,“全自助”的意义相对有限,同时比较而言商业模式的转变或者更关键些。那么,如果是以“长在云上”为市场目标,似乎可以将其定义为“广义的云原生”,同时,只要是“长在云上”,那么“云原生”概念中高d性、高可用、低成本、快速迭代、存算分离等技术优势也都能方便获得。而对“云原生”策略中“云原生”一词的理解不同,对产品规划决策的影响也应该有所不同:一是目前被认为是On Premise的客户需求,或许也就是未来“云原生”主体市场的需求;二是NewSQL数据库关于云原生服务的产品策划,对用户侧“自助”水平的决策或许可以更灵活实用。高水平自助确实可以减轻客户对IT的依赖程度,但这里认为,云原生与用户自行在云上购买资源进行On-Premise部署相比,最关键的价值在于商业模式的改变,能自助多少,不一定是最重要的,因为成为云服务商后,运营运维的工作只会更多,责任可能会更大,甚至有时连IaaS的运维也需要PaaS服务商兜底。但从一个个客户的本地服务,变成集中化云服务,就已经是本质性的模式转变了。总之,需要就事论事,回到原点,仔细分析后决策,而不是用概念教条的判断,因为概念本身的定义并不见得准确对应实际的业务需求。

再来看看HTAP,对这个问题,正如在其它文章中表达过的一样,本文的观点较为明确。一是随着计算能力与架构的升级,从技术上讲,AP与TP的界限会越来越模糊;另外特别是在云原生的新世界里,数据库的这一特性又犹为重要,因为云原生的重要作用之一就是要让客户尽量摆脱对IT运维的依赖,将越来越多的精力集中到自己的业务发展上来;同时端到端的能力提升对云原生商业模式的贯彻也至关重要(需要仔细分析下目前DBPaaS的技术要求是否完全符合这一原点的、本质性的动力),过去与纯OLAP数据库的优势比较纠结在这里也可以得到正面支持;再者,既然架构上已经走向了AP,就很难做到在产品规划上时刻厘清纯AP与混合负载的需求后,再将前者排除在外。于是,以“混合负载满足部分AP需求”应该是由于投入与阶段性市场策略导致的阶段性产品规划,而长远来讲,以一套技术架构满足大多数需求,应该是云原生NewSQL数据库的追求。

接下来,就是关于规模化分布式与小规模单机需求的矛盾了。现在看来,经过上面的讨论,这一点已经不是什么问题了:因为“长在云上”、从分散服务向集中服务的商业模式转变就是指广义的云原生,而不一定要以小微的、迫切需要全自助的长尾为主流,那么,云原生NewSQL数据库仍然应以规模化分布式为其主体的需求方向,而小规模单机则暂时可以不做为重点来考虑。

最后指出一点,希望也能引发进一步的思考:我们所批判的主机,也声称自己是分布式架构,暂且不论其是否客观,但在现实中主机需要被替代的核心问题并不是有没有分布式,而是:一、扩展不灵活带来成本问题:“我只需要扩展一个节点,你却让我再买一台主机”;二、不自主可控;三、往往是软硬件结合的设计策略,包括内存、网络、存储与IO上的软硬融合设计,而这一点,是否需要云原生数据库从广义的定义出发进行学习参考,也是需要进一步讨论的。

NewSQL是对一类现代关系型数据库的统称,这类数据库对于一般的OLTP读写请求提供可横向扩展的性能,同时支持事务的ACID保证。这些系统既拥有NoSQL数据库的扩展性,又保持传统数据库的事务特性。NewSQL重新将“应用程序逻辑与数据 *** 作逻辑应该分离”的理念带回到现代数据库的世界,这也验证了历史的发展总是呈现出螺旋上升的形式。

在21世纪00年代中,出现了许多数据仓库系统 (如 Vertica,Greeplum 和AsterData),这些以处理OLAP 请求为设计目标的系统并不在本文定义的NewSQL范围内。OLAP 数据库更关注针对海量数据的大型、复杂、只读的查询,查询时间可能持续秒级、分钟级甚至更长。

NoSQL的拥趸普遍认为阻碍传统数据库横向扩容、提高可用性的原因在于ACID保证和关系模型,因此NoSQL运动的核心就是放弃事务强一致性以及关系模型,拥抱最终一致性和其它数据模型 (如 key/value,graphs 和Documents)。

两个最著名的NoSQL数据库就是Google的BigTable和Amazon的Dynamo,由于二者都未开源,其它组织就开始推出类似的开源替代项目,包括Facebook的 Cassandra (基于BigTable和Dynamo)、PowerSet的 Hbase(基于BigTable)。有一些创业公司也加入到这场NoSQL运动中,它们不一定是受BigTable和Dynamo的启发,但都响应了NoSQL的哲学,其中最出名的就是MongoDB。

在21世纪00年代末,市面上已经有许多供用户选择的分布式数据库产品。使用NoSQL的优势在于应用开发者可以更关注应用逻辑本身,而非数据库的扩展性问题;但与此同时许多应用,如金融系统、订单处理系统,由于无法放弃事务的一致性要求被拒之门外。

一些组织,如Google,已经发现他们的许多工程师将过多的精力放在处理数据一致性上,这既暴露了数据库的抽象、又提高了代码的复杂度,这时候要么选择回到传统DBMS时代,用更高的机器配置纵向扩容,要么选择回到中间件时代,开发支持分布式事务的中间件。这两种方案成本都很高,于是NewSQL运动开始酝酿。

NewSQL数据库设计针对的读写事务有以下特点:

1、耗时短。

2、使用索引查询,涉及少量数据。

3、重复度高,通常使用相同的查询语句和不同的查询参考。

也有一些学者认为NewSQL系统是特指实现上使用Lock-free并发控制技术和share-nothing架构的数据库。所有我们认为是NewSQL的数据库系统确实都有这样的特点。

首先,来谈一下对数据库市场的看法,关系型数据库会一直占有主导地位。第一个原因是它的历史最久,有庞大的用户基础,根深。第二,SQL 的 query 在场景上依然是占主体的,尤其在数据分析上。 NoSQL的产生的是SQL对某些非关系为场景(KV点读)上的scalability 不好导致的。那个时候,主要问题是无法横向 scale,也就是没有分布式的支持,所以NoSQL 诞生了。而且KV, document 使用 normalized 数据结构也不利于理解和编程,所以可以看做是NoSQL 从SQL中抢了一些自己更适合的场景,所以它是在特定的时间和环境出现的一个产品。随着Distributed SQL 的出现, NoSQL 和 Distributed SQL 变得越来越像。未来几年有可能和 Distributed SQL 合并作为了一个产品类型。 NoSQL 在市场份额上不会超过或取代SQL, 在一些场景上会继续成长,尤其是用关系型数据集不好表达的,比如图。

今天 NewSQL 和 Distributed SQL 这2个名词在业界有一定的混淆。NewSQL 出现的早,可以被认为是Distributed SQL 的子集。以后还是以 Distributed SQL 为定义好。 所以你的问题其实是在 传统SQL,Distributed SQL 和 noSQL 之间如何选择。

答案是,最重要的指标是看用户的数据access的场景,和对应的数据结构。满足以下条件,更多考虑NoSQL:

数据之间没有关系,或者关系不强烈;每个row独立,row 之间不存在大规模的一对多,多对多的关系。

数据本身适合KV, 或者自我包含的hierachy关系。 比如个人profile, 完全自我contain, 人很人之间不需要query。

Access 数据的方式主要以 ID (primary key) 为主的点读,和顺序access (按顺序iterate)。

需要支持大规模的读写,低延时。

如果需要事务特性,范围限于一个或几个row, 没有关系型的事务。

使用 SQL 主要是因为 row 和 row 之间有关系; 存在一对多、多对多的关系。同时在关系的前提下,支持事务。支持table join的语法。对一致性要求高(强一致)。 Distributed SQL 提供了跨节点的分布式事务,query 等。但它是建立在牺牲性能的前提下的,延时大大价高。所以 NoSQL 是分布式+无关系,传统SQL 是 有关系+无分布式, Distributed SQL 是 分布式 + 有关系 + 性能取舍。

NewSQL 现在已经消退了,目前在国外退化为Distributed SQL原因如下:

卡耐基梅隆大学数据库教授Andy Pavlo,在文中系统地分析了NewSQL兴起到消亡的过程,给出了他认为NewSQL消亡的一些原因,比如:

1)没有开源。

2)没有拥抱公有云,在成本与技术上难与跟公有云厂商抗衡。

3)已有的关系型数据库MySQL,PostgreSQL做的不错,而且在不断改进,大部分客户数据并不多,单节点存储就能装下。

4)销售困难:客户担心切换风险,而且面临NoSQL在易用性方面的夹击。

另外,在谈到数据库发展趋势时,也提到NoSQL开始普遍支持SQL,joins和事务功能。到2021年后NewSQL概念除了中国的数据库创业公司,国外较少提了,更多地转向Distributed SQL。

NoSQL 和 关系型数据库,OLAP和OLTP的边界目前和未来会进一步模糊。市场的主要NoSQL产品开始普遍支持SQL,joins和事务功能,就我个人观点而言,NoSQL未来应该还是坚守初心——高并发,低延时,高伸缩性,对于关系型数据库擅长的 跨表Join, 跨机事务,AP等能力扩展应该谨慎些。产品选型时,最好也从这些方面多考虑些。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9855483.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存