概述
背景
Hadoop一出生就是奔存算一体设计,当时设计思想就是存储不动而计算(code也即是代码程序)动,负责调度Yarn会把计算任务尽量发到要处理数据所在的实例上,这也是与传统集中式存储最大的不同。为何当时Hadoop设计存算一体的耦合?要知道2006年服务器带宽只有100Mb/s~1Gb/s,但是HDD也即是磁盘吞吐量有50MB/s,这样带宽远远不够传输数据,网络瓶颈尤为明显,无奈之举只好把计算任务发到数据所在的位置。
众观历史常言道天下分久必合合久必分,随着云计算技术的发展,数据库也开始拥抱云原生时代,在当前越来越强调云原生的环境下,存储计算分离已经是大势所趋,“存算分离”作为一种架构思想在企业项目研发过程中逐渐为大家所熟知和使用,随着数字化转型带来的企业IT架构的重塑,存算分离技术将逐渐走入历史的舞台。存算是指存储和计算组成,通常所说的计算是指由CPU和内存组成的算力单元,存储指的是持久化的数据存放单元。在企业生产实践过程中没有一成不变的架构,只有不变的以业务为核心的架构意识。
家庭宽带自从升级到100m bps甚至更大,从来不保存电影,要看直接下载,基本几分钟就好了,而这在十年前是不可想象。带宽的速度特别是IDC机房内带宽的速度,已经从1000mps、2000mps、10000mps,甚至100000mpbs,网络带宽提升100倍甚至更高,网络已经不再是瓶颈,但是从磁盘吞吐性能上并没有太大提升,仅仅提升1倍左右(100MB/S),由于硬件的变化带来了软件架构的变化。高效的压缩算法与列式存储也进一步减少I/O的压力,大数据的瓶颈逐渐由I/O变成CPU。同时集群规模越来越大,存算利用率不均衡,选型受限的问题越来越明显。
为何要存算分离
随着累积的数据量的增大,大数据业务量的增多,数据存储和处理的成本越来越高,企业数据基础设施的投资越来越大。同时,大数据处理组件多,不同组件使用不同的数据处理格式,比如大家熟悉的数据湖、数据仓库使用的就是不同的格式,多样化的数据格式导致数据存储变得复杂,系统中应对不同的场景,往往同样的数据需要存储多份,不同组件之间还需要大量的数据拷贝和格式转换,消耗大量的资源。经过十几年大数据发展,随着海量负载和大数据用例的出现,单一Hadoop集群的规模变大,多个Hadoop集群需同时支撑不同的业务。因此在存储和计算耦合架构下,大数据集群将面临如下问题:
-
成本高:业务中对算力和存储需求是不平衡的,增长速度也是不均衡的。扩容时同时要扩容计算和存储,通常算力是有浪费的。
-
资源利用率低:由于多个Hadoop 集群承接不同的工作负载,随着支撑业务需求的波动,系统负载出现峰谷,然而存算一体的架构导致各集群的资源完全独立隔离不能共享(跨行业的存算一体架构下的Hadoop集群平均资源利用率在25%以下)。高密度存储型和算力增强型都难有用武之地;数据会倾斜,计算任务不一定能有效的调度到数据所在实例上。
-
运维困难:随着业务复杂度的增加和新业务上线的速度加快,对服务器资源配比的要求也会随之增加,如果服务器款型繁杂,维护难度就会增大,同时导致机房空间占用多、能耗大。实例要考虑计算与存储的均衡,机器选型受限。缩容较复杂,要对实例上的数据内容做迁移,这种情况无法做到弹性伸缩。
优势
- 逻辑单元分开扩容:通过计算和存储的分离部署实现计算和存储的隔离,根据业务负载需求,对计算/存储按需扩容。
- 大数据能力云化:计算分离之后,可将其迁移到K8S或其他的云上面,使得计算更轻量化。
- 多数据平台整合:底层提供统一的存储给到不同的大数据平台,实现多个大数据平台数据的整合,加速流程,逐步构建企业内部数据湖。
针对传