StoneDB技術觀察 | 存算一體 VS 存算分離 ,IT發(fā)展下的技術迭代

image.png

存算分離,現(xiàn)在已經(jīng)成為云原生數(shù)據(jù)庫的標配, 開始大規(guī)模流行。存算分離后, 進一步使計算單元和存儲單元解耦,每個單元可以實現(xiàn)單獨的動態(tài)擴縮容,并且可以通過冗余配置,實現(xiàn)對單點故障的容忍度, 可以說是近年來數(shù)據(jù)庫市場上的一大進步。

作者 | 祁國輝

責編 | 韓 楠

縱觀歷史, 隨著IT技術的發(fā)展, 到底是存算一體還是存算分離, 其實反復過很多次,讓我們來簡單回顧一下,數(shù)據(jù)庫歷史上幾次大的架構變更。希望可以幫助大家按照技術發(fā)展脈絡,來加深對技術原理和用戶收益的理解。

01 第一次存算分離

最早版本的數(shù)據(jù)庫,即網(wǎng)狀數(shù)據(jù)庫管理系統(tǒng)(DBMS),由通用電氣公司1961年開發(fā)成功,其IDS(Integrated DataStore,集成數(shù)據(jù)存儲)是世界上第一個網(wǎng)狀DBMS,也是第一個DBMS。但是它只能運行于通用電氣的主機上,且數(shù)據(jù)庫只有一個文件,所有的表必須通過手工編碼生成、存儲和計算是緊密耦合在一起的。

image.png

這一點從它的名字就可以看出來,集成數(shù)據(jù)存儲(IntegratedData Store,IDS)。

而之后的很長時間,數(shù)據(jù)庫都是屬于高端應用,和各種大型機、中型機緊密綁定在一起,典型的IBM大型機((MainFrame),老牌IT人都熟悉的System/360, 通過編程訪問內部的各種數(shù)據(jù)庫, 后來大家熟悉的DB2, 也是最早運行在這個平臺上, 借助當時超強的計算能力, 在全球各種大型金融機構, 大型科研實驗室和大型企業(yè)獨領風騷, 占據(jù)了領導地位。

IBM當時在計算機領域無愧它“藍色巨人”的稱號, 除了響當當?shù)漠a(chǎn)品之外, 還有大量的精英在其中對最新科技進行研究, 對數(shù)據(jù)庫影響最大的幾位大神都在IBM供職, 包括提出關系型數(shù)據(jù)庫模型的Codd博士, 在此基礎上發(fā)揚光大的 C.J.Date和Jim Gray。可以說DB2 在整個數(shù)據(jù)庫歷史上扮演了一個很重要的承上啟下的作用。

image.png

當然也不得不提另外一位傳奇人物, 就是Oracle的創(chuàng)始人之一,Larry Ellison, 自1977年創(chuàng)立SDL, 1982年更名為Oracle, 然后迅速借助小型機的快速發(fā)展,迅速占領了商用數(shù)據(jù)庫的第一把交椅, 直至今日, DB Engine上Oracle仍占據(jù)榜首, 數(shù)十年未動搖。

因為小型機的快速發(fā)展,計算機市場出現(xiàn)群雄爭霸的局面, 而在Unix 系統(tǒng)開始大行其道之后, 市面上能夠提供unix主機的企業(yè)越來越多, 除了IBM, 還有HP、Compaq、富士通、Sun。而幾乎所有的Unix主機都會連接獨立的存儲服務器,來實現(xiàn)第一次的存儲和計算的分離。

image.png

在這次的存算分離當中, 最重要的支撐技術主要包括成熟的網(wǎng)絡組網(wǎng)技術,以及成熟的存儲網(wǎng)絡技術,當然Oracle自己的殺手級技術緩存融合,也起到很大的作用。

那么看一下用戶得到的好處在哪里?

? 增強了系統(tǒng)的伸縮性, 用戶可以獨立增加數(shù)據(jù)庫服務器來提升處理能力,增加存儲服務器來擴大數(shù)據(jù)庫容量。

? 增強了系統(tǒng)的容錯性,在這種分離架構下,可以通過冗余配置來防止任何一個環(huán)節(jié)出現(xiàn)單點故障, 增強了數(shù)據(jù)庫系統(tǒng)的持續(xù)服務能力。

