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