聊聊大數(shù)據(jù)下的存算分離
最近跟好幾個(gè)用戶在交流的時(shí)候都提到了大數(shù)據(jù)的存算分離,有的是云廠商給他們推薦的方案,比如:某某運(yùn)營(yíng)商說(shuō)最近xx云一直在給他們推薦存算分離化改造,背景是有個(gè)幾十臺(tái)的HDFS小集群,存儲(chǔ)的文件數(shù)量比較多,經(jīng)常性出問(wèn)題,xx云的商務(wù)就跟他們說(shuō)用對(duì)象存儲(chǔ)如何如何來(lái)解決問(wèn)題,聽起來(lái)感覺有點(diǎn)道理,但是又拿不定主意,畢竟整個(gè)改造過(guò)程動(dòng)靜大、周期長(zhǎng),而且需要很大的投入,無(wú)論從建設(shè)周期還是成本投入上來(lái)看,都需要慎重考慮。有的是為了技術(shù)棧統(tǒng)一,比如:某某醫(yī)藥類企業(yè),在整體技術(shù)架構(gòu)重構(gòu)時(shí),已經(jīng)引入了xx對(duì)象存儲(chǔ),基于技術(shù)棧統(tǒng)一的角度,想了解下大數(shù)據(jù)基于對(duì)象存儲(chǔ)下存算分離是否可行,如果可行,有沒(méi)有什么潛在的風(fēng)險(xiǎn)?
上面的兩個(gè)例子,都是最近碰到的,相信有類似疑問(wèn)的用戶還有很多,正好最近2年,我們?cè)趦?nèi)部也在做集群的存算分離化改造,接下去,我們就來(lái)談?wù)剬?duì)于大數(shù)據(jù)做存算分離這件事到底應(yīng)該怎么來(lái)考慮。個(gè)人認(rèn)為:大數(shù)據(jù)集群是否適合做存算分離,主要從兩個(gè)方面來(lái)考慮:
技術(shù)層面:存算分離是否能夠簡(jiǎn)化我們的技術(shù)棧,或者解決某些瓶頸問(wèn)題。
成本層面:存算分離能否在計(jì)算性能、存儲(chǔ)空間等方面帶來(lái)成本上的優(yōu)勢(shì)。
1.存算分離和存算一體化
相信早期的大數(shù)據(jù)集群的建設(shè),都是采用存算一體化的形式進(jìn)行的,購(gòu)買幾臺(tái)即包含計(jì)算資源又帶一定存儲(chǔ)的機(jī)型來(lái)搭建整個(gè)大數(shù)據(jù)集群,如下圖:

存算一體化的集群中每個(gè)節(jié)點(diǎn)都具備相同的硬件配置,我們?cè)缙趦?nèi)部典型的配置基本上是:48核,256GB內(nèi)存,12塊8T SATA盤,整體提供約48個(gè)CU(1CU包含1核,4GB內(nèi)存)和96TB的存儲(chǔ)。
隨著業(yè)務(wù)的發(fā)展,我們發(fā)現(xiàn),類似上述存算一體化的架構(gòu),在發(fā)展到一定階段的時(shí)候,整體集群中的資源需求會(huì)打破原來(lái)存儲(chǔ)計(jì)算之間的比例平衡,造成某一類資源的利用率一直無(wú)法提升。比如:內(nèi)部某業(yè)務(wù)在兩年的時(shí)間內(nèi)數(shù)據(jù)存儲(chǔ)量上漲到原來(lái)的4倍,而計(jì)算資源只上漲到原來(lái)的2倍,數(shù)據(jù)存儲(chǔ)量需求明顯比計(jì)算資源增長(zhǎng)快,這時(shí),如果繼續(xù)采用存算一體化的機(jī)型就意味著我要滿足存儲(chǔ)資源增長(zhǎng)的同時(shí),計(jì)算資源也會(huì)增長(zhǎng)4倍,而實(shí)際的需求只要2倍,計(jì)算資源存在過(guò)剩的情況。
除了業(yè)務(wù)外,技術(shù)上的不斷革新帶來(lái)計(jì)算能力的提升,也會(huì)導(dǎo)致原先的存算一體化資源配置出現(xiàn)比例失調(diào)的現(xiàn)象。就拿大數(shù)據(jù)領(lǐng)域離線計(jì)算來(lái)說(shuō),從最初的Hive發(fā)展到Spark,而Spark從Spark1.x到當(dāng)前的Spark3.x,相比于最早初的框架的能力,整體性能上有數(shù)量級(jí)的提升。
綜上,業(yè)務(wù)和技術(shù)的不斷發(fā)展,會(huì)造成原先存算一體化體系下存儲(chǔ)和計(jì)算的比例不斷發(fā)生變化,我們很難找到一種合適的機(jī)型來(lái)滿足不斷變化的需求。因此,我們?cè)诤罄m(xù)的采購(gòu)過(guò)程中,進(jìn)行了部分存算分離采購(gòu)的調(diào)整:計(jì)算資源和存儲(chǔ)資源進(jìn)行單獨(dú)的方式采購(gòu),并且存儲(chǔ)和計(jì)算都分別采用了更高密度的機(jī)型,從而把線上集群調(diào)整到一種合適的存算比例。

