關於雲數倉存算分離的15個問答

HashData發表於2023-03-03

儲存是資料的持久化載體,也是資料庫系統重要的基礎設施。高質量的儲存系統設計,對資料庫的效能有著至關重要的影響。

隨著雲端計算技術的發展,資料庫也開始擁抱雲原生時代,“存算分離”的概念逐漸為大家所熟知。


“存算分離”不僅能節約成本,還可以讓資源根據業務需求彈性伸縮。HashData為了提升系統的彈性和擴充套件性,計算叢集和持久化儲存嚴格實行物理分離:計算叢集由類似AWS EC2的虛擬機器組成,持久化儲存則使用物件儲存。


為了讓大家對存算分離分離有更全面的瞭解,HashData資料庫核心研發工程師劉曉宇與杉巖資料售前技術專家申國斌介紹了HashData在存算分離、物件儲存最佳化等方面的技術探索與實踐,並圍繞大家關注的問題進行了深度解答。

HashData利用雲端儲存作為資料持久儲存層,並與計算資源物理上分離、邏輯上整合。由於自身的高可用性和近乎無限的可擴充套件性,雲端儲存大大簡化了資料倉儲系統錯誤恢復、多維度擴縮容、備份恢復等流程,同時使得不同叢集間共享同一份資料、統一的資料儲存平臺成為可能。


1.相比本地化儲存,遠端訪問是否會帶來效能上的下降?

劉曉宇:遠端訪問一般來講會帶來效能的下降。通常磁碟的讀寫速度可以達到100-200M/秒,而網路頻寬通常達不到這樣高的速率。如果頻繁遠端操作,會對系統造成很大的影響。


HashData透過在計算節點和物件儲存中間增加快取層,可以大幅降低訪問物件儲存的頻率,緩解效能下降的問題。


傳統的MPP架構資料庫儲存、計算緊耦合,資料儲存在本地系統,儲存能力的擴充套件透過增加叢集節點實現,這樣就會導致計算資源的浪費,無法匹配業務的發展。


HashData使用的是物件儲存,獨立於計算節點。利用物件儲存技術,可以提供近乎無限的擴充套件能力,避免了傳統資料平臺基於成本考慮的歸檔需求和計算成本浪費。


透過測試可以看到,HashData在計算節點和物件儲存之間增加快取層之後,相比MPP架構,幾乎沒有效能上的損耗,同時計算量可以提升近5倍。

2.快取層設計理念是在後設資料叢集和物件儲存叢集之間,適度增加計算資源和快取層,具體是怎麼實現的?

劉曉宇:HashData的快取策略採用目前比較流行的LRU演算法,來實現熱點資料的識別和保留。LRU本質上是一個固定大小的佇列,對於需要頻繁訪問的資料,會放到佇列前面;對於不經常訪問的資料,會放在後面。隨著佇列慢慢的增加,最終經常訪問的資料會在最前面,不經常訪問的資料會在最後面。最終,不經常訪問的資料會被剔除掉。


同時,對於快取層遮蔽掉了所有遠端檔案操作。資料庫核心在訪問物件儲存的時候,對遠端操作不會有任何感知。


3.快取的最佳化物件包括哪些?

劉曉宇:HashData針對高併發、小檔案等場景做了大量的最佳化,進一步降低系統開銷,使遠端訪問的效能可以達到跟本地幾乎完全一樣。


針對物件儲存,HashData透過批次處理的方式對資料的查改刪進行最佳化,大幅提升了操作效率。


另外,HashData對資料的寫和讀做了很多的最佳化。比如企業業務場景上使用大檔案比較多,那麼我們採用分片上傳方式將大檔案傳輸到物件儲存上。對於每個上傳的檔案,HashData經過測試配置了一個更優的分片大小去做分片上傳,將檔案在物件儲存上合併。


HashData的快取系統採用按塊快取,做到了按需下載需要的資料,避免下載整個檔案。比如使用快取系統去讀取資料,將每個塊設定8M,對於64M的檔案會被切分為8個塊,如果使用者需要的資料分佈在其中的一個塊內,那麼我們資料庫在讀取資料時只需要取其中一個塊即可,不需要把整個資料全都下載下來,這樣做到了按需下載。


4.計算節點使用的是SSD嗎?

劉曉宇:目前大多數使用者使用的都是SSD。當然也有使用普通儲存。SSD讀寫速度遠遠優於普通儲存的效能。


5.透過網路獲取到資料是否會導致網路IO的壓力過大?