內存融合技術 則是在兩個計算節(jié)點間 共享對方節(jié)點的內存數(shù)據(jù), 來減少磁盤讀取帶來的IO, 從而提高性能。

image.png

緩存融合技術允許不同RAC節(jié)點間 通過高速內網(wǎng)共享各節(jié)點數(shù)據(jù)庫實例內部緩存的數(shù)據(jù)塊,緩存的數(shù)據(jù)塊直接從一個節(jié)點的共享內存?zhèn)鬟f到其他節(jié)點的共享內存。這樣對于最新的數(shù)據(jù)塊, 就可以直接訪問其他節(jié)點的緩存, 而不必等待緩存寫入磁盤之后再從磁盤讀取, 從而使得多個節(jié)點之間可以高效率地協(xié)同工作。

為了降低存取遠端內存時的主機消耗, Oracle 還使用了專用的基于RDMA技術的RDS協(xié)議, 可以直接繞開CPU, 直接實現(xiàn)遠程內存的直接讀取,進一步提升訪問效率。

02 海量數(shù)據(jù)催生的存算一體

時間進入本世紀, 隨著用戶數(shù)據(jù)的快速膨脹, 用戶對海量數(shù)據(jù)的分析需求越來越明顯, 各行各業(yè)都在搭建自己的數(shù)據(jù)倉庫和商業(yè)智能系統(tǒng), 這時用戶面臨的最大挑戰(zhàn)第一是成本, 第二是性能。

因為傳統(tǒng)Unix主機和高端存儲價格高居不下, 所以想要搭建一個用于決策支持的數(shù)據(jù)倉庫系統(tǒng), 在硬件和軟件license上就是一筆不小的投資。另外可能耗費巨資搭建的系統(tǒng), 在做海量數(shù)據(jù)統(tǒng)計匯總的時候,比老黃牛還慢, 廠家分析過之后, 診斷結果:磁盤轉速不夠, 網(wǎng)絡傳輸不夠,CPU處理能力不夠。總而言之, 系統(tǒng)需要擴容。

image.png

究其根本原因, 還是在IO, 因為計算單元處理數(shù)據(jù), 但是它不存儲數(shù)據(jù), 所有的數(shù)據(jù)要從存儲中取, 而存儲在取數(shù)據(jù)的時候, 都是一個數(shù)據(jù)塊一個數(shù)據(jù)塊來取, 根本沒法判斷這個塊中哪些數(shù)據(jù)是計算單元需要的。在傳統(tǒng)行存儲的場景, 一個決策查詢可能只需要幾個字段, 但是必須把所有數(shù)據(jù)都拿到計算單元, 由計算單元處理/判斷之后再丟棄。

浪費了大量的IO, 另外由于計算單元內存不夠, 再大表連接的時候, 出現(xiàn)大量的臨時數(shù)據(jù), 這些臨時數(shù)據(jù)還需要在存儲中臨時存放, 需要的時候再拿出來, 這就又造成了大量的資源浪費。

所以這個時候就自然催生出新的架構, 普遍的原理是OLTP系統(tǒng)中每次操作都是小數(shù)據(jù)量, 這種場景是移動數(shù)據(jù)到計算;而OLAP系統(tǒng)中,每次都會涉及大量數(shù)據(jù)處理, 所以要減少網(wǎng)絡傳輸, 這時候應該是移動計算到數(shù)據(jù)。這個描述有點抽象, 但是大概意思就是海量數(shù)據(jù)首先在本地進行初步加工, 減少數(shù)據(jù)量之后,再去參與后繼計算,這樣IO和算力都得到節(jié)省, 自然性能就上去了。

這個時候的玩家, 包括來自大廠的TD 和DB2, 也包括后來居上的開源MPP產(chǎn)品GreenPlum,還有國內的老牌數(shù)據(jù)庫廠商南大通用Gbase, 以GP為例, 示例如下:

image.png

此階段技術核心關注在減少網(wǎng)絡間傳輸?shù)腎O, 一方面通過列式存儲, 來支持分析系統(tǒng)中按列統(tǒng)計的習慣, 每次查詢只需要取需要的列就可以, 減少無謂的IO, 同時利用各種索引技術, 加快數(shù)據(jù)定位和存取的效率。另外通過閃存技術的高速發(fā)展, 利用高速閃存還可以進一步提升系統(tǒng)的性能。

