1. 可擴展存儲系統結構
並當存儲與計算解耦後,存儲系統依賴高性能網絡獨立構建分布式存儲集群,以滿足海量數據的存儲需求。一方面,由於數據規模的高速動態增長以及對數據訪問性能的彈性擴展需求,存儲系統往往需要具備優秀的橫向擴展能力;另一方面,數據計算模式的變遷產生了大量的半結構化或非結構化數據,這類數據往往呈現格式多樣、大小差異巨大等特徵,甚至佔據主導地位,導致其存儲、組織與管理都非常困難。為了適應海量非結構化數據的存儲,同時提供良好的系統橫向擴展能力,目前業界廣泛採用鍵值格式進行存儲管理,而主流的系統架構主要基於日誌結構合併樹(LSM-tree),以滿足數據持久化、高寫入性能、支持範圍掃描等需求。基於LSM-tree的鍵值存儲架構,其核心特點是採用多層日誌結構,將數據以追加寫的方式單向逐層寫入,通過批量寫提供良好的寫入性能,同時對每層數據進行排序且每層容量按一定倍數遞增,以均衡數據寫入、數據查詢與範圍掃描的性能。
雖然基於LSM-tree的鍵值存儲比較適合非結構化數據的存儲與管理,並能提供良好的橫向擴展,但是仍有大量問題亟待解決。其一,由於多層結構以及層內排序的特點,鍵值系統往往面臨嚴重的讀寫放大問題,即數據查詢可能需要多層查找,數據寫入引起多次層間數據合併,因此,如何根據數據以及訪問的特徵,設計更高效的存儲結構與索引結構以減少讀寫放大問題,仍是目前的關注點之一,其挑戰與關鍵是在寫入性能、單點查詢性能、範圍查詢性能、存儲容量開銷等多維度之間進行較好的權衡。其二,在分布式場景下,範圍劃分與哈希劃分等不同的數據劃分方式往往導致了負載均衡與範圍查詢性能之間的矛盾,由於訪問的非均勻性導致熱點問題仍然普遍存在,而且鍵值數據的異構性、多層化的存儲結構等都導致熱點均衡更加困難,分布式技術的應用仍需要與鍵值存儲引擎有機結合。其三,當存儲規模擴大後,系統的高效管理、副本的彈性管理,甚至利用在線學習等技術實現自適應系統結構調整等,都是目前仍需進一步深入探索的問題。除此之外,隨著近年來非易失性內存、快閃記憶體等新型高性能存儲設備以及高速網卡的發展,如何設計相應的存儲結構並結合鍵值存儲特點,以充分發揮這些新型設備的性能,也是目前關注的熱點。
2. 彈性異構資源管理
存儲與計算分離進一步加深了存儲體系的層次結構,使得存儲資源的異構性更為突出,尤其是近年來隨著非易失性內存、快閃記憶體等新型存儲介質的發展,更進一步加深了存儲體系結構的層次。比如在與計算分離的存儲系統中,粗略劃分也至少包含磁碟、固態硬碟、非易失性內存(NVRAM)、動態隨機訪問內存(DRAM)等層級,即使是固態硬碟或非易失性內存,也會由於技術的不同,在容量、價格、性能、可靠性等維度存在多個更細分的層次,導致整個存儲集群的層次結構越來越深,資源的異構性越來越突出。因此,在設計存儲系統時需要均衡考量的因素也變得更多更複雜,不僅需要考慮異構資源條件下的存儲體系結構問題,而且還涉及異構資源的容量配比、數據遷移,以及如何根據訪問特徵與應用需求實現自適應調整,以期望在性能、可靠性、成本等多方面實現最優權衡。
除了資源異構性之外,資源的彈性分配與擴容也是存儲與計算分離框架下的關鍵問題。存儲與計算解耦後,存儲集群往往需要支持多用戶異構計算任務的存儲需求。首先,不同計算任務對不同存儲資源的需求差異巨大,如何在更細粒度上以高性價比的方式合理分配所需資源是存儲集群所必須考量的因素;其次,即使針對同一計算任務,在不同時期對資源的需求也差異顯著,尤其是對於生命期較長的計算,因此如何在細粒度層級上實現資源彈性分配與擴容,不僅可以更好地保證計算性能的穩定性,也能更好地提升存儲資源的復用效率、控制存儲成本,尤其是在容器計算或者無伺服器計算場景下至關重要。總之,如何更有效地結合多層級異構存儲資源的多維特徵、計算任務的需求、訪問模式以及資源需求的動態性,將是存儲與計算分離架構下存儲系統面臨的重點和難點問題,如何利用機器學習等手段實現異構資源的自適應彈性管理與調度,也是值得探索的思路之一。
3. 異構數據差異化管理
當前,大數據分析、機器學習等計算任務往往產生大量的臨時中間數據,其主要特徵有:(1)生命周期短,臨時中間數據往往在計算結束之後就失去了存在的意義,因此,其可靠性與持久化要求與傳統持久化數據截然不同;(2)數據大小差異巨大,小至幾十KB,大到幾百GB,相差若干數量級已是常態,這大大增加了存儲管理的難度;(3)規模巨大,無法全部放入內存,因此往往需要內外存數據的協同管理,以均衡訪問性能與存儲成本;(4)訪問性能要求高,鑑於臨時數據往往跟計算緊密相關,因此需要相應的存儲系統具有更高的吞吐與更低的延遲,否則極易阻塞計算。
鑑於臨時中間數據的獨有特性,需要專門針對該類型數據設計存儲與管理方式。在存儲與計算分離的架構下,持久化數據的存儲與計算已經解耦,因此,一種有效的系統架構是將臨時數據也解耦,並與持久化數據進行差異化管理,比如將臨時數據層作為持久化數據的緩存層進行管理。在此基礎上,設計針對臨時數據的可靠性機制、錯誤恢復機制、持久化機制等,以更好地滿足性能、成本、恢復時延等要求。值得一提的是,在該架構下,有效的緩存設計、網絡帶寬與時延的優化,以及數據訪問與計算的流水線設計等將變得至關重要,同時也是未來數據中心存儲系統所必須要考慮的關鍵問題。
4. 多層級緩存設計
將存儲與計算進行分離之後,尤其是將臨時數據與持久化數據也進行區分之後,整個存儲系統的層次勢必會變得更深。我們將面臨本地數據存儲(往往在計算節點的本地內存中),臨時數據存儲(分布式管理且跨網絡,甚至包括內存、快閃記憶體等多層次),遠端的持久化數據存儲(本身包括多種存儲設備、多個存儲層次),甚至還包括跨數據中心的遠端雲存儲(比如S3等)等問題,因此高效的多層級緩存設計對存儲系統的性能至關重要。緩存的效率受到多方面因素的影響,如計算產生的臨時數據大小,需要訪問的持久化數據的多少,以及不同層級的存儲容量配置等。而且,由於數據中心往往面臨來自多用戶的計算任務,在存儲計算分離架構下,緩存的設計還需要考慮用戶之間的隔離性與安全性等問題。總之,在存儲計算分離架構下,高效的緩存設計,尤其是多層級融合設計的緩存機制仍是未來需要繼續深入研究的問題。
5. 網絡與存儲的深度融合
隨著網絡設備和存儲介質技術的發展,網絡和存儲已經發生了深度融合,湧現出諸如內核旁路(例如,遠程直接內存訪問和用戶空間網絡技術)及硬體卸載(如TOE、SmartNICs)等解決方案。例如,HyperLoop為了減少CPU在存儲系統中的複製事務的參與,將關鍵路徑卸載到RDMA網卡上,並提供新的和通用的網卡卸載原語。這些原語可以在複製組中的所有節點上執行內存操作,同時保證ACD屬性而無須CPU參與。除此之外,在數據中心中由於可編程交換機具有一定的存儲能力,緩存可以卸載到其中,這樣會節省IO路徑上的傳播時間。另外也可以將Raft等一致性協議卸載到可編程交換機,從而避免消耗伺服器CPU資源。
儘管現在已經有諸多嘗試,但是網絡和存儲的融合仍然存在很多挑戰。目前,可編程網卡、可編程交換機和可編程固態硬碟(SSD)等設備的算力還較弱,可編程能力有限,不能處理過於複雜的邏輯,在高負載時,平均和尾部延遲仍然難以控制。此外,現有網絡和存儲設備所擁有的尋址空間不統一,當同一數據分布在不同設備上時,數據更新的時間差異會導致同一時間在不同設備上出現不同版本的數據,難以實現數據的訪問一致性。同時,當同一數據被不同設備訪問時,需要考慮讀寫互斥問題,合理控制被互斥鎖阻塞的設備尾延遲的增長。在對應用程式做融合時需要綜合應用負載特徵,決定在存儲及網絡上所放置的功能,並且權衡對平均和尾部延遲的影響。