存算分离作为一种架构趋势,在架构设计和项目规划中经常被提及。如今,数字化转型已经从一道选择题变成了必修课,企业IT架构的重塑也势在必行,我们有必要去解构这些所谓的趋势。看了很多资料,参考了网上的一些文章,简单分析一下。1、为什么在计算机中要将计算和存储分开?我们所说的计算其实是指由CPU和内存组成的计算能力单元,存储指的是持久化的数据存储单元。从单台计算机的角度来看,计算和存储分离是不现实的。让我想象一下,如果计算机的计算单元和存储单元是分开的,那么所有的指令都需要通过网络传输。当前网络的速度很难与CPU的运算速度相匹配。因此,从单台计算机的角度来看,计算和存储分离是一个伪概念。不管我们承认与否,事实上,网络一直在制约着IT基础架构的演进和发展。过去,由于网络带宽的限制,我们习惯性地将计算和存储耦合在一起,以减轻网络传输的压力。比较典型的是MapReduce和Hadoop,它们使用本地IO而不是网络传输,是计算和存储耦合在一起的典型场景。但随着网络技术的发展,网络带宽和网络质量不再是瓶颈,磁盘IO也没有明显增加,架构上计算和存储耦合的弊端逐渐暴露出来:1.耦合带来资源浪费:如底层资源平台和基础IT环境的资源总是有限的。从业务的角度来看,不管是计算先到瓶颈还是存储先到瓶颈,他们的时间点是不一样的。由于计算和存储的耦合设计,无论扩展计算还是存储,都会造成资源浪费;2、服务器机型复杂,维护困难:从运维的角度来说,减少服务器机型就是降低运营成本。确定难度和工作量的有效方法。但由于计算和存储的耦合设计,随着业务复杂度的增加和新业务线的加速,对服务器资源配置的要求也会增加。维护一个复杂的服务器模型表可能很有趣。3、耦合不方便扩展:计算和存储的耦合还有一个缺点,就是每次扩展都需要考虑数据迁移,这给简单的扩展工作带来了很多风险和不可控因素。从上面的分析来看,架构并不是一成不变的。它将随着技术和业务的发展而演进和升级。计算存储分离设计就是在这样的背景下进入大家的视野。二、计算与存储分离的应用场景计算与存储分离的主要应用有哪些,主要是数据库和消息队列:1、数据库以传统的主从数据库系统为例。主库接收数据变化,从库读取binlog,通过回放binlog实现数据复制。在这种架构下,当主库负载较重时,因为复制了binlog,需要完成相关事务,所以主从复制会变得很慢。当主库数据量比较大的时候,我们增加从库的速度也会变慢,同时备份数据库也会变慢,我们的扩容成本也会相应增加。因此,我们逐渐开始接受计算和存储分离的路径,让所有节点共享一个存储。也许我们对这样的场景习以为常,但实际上,这是一个典型的计算和存储分离的设计。现在很多数据库都在逐渐向“计算和存储分离”靠拢,包括现在的PolarDB、OceanBase、TiDB等等。因此,“计算与存储分离”应该是未来数据库的主要发展方向。2、消息队列消息队列的设计思路,不管是Kafka还是RocketMQ,都是利用本机的磁盘来保存消息队列,其实也有一定的弊端。首先,容量是有限的。毕竟本地空间的容量有限,很容易造成消息堆积,导致我们想追溯一些历史数据时无法查询。那么在扩容的时候,只能对新的节点进行扩容,扩容成本比较高。针对这些问题,ApachePulsar应运而生。在Pulsar的架构中,数据计算和数据存储是两个独立的结构。数据计算就是Broker,类似于Kafka的Broker,用于负载均衡,处理消费者和生产者等,如果业务中消费者和生产者很多,我们可以单独扩展这一层。数据存储是Bookie。Pulsar使用ApacheBookkeeper存储系统,并不太关心存储细节。这样做的好处是只需要关系计算层的细节和逻辑,存储部分采用成熟的方案和系统。事实上,Kafka也在向这些方面靠拢。比如也在讨论是否支持分层存储,但是否会实现存储节点的单独设置还不确定,但“计算与存储分离”的方向应该是未来发展的主要方向消息队列。3.存储计算分离在大数据架构中的应用传统大数据架构中,数据计算和存储资源是共享的,比如CDH集群配置,每个节点既是YARN计算节点又是HDFS存储节点。其实这个设计也是来源于Google的GFS。Hadoop出现之初,网络带宽非常低。为了减少大量数据的网络传输,Hadoop采用了尽可能使用节点本地存储的设计,形成了计算和存储耦合的架构。近年来,CPU计算能力和网络速度的增长速度远远超过存储。数据中心有足够的带宽来传输数据。随着数据量的增加,多副本的设计和考虑也造成了成本的激增。计算和存储绑定设计的实用性开始变差。随着Spark、Flink等框架逐渐取代MapReduce,批处理和流处理并存,也改变了旧有的业务模式,需要新的大数据架构来适应。计算和存储分离的大数据架构开始进入人们的视野。现在很多新的大数据引擎都支持计算和存储分离,可以通过外部存储引用来进行数据对接,而不是通过ETL加载到本地。Hadoop生态系统也开始拥抱计算和存储分离。除了HDFS,Hadoop还支持S3。用户可以在私有云或公有云上运行Hadoop计算集群,连接共享存储和云存储。这样做的好处也是显而易见的。首先,它可以实现计算和存储资源的独立扩展,然后将原本分散的数据实现集中存储,打造统一的数据湖。更重要的是,可以真正实现大数据混合云,数据存储在本地,机器学习等计算资源部署在公有云,既考虑了安全性,又实现了计算敏捷。计算和存储的分离也可以方便软件版本的灵活管理。存放部分要稳固。为了保持软件版本的稳定性,计算部分要快。利用数据沙箱和容器技术,可以实现不同算力模型的快速交付。各部分独立升级,互不影响。以此方式,积极构建以企业数据湖为核心的稳态数据资源服务,构建以数据计算为核心的敏感数据能力服务,在数据治理的基础上实现数据运营。
