首页 > 大数据 > 数据分析 > 存储计算分离架构解析
作者:杨维亮
近年来,我们注意到在大数据领域(数据库和DBMS也包括在内),大家经常提到一个热门词汇—— 存储计算分离(以下简称存算分离)。一个数据库系统如果具备了存算分离的能力,那么其可用性和扩展性将得到极大提升,同时也可以大幅削减系统成本。这也是推动云厂商和DBMS厂商实践存算分离架构理念的一个最大的动力。接下来,在详细说明存算分离的好处之前,我们先来探讨一下存算分离架构的意义在哪里。
存算分离架构涉及到将所有需要持久化的数据存储在远端的NAS(Network Attached Storage)、对象存储或分布式文件系统中,或者其他具备高可用能力的分布式存储系统中。本地存储只用来存储临时的,暂态数据,这些数据(在需要的时候)可以从持久化存储中恢复和重建。
在数据库系统的发展历史中,原则上,所有系统的计算都是和存储紧密耦合的,并且大多依赖于本地存储。显然,这和我们今天谈到的存算分离理念是完全相反的,那么当时的这些系统为什么要这么设计呢?其实,主要是出于性能的考虑。

在上世纪50年代,数据库系统最初是为事务处理而设计的。例如,航班预定、酒店预定和银行交易等场景。在事务处理系统中,处理的延时问题是主要矛盾,确保事务在1秒(经常在毫秒)之内完成是非常关键的。结果就是,数据库系统需要让计算和存储保持得越近越好,这样事务(需要保证ACID特性)就可以尽可能快地完成。如果使用网络存储的话,特别是以1960年代的网络速度,事务处理的延时会是一个很大的问题。
现如今,数据库系统已不仅仅用做事务处理(OLTP)了,OLTP系统中沉淀的数据资产成为了数字经济的新“石油”。企业开始围绕这些数据构建数据仓库系统,从各种系统中聚合事务型数据;佐以附加的维度数据,企业可以执行非常复杂的分析型查询,以驱动更智能的业务决策。直到今天,典型的分析型查询常常是一些长时间(秒、分钟、小时,有时长达数天)运行的任务。在这种情况下,网络存储的延时就不是一个大问题了。
另外,随着摩尔定律的放缓,CPU单线程的性能提升也趋于稳定,同时内存带宽的增长也没有赶得上网络和存储带宽的增长。再加上,其实人的感知能力是有一个物理限制的,事务处理延时不需要无限优化。因此,自1990年代以来,使用共享网络存储的企业级OLTP系统也慢慢多起来,并且成为市场的主流。
那么,随着市场对存算耦合系统需求的逐步减少,我们发现存算分离的数据库系统还有以下这些额外的益处:
如果所有持久化数据都存储在本地磁盘,我们就需要一个分布式集群来满足性能上的要求。分布式数据库需要对数据进行分区,每个集群节点只“拥有”部分数据(使用Hash分区的方式),在这种分区模式下,数据库的水平扩展变得很困难。如果有新的集群节点加入,整个集群需要做数据的rebalance(重新平衡),数据需要进行物理上的跨节点搬迁。因为如果不执行rebalance操作的话,新加入节点硬件的算力就被浪费掉了。
相反的,如果所有需要持久化的数据都在网络存储中,系统就更容易进行扩展了,如果集群需要增加算力,新加入一个计算节点即可,无需进行数据的物理搬迁(因为所有计算节点都能看到所有的数据)。结果,存算分离的数据库集群,其水平扩展可以变得非常快(秒级别);而采用存算耦合架构的数据库系统,则需要耗时几个小时、甚至数天进行扩展。
当所有需要持久化的数据都存储在远端,如果有一个计算节点故障宕机,不会有任何数据丢失,甚至用户都不会感知到系统故障或者服务不可用的情况,因为其他计算节点可以通过网络访问所有数据。依赖于现有的存活节点,从节点故障中恢复也变得非常快。
随着云计算的发展,围绕本地存储和网络存储的计价模型也发生了很大的变化。在云计算中,网络存储比本地存储(比如,对象存储的价格通常比本地存储和块存储便宜5倍)便宜很多,而且容量几乎是无限大的(至少从最终用户的角度来说是这样的)。另外,云计算数据中心有更可靠的网络基础设施,从而可以保证对网络存储的低延时、高带宽访问。
我们观察到的一个现象是,软件的进步通常滞后于硬件的发展,即使存算分离的技术壁垒已经消失了,让现有数据库系统架构适配网络存储也是困难而耗时的。但在近年以来,一些数据库厂商,也设计了一些创新的架构,实践了存储计算分离的理念,比如IBM DB2、Google Big Query、AWS Aurora、Snowflake、Dremio、Databricks等。我们认为, 在未来将会出现越来越多的新数据库系统,拥抱存算分离的架构理念,从现存的存算耦合系统向存算分离范式的迁移过程也会加速进行。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69989672/viewspace-2942840/ ,如需转载,请注明出处,否则将追究法律责任。