存儲系統的 80/20 法則
80/20 法則通常被認為是源于意大利經濟學家維爾弗雷多·帕累托。帕累托出生于1848年,他是(至少被認為是)占領運動的早期成員之一。他發現意大利國家財富的 80%是掌握在幾乎少于20%的人口手中的。由此發散開來看,80/20法則在其他方面的應用同樣值得注意,也是很有趣的:因為帕累托觀察發現他的園子里的80%的豌豆產自于20%的作物上(他似乎更喜歡數豌豆而不是其他豆子,哈哈)。無論如何,帕累托是不相信均勻分布的理論的。
帕累托原則,以及由此而來的統計學觀點“帕累托分布”被看作是統計學冪率的一個實例,它在理解存儲器訪問模式上也有出人意料的相關性。這就是為什么應用負載、訪問磁盤的問題更接近于帕累托分布而不是均勻的隨機分布:即大部分的I/O請求訪問少量的熱門數據,而大量的冷門數據的訪問頻率遠低于此。
我們的系統是由冷數據和熱數據混合組成的,這是一個眾所周知的事實。混合介質存儲系統技術引起了熱烈的爭議,它也被應用于為非死book這種規模的應用程序設計存儲系統。問題就在這里:通過給數據分配不均等的資源可以給類似帕累托分布的結構更好的支持。使用多種存儲介質來代替同介質存儲系統,這樣的分配就可以讓我們從那些不經常訪問的數據處奪來資源補貼給那些經常被訪問的數據。
對帕累托原則的誤解導致了構建和度量存儲系統時的諸多混亂。例如有些閃存芯片供應商堅持認為在單一、同介質的閃存芯片上構建完全基于閃存的存儲系統就能很好的滿足工作負荷的要求。從這個角度來看,同介質純閃存的系統還是高效的“共產主義”存儲呢。他們理想化的決定投資這種給所有數據分配均等資源的方案,這導致了資源層面的開支與數據訪問層面的開支嚴重不對等,哎,還是在這里多關注一些吧。
讓我們看一下真實的工作數據
為了解釋存儲的工作負載數據到底有多么的不一致,我們來看一組真實的數據。我們最近對11個開發者桌面存儲數據進行了為期一年的跟蹤記錄。隨著時間的推移,對這些數據集的分析變得很有趣,因為它包含了一個很長時間段內的大量數據:存儲的軌跡記錄,比如 SNIA保存的數據就非常的小(一天內的總小時)或者精確度也很低。總的來說,為期12個月的跟蹤記錄了大概76億次的IO操作和在5TB存儲數據上進行的超過28TB傳輸量。
我想通過快速的總結這些數據,指出一些有趣的東西,獲取能對你的思考如何規劃你的數據存儲有些幫助。
上面第一個圖表,顯示的是所有存儲數據在結束trace時的時間。5.1TB的數據被存儲在11個桌面,3.1TB的數據在整整一年中沒有被訪問。因此,可以通過一整年都沒有被改變數據來決定那些冷數據被存儲在哪個位置。
在另一方面,我們看到僅有627GB,或者大約21%的數據有在一個月內被訪問。在更短的時間段里,我們看到類似的級數增長。這個初始容量/時間分析,僅僅是用于驗證我們對于訪問分布的假設,那么,現在讓我們看一個更有趣的現象...
32 GB 4.5 TB (35%) 64 GB 5.9 TB (46%) 128 GB 8.0 TB (62%) 256 GB 10.7 TB (84%) 512 GB 12.6 TB (98%) 1 TB 12.8 TB 緩沖大小... ...對應的請求量.
如上圖所示,我把一年來實際的訪問量同逐漸遞增的“熱門”數據進度條對應起來。通過上圖,我們對一年來的訪問數據有了兩個方面的新認知。第一個認知是:這張圖羅列出了所訪問的數據量,通過它我們可以計算出命中率。如果使用“最近最少訪問”(LRU)模型作為填充高速內存方法,那么我們就可以推斷圖中上半部分(即緩沖)所提供的請求率是多少。如果你把鼠標滾動到上圖中,你就能看到命中率是怎樣隨著系統中高速內存的增加而增長的。
第二個認知是:通過這張圖,我們可以計算出數據的一般性訪問成本。不是推斷每GB存儲上我們所花費的費用,而是看看純粹訪問所花費的費用。我完全隨意地選擇了最小緩沖的大小,即以32GB為高速緩存的最小單位,此時我計算出每訪問1GB的數據所花費為1美元。為了提高命中率,我們不斷地增加高速存儲的數量,現在我們看看這種情況下會出現怎樣的情形。為了提高命中率,你不得不一而再再而三成倍地增加高速緩沖的時候,你會發現實際的數據訪問量卻在相對的減少。因此,你就會很容易地得出訪問數據的成本將會更貴。在我們的例子里,要實現100%的命中率所花費的金錢是我們最初使用最小高速緩存實現35%命中率所花費的11倍多。
確定進行不同投入
現在,我們要弄清楚我上面所討論的事情:我討論的不是你應當滿足35%的命中率。相反,我討論的是:你花費在訪問存儲條尾部的資金--即花費在提高根本就沒有任何訪問的3.1TB性能方面的資金-可能沒有花費到正確的地方。我認為資金花費在提高較熱門數據訪問性能方面會更好一些。
這就是近來我在存儲討論日的第六期或多或少提到的,同時在Coho office的一系列生動的博客日志中提出來的論點。我還說明了當今存儲技術方面正在發生的某些顯著的技術革新,尤其是現在三種大量使用的固態存儲的連接方式(SATA/SAS SSDs,PCIe/NVMe和NVDIMM),它們每一種的費用和性能都差別非常大。
因此,為了獲得優異的性能,即便不使用磁盤,存儲系統仍然需要使用多種介質,實現混合存儲。我發現這就是"混合存儲“和"全閃存陣列"(AFA)被誤解的原因。對仍然使用磁盤做存儲者來說,混合存儲系統并不是一個廉價存儲系統,它只是一個把更多的錢花費在存放熱門數據的高性能存儲上的一種存儲框架。與此類似,全閃存陣列(AFA)也可以由三個(或者更多)種存儲介質組合而成,這也是混合存儲。
Coho的存儲棧持續不斷地監視和描繪工作負載,并適當地分配存儲以提高性能,同時匯報你所運行的應用的工作性能。不久前,我們在頂級系統研究會議上發布了令人激動的新算法。如果你想了解更多,(上面鏈接處)我的存儲討論日展示概要地介紹了工作負載監控和自動分級設計,即分層設計。
非均勻分布無處不在。正是由于帕雷托的觀察,各種類型的系統設計才得益于集中力量盡可能高效地做最流行的事情這樣的理念。類似這樣的設計也使得高速公路和鄉間公路設計、中心城市交通系統設計、互聯網核心路由設計以及 許多Netflix入門級系列課程設計上都有所不同。存儲系統也不例外,而且建設存儲系統需要仔細地對工作負載響應進行分析,這樣才能正確地確定存儲規模,適應存儲工作區的特性。
結尾語:
-
這篇文章最頂端的圖片是一張舊的諷刺斯科特紙巾商業公司的圖片。其社交網頁上對其的評論。
-
非常感謝Jake Wires和Stephen Ingram,他們投入了大量的工作對這篇文章所采用的數據進行跟蹤采集、處理和分析。這兒進行的大量分析是對Coho的Counter Stack引擎查詢后得到的結果。還要感謝Stephen幫助開發和調試了界面功能,它使用了由Mike Bostock開發的優秀的D3js庫。