當前位置:
首頁 > 最新 > 深入淺出分散式存儲性能優化方案

深入淺出分散式存儲性能優化方案

//本文轉載自"焱融雲「微信公眾號

Latency指標對於存儲系統性能的重要性

我們分析一套分散式存儲系統,主要從可靠性易用性性能三個維度著手分析。

可靠性:是存儲系統的基石,一款存儲系統至少需要提供99.99%的數據可靠性,數據丟失或者錯亂對於存儲系統是致命的,對大數據、雲存儲這樣大規模的分散式集群

易用性:是系統管理員最關心的問題,主要體現產品設計、故障處理和系統的擴展性

性能:如果可靠性是存儲系統的基石,那麼性能是存儲系統的靈魂,對一款優秀存儲系統,高可靠與高性能缺一不可

本文將從性能的維度分析分散式存儲系統,那麼如何分析一款分散式存儲系統的性能呢?

讓我們先了解評測存儲系統的主要參數:IO Type、IO Mode、IO Size和IO Concurrency;這些參數的值的不同組合對應了不同的業務模型,場景的模型如下表所示:

表一:常用業務類型

注1:SPC-1,主要衡量存儲系統在隨機小IO負荷下的IOPS,而SPC-2則主要衡量在各種高負荷連續讀寫應用場合下存儲系統的帶寬。

注2:SPC-1將測試區域抽象為ASU,ASU分為三類:ASU1臨時數據區域,ASU2用戶數據區域和ASU3日誌區域。

根據上表可知,由於業務類型是多種多樣的,很難做到全面覆蓋,通常使用三個性能指標:IOPS、Throughput和Latency來測評一款存儲系統。通常,大IO使用指標Throughput來評測系統性能;小IO使用IOPS來評測系統性能。那麼,性能指標:Latency的作用是什麼?並且Latency指標往往容易在性能評測中被忽視。在這裡介紹一下性能指標Latency的作用,用戶評測一款存儲系統之前,測試系統的IOPS和Throughput都很滿意,但上線後,反映業務系統卡頓,其核心便是Latency過高

下面引用一段網路博文:「即使供應商新型的存儲系統在60/40混合讀寫條件下能奇蹟般地實現1,000,000 4K隨機IOPS,我還是想知道它的延遲是多少。Dimitris Krekoukias在最近的一篇關於IOPS和延遲的博客中寫道:某供應商的系統能實現15000的IOPS,平均延遲為25ms。但是資料庫引擎還是提示高水平I/O等待時間。

一位批評家在Krekoukias"s Ruptured Monkey博客中詳細敘述了只有在延遲小於4ms的情況下,信用卡處理器才不會減慢防詐騙或提款授權等進程。」同樣,冬瓜哥在博文中講解了如何理解時延,這裡簡單複述下:「每秒執行 1000 個 IO ,平均每個 IO 的執行耗費了 1000ms/1000IOPS=1ms ,所以每個 IO 的平均時延就是 1ms,這有什麼不對呢?」上面的計算忽略了並發度這個因素。對於非同步、高並發的業務,這個存儲系統可以滿足業務需求。但基於OLTP和OLAP的業務一般是同步的且低並發的業務,這款存儲系統是否滿足業務需求,這仍是一個問號。

通過上面的資料我們得出:實現高性能的關鍵是高IOPS和低Latency的結合。當存儲系統提供更高的IOPS時,單IO的時延不應同步提高過多,否則將影響業務系統的性能。比如JetStress建議平均時延應小於20ms,最大值應小於100ms。

分散式存儲中的Latency問題

我們先看下傳統存儲的時延,在傳統存儲系統中,其IO時延有著天然的優勢。優勢一是物理IO路徑較短,通常為機頭控制器後端再掛載JBOD;優勢二是使用Raid5、RAID10或者RAID 2.0等數據保護演算法,這些演算法是基於Disk或者Chunk,比基於故障域的副本模式開銷小很多。

圖一:傳統SAN IO架構

圖二:Raid 2.0原理

在分散式存儲中,由多台或者上百台的伺服器組成,且使用副本模式。所以一個IO通過網路,在多個副本伺服器上處理,且每個副本都有數據一致性檢查演算法,這些操作都將增加IO的時延。

圖三:分散式集群IO流

從上圖可知,三副本的分散式存儲系統,一個寫IO,需要從寫Leader和寫兩個Follower完成後才返回給user;

分散式存儲的副本模式對性能的影響到底有多大呢?為了感性的認識,我們先看兩個性能對比:

圖四:在本地存儲跑OLTP業務

圖五:在分散式存儲上跑OLTP業務

根據上面兩圖的性能數據,分散式存儲的IO時延的確很高。

分散式存儲系統的另一個性能問題是IO的抖動,體現在時延上是平均時延與最小時延和最大時延偏離值很大,出現這個問題的主要原因是分布系統的架構原理與IO請求處理不當引起;比如,副本之間的強一致性,只要有一個副本響應稍慢,整個IO的時延將增加或者一致性演算法引起IO短暫堆積,IO都發送到相同的存儲節點。