而之后盛行的Hadoop架構, 也是屬于利用本地磁盤通過搭建分布式文件系統(tǒng),來實現(xiàn)海量數(shù)據(jù)的處理。開源的Hadoop架構發(fā)展迅猛, 不斷有新的技術加入,大大催生了數(shù)據(jù)倉庫領域的技術發(fā)展。衍生出很多非常亮眼的技術, 比如Hive、Impala、Presto、Spark等等。

image.png

不過MPP雖然讓更多的人能夠以較低的成本搭建海量數(shù)據(jù)倉庫, 隨著應用的深入,也暴露出幾個問題:

? 計算存儲緊耦合, 提升了計算效能, 但是在系統(tǒng)容量擴容的時候, 需要對所有節(jié)點上的數(shù)據(jù)進行重新分布, 而這個時間相對較長, 有可能會影響業(yè)務, 所以在一些業(yè)務比較繁忙的客戶場景中, 一般智能用新建集群的方式來進行容量擴容。

? 因為開啟了大規(guī)模并行, 所有的任務都會啟動并行計算,啟動后計算任務會分布到集群中的每個節(jié)點, 那么集群并發(fā)能力的上限, 并不取決于集群大小, 而是取決于集群中配置最低的那一臺機器, 這臺機器能支持多少任務并行, 就代表整個集群能支持多少并行

? 配置彈性不足, 因為上述原因, 為了能夠支撐企業(yè)業(yè)務高峰期的業(yè)務, 必須把整個集群配置到能符合業(yè)務高峰期的規(guī)模, 而在平時, 機器閑置率就很高, 導致投資浪費。

03 云時代帶來的新一代存算分離

隨著公有云的快速發(fā)展, 按需付費的概念逐步深入人心,對大規(guī)模數(shù)據(jù)的分析也要求能做到按需供給,那么傳統(tǒng)MPP這種存算一體的緊耦合架構,就沒法滿足用戶的需求了。另外, 網(wǎng)絡技術和存儲技術也飛速發(fā)展, 這時就自然帶來新一代的云原生數(shù)據(jù)庫的存算分離架構, 把數(shù)據(jù)庫技術向前推進了一大步。

以業(yè)界最有名的Snowflake公司為例,創(chuàng)立Snowflake之前,Benoit Dageville和Thierry Cruanes在甲骨文做了十多年數(shù)據(jù)工程師,后來他們決定在云上創(chuàng)建數(shù)倉,聯(lián)合另外一位創(chuàng)始人Marcin ?ukowski, 共同創(chuàng)建了Snowflake。

為了更好地利用云上的資源,他們首先把存儲和計算再次分離,把數(shù)據(jù)以大量分區(qū)的方式存儲在共享的對象存儲中,存儲中的數(shù)據(jù)按列保存,而中間的計算層, 也通過無狀態(tài)的虛擬數(shù)據(jù)倉庫來動態(tài)拉起和銷毀, 來實現(xiàn)用戶不同workload的靈活調度和計費。目前已經(jīng)成為云原生數(shù)倉的標準范本。

下面簡單看一看Snowflake的技術架構:

image.png

Snowflake內核組件從底向上可以分為三個層次:

  1. 數(shù)據(jù)存儲層。Snowflake的數(shù)據(jù)存儲是構建在Amazon S3對象存儲上,主要用來存儲表數(shù)據(jù)和查詢結果。
  2. 計算層-虛擬倉庫。虛擬倉庫構建在Amazon EC2虛擬機組成的彈性集群之上,負責執(zhí)行用戶的查詢請求。
  3. 調度云服務層。云服務組件包括并發(fā)訪問控制、基礎設施管理、優(yōu)化器、事務管理、安全管理、元數(shù)據(jù)管理,其中元數(shù)據(jù)包含schema信息、表信息、權限認證信息、秘鑰、統(tǒng)計信息。

