存算分離是數(shù)據(jù)架構(gòu)必然趨勢?
什么是存算分離?
存算分離架構(gòu)是一種新的數(shù)據(jù)架構(gòu)的設(shè)計范式,自上而下分為數(shù)據(jù)分析層、計算層和存儲層,其中計算層和存儲層解耦合,都是獨立的分布式服務(wù)。其設(shè)計的目標是要解決三個需求:數(shù)據(jù)可以靈活開放給不同業(yè)務(wù)做數(shù)據(jù)分析、計算和存儲獨立擴展以及計算與存儲的資源隔離,同時也提供與存算一體架構(gòu)等同的存算性能。
隨著硬件技術(shù)的快速進步,尤其是網(wǎng)絡(luò)和存儲設(shè)備的性能迅速提升,以及云計算廠商推動軟硬件協(xié)同加速的云存儲服務(wù),越來越多的企業(yè)開始基于云存儲來構(gòu)建數(shù)據(jù)存儲服務(wù),或數(shù)據(jù)湖,因此就需要單獨再建設(shè)一個獨立的計算層來提供數(shù)據(jù)分析服務(wù),這也就是存算分離架構(gòu)(Disaggregated Storage and Compute Architecture)。
最近幾年,存算分離架構(gòu)不僅在公有云上廣泛落地,在私有化場景下,也逐漸成為熱點。但是需要特別強調(diào)的是,存算分離架構(gòu)并不等同于采用兼容S3接口的對象存儲來構(gòu)建數(shù)據(jù)湖,也不是采用容器化來實現(xiàn)資源隔離或者彈性伸縮,更好的滿足業(yè)務(wù)需求是存算架構(gòu)升級的一個根本原因。
想要了解企業(yè)數(shù)據(jù)架構(gòu)向存算分離演進的必然性,首先要了解企業(yè)每一次數(shù)據(jù)架構(gòu)變遷的背景和理由。
回顧歷史,我們會發(fā)現(xiàn),數(shù)據(jù)架構(gòu)變遷往往是因為當時技術(shù)暴露種種缺點,與企業(yè)新的發(fā)展需求不匹配。
這些變遷,最早可以追溯到上世紀90年代——
20世紀90年代,一些企業(yè)開始部署開源數(shù)據(jù)庫以支持 Web 應(yīng)用程序,因為免費,所以在當時大受歡迎;
進入21世紀初期,開始面臨“數(shù)據(jù)多,很難在一臺物理機器上分析數(shù)據(jù)”的難題,企業(yè)開始采用大規(guī)模并行處理 (MPP) 驅(qū)動的新型數(shù)據(jù)庫系統(tǒng)。
發(fā)展到2010 年前后,因為新興業(yè)務(wù)的不斷產(chǎn)生,而MPP數(shù)據(jù)庫缺乏現(xiàn)代分析和數(shù)據(jù)科學所需的靈活性,企業(yè)再次轉(zhuǎn)向另一種新技術(shù):Hadoop,即采用節(jié)點本地存儲的設(shè)計,由此形成計算和存儲耦合(即存算一體)的架構(gòu)。
同樣地,來到今天,隨著5G、IoT等技術(shù)不斷發(fā)展,數(shù)據(jù)量激增,存儲空間和計算能力與數(shù)據(jù)增長不匹配,存算耦合的缺點也逐漸暴露:
1. 資源利用率低
從節(jié)點本身承接的業(yè)務(wù)來看,日志留存類的服務(wù),數(shù)據(jù)很少被調(diào)用分析,因此CPU利用率較低,造成計算資源浪費,而且當計算或存儲達到瓶頸,服務(wù)器的可靠性也會大大降低。從集群整體來看,由于存算一體煙囪式建設(shè),資源完全獨立不能共享,導(dǎo)致多個Hadoop集群無法隨不同時段業(yè)務(wù)需求的波動而均衡負載(平均資源利用率在25%以下)。
2. 成本高
當存算按某一比例強制綁定在一起,就意味著無法彈性擴容,同時為保證可靠性,采用三副本模式,造成大集群下高昂的存儲成本。
3. 運維困難
隨著業(yè)務(wù)復(fù)雜度的增加和新業(yè)務(wù)上線的速度加快,對服務(wù)器資源配比的要求也會隨之增加,如果服務(wù)器款型繁雜,維護難度就會增大,同時導(dǎo)致機房空間占用多、能耗大。
基于上面的背景分析,存算分離進入大家的視野。
可以說,存算分離針對存算一體的弊端進行優(yōu)化,為企業(yè)控制成本和提升數(shù)據(jù)運行的效率提供了新的思路,具體來說:
1. 提升資源利用率,節(jié)約成本
實現(xiàn)計算和存儲彈性擴展、按需分配,降低了系統(tǒng)部署和擴展成本,同時將CPU和磁盤充分調(diào)度起來,解決了資源利用不均衡的問題。
2. 簡化運維,提升可靠性
使用外置共享存儲方便備份恢復(fù),提高SSD的使用壽命,從而提高數(shù)據(jù)庫解決方案整體的可靠性,同時解決運維能力不足造成的硬件冗余。
隨著企業(yè)數(shù)字化建設(shè)的深入和業(yè)務(wù)訴求的升級,如果僅僅滿足于存算分離1.0時代,還遠遠不夠。
為什么向存算分離的下一代演進是大勢所趨?
如前文所說,存算分離1.0時代的解決方案聚焦成本,解決海量數(shù)據(jù)激增下企業(yè)如何重新定義大數(shù)據(jù)建設(shè)架構(gòu)的問題,但仍未解決數(shù)據(jù)鏈路長、數(shù)據(jù)孤島、數(shù)據(jù)搬遷難等問題。
為了應(yīng)對大數(shù)據(jù)時代下融合+實時分析數(shù)據(jù)的需求,企業(yè)IT架構(gòu)向下一代存算分離演進勢在必行。
當傳輸協(xié)議和帶寬能力已不再是IO瓶頸,下一代大數(shù)據(jù)存儲應(yīng)該向湖倉一體、一湖多云演進,更多以數(shù)據(jù)為中心,聚焦數(shù)據(jù)用得好的問題,以數(shù)據(jù)驅(qū)動融合分析、統(tǒng)一存儲,進一步驅(qū)動數(shù)據(jù)價值實時變現(xiàn)。
那么,以數(shù)據(jù)為中心的下一代存算分離,與1.0時代有什么不同?
首先通過實現(xiàn)計算和存儲資源的單獨擴容,然后將原本分散的數(shù)據(jù)實現(xiàn)集中存儲,打造統(tǒng)一的數(shù)據(jù)湖(Data lakehouse)。
同時,實現(xiàn)一湖多云對接。新一代數(shù)據(jù)庫,尤其是分布式數(shù)據(jù)庫,普遍采用云計算部署方式。下一代存算分離可以將數(shù)據(jù)存儲保留在本地,將機器學習等計算資源部署在公有云。這樣既能保證數(shù)據(jù)的安全性,又能實現(xiàn)計算的敏捷。
存算分離和存算一體化
相信早期的大數(shù)據(jù)集群的建設(shè),都是采用存算一體化的形式進行的,購買幾臺即包含計算資源又帶一定存儲的機型來搭建整個大數(shù)據(jù)集群,如下圖:
存算一體化的集群中每個節(jié)點都具備相同的硬件配置,我們早期內(nèi)部典型的配置基本上是:48核,256GB內(nèi)存,12塊8T SATA盤,整體提供約48個CU(1CU包含1核,4GB內(nèi)存)和96TB的存儲。
隨著業(yè)務(wù)的發(fā)展,我們發(fā)現(xiàn),類似上述存算一體化的架構(gòu),在發(fā)展到一定階段的時候,整體集群中的資源需求會打破原來存儲計算之間的比例平衡,造成某一類資源的利用率一直無法提升。比如:內(nèi)部某業(yè)務(wù)在兩年的時間內(nèi)數(shù)據(jù)存儲量上漲到原來的4倍,而計算資源只上漲到原來的2倍,數(shù)據(jù)存儲量需求明顯比計算資源增長快,這時,如果繼續(xù)采用存算一體化的機型就意味著我要滿足存儲資源增長的同時,計算資源也會增長4倍,而實際的需求只要2倍,計算資源存在過剩的情況。
除了業(yè)務(wù)外,技術(shù)上的不斷革新帶來計算能力的提升,也會導(dǎo)致原先的存算一體化資源配置出現(xiàn)比例失調(diào)的現(xiàn)象。就拿大數(shù)據(jù)領(lǐng)域離線計算來說,從最初的Hive發(fā)展到Spark,而Spark從Spark1.x到當前的Spark3.x,相比于最早初的框架的能力,整體性能上有數(shù)量級的提升。
綜上,業(yè)務(wù)和技術(shù)的不斷發(fā)展,會造成原先存算一體化體系下存儲和計算的比例不斷發(fā)生變化,我們很難找到一種合適的機型來滿足不斷變化的需求。因此,我們在后續(xù)的采購過程中,進行了部分存算分離采購的調(diào)整:計算資源和存儲資源進行單獨的方式采購,并且存儲和計算都分別采用了更高密度的機型,從而把線上集群調(diào)整到一種合適的存算比例。
存算分離改造帶來的另外一大好處是把原先大數(shù)據(jù)計算過程中的離散I/O(shuffle數(shù)據(jù))和順序I/O(數(shù)據(jù)塊)進行了很好的拆分,解決了計算過程中的I/O瓶頸,從而進一步提升了CPU的利用率。
存算分離和多層存儲
基于業(yè)務(wù)和技術(shù)的發(fā)展,對集群進行存算分離化改造能夠提升整體的計算資源利用率,在此基礎(chǔ)之上,根據(jù)業(yè)務(wù)自身發(fā)展的特性,還可以對業(yè)務(wù)的存儲做多層存儲拆分,進一步降低數(shù)據(jù)存儲的成本。
一般來說,業(yè)務(wù)的數(shù)據(jù)量是一直不斷在增長的,而應(yīng)用使用的數(shù)據(jù),都具有一定的時效性,更多的會集中在最近一兩個月甚至最近一兩周的數(shù)據(jù),大量歷史數(shù)據(jù)更多的是在某些特殊的場景下會被利用到,比如:幾個月前的用戶行為數(shù)據(jù)。大量的存儲空間被這種重要但已經(jīng)“過期”的數(shù)據(jù)所占據(jù)。在大部分的存儲系統(tǒng)中,經(jīng)常被訪問的數(shù)據(jù)(熱數(shù)據(jù))一般只占了15% ~ 25%,而不經(jīng)常被訪問的數(shù)據(jù)(冷數(shù)據(jù))卻占了75% ~ 85%。由于冷數(shù)據(jù)不活躍的特點,如果對冷數(shù)據(jù)的存儲進行一定的改造,將會取得較為不錯的成本收益。
上圖中,我們對原本存在IDC1中的存儲集群做了一定的拆分,把原本一個集群拆分成兩個集群,分別稱之為:熱集群和冷集群,熱集群的搭建與原先一致,而冷集群在搭建的時候,我們采用了EC(糾刪碼)的方式進行了改造,使得大量的冷數(shù)據(jù)在保證原來的高可用性的同時,存儲成本降至原來的50%,在業(yè)務(wù)具有較大規(guī)模冷數(shù)據(jù)的情況下,該種方式也可以為業(yè)務(wù)減少大量數(shù)據(jù)存儲成本。
存算分離和計算混部
存儲上可以根據(jù)數(shù)據(jù)冷熱做到多層存儲,計算層也可以通過一定的混部措施來提升業(yè)務(wù)整體計算的利用率。按照業(yè)務(wù)的特性,一般在線的業(yè)務(wù)高峰期每天的10:00-24:00,而離線計算的高峰期在24:00-8:00,從時間分布來看,在線業(yè)務(wù)與離線業(yè)務(wù)存在較好的互補特性。因此,如果能夠把部分離線的任務(wù)在在線業(yè)務(wù)的低峰期,能跑在在線業(yè)務(wù)的服務(wù)器上,做到在線離線業(yè)務(wù)混合部署,也是可以節(jié)省離線計算服務(wù)器。
2021年,杭研大數(shù)據(jù)聯(lián)合云計算、傳媒數(shù)據(jù)團隊在傳媒大數(shù)據(jù)場景下進行了在線/離線計算混合部署試點,試著把業(yè)務(wù)的Spark任務(wù)調(diào)度到輕舟K8s上,使得大數(shù)據(jù)任務(wù)在業(yè)務(wù)在線業(yè)務(wù)低峰實現(xiàn)混部,從而減少整個BU大數(shù)據(jù)計算的節(jié)點數(shù)量。
云環(huán)境下的存算分離
大數(shù)據(jù)私有場景下的存算分離一般通過把存儲和計算拆開,分別采用更高密度的存儲/計算機型來節(jié)省整個成本,存儲依舊采用HDFS的方式來搭建集群。而在云環(huán)境下,本身提供了對象存儲服務(wù)(如:S3,OSS,OBS等),在搭建大數(shù)據(jù)平臺的時候,是否可以選用對象存儲來做大數(shù)據(jù)存儲的底層。答案當然是可以,而且大多數(shù)云上大數(shù)據(jù)方案都是這么做的,如:AWS的EMR、阿里云的MaxCompute、華為的MRS等等。杭研大數(shù)據(jù)團隊針對不同的客戶需求,也設(shè)計了云上部署方案,如下:
在上述整個云上部署方案中,我們采用了云平臺的云主機來搭建計算引擎,同時使用了各家云平臺的對象存儲來作為底層數(shù)據(jù)存儲。云上部署平臺相比于云下私有化部署的大數(shù)據(jù)平臺來說,最顯著的一個變化就是用對象存儲+Block Cache的方式替換了原來的HDFS存儲,之所以引入Block Cache主要有兩方面的因素考慮:Block Cache通過標準協(xié)議,能夠屏蔽底層不同對象存儲,使得整體對上層計算無感知 Block Cache兼具緩存功能,能夠盡量減少遠程對象存儲訪問延遲對計算任務(wù)的影響。
除了架構(gòu)上有些許不同之外,采用云原生對象存儲作為大數(shù)據(jù)的存儲層,需要考慮性能上的影響,比如,對象存儲對于像remove之類的命令,整體性能會比較低下,特別是在對大目錄的remove上,而大數(shù)據(jù)計算場景下,會有較多的insert overwrite操作,會頻繁的去刪除老的數(shù)據(jù)后寫入新的數(shù)據(jù)。因此對于像remove類的接口,如果性能很差,會大幅度影響計算性能。
對不同的行業(yè)和企業(yè)來說,下一代存算分離方案可以真正把技術(shù)落到實處,發(fā)揮作用。
對金融企業(yè)來說,這可以提升數(shù)據(jù)共享便捷度,減少數(shù)據(jù)重復(fù)存儲和搬遷,縮短數(shù)據(jù)加工鏈路,大大提高了數(shù)據(jù)分析的效率。
對政務(wù)平臺來說,可以從推動政務(wù)管理大數(shù)據(jù)向城市運行大數(shù)據(jù)演進,讓平臺在辦理業(yè)務(wù)時可以在不同應(yīng)用間共享數(shù)據(jù),彈性調(diào)度不同資源,滿足不同時間段的需求。
對運營商來說,使用下一代存算分離解決方案可以降本增效,提高資源利用率,降低運營成本,實現(xiàn)全國算力網(wǎng)絡(luò)統(tǒng)一布局。
時代和技術(shù),始終在進步。企業(yè)也一直向前發(fā)展,需求在不斷更新。為了擴大數(shù)據(jù)分析架構(gòu)的規(guī)模、提高數(shù)據(jù)分析的靈活性和敏捷性,存算分離是目前降低數(shù)據(jù)分析成本的第一步,向下一代存算分離演進,則是更重要的一步。