存算分離改造帶來(lái)的另外一大好處是把原先大數(shù)據(jù)計(jì)算過(guò)程中的離散I/O(shuffle數(shù)據(jù))和順序I/O(數(shù)據(jù)塊)進(jìn)行了很好的拆分,解決了計(jì)算過(guò)程中的I/O瓶頸,從而進(jìn)一步提升了CPU的利用率。


通過(guò)上述存算分離化改造,集群中大部分節(jié)點(diǎn)的資源利用率有了大幅度提升,全天CPU 95峰值維持在90%左右,平均CPU利用率從25%提升到55%以上。

2.存算分離和多層存儲(chǔ)
基于業(yè)務(wù)和技術(shù)的發(fā)展,對(duì)集群進(jìn)行存算分離化改造能夠提升整體的計(jì)算資源利用率,在此基礎(chǔ)之上,根據(jù)業(yè)務(wù)自身發(fā)展的特性,還可以對(duì)業(yè)務(wù)的存儲(chǔ)做多層存儲(chǔ)拆分,進(jìn)一步降低數(shù)據(jù)存儲(chǔ)的成本。
一般來(lái)說(shuō),業(yè)務(wù)的數(shù)據(jù)量是一直不斷在增長(zhǎng)的,而應(yīng)用使用的數(shù)據(jù),都具有一定的時(shí)效性,更多的會(huì)集中在最近一兩個(gè)月甚至最近一兩周的數(shù)據(jù),大量歷史數(shù)據(jù)更多的是在某些特殊的場(chǎng)景下會(huì)被利用到,比如:幾個(gè)月前的用戶行為數(shù)據(jù)。大量的存儲(chǔ)空間被這種重要但已經(jīng)“過(guò)期”的數(shù)據(jù)所占據(jù)。在大部分的存儲(chǔ)系統(tǒng)中,經(jīng)常被訪問(wèn)的數(shù)據(jù)(熱數(shù)據(jù))一般只占了15% ~ 25%,而不經(jīng)常被訪問(wèn)的數(shù)據(jù)(冷數(shù)據(jù))卻占了75% ~ 85%。由于冷數(shù)據(jù)不活躍的特點(diǎn),如果對(duì)冷數(shù)據(jù)的存儲(chǔ)進(jìn)行一定的改造,將會(huì)取得較為不錯(cuò)的成本收益。

上圖中,我們對(duì)原本存在IDC1中的存儲(chǔ)集群做了一定的拆分,把原本一個(gè)集群拆分成兩個(gè)集群,分別稱之為:熱集群和冷集群,熱集群的搭建與原先一致,而冷集群在搭建的時(shí)候,我們采用了EC(糾刪碼)的方式進(jìn)行了改造,使得大量的冷數(shù)據(jù)在保證原來(lái)的高可用性的同時(shí),存儲(chǔ)成本降至原來(lái)的50%,在業(yè)務(wù)具有較大規(guī)模冷數(shù)據(jù)的情況下,該種方式也可以為業(yè)務(wù)減少大量數(shù)據(jù)存儲(chǔ)成本。
3.存算分離和計(jì)算混部
存儲(chǔ)上可以根據(jù)數(shù)據(jù)冷熱做到多層存儲(chǔ),計(jì)算層也可以通過(guò)一定的混部措施來(lái)提升業(yè)務(wù)整體計(jì)算的利用率。按照業(yè)務(wù)的特性,一般在線的業(yè)務(wù)高峰期每天的10:00-24:00,而離線計(jì)算的高峰期在24:00-8:00,從時(shí)間分布來(lái)看,在線業(yè)務(wù)與離線業(yè)務(wù)存在較好的互補(bǔ)特性。因此,如果能夠把部分離線的任務(wù)在在線業(yè)務(wù)的低峰期,能跑在在線業(yè)務(wù)的服務(wù)器上,做到在線離線業(yè)務(wù)混合部署,也是可以節(jié)省離線計(jì)算服務(wù)器。