在這個架構下, 不同的workload可以隨時通過創(chuàng)建不同的虛擬倉庫來實現(xiàn)計算的靈活調配, 而每次計算的時候, 計算層通過網(wǎng)絡直接從存儲層獲得數(shù)據(jù),然后在虛擬數(shù)據(jù)倉庫中進行計算, 負載比較中的workload可以創(chuàng)建較大的虛擬倉庫, 而普通查詢可以創(chuàng)建較小的虛擬倉庫,用戶還可以通過調整虛擬倉庫中單節(jié)點CPU和節(jié)點個數(shù)來平衡計算復雜性和并發(fā)性。

虛擬倉庫之間,通過占用不同的硬件節(jié)點或者計算層中的資源調度來實現(xiàn)隔離。因為整個虛擬倉庫的無狀態(tài), 所以用戶可以隨時創(chuàng)建和銷毀虛擬倉庫, 當然也意味著計算層的可以通過增加EC2的臺數(shù),來實現(xiàn)計算層的橫向擴展。

image.png

同時, 由于存儲層也已經(jīng)完成了與計算層的解耦, 所以存儲層也可以隨時按需進行橫向擴展, 而無需停機做數(shù)據(jù)分布。

◆ 技術優(yōu)化手段

我們都知道, 存算分離架構,提高了系統(tǒng)的靈活性, 可以實現(xiàn)計算能力和存儲能力的動態(tài)擴縮容,無需按照業(yè)務峰值來搭建系統(tǒng), 但是也帶來了大量數(shù)據(jù)需要在存儲層和計算層之間傳輸?shù)膯栴}。

  • 網(wǎng)絡加速

好在,這么多年的存儲,網(wǎng)絡技術飛速發(fā)展, 能很好地滿足這些需求, 同時新一代云數(shù)倉也從不同的地方做出優(yōu)化,來提升效率。一般而言, 有兩個方向:

第一就是通過各種軟件的優(yōu)化,減少網(wǎng)絡傳輸;

第二,就是加大網(wǎng)絡吞吐能力,實現(xiàn)網(wǎng)絡提速。

目前的高速低延遲網(wǎng)絡,比如ROCE等數(shù)據(jù)傳輸技術, 數(shù)據(jù)中心內部的高速互聯(lián)網(wǎng)路等技術, 可以大大加快存儲層到計算層的數(shù)據(jù)傳輸效率。

  • 本地緩存

和Oracle的思路類似, 計算存儲分離架構中, 還有一個環(huán)節(jié)就是數(shù)據(jù)緩存,如果每次數(shù)據(jù)訪問都必須訪問磁盤, 那么系統(tǒng)性能就會大打折扣, 所以在snowflake的虛擬倉庫層, 也是會利用cache來進行數(shù)據(jù)的緩存。

  • 存儲優(yōu)化

另外,在目前大多數(shù)的云上數(shù)倉解決方案中, 都會更加強化Metadata的作用, 對于一些基本的sum、Max、min等操作, 可以直接從metadata中返回結果, 不需要產(chǎn)生磁盤IO。此外在存儲格式上, 類似ORC、Parquet等存儲模式,利用列存和SIMD技術, 實現(xiàn)一次IO,返回更多有效數(shù)據(jù);同時啟用多種索引技術, 使得查詢定位更加快捷。

04 思考與未來展望

展望將來, 云原生分布式數(shù)據(jù)庫的高速發(fā)展,必然帶來計算、存儲的分離,“存算分離”是當前網(wǎng)絡技術發(fā)展和社會經(jīng)濟進步的時代產(chǎn)物,是最適合當前時代發(fā)展需求的一種架構。擁抱云原生,按需付費的云數(shù)倉模式會持續(xù)走強,而在中國,也會走出公有云、私有云共同繁榮的未來。

StoneDB 2.0 云原生分布式實時 HTAP 架構詳細設計以 RFC 形式持續(xù)進行,歡迎大家關注我們最新進展,更歡迎給我們開源協(xié)作的模式和方法提出改進意見,一起通過開源的方式共建 StoneDB ~

Github開源倉庫

https://github.com/stoneatom/stonedb/issues/436

StoneDB 開源倉庫

https://github.com/stoneatom/stonedb

存算分離,現(xiàn)在已經(jīng)成為云原生數(shù)據(jù)庫的標配, 開始大規(guī)模流行。存算分離后, 進一步使計算單元和存儲單元解耦,每個單元可以實現(xiàn)單獨的動態(tài)擴縮容,并且可以通過冗余配置,實現(xiàn)對單點故障的容忍度, 可以說是近年來數(shù)據(jù)庫市場上的一大進步。

