什么是存算分离?
存算分离架构是一种新的数据架构的设计范式,自上而下分为数据分析层、计算层和存储层,其中计算层和存储层解耦合,都是独立的分布式服务。其设计的目标是要解决三个需求:数据可以灵活开放给不同业务做数据分析、计算和存储独立扩展以及计算与存储的资源隔离,同时也提供与存算一体架构等同的存算性能。
随着硬件技术的快速进步,尤其是网络和存储设备的性能迅速提升,以及云计算厂商推动软硬件协同加速的云存储服务,越来越多的企业开始基于云存储来构建数据存储服务,或数据湖,因此就需要单独再建设一个独立的计算层来提供数据分析服务,这也就是存算分离架构(Disaggregated Storage and Compute Architecture)。
最近几年,存算分离架构不仅在公有云上广泛落地,在私有化场景下,也逐渐成为热点。但是需要特别强调的是,存算分离架构并不等同于采用兼容S3接口的对象存储来构建数据湖,也不是采用容器化来实现资源隔离或者弹性伸缩,更好的满足业务需求是存算架构升级的一个根本原因。
想要了解企业数据架构向存算分离演进的必然性,首先要了解企业每一次数据架构变迁的背景和理由。
回顾历史,我们会发现,数据架构变迁往往是因为当时技术暴露种种缺点,与企业新的发展需求不匹配。
这些变迁,最早可以追溯到上世纪90年代——
20世纪90年代,一些企业开始部署开源数据库以支持 Web 应用程序,因为免费,所以在当时大受欢迎;
进入21世纪初期,开始面临“数据多,很难在一台物理机器上分析数据”的难题,企业开始采用大规模并行处理 (MPP) 驱动的新型数据库系统。
发展到2010 年前后,因为新兴业务的不断产生,而MPP数据库缺乏现代分析和数据科学所需的灵活性,企业再次转向另一种新技术:Hadoop,即采用节点本地存储的设计,由此形成计算和存储耦合(即存算一体)的架构。
同样地,来到今天,随着5G、IoT等技术不断发展,数据量激增,存储空间和计算能力与数据增长不匹配,存算耦合的缺点也逐渐暴露:
1. 资源利用率低
从节点本身承接的业务来看,日志留存类的服务,数据很少被调用分析,因此CPU利用率较低,造成计算资源浪费,而且当计算或存储达到瓶颈,服务器的可靠性也会大大降低。从集群整体来看,由于存算一体烟囱式建设,资源完全独立不能共享,导致多个Hadoop集群无法随不同时段业务需求的波动而均衡负载(平均资源利用率在25%以下)。
2. 成本高
当存算按某一比例强制绑定在一起,就意味着无法弹性扩容,同时为保证可靠性,采用三副本模式,造成大集群下高昂的存储成本。
3. 运维困难
随着业务复杂度的增加和新业务上线的速度加快,对服务器资源配比的要求也会随之增加,如果服务器款型繁杂,维护难度就会增大,同时导致机房空间占用多、能耗大。
基于上面的背景分析,存算分离进入大家的视野。
可以说,存算分离针对存算一体的弊端进行优化,为企业控制成本和提升数据运行的效率提供了新的思路,具体来说:
1. 提升资源利用率,节约成本
实现计算和存储弹性扩展、按需分配,降低了系统部署和扩展成本,同时将CPU和磁盘充分调度起来,解决了资源利用不均衡的问题。
2. 简化运维,提升可靠性
使用外置共享存储方便备份恢复,提高SSD的使用寿命,从而提高数据库解决方案整体的可靠性,同时解决运维能力不足造成的硬件冗余。
随着企业数字化建设的深入和业务诉求的升级,如果仅仅满足于存算分离1.0时代,还远远不够。
为什么向存算分离的下一代演进是大势所趋?
如前文所说,存算分离1.0时代的解决方案聚焦成本,解决海量数据激增下企业如何重新定义大数据建设架构的问题,但仍未解决数据链路长、数据孤岛、数据搬迁难等问题。
为了应对大数据时代下融合+实时分析数据的需求,企业IT架构向下一代存算分离演进势在必行。
当传输协议和带宽能力已不再是IO瓶颈,下一代大数据存储应该向湖仓一体、一湖多云演进,更多以数据为中心,聚焦数据用得好的问题,以数据驱动融合分析、统一存储,进一步驱动数据价值实时变现。
那么,以数据为中心的下一代存算分离,与1.0时代有什么不同?
首先通过实现计算和存储资源的单独扩容,然后将原本分散的数据实现集中存储,打造统一的数据湖(Data lakehouse)。
同时,实现一湖多云对接。新一代数据库,尤其是分布式数据库,普遍采用云计算部署方式。下一代存算分离可以将数据存储保留在本地,将机器学习等计算资源部署在公有云。这样既能保证数据的安全性,又能实现计算的敏捷。
存算分离和存算一体化
相信早期的大数据集群的建设,都是采用存算一体化的形式进行的,购买几台即包含计算资源又带一定存储的机型来搭建整个大数据集群,如下图:
存算一体化的集群中每个节点都具备相同的硬件配置,我们早期内部典型的配置基本上是:48核,256GB内存,12块8T SATA盘,整体提供约48个CU(1CU包含1核,4GB内存)和96TB的存储。
随着业务的发展,我们发现,类似上述存算一体化的架构,在发展到一定阶段的时候,整体集群中的资源需求会打破原来存储计算之间的比例平衡,造成某一类资源的利用率一直无法提升。比如:内部某业务在两年的时间内数据存储量上涨到原来的4倍,而计算资源只上涨到原来的2倍,数据存储量需求明显比计算资源增长快,这时,如果继续采用存算一体化的机型就意味着我要满足存储资源增长的同时,计算资源也会增长4倍,而实际的需求只要2倍,计算资源存在过剩的情况。
除了业务外,技术上的不断革新带来计算能力的提升,也会导致原先的存算一体化资源配置出现比例失调的现象。就拿大数据领域离线计算来说,从最初的Hive发展到Spark,而Spark从Spark1.x到当前的Spark3.x,相比于最早初的框架的能力,整体性能上有数量级的提升。
综上,业务和技术的不断发展,会造成原先存算一体化体系下存储和计算的比例不断发生变化,我们很难找到一种合适的机型来满足不断变化的需求。因此,我们在后续的采购过程中,进行了部分存算分离采购的调整:计算资源和存储资源进行单独的方式采购,并且存储和计算都分别采用了更高密度的机型,从而把线上集群调整到一种合适的存算比例。
存算分离改造带来的另外一大好处是把原先大数据计算过程中的离散I/O(shuffle数据)和顺序I/O(数据块)进行了很好的拆分,解决了计算过程中的I/O瓶颈,从而进一步提升了CPU的利用率。
存算分离和多层存储
基于业务和技术的发展,对集群进行存算分离化改造能够提升整体的计算资源利用率,在此基础之上,根据业务自身发展的特性,还可以对业务的存储做多层存储拆分,进一步降低数据存储的成本。
一般来说,业务的数据量是一直不断在增长的,而应用使用的数据,都具有一定的时效性,更多的会集中在最近一两个月甚至最近一两周的数据,大量历史数据更多的是在某些特殊的场景下会被利用到,比如:几个月前的用户行为数据。大量的存储空间被这种重要但已经“过期”的数据所占据。在大部分的存储系统中,经常被访问的数据(热数据)一般只占了15% ~ 25%,而不经常被访问的数据(冷数据)却占了75% ~ 85%。由于冷数据不活跃的特点,如果对冷数据的存储进行一定的改造,将会取得较为不错的成本收益。
上图中,我们对原本存在IDC1中的存储集群做了一定的拆分,把原本一个集群拆分成两个集群,分别称之为:热集群和冷集群,热集群的搭建与原先一致,而冷集群在搭建的时候,我们采用了EC(纠删码)的方式进行了改造,使得大量的冷数据在保证原来的高可用性的同时,存储成本降至原来的50%,在业务具有较大规模冷数据的情况下,该种方式也可以为业务减少大量数据存储成本。
存算分离和计算混部
存储上可以根据数据冷热做到多层存储,计算层也可以通过一定的混部措施来提升业务整体计算的利用率。按照业务的特性,一般在线的业务高峰期每天的10:00-24:00,而离线计算的高峰期在24:00-8:00,从时间分布来看,在线业务与离线业务存在较好的互补特性。因此,如果能够把部分离线的任务在在线业务的低峰期,能跑在在线业务的服务器上,做到在线离线业务混合部署,也是可以节省离线计算服务器。
2021年,杭研大数据联合云计算、传媒数据团队在传媒大数据场景下进行了在线/离线计算混合部署试点,试着把业务的Spark任务调度到轻舟K8s上,使得大数据任务在业务在线业务低峰实现混部,从而减少整个BU大数据计算的节点数量。
云环境下的存算分离
大数据私有场景下的存算分离一般通过把存储和计算拆开,分别采用更高密度的存储/计算机型来节省整个成本,存储依旧采用HDFS的方式来搭建集群。而在云环境下,本身提供了对象存储服务(如:S3,OSS,OBS等),在搭建大数据平台的时候,是否可以选用对象存储来做大数据存储的底层。答案当然是可以,而且大多数云上大数据方案都是这么做的,如:AWS的EMR、阿里云的MaxCompute、华为的MRS等等。杭研大数据团队针对不同的客户需求,也设计了云上部署方案,如下:
在上述整个云上部署方案中,我们采用了云平台的云主机来搭建计算引擎,同时使用了各家云平台的对象存储来作为底层数据存储。云上部署平台相比于云下私有化部署的大数据平台来说,最显著的一个变化就是用对象存储+Block Cache的方式替换了原来的HDFS存储,之所以引入Block Cache主要有两方面的因素考虑:Block Cache通过标准协议,能够屏蔽底层不同对象存储,使得整体对上层计算无感知 Block Cache兼具缓存功能,能够尽量减少远程对象存储访问延迟对计算任务的影响。
除了架构上有些许不同之外,采用云原生对象存储作为大数据的存储层,需要考虑性能上的影响,比如,对象存储对于像remove之类的命令,整体性能会比较低下,特别是在对大目录的remove上,而大数据计算场景下,会有较多的insert overwrite操作,会频繁的去删除老的数据后写入新的数据。因此对于像remove类的接口,如果性能很差,会大幅度影响计算性能。
对不同的行业和企业来说,下一代存算分离方案可以真正把技术落到实处,发挥作用。
对金融企业来说,这可以提升数据共享便捷度,减少数据重复存储和搬迁,缩短数据加工链路,大大提高了数据分析的效率。
对政务平台来说,可以从推动政务管理大数据向城市运行大数据演进,让平台在办理业务时可以在不同应用间共享数据,弹性调度不同资源,满足不同时间段的需求。
对运营商来说,使用下一代存算分离解决方案可以降本增效,提高资源利用率,降低运营成本,实现全国算力网络统一布局。
时代和技术,始终在进步。企业也一直向前发展,需求在不断更新。为了扩大数据分析架构的规模、提高数据分析的灵活性和敏捷性,存算分离是目前降低数据分析成本的第一步,向下一代存算分离演进,则是更重要的一步。