數據湖存儲如何加速?你知道嗎?
你是一個程序員,你寫的代碼可能沒你想象的重要,廠里真正重要的其實是數據。不管是像數據表這樣的結構化數據,還是視頻這類非結構化數據,又或是 json 這樣的半結構化數據,都會被存到對象存儲中,不同廠商的對象存儲叫法不同,比如在騰訊云它叫 COS。它成本低,擴展性高,不少大廠用它來存儲海量數據,構成所謂的數據湖。
基于COS對象存儲構成數據湖
但數據不能光存著,還得被各種服務器讀寫。
那么問題就來了,對象存儲很好,但它在某些場景下會存在一些問題,比如 在小文件頻繁讀寫的場景下,吞吐量上不去,延時還會變高。
怎么解決這些問題呢?
我們可以找大廠抄作業!
沒有什么是加一層中間層不能解決的,如果有,那就再加一層。這次我們要加的中間層是GooseFS。
GooseFS是什么
GooseFS 是什么
GooseFS 是騰訊云在海量數據讀寫場景下,推出的一套高性能、高可用的數據加速服務。
在廠里,我們通常會基于對象存儲構建存儲集群,每一臺存儲數據的服務器就是一個存儲節點,這些存儲節點分布在同個城市的不同機房內,以實現彈性擴展和高可用容災。而負責讀取數據進行計算工作的服務器,則稱為計算節點,這些計算節點一般跟隨業務部署在指定的機房內。像這種存儲跟計算節點互相分離的架構模式,就是所謂的存算分離架構。
存算分離架構
GooseFS 本質上是計算節點和存儲節點之間的一個中間層。它通過一系列優化手段,將熱點數據調度到靠近計算端節點的位置,加速數據的獲取過程。我們來看下具體做了哪些優化。
GooseFS是中間層
計算端緩存
我們知道本地SSD盤的訪問速度比機械磁盤要快,而對象存儲的數據主要存放在機械磁盤上,為了提升計算節點獲取數據的性能,我們很容易想到可以將對象存儲的數據放到本地SSD盤上。巧了!騰訊的大佬們也是這么想的。GooseFS將計算節點的本地盤作為緩存介質,存放部分來自對象存儲的數據,這樣可以減少讀數據的延遲。
為了最大化利用計算節點的緩存資源,同時保證數據一致性,GooseFS 將這層緩存設計成了分布式緩存,它分為 Master 和 Worker 兩部分。Master 負責管理緩存文件元數據和集群狀態,而 Worker 則負責實際緩存數據。并且 Master 還能根據一定策略,調整 Worker 內部緩存數據的粒度大小和淘汰邏輯,提升緩存空間利用率。
計算節點加入基于SSD的一致性緩存
存儲端緩存
計算端緩存能夠帶來最極致的讀性能,但有些計算節點并沒有本地盤,但又需要這種分布式緩存機制,怎么辦呢?
在云計算數據中心里,有很多服務器類型:有些專注于CPU計算任務,有些側重于GPU計算能力,還有些專為高性能讀寫的SSD存儲設計,同時也提供了高性價比的HDD存儲選項。如果我們能將這些SSD存儲服務器集結起來,是不是可以構建一個分布式緩存系統呢?
GooseFS通過服務托管的能力,可以輕松駕馭這些SSD存儲集群,為計算節點提供存儲端的緩存支持。盡管數據從計算節點傳輸到這些SSD存儲集群的距離,相較于本地盤略遠,但這依然比傳統的機械磁盤速度要快得多。大量數據從COS對象存儲底層的機械磁盤先緩存到這些由GooseFS管理的SSD存儲集群中,通過硬件介質優化和數據本地性,能夠顯著提高整個系統的性能。
存儲節點中加入ssd作為緩存
元數據集群
我們知道文件是有文件名、大小、創建時間、權限這些屬性的,它們又叫元數據。對象存儲的設計,更側重于文件數據的持久性和可擴展性,而不是快速的元數據訪問。因此在高并發讀寫元數據的場景下會出現瓶頸。
元數據讀寫存在瓶頸
有解法嗎?
有!GooseFS自研了一套高性能元數據引擎,通過元數據分級管理、強一致性緩存和平行擴展等技術手段來提升元數據讀寫性能,并將元數據持久化到底層的企業級數據庫中,以此大幅提升了元數據處理的效率。
通過元數據引擎提升性能
多場景適配
通過這一套組合拳,GooseFS 補齊了對象存儲在小文件頻繁讀寫等 IO 場景下的劣勢,還提升了大文件和元數據讀寫的性能和吞吐量。作為計算節點和存儲節點的中間層,起到了"上承計算,下啟存儲"的作用,相比直接讀寫 COS 上的數據,GooseFS 能夠為上層計算節點帶來十倍以上的性能提升,生產效率拉滿。
除了對象存儲,還能支持 HDFS 等多種云存儲,完美適配多種生態應用場景。
GooseFS支持多種存儲
你可以從 GooseFS 看到很多工程架構設計的巧思,這么強悍,活該它入選了存儲國際頂會NAS 2024,成為業界關注的焦點。