作者 | 祁國輝

責編 | 韓 楠

縱觀歷史, 隨著IT技術的發(fā)展, 到底是存算一體還是存算分離, 其實反復過很多次,讓我們來簡單回顧一下,數(shù)據(jù)庫歷史上幾次大的架構變更。希望可以幫助大家按照技術發(fā)展脈絡,來加深對技術原理和用戶收益的理解。

[圖片上傳失敗...(image-98afd3-1692684654224)]

第一次存算分離

最早版本的數(shù)據(jù)庫,即網(wǎng)狀數(shù)據(jù)庫管理系統(tǒng)(DBMS),由通用電氣公司1961年開發(fā)成功,其IDS(Integrated DataStore,集成數(shù)據(jù)存儲)是世界上第一個網(wǎng)狀DBMS,也是第一個DBMS。但是它只能運行于通用電氣的主機上,且數(shù)據(jù)庫只有一個文件,所有的表必須通過手工編碼生成、存儲和計算是緊密耦合在一起的。

[圖片上傳失敗...(image-73f8b-1692684654224)]

這一點從它的名字就可以看出來,集成數(shù)據(jù)存儲(IntegratedData Store,IDS)。

而之后的很長時間,數(shù)據(jù)庫都是屬于高端應用,和各種大型機、中型機緊密綁定在一起,典型的IBM大型機((MainFrame),老牌IT人都熟悉的System/360, 通過編程訪問內部的各種數(shù)據(jù)庫, 后來大家熟悉的DB2, 也是最早運行在這個平臺上, 借助當時超強的計算能力, 在全球各種大型金融機構, 大型科研實驗室和大型企業(yè)獨領風騷, 占據(jù)了領導地位。

IBM當時在計算機領域無愧它“藍色巨人”的稱號, 除了響當當?shù)漠a(chǎn)品之外, 還有大量的精英在其中對最新科技進行研究, 對數(shù)據(jù)庫影響最大的幾位大神都在IBM供職, 包括提出關系型數(shù)據(jù)庫模型的Codd博士, 在此基礎上發(fā)揚光大的 C.J.Date和Jim Gray。可以說DB2 在整個數(shù)據(jù)庫歷史上扮演了一個很重要的承上啟下的作用。

[圖片上傳失敗...(image-365b7c-1692684654224)]

當然也不得不提另外一位傳奇人物, 就是Oracle的創(chuàng)始人之一,Larry Ellison, 自1977年創(chuàng)立SDL, 1982年更名為Oracle, 然后迅速借助小型機的快速發(fā)展,迅速占領了商用數(shù)據(jù)庫的第一把交椅, 直至今日, DB Engine上Oracle仍占據(jù)榜首, 數(shù)十年未動搖。

因為小型機的快速發(fā)展,計算機市場出現(xiàn)群雄爭霸的局面, 而在Unix 系統(tǒng)開始大行其道之后, 市面上能夠提供unix主機的企業(yè)越來越多, 除了IBM, 還有HP、Compaq、富士通、Sun。而幾乎所有的Unix主機都會連接獨立的存儲服務器,來實現(xiàn)第一次的存儲和計算的分離。

[圖片上傳失敗...(image-8e74d8-1692684654224)]

在這次的存算分離當中, 最重要的支撐技術主要包括成熟的網(wǎng)絡組網(wǎng)技術,以及成熟的存儲網(wǎng)絡技術,當然Oracle自己的殺手級技術緩存融合,也起到很大的作用。

那么看一下用戶得到的好處在哪里?

? 增強了系統(tǒng)的伸縮性, 用戶可以獨立增加數(shù)據(jù)庫服務器來提升處理能力,增加存儲服務器來擴大數(shù)據(jù)庫容量。

? 增強了系統(tǒng)的容錯性,在這種分離架構下,可以通過冗余配置來防止任何一個環(huán)節(jié)出現(xiàn)單點故障, 增強了數(shù)據(jù)庫系統(tǒng)的持續(xù)服務能力。