2021年,杭研大數(shù)據(jù)聯(lián)合云計(jì)算、傳媒數(shù)據(jù)團(tuán)隊(duì)在傳媒大數(shù)據(jù)場(chǎng)景下進(jìn)行了在線/離線計(jì)算混合部署試點(diǎn),試著把業(yè)務(wù)的Spark任務(wù)調(diào)度到輕舟K8s上,使得大數(shù)據(jù)任務(wù)在業(yè)務(wù)在線業(yè)務(wù)低峰實(shí)現(xiàn)混部,從而減少整個(gè)BU大數(shù)據(jù)計(jì)算的節(jié)點(diǎn)數(shù)量。

4.云環(huán)境下的存算分離
大數(shù)據(jù)私有場(chǎng)景下的存算分離一般通過(guò)把存儲(chǔ)和計(jì)算拆開,分別采用更高密度的存儲(chǔ)/計(jì)算機(jī)型來(lái)節(jié)省整個(gè)成本,存儲(chǔ)依舊采用HDFS的方式來(lái)搭建集群。而在云環(huán)境下,本身提供了對(duì)象存儲(chǔ)服務(wù)(如:S3,OSS,OBS等),在搭建大數(shù)據(jù)平臺(tái)的時(shí)候,是否可以選用對(duì)象存儲(chǔ)來(lái)做大數(shù)據(jù)存儲(chǔ)的底層。答案當(dāng)然是可以,而且大多數(shù)云上大數(shù)據(jù)方案都是這么做的,如:AWS的EMR、阿里云的MaxCompute、華為的MRS等等。杭研大數(shù)據(jù)團(tuán)隊(duì)針對(duì)不同的客戶需求,也設(shè)計(jì)了云上部署方案,如下:

在上述整個(gè)云上部署方案中,我們采用了云平臺(tái)的云主機(jī)來(lái)搭建計(jì)算引擎,同時(shí)使用了各家云平臺(tái)的對(duì)象存儲(chǔ)來(lái)作為底層數(shù)據(jù)存儲(chǔ)。云上部署平臺(tái)相比于云下私有化部署的大數(shù)據(jù)平臺(tái)來(lái)說(shuō),最顯著的一個(gè)變化就是用對(duì)象存儲(chǔ)+Block Cache的方式替換了原來(lái)的HDFS存儲(chǔ),之所以引入Block Cache主要有兩方面的因素考慮:Block Cache通過(guò)標(biāo)準(zhǔn)協(xié)議,能夠屏蔽底層不同對(duì)象存儲(chǔ),使得整體對(duì)上層計(jì)算無(wú)感知 Block Cache兼具緩存功能,能夠盡量減少遠(yuǎn)程對(duì)象存儲(chǔ)訪問(wèn)延遲對(duì)計(jì)算任務(wù)的影響。
除了架構(gòu)上有些許不同之外,采用云原生對(duì)象存儲(chǔ)作為大數(shù)據(jù)的存儲(chǔ)層,需要考慮性能上的影響,比如,對(duì)象存儲(chǔ)對(duì)于像remove之類的命令,整體性能會(huì)比較低下,特別是在對(duì)大目錄的remove上,而大數(shù)據(jù)計(jì)算場(chǎng)景下,會(huì)有較多的insert overwrite操作,會(huì)頻繁的去刪除老的數(shù)據(jù)后寫入新的數(shù)據(jù)。因此對(duì)于像remove類的接口,如果性能很差,會(huì)大幅度影響計(jì)算性能。
5.總結(jié)
回過(guò)頭來(lái)看看開頭的兩個(gè)問(wèn)題:集群經(jīng)常出問(wèn)題,需要做存算分離改造,其實(shí)還可以有較大的優(yōu)化空間,比如:增加NameNode JVM的內(nèi)存,或者合并小文件減少元數(shù)據(jù)信息等等,一般情況下,幾十臺(tái)的規(guī)模遠(yuǎn)不會(huì)達(dá)到HDFS性能瓶頸。
至于第二個(gè),為了技術(shù)棧的統(tǒng)一,需要衡量對(duì)象存儲(chǔ)給大數(shù)據(jù)計(jì)算造成的性能影響后再來(lái)綜合考慮。
作者簡(jiǎn)介
蔣鴻翔,服務(wù)端開發(fā)專家。2011年加入網(wǎng)易杭州研究院,主要負(fù)責(zé)大數(shù)據(jù)基礎(chǔ)設(shè)施類工作,同時(shí)承擔(dān)內(nèi)部業(yè)務(wù)線上大數(shù)據(jù)集群穩(wěn)定性保障、協(xié)助業(yè)務(wù)線上技術(shù)框架落地,解決業(yè)務(wù)實(shí)際生產(chǎn)過(guò)程中的各種問(wèn)題,與業(yè)務(wù)一起改進(jìn)線上技術(shù)框架,從而實(shí)現(xiàn)降本增效等目的。





























