阿里推出 PolarFS 分散式文件系統:將存儲與計算分開,提升雲資料庫性能
將存儲與計算分開來大有意義,對於部署的雲資料庫而言更是如此。為此,阿里巴巴推出了一種新開發的名為PolarFS的分散式文件系統,旨在確保低延遲和高可用性。這個文件系統與阿里雲上自己的PolarDB資料庫服務搭配使用。
像PolarDB這樣的雲資料庫服務(或者各大雲提供商的平台上的同類雲資料庫服務)擁有一個更具可擴展性且安全的基礎以便充分利用容器,並以快速I/O、檢查點和數據共享來支持後端存儲集群,從而充分發揮將存儲資源和計算資源分開來的這種做法具有的好處。
然而,由於面向資料庫服務的雲I/O領域的種種創新,很難把大幅加快讀寫速度的硬體創新整合起來,比如包括RDMA和NVMe。從性能的角度來看,阿里巴巴的架構值得關注,原因在於它利用了RDMA、NVMe和SPDK等方面最新的創新技術,因而提供了與固態硬碟(SSD)上的本地文件系統不相上下的寫入性能。
「PolarFS採用了新興的硬體和最先進的優化技術,比如操作系統旁路(OS bypass)和零拷貝(zero-copy),因而得以擁有與SSD上的本地文件系統相當的延遲。為了滿足資料庫應用的高IOPS要求,我們開發了一種新的共識協議ParallelRaft。ParallelRaft放寬了Raft嚴格按順序寫入的要求,又不犧牲存儲語義的一致性,從而提升了PolarFS並行寫入的性能。在高負載情況下,我們的方法可以將平均延遲縮短一半,將系統帶寬翻番。PolarFS在用戶空間中實施類似POSIX的介面,這讓POLARDB能夠僅需少許改動即可提升性能。」
擁有資料庫服務的雲提供商提供最新的硬體調優從而提供高性能可能聽起來合情合理,但實際操作起來不像聽起來那麼簡單。正如阿里巴巴的研究人員解釋的那樣,雲提供商使用實例存儲作為服務的基礎,使用本地SSD和高I/O虛擬機實例用於資料庫。但是這種方法限制了容量,規模上去後更是如此。
此外,由於資料庫需要自己處理複製,因此可靠性有所降低。最後,實例存儲在其核心使用通用文件系統,試圖採用RDMA或基於PCIe的SSD以提升性能時,內核與用戶空間之間的消息傳遞成本帶來了龐大的開銷。
阿里巴巴自己的PolarDB服務過去存在著上述限制。現在,PolarFS已準備好充分利用I/O方面新的提升,包括RDMA和NVMe SSD,並結合用戶空間中的輕量級網路堆棧和I/O堆棧,避免在內核中被鎖定。PolarFS API類似POSIX,原因在於它可以編譯到資料庫進程中,並且可以取代操作系統提供的文件系統介面,而I/O路徑繼續留在用戶空間中。
阿里巴巴團隊還特別指出,PolarFS數據平面的I/O模型旨在消除鎖定,並避免關鍵數據路徑上的上下文切換(context switch)。「還消除了所有不必要的內存副本,而直接內存訪問用於在主內存和RDMA網卡/ NVMe磁碟之間傳輸數據。」縮短延遲的效果在這環節來得尤為明顯。
阿里巴巴在開發過程中也不得不考慮到可靠性。其硬體調優的核心是用於解決共識的Raft協議。「部署在雲生產環境中的分散式文件系統通常有成千上萬台計算機。在這樣的龐大規模下,硬體或軟體錯誤引起的故障很常見。因此,需要一種共識協議來確保所有已提交的修改都不會在極端情況下丟失,而副本總是可以達成協議,變成比特方面一模一樣。」由於一開始就恪守這個理念,阿里巴巴開發出了ParallelRaft,確保這項功能在大規模環境下照樣正常使用。
PolarFS的延遲是4000個隨機寫入約48μs,這相當接近本地SSD上的Ext4的延遲(約10μs),而相比之下,CephFS的延遲卻長達約760μs。PolarFS的平均隨機寫入延遲比本地Ext4慢1.6倍到4.7倍,而CephFS的平均隨機寫入延遲比本地Ext4慢6.5倍到75倍,這意味著分散式PolarFS幾乎提供了與本地Ext4相同的性能。
關於性能結果和硬體調優的完整內容可以在這篇詳細的論文:


※相變內存中訓練神經網路壓倒GPU:性能高出100倍,節能勝過100倍
※這個漏洞影響過去二十年發布的所有 OpenSSH 版本!
TAG:雲頭條 |