內存融合技術 則是在兩個計算節(jié)點間 共享對方節(jié)點的內存數(shù)據(jù), 來減少磁盤讀取帶來的IO, 從而提高性能。

[圖片上傳失敗...(image-8fc7f2-1692684654224)]

緩存融合技術允許不同RAC節(jié)點間 通過高速內網(wǎng)共享各節(jié)點數(shù)據(jù)庫實例內部緩存的數(shù)據(jù)塊,緩存的數(shù)據(jù)塊直接從一個節(jié)點的共享內存?zhèn)鬟f到其他節(jié)點的共享內存。這樣對于最新的數(shù)據(jù)塊, 就可以直接訪問其他節(jié)點的緩存, 而不必等待緩存寫入磁盤之后再從磁盤讀取, 從而使得多個節(jié)點之間可以高效率地協(xié)同工作。

為了降低存取遠端內存時的主機消耗, Oracle 還使用了專用的基于RDMA技術的RDS協(xié)議, 可以直接繞開CPU, 直接實現(xiàn)遠程內存的直接讀取,進一步提升訪問效率。

[圖片上傳失敗...(image-5122fa-1692684654224)]

海量數(shù)據(jù)催生的存算一體

時間進入本世紀, 隨著用戶數(shù)據(jù)的快速膨脹, 用戶對海量數(shù)據(jù)的分析需求越來越明顯, 各行各業(yè)都在搭建自己的數(shù)據(jù)倉庫和商業(yè)智能系統(tǒng), 這時用戶面臨的最大挑戰(zhàn)第一是成本, 第二是性能。

因為傳統(tǒng)Unix主機和高端存儲價格高居不下, 所以想要搭建一個用于決策支持的數(shù)據(jù)倉庫系統(tǒng), 在硬件和軟件license上就是一筆不小的投資。另外可能耗費巨資搭建的系統(tǒng), 在做海量數(shù)據(jù)統(tǒng)計匯總的時候,比老黃牛還慢, 廠家分析過之后, 診斷結果:磁盤轉速不夠, 網(wǎng)絡傳輸不夠,CPU處理能力不夠??偠灾?, 系統(tǒng)需要擴容。

[圖片上傳失敗...(image-97c66b-1692684654224)]

究其根本原因, 還是在IO, 因為計算單元處理數(shù)據(jù), 但是它不存儲數(shù)據(jù), 所有的數(shù)據(jù)要從存儲中取, 而存儲在取數(shù)據(jù)的時候, 都是一個數(shù)據(jù)塊一個數(shù)據(jù)塊來取, 根本沒法判斷這個塊中哪些數(shù)據(jù)是計算單元需要的。在傳統(tǒng)行存儲的場景, 一個決策查詢可能只需要幾個字段, 但是必須把所有數(shù)據(jù)都拿到計算單元, 由計算單元處理/判斷之后再丟棄。

浪費了大量的IO, 另外由于計算單元內存不夠, 再大表連接的時候, 出現(xiàn)大量的臨時數(shù)據(jù), 這些臨時數(shù)據(jù)還需要在存儲中臨時存放, 需要的時候再拿出來, 這就又造成了大量的資源浪費。

所以這個時候就自然催生出新的架構, 普遍的原理是OLTP系統(tǒng)中每次操作都是小數(shù)據(jù)量, 這種場景是移動數(shù)據(jù)到計算;而OLAP系統(tǒng)中,每次都會涉及大量數(shù)據(jù)處理, 所以要減少網(wǎng)絡傳輸, 這時候應該是移動計算到數(shù)據(jù)。這個描述有點抽象, 但是大概意思就是海量數(shù)據(jù)首先在本地進行初步加工, 減少數(shù)據(jù)量之后,再去參與后繼計算,這樣IO和算力都得到節(jié)省, 自然性能就上去了。

這個時候的玩家, 包括來自大廠的TD 和DB2, 也包括后來居上的開源MPP產(chǎn)品GreenPlum,還有國內的老牌數(shù)據(jù)庫廠商南大通用Gbase, 以GP為例, 示例如下:

[圖片上傳失敗...(image-a424c8-1692684654223)]