焱融自研分散式存儲cache引擎

對於如何降低分散式存儲Latency,其實是一個系統又複雜的事情,牽一髮而動全身,讓我們先來看看阿里云云存儲和華為的快閃記憶體陣列都做了哪些工作:

阿里雲ESSD

硬體升級:伺服器、SSD、網路(40GB/s, 25GB/s)、網路交換機、RDMA協議

網路通信框架:Luna, RDMA+用戶態驅動+私有I/O協議

線程模型改進:用戶態驅動,加入co-routine協程,加run to completion模式

數據布局:採用追加寫,修改元數據模式(元數據記錄數據的位置)

更細緻的分層和抽象;針對不同的IO屬性,提供更定製化的策略模塊,滿足不同的IO Profile需求

華為快閃記憶體OceanStor Dorado V3

硬體優化,硬碟框採用12Gbps的SAS直連控制框模式;精簡NVMe SSD協議

對時延敏感的關鍵處理不被頻繁打斷、不被其他任務阻塞

處理器分組技術,將處理器中的各個核按照業務需求劃分成不同的分區,關鍵業務在各個分區上運行,不被打斷

為了保證請求的穩定低時延,讀請求和寫入cache的寫請求可以在存儲系統內優先擁有各種關鍵的處理資源,包括:cpu、內存、訪盤並發等;cache非同步刷盤的請求優先順序低

有效聚合,保證大塊順序寫入SSD,實現請求處理效率最優

冷熱數據分區,減少寫放大,提升性能

充分發揮SSD的垃圾回收機制,在擦除塊時減少數據搬移量,較少對SSD的性能和壽命的影響

等等。。。

可見通常提高性能,優化時延的主要方法概括起來有以下幾個方面:

1

硬體升級,諸如NVMe,RDMA

2

優化IO路徑,通信框架

3

優化每個模塊的處理時間

4

優化磁碟布局

5

增加數據緩存層

以NVMe為例,NVMe驅動層直接透過SCSI協議棧,由驅動層與通用塊層直接交互,以達到降低IO時延的目標,同時使用通用塊層的多隊列機制,進一步的提升性能。不過這種方式的弊端是對於客戶的成本上升較高。

圖七:通用存儲設備協議棧與NVMe協議棧

一般存儲廠商的通用有效方式是利用增加數據緩存層來降低延遲,即利用在存儲節點給多塊HDD配置一塊SSD,再使用開源BCache方案,此種方案是一種通用的經濟實惠解決方案。如下圖所示,不過這種方案對性能提升有限,主要原因還是IO路徑過長,分散式存儲核心層邏輯過於複雜,同時採用開源BCache方案也存在著很多問題諸如:BCache雖然開源,但如果出現問題,基本沒有維護的能力;BCache增加運維難度;BCache對成員盤的故障處理能力較弱。

圖八:後端緩存原理

焱融科技存儲研發團隊,根據多年的技術經驗及參考國內外廠商的設計思路,在最初設計焱融分散式存儲軟體時,針對如何提升性能降低IO延遲的方案設計上,自主設計實現了前後兩端的緩存引擎即在後端緩存的基礎上增加客戶端緩存層,分拆存儲核心層的部分功能,在網路層與存儲核心層之間實現一個分散式緩存讀寫層,在網路收到請求後,將數據寫入到緩存層中,實現分散式緩存讀寫,同時可保證數據的可靠性。整體設計思路如下:

圖九:分散式讀寫緩存

通過這種實現方式,焱融分散式存儲軟體在性能上相對其他只有後端緩存方案有著明顯的性能提升,在IOPS上提升近30%,能夠達到裸盤SSD性能的85%以上,延遲降低近3倍,具體對比數據如下:

圖十:性能比較

目前焱融研發團隊,根據現有設計的基礎,持續迭代,計劃在下個版本的產品release中整體cache引擎架構如下,即通過本地緩存讀、分散式緩存讀寫和後端緩存讀寫多層次的緩存,滿足不同業務對性能高且平穩的總體需求。在IO路徑上多層次的緩存,整個集群的IO將更加平穩,從IO處理的層面上降低IO波動。預計性能達到裸盤SSD 90%以上。

圖十一:分散式層級緩存

關於焱融雲

焱融雲聚集了IBM、華為、VMware等世界頂級IT公司以及阿里雲、百度雲、騰訊雲、金山雲等國內一流雲計算互聯網企業的技術精英,組成了強大的技術團隊,是一家以超融合技術為核心競爭力的高新技術企業,在分散式存儲等關鍵技術上擁有自主知識產權。焱融超融合系列產品已服務於金融、政府、製造業、互聯網等行業的眾多客戶。了解更多焱融科技信息,請訪問官網www.yanrongyun.com。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 高端存儲知識 的精彩文章:

備份、歸檔、複製、SRM等存儲管理軟體2017市場格局分析

TAG:高端存儲知識 |