劉曉宇:網路IO壓力大有兩方面。一方面是物件儲存壓力過大。另一方面是叢集本身隨著主機和業務增多會更多地去訪問物件儲存,由此會帶來叢集整體和訪問物件儲存的網路開銷越來越大。


對於物件儲存壓力過大我們透過多bucket方式來解決。將檔案分散儲存到其他的bucket上以此來分流物件儲存上的壓力。


對於叢集因為業務增多出現網路壓力過大,我們採用動態演算法讓系統根據當前的壓力調整傳送請求的間隔。再者可以透過調整引數降低叢集網路請求次數。


6.快取需要多少容量?一批資料量需要多少快取?

劉曉宇:快取容量由本機配置來決定,根據不同場景去定製快取的大小。一般我們會配給系統的10%左右用於快取,但具體的容量還要根據系統的情況去做調整。


如果大檔案數量比較多,則快取越大越好。如果碎片化的小檔案比較多,快取容量只需要適量即可滿足需求。


7.快取也分是不是持久?

劉曉宇:正常情況下,快取是持久化儲存在磁碟內的。如果遇到叢集重啟,讀寫失敗或擴容等問題,作為快取的這些資料,都會存在的。當第二次發起的時候,會透過程式把這些持久化的資料重新載入起來。


8.後設資料快取是在本地儲存還是在雲端?

劉曉宇:目前,快取後設資料留在本地是一個比較好的選擇。如果後設資料上雲,可能面臨的情況會更多更復雜一些。


9.物件儲存的資料要根據業務進行切分嗎?還是在快取層切分?

劉曉宇:MPP寫到物件儲存上的資料不需要根據業務進行切分。快取系統是按照塊來快取的,所以可以根據使用者需要的資料按需取相應的資料塊即可。


10.透過網路如果請求沒有到達物件儲存應該怎麼辦?

劉曉宇:如果請求最終沒有到達物件儲存,會因為超時觸發重試機制重新再次傳送請求。如果物件儲存給來返回碼比如http code 500,可能當前物件儲存壓力過大,產品會做演算法上的調整延後傳送請求,然後再次重試傳送該請求。


11.如果後設資料快取在本地,怎麼能夠保證節點間一致性及節點故障的可靠性?

劉曉宇:後設資料快取到本地,是透過Foundationdb去控制,這部分有可靠的保證,而且快取是跟著事務去執行,HashData會有一套機制去保證快取的一致性。


12.儲存層結構是底層採用物件儲存,上層對資源進行分片,保障全資料型別的支援、擴充能力、高可用和高持久,能否舉例詳細說明?

劉曉宇:首先,因為我們透過快取層,構建了統一的儲存層,儲存層可以保證所有的計算叢集去訪問快取檔案,從一定程度上解決了資源孤島的問題。


此外,對於大量叢集訪問,HashData會根據計算叢集的規模進行分片儲存,其他節點可以也同時訪問這些檔案,互相不會影響。


在底層的儲存方面,HashData採用物件儲存,支援多叢集同時訪問一個檔案,整個架構能適配更多的雲。


同時,對於物件儲存,HashData做了大量的最佳化,包括對儲存資料的格式、多執行緒、動態調整資料包大小等,這些最佳化都可以對訪問儲存層帶來更高的效能。


13.磁碟故障後,物件儲存怎樣控制資料的恢復速度?

申國斌:我們的資料重構速度很快。很多人會有疑問,重構速度很快是否會影響業務。我們內建了多種不同的模式,包括自適應、業務優先、恢復優先等。根據不同的場景選擇不同的恢復模式,可以在確保業務執行的基礎上實現資料的儘快恢復。


14.基於物件儲存的底座構建雲數倉的好處是什麼,現在是主流趨勢嗎?

申國斌:存算分離的架構需要對儲存底座做選型。雲數倉的特點是規模很大,對擴充套件性的要求很高。我們的叢集可以擴充到4096個點,保證大規模資料存得下。此外,我們在併發訪問的支援、前端應用的呼叫等方面,由於介面間接,以及採用成本可控的分散式架構,相比塊儲存和NAS儲存有很大優勢,物件儲存因此是雲數倉的主流趨勢底座。


15.物件儲存相比於HDFS有什麼優勢?

申國斌:HDFS預設採用三副本,整體成本更高。物件可以採用糾刪方法,可以實現更高的利用率。HDFS適合儲存大檔案,更適合Hadoop的非結構化場景。數倉中小檔案的場景很多,不適合HDFS。數倉通常將HDFS作為資料匯入的入口,而不是儲存的底座。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70019410/viewspace-2938012/,如需轉載,請註明出處,否則將追究法律責任。

相關文章