此階段技術核心關注在減少網(wǎng)絡間傳輸?shù)腎O, 一方面通過列式存儲, 來支持分析系統(tǒng)中按列統(tǒng)計的習慣, 每次查詢只需要取需要的列就可以, 減少無謂的IO, 同時利用各種索引技術, 加快數(shù)據(jù)定位和存取的效率。另外通過閃存技術的高速發(fā)展, 利用高速閃存還可以進一步提升系統(tǒng)的性能。

而之后盛行的Hadoop架構, 也是屬于利用本地磁盤通過搭建分布式文件系統(tǒng),來實現(xiàn)海量數(shù)據(jù)的處理。開源的Hadoop架構發(fā)展迅猛, 不斷有新的技術加入,大大催生了數(shù)據(jù)倉庫領域的技術發(fā)展。衍生出很多非常亮眼的技術, 比如Hive、Impala、Presto、Spark等等。

[圖片上傳失敗...(image-8c239f-1692684654223)]

不過MPP雖然讓更多的人能夠以較低的成本搭建海量數(shù)據(jù)倉庫, 隨著應用的深入,也暴露出幾個問題:

? 計算存儲緊耦合, 提升了計算效能, 但是在系統(tǒng)容量擴容的時候, 需要對所有節(jié)點上的數(shù)據(jù)進行重新分布, 而這個時間相對較長, 有可能會影響業(yè)務, 所以在一些業(yè)務比較繁忙的客戶場景中, 一般智能用新建集群的方式來進行容量擴容。

? 因為開啟了大規(guī)模并行, 所有的任務都會啟動并行計算,啟動后計算任務會分布到集群中的每個節(jié)點, 那么集群并發(fā)能力的上限, 并不取決于集群大小, 而是取決于集群中配置最低的那一臺機器, 這臺機器能支持多少任務并行, 就代表整個集群能支持多少并行

? 配置彈性不足, 因為上述原因, 為了能夠支撐企業(yè)業(yè)務高峰期的業(yè)務, 必須把整個集群配置到能符合業(yè)務高峰期的規(guī)模, 而在平時, 機器閑置率就很高, 導致投資浪費。

[圖片上傳失敗...(image-1202ca-1692684654223)]

云時代帶來的新一代存算分離

隨著公有云的快速發(fā)展, 按需付費的概念逐步深入人心,對大規(guī)模數(shù)據(jù)的分析也要求能做到按需供給,那么傳統(tǒng)MPP這種存算一體的緊耦合架構,就沒法滿足用戶的需求了。另外, 網(wǎng)絡技術和存儲技術也飛速發(fā)展, 這時就自然帶來新一代的云原生數(shù)據(jù)庫的存算分離架構, 把數(shù)據(jù)庫技術向前推進了一大步。

以業(yè)界最有名的Snowflake公司為例,創(chuàng)立Snowflake之前,Benoit Dageville和Thierry Cruanes在甲骨文做了十多年數(shù)據(jù)工程師,后來他們決定在云上創(chuàng)建數(shù)倉,聯(lián)合另外一位創(chuàng)始人Marcin ?ukowski, 共同創(chuàng)建了Snowflake。

為了更好地利用云上的資源,他們首先把存儲和計算再次分離,把數(shù)據(jù)以大量分區(qū)的方式存儲在共享的對象存儲中,存儲中的數(shù)據(jù)按列保存,而中間的計算層, 也通過無狀態(tài)的虛擬數(shù)據(jù)倉庫來動態(tài)拉起和銷毀, 來實現(xiàn)用戶不同workload的靈活調度和計費。目前已經(jīng)成為云原生數(shù)倉的標準范本。

下面簡單看一看Snowflake的技術架構:

[圖片上傳失敗...(image-ee1a7-1692684654223)]

Snowflake內核組件從底向上可以分為三個層次:

  1. 數(shù)據(jù)存儲層。Snowflake的數(shù)據(jù)存儲是構建在Amazon S3對象存儲上,主要用來存儲表數(shù)據(jù)和查詢結果。
  2. 計算層-虛擬倉庫。虛擬倉庫構建在Amazon EC2虛擬機組成的彈性集群之上,負責執(zhí)行用戶的查詢請求。
  3. 調度云服務層。云服務組件包括并發(fā)訪問控制、基礎設施管理、優(yōu)化器、事務管理、安全管理、元數(shù)據(jù)管理,其中元數(shù)據(jù)包含schema信息、表信息、權限認證信息、秘鑰、統(tǒng)計信息。

