歷史上,數(shù)據(jù)分析需求的不斷提升(更大的數(shù)據(jù)規(guī)模、更快的處理速度、更低的使用成本)和計算基礎設施的不斷進化(從專用的高端硬件、到低成本的商用硬件、到云計算服務),這兩大因素推動數(shù)據(jù)倉庫的架構大體經(jīng)歷了三個時代:軟硬一體的一體機時代、存算一體的分布式時代以及存算分離的云原生時代。
Apache Doris 誕生于存算一體的分布式時代,是典型的 Shared Nothing 架構:BE 節(jié)點上存儲與計算緊密耦合、多 BE 節(jié)點采用 MPP 分布式計算架構,這種架構為 Apache Doris 帶來了高可用、極簡部署、橫向可擴展以及強大的實時分析性能等一系列核心特色。
隨著云時代的到來,無論是公有云、私有云還是 K8S 容器平臺,越來越多的企業(yè)都希望 Apache Doris 針對云計算這種新型基礎設施提供更加深度的適配,以便提供更加靈活強大的彈性能力。 在過去的一年,飛輪科技(SelectDB)技術團隊在基于 Apache Doris 內核研發(fā)全托管企業(yè)級云數(shù)倉產品的過程中,設計并實現(xiàn)了全新的云原生存算分離架構(即 SelectDB Cloud)。
基于云原生存算分離的架構,SelectDB Cloud 在此基礎上提供了多計算集群負載隔離和計算彈性擴縮容等功能。 秉持著“推動開源技術創(chuàng)新、繁榮開源社區(qū)生態(tài)”的首要目標,在 Apache Doris 2.0 即將發(fā)布之際,SelectDB 技術團隊正式宣布,將存算分離架構實現(xiàn)貢獻至 Apache Doris 社區(qū)。
這一工作預計將于 2023 年 10 月前后完成,屆時全部存算分離的代碼都將會提交到 Apache Doris 社區(qū)主干分支中。 當存算分離代碼合入 Apache Doris 社區(qū)后,Apache Doris 可以采用以下兩種模式之一運行:存算一體的部署模式和存算分離的部署模式。
在兩種模式下運行的 Apache Doris 將以不同的方式來存儲主數(shù)據(jù)。從用戶使用體驗上而言,絕大部分功能都是一致的,但是也會因為實現(xiàn)架構和部署模式的不同,帶來一些功能上的差異。下面我們將分別介紹兩種部署模式的核心特點和適用場景差異。
存算一體的分布式架構
存算一體架構,也是 Apache Doris 長久以來經(jīng)歷過數(shù)千家企業(yè)生產環(huán)境打磨、無論是性能亦或是易用性和穩(wěn)定性都最為成熟的 MPP 分布式架構,總體架構圖如下:
Apache Doris 存算一體架構
部署簡易
在存算一體模式下,Apache Doris 不需要依賴類似外部共享文件系統(tǒng)或者對象存儲,僅依賴物理服務器部署 FE 和 BE 兩個進程即可完成集群的搭建,可以從一個節(jié)點擴展到數(shù)百個節(jié)點。這種不依賴第三方組件的部署模式極大降低了 Apache Doris 的使用門檻,甚至一臺辦公筆記本就可以完成 Apache Doris 的部署。 部署簡單的同時,也擁有極簡的運維成本:
FE 和 BE 都支持橫向線性擴展,擴縮容過程中無需停服,可正常提供穩(wěn)定可靠的在線服務
數(shù)據(jù)多副本存儲,自身的分布式管理框架自動管理數(shù)據(jù)副本的分布、修復和均衡,擴縮容時數(shù)據(jù)副本會自動在節(jié)點間負載均衡,無需任何人工操作
因為存算一體架構依賴少,不需要依賴任何其他其他系統(tǒng),也增強了系統(tǒng)的穩(wěn)定性。而存算分離模式則需要依賴于共享的存儲系統(tǒng)。對于絕大多數(shù)企業(yè)來說,提供一個共享的存儲系統(tǒng)并非如此輕而易舉。依賴組件越多、任一組件的不穩(wěn)定都會導致整個系統(tǒng)的穩(wěn)定性受到影響。存算分離架構依賴共享存儲系統(tǒng),那么存儲系統(tǒng)的穩(wěn)定性和可用性、連接存儲系統(tǒng)和計算節(jié)點的網(wǎng)絡延遲以及穩(wěn)定性,都會對整個存算分離架構的穩(wěn)定性有著至關重要的影響。
性能優(yōu)異
在存算一體模式下,Apache Doris 執(zhí)行計算時,計算節(jié)點可直接訪問本地存儲數(shù)據(jù),充分利用機器的 IO、減少不必要的網(wǎng)絡開銷、獲得更極致的查詢性能。而存算分離模式下網(wǎng)絡傳輸帶寬和耗時往往會制約系統(tǒng)性能的發(fā)揮,因此即便是 Hadoop、Spark 這種一開始便采用存算分離模式的分布式框架,也會盡量將計算邏輯推送到數(shù)據(jù)所在的節(jié)點,以此來提升計算任務的執(zhí)行性能。
與此同時,存算一體模式對于謂詞下推(Predicate Pushdown)更加友好,將條件判斷邏輯更貼近數(shù)據(jù)源,減少查詢時掃描、傳輸和計算的數(shù)據(jù)量,更能發(fā)揮系統(tǒng)的查詢性能。相比存算分離模式,一般存儲系統(tǒng)都沒有執(zhí)行謂詞計算的能力,因此無法實現(xiàn)謂詞下推,繼而需要網(wǎng)絡將大量的數(shù)據(jù)傳輸至計算側。
冷熱分層
在 Apache Doris 2.0 版本中,也實現(xiàn)了存算一體模式下的冷熱數(shù)據(jù)分層。冷熱數(shù)據(jù)分層功能使 Apache Doris 可以將冷數(shù)據(jù)下沉到存儲成本更加低廉的對象存儲中,同時冷數(shù)據(jù)在對象存儲上的保存方式也從多副本變?yōu)閱胃北?,存儲成本進一步降至原先的三分之一。通過冷熱數(shù)據(jù)分層,使得 Apache Doris 集群配置不再需要隨著歷史數(shù)據(jù)量的堆積而不斷擴容機器。本質上,Apache Doris 2.0 版本的冷熱數(shù)據(jù)分層也是一種存算分離的形態(tài),只是實現(xiàn)了冷數(shù)據(jù)的存儲分離。
關于 Apache Doris 2.0 冷熱數(shù)據(jù)分層功能的詳細介紹,可以參考Apache Doris 冷熱分層技術如何實現(xiàn)存儲成本降低 70%?
分存算一體架構的適用場景
基于以上的原因,如果滿足下面任一條件,那么 Apache Doris 存算一體模式更加適合你:
簡單使用 Doris,想快速試用一下,或者開發(fā)和測試使用
沒有可靠的共享存儲可用,比如 HDFS、Ceph、對象存儲等
業(yè)務線獨立維護 Apache Doris,沒有專職 DBA 來維護 Doris 集群
不需要極致彈性擴縮容,不需要K8S容器化,不需要運行在公有云或者私有云上
存算分離的新架構
如上所述,如果存算一體模式有這么多優(yōu)勢,為何我們還需要提供存儲計算分離的新架構?核心動力來自于新興云計算基礎設施的成熟,無論是公有云、私有云以及基于 K8s 的容器平臺,云計算基礎設施的革新催生了新的需求。
云本身就是存儲計算分離的,其極致彈性帶來極大的成本經(jīng)濟優(yōu)勢:
計算資源的彈性:可以根據(jù)計算負載的需求,按需購買或者按需擴縮容計算節(jié)點,在滿足計算需求的情況下,使得成本達到最低;
存儲資源的低成本與彈性:對象存儲提供極其可靠的低成本存儲,并且按照使用容量計費,這樣可以讓數(shù)據(jù)存儲得更多更久。
即便是沒有使用云平臺的公司,也可以利用低成本的共享存儲系統(tǒng),在降低存儲成本和提高計算彈性的同時,還能獲得多計算集群等額外的優(yōu)質特性。
未來存算分離架構如下圖所示:
存算分離新架構
基于共享存儲系統(tǒng)的主數(shù)據(jù)存儲
在存算一體的架構下,數(shù)據(jù)主要存儲在計算節(jié)點上,即使使用了冷熱數(shù)據(jù)分層,熱數(shù)據(jù)依舊只在計算節(jié)點上存儲,計算節(jié)點需要依靠自身的多副本機制保證數(shù)據(jù)的可靠性。在存算分離架構下,計算節(jié)點不再存儲主數(shù)據(jù),而是將共享存儲層作為統(tǒng)一的數(shù)據(jù)主存儲空間,這將帶來如下收益:
上層的計算節(jié)點可以做到無狀態(tài),可以實現(xiàn)完全關機
更便捷的數(shù)據(jù)共享,不同的集群之間以及不同的倉庫可以便捷地進行數(shù)據(jù)共享
更簡易的數(shù)據(jù)備份與恢復,以及實現(xiàn)數(shù)據(jù)的 Time Travel
當然,成熟穩(wěn)定的 HDFS/對象存儲還為系統(tǒng)帶來極低的存儲成本和極高的數(shù)據(jù)可靠性,并且大大簡化上層計算節(jié)點的實現(xiàn)復雜度。
基于本地高速緩存的性能優(yōu)化
存算分離依賴從網(wǎng)絡上讀取存儲系統(tǒng)的數(shù)據(jù)來進行計算,在一定程度上會造成計算性能的下降,這也是相較于存算一體架構的主要劣勢。為了解決這一問題,可以在本地利用 SSD 提供高速緩存。
正如存算一體通過冷熱數(shù)據(jù)分層技術來大大緩解了存儲和計算必須同時擴展的問題,同樣在存算分離架構中引入計算節(jié)點本地高速緩存實際也是融合了存算一體的能力。這種本地高速緩存加上共享存儲系統(tǒng),我們也可以稱之為混合模式,無論是 Snowflake 還是 Redshift,實際上都是采用了這種方式來應對底層對象存儲系統(tǒng)性能不佳和網(wǎng)絡傳輸帶來的性能下降。
引入本地高速緩存后,系統(tǒng)會自動根據(jù) LRU 來緩存最新寫入和訪問數(shù)據(jù),當然也可以手動設定表的緩存策略。由于只是緩存,因此本地只存儲了單個副本,這樣大大提升了緩存利用率,相比存算一體模式可以降低 2/3 的高速存儲使用。
另外,在存算一體的模式下,每個 Tablet 有 3 個節(jié)點來存儲其 3 個數(shù)據(jù)副本,在三副本上都需要獨立進行數(shù)據(jù)合并(Compaction)計算。而在存算分離下,只有一個節(jié)點進行數(shù)據(jù)合并計算,這樣就可以降低 2/3 的數(shù)據(jù)合并計算量。
所以,通過引入本地高速緩存,不僅僅可以基本達到原來存算一體的性能,在有些情況下還會超越原來存算一體的性能。
多計算集群實現(xiàn)工作負載隔離
用戶通常希望對同一份數(shù)據(jù)上的分析負載進行隔離。例如,導入的工作負載與查詢的負載進行隔離,Adhoc 的大查詢負載和在線點查詢的負載間相互隔離,避免不同負載間相互資源搶占。 在 Apache Doris 2.0 版本中提供了工作負載組(Workload Group)的資源隔離方案。
這個方案是一種軟限隔離,可以為特定查詢或者特定用戶指定查詢優(yōu)先級,但是基于 Workload Group 的隔離無法達到存算分離模式下多計算集群的真正物理隔離性。 在存算分離模式下,提供了同一個倉庫多個物理計算集群的隔離方式。因為主數(shù)據(jù)存儲在共享的對象存儲上,因此用戶可以按需創(chuàng)建多個計算集群但共享同一份數(shù)據(jù)。計算集群之間是物理隔離的,可以獨立擴縮容,其計算節(jié)點的本地高速緩存都是隔離的,這樣保證了盡可能比較好的隔離性。
極致的彈性擴縮容
存儲與計算的分離,帶來的最大優(yōu)勢是存儲和計算可以獨立擴縮容。數(shù)據(jù)存儲在 HDFS 或對象存儲上,可以按需擴縮容。每個計算集群的計算節(jié)點,可以實現(xiàn)更加高效的彈性擴縮容,包括手動擴縮容、分時擴縮容以及自動停機。
存算分離特性演示
在此我們以 SelectDB Cloud 現(xiàn)有產品為例,來向大家演示全新存儲計算分離模式的特性和功能。 SelectDB Cloud 上新建倉庫 SelectDB Cloud 上多集群演示 SelectDB Cloud 上的手動擴縮容 SelectDB Cloud 上的分時擴縮容 SelectDB Cloud上的集群自動啟停
存算分離架構的適用場景
基于以上的介紹,毫無疑問也幫助我們進一步明晰了存算分離架構的適用場景,滿足下列任一條件,存算分離架構更適合你:
如果已經(jīng)使用公有云服務,那么存算分離架構絕對值得嘗試
擁有可靠的共享存儲系統(tǒng),比如 HDFS、Ceph、對象存儲等
需要極致彈性擴縮容,需要 K8S 容器化,需要運行在私有云上
有專職的團隊維護整個公司的數(shù)據(jù)倉庫平臺
數(shù)據(jù)湖分析
需要說明的是,針對不同的技術群體,存儲、計算與存算分離這些概念指代著不同的含義。 無論是 Apache Doris 的存算分離、還是 Snowflake 的存算分離,都是指單一系統(tǒng)內部存儲和計算模塊之間的分離。對于數(shù)據(jù)湖和湖倉一體(Lakehouse)的用戶,則是希望做到更加徹底的分離,即計算系統(tǒng)和存儲系統(tǒng)是兩個不同的產品。
存儲系統(tǒng)通過統(tǒng)一的開放表格式面向計算系統(tǒng)開放,而計算系統(tǒng)也可以開放地對接不同的底層存儲系統(tǒng)。 對于 Apache Doris 而言,無論是存算一體的架構還是存儲計算分離的架構,都支持湖倉一體這種新型 Lakehouse 系統(tǒng)形態(tài),即可以直接查詢湖存儲以及當前流行的各類開放表格式,包括 Hive、Iceberg 和 Hudi 等。
需要說明的是,Apache Doris 目前對數(shù)據(jù)湖的讀取已經(jīng)比較完備,包括支持 Snapshot 讀和 Time Travel,而后續(xù)還會進一步支持湖上數(shù)據(jù)的寫回,形成更加閉環(huán)的數(shù)據(jù)分析和流轉。 除了對數(shù)據(jù)湖的集成與分析,Apache Doris 目前還支持了對當前常見的關系型數(shù)據(jù)庫、對象存儲以及 HDFS 上 CSV、Parquet 等格式數(shù)據(jù)的直接查詢分析。
未來計劃
圍繞著存算分離,SelectDB 技術團隊會與 Apache Doris 社區(qū)未來一起推進下面相關方向的研發(fā): Workload Group 與多計算集群的融合
當前存算一體架構下的 Workload Group 與存算分離架構的多計算集群實際都是用來解決負載隔離的,一個偏軟限,一個是硬限,當前具體實現(xiàn)方式存在一定差異,后面將考慮二者融合,對用戶而言提供統(tǒng)一一致的使用體驗。
與外部數(shù)據(jù)湖更便捷的數(shù)據(jù)導入導出
外部數(shù)據(jù)湖的數(shù)據(jù)可以增量持續(xù)寫入內表,也可以使得內表的數(shù)據(jù)可以增量持續(xù)寫入到外表數(shù)據(jù)湖的格式。
通過提供更加便捷的外表導入內表的功能,Doris 可以持續(xù)加載最新的數(shù)據(jù)湖數(shù)據(jù),以便提供更高的數(shù)據(jù)計算性能。
通過提供更加便捷的內表導出外表的功能,使得內表的數(shù)據(jù)可以增量寫出為開放的外表格式。數(shù)據(jù)轉換為開放格式,一個是方便與相關大數(shù)據(jù)生態(tài)系統(tǒng)打通,另一個是打消企業(yè)對封閉數(shù)據(jù)格式被鎖定的擔憂。
實現(xiàn)共享的高速緩存,與計算節(jié)點進一步分離
當前存算分離模式下,高速緩存使用的是計算節(jié)點的本地磁盤,所以計算節(jié)點還不能做成真正的無狀態(tài)。當進行節(jié)點快速擴容的時候,需要考慮緩存的預熱均衡;當進行節(jié)點快速縮容的時候,需要考慮緩存的失效,以及向其他節(jié)點的緩存轉移。未來,我們將實現(xiàn)一種與計算節(jié)點分離的共享高速緩存,實現(xiàn)計算、緩存和對象存儲完全的分離,以便提供秒級擴縮容能力。 存算一體和存算分離兩種模式的融合
存算一體和存算分離的架構在部署之初就需要確定下來,而對于多數(shù)用戶都可能存在不同架構之間的轉化,因此后續(xù)也會不斷改進實現(xiàn)方式,讓兩種模式間可以更便捷地進行相互轉換,甚至逐步融合成一套架構。
審核編輯:劉清
-
存儲器
+關注
關注
38文章
7366瀏覽量
163099 -
計算機
+關注
關注
19文章
7174瀏覽量
87161 -
耦合器
+關注
關注
8文章
710瀏覽量
59473 -
MPP
+關注
關注
0文章
23瀏覽量
10543 -
HDFS
+關注
關注
1文章
30瀏覽量
9537
原文標題:Apache Doris巨大飛躍:存算分離新架構
文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論