在這個架構下, 不同的workload可以隨時通過創(chuàng)建不同的虛擬倉庫來實現(xiàn)計算的靈活調配, 而每次計算的時候, 計算層通過網(wǎng)絡直接從存儲層獲得數(shù)據(jù),然后在虛擬數(shù)據(jù)倉庫中進行計算, 負載比較中的workload可以創(chuàng)建較大的虛擬倉庫, 而普通查詢可以創(chuàng)建較小的虛擬倉庫,用戶還可以通過調整虛擬倉庫中單節(jié)點CPU和節(jié)點個數(shù)來平衡計算復雜性和并發(fā)性。

虛擬倉庫之間,通過占用不同的硬件節(jié)點或者計算層中的資源調度來實現(xiàn)隔離。因為整個虛擬倉庫的無狀態(tài), 所以用戶可以隨時創(chuàng)建和銷毀虛擬倉庫, 當然也意味著計算層的可以通過增加EC2的臺數(shù),來實現(xiàn)計算層的橫向擴展。

同時, 由于存儲層也已經(jīng)完成了與計算層的解耦, 所以存儲層也可以隨時按需進行橫向擴展, 而無需停機做數(shù)據(jù)分布。

◆ 技術優(yōu)化手段

我們都知道, 存算分離架構,提高了系統(tǒng)的靈活性, 可以實現(xiàn)計算能力和存儲能力的動態(tài)擴縮容,無需按照業(yè)務峰值來搭建系統(tǒng), 但是也帶來了大量數(shù)據(jù)需要在存儲層和計算層之間傳輸?shù)膯栴}。

  • 網(wǎng)絡加速

好在,這么多年的存儲,網(wǎng)絡技術飛速發(fā)展, 能很好地滿足這些需求, 同時新一代云數(shù)倉也從不同的地方做出優(yōu)化,來提升效率。一般而言, 有兩個方向:

第一就是通過各種軟件的優(yōu)化,減少網(wǎng)絡傳輸;

第二,就是加大網(wǎng)絡吞吐能力,實現(xiàn)網(wǎng)絡提速。

目前的高速低延遲網(wǎng)絡,比如ROCE等數(shù)據(jù)傳輸技術, 數(shù)據(jù)中心內部的高速互聯(lián)網(wǎng)路等技術, 可以大大加快存儲層到計算層的數(shù)據(jù)傳輸效率。

  • 本地緩存

和Oracle的思路類似, 計算存儲分離架構中, 還有一個環(huán)節(jié)就是數(shù)據(jù)緩存,如果每次數(shù)據(jù)訪問都必須訪問磁盤, 那么系統(tǒng)性能就會大打折扣, 所以在snowflake的虛擬倉庫層, 也是會利用cache來進行數(shù)據(jù)的緩存。

  • 存儲優(yōu)化

另外,在目前大多數(shù)的云上數(shù)倉解決方案中, 都會更加強化Metadata的作用, 對于一些基本的sum、Max、min等操作, 可以直接從metadata中返回結果, 不需要產(chǎn)生磁盤IO。此外在存儲格式上, 類似ORC、Parquet等存儲模式,利用列存和SIMD技術, 實現(xiàn)一次IO,返回更多有效數(shù)據(jù);同時啟用多種索引技術, 使得查詢定位更加快捷。

[圖片上傳失敗...(image-854abc-1692684654223)]

思考與未來展望

展望將來, 云原生分布式數(shù)據(jù)庫的高速發(fā)展,必然帶來計算、存儲的分離,“存算分離”是當前網(wǎng)絡技術發(fā)展和社會經(jīng)濟進步的時代產(chǎn)物,是最適合當前時代發(fā)展需求的一種架構。擁抱云原生,按需付費的云數(shù)倉模式會持續(xù)走強,而在中國,也會走出公有云、私有云共同繁榮的未來。

StoneDB 2.0 云原生分布式實時 HTAP 架構詳細設計以 RFC 形式持續(xù)進行,歡迎大家關注我們最新進展,更歡迎給我們開源協(xié)作的模式和方法提出改進意見,一起通過開源的方式共建 StoneDB ~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容