根據IDC在2018年末的預測顯示,因爲大數據、AI、物聯網、5G等因素的驅動,全球的數據量在2025年將高達175ZB(1ZB=1024EB,1EB=1024PB)。在中國市場,因爲AI技術在安防等領域的大規模落地與應用,IDC預計,中國將在2025年成爲擁有數據量最大的地區,甚至超過整個EMEA(歐洲+中東+非洲),其中絕大部分數據是非結構化數據。node
海量數據時代來臨,但在這上空飄着一朵烏雲——那就是海量小文件的存儲問題。數據庫
海量小文件:業內一般將大小在1MB之內的文件稱爲小文件,百萬級數量及以上稱爲海量,由此量化定義海量小文件。緩存
首先咱們來看一下海量小文件是怎麼產生的?性能優化
人工智能、物聯網、智慧金融、智能安防、傳感器網絡、科學實驗等應用的發展產生了大量數據,這些數據種類繁多,大小不一。不只包括海量的大文件(大於1MB),也包括海量的小文件(小於1MB)。特別是小文件的數量將達到千萬級、億級甚至十億、百億級。服務器
在智能安防領域有不少典型的海量小文件場景,人臉識別就是其中之一。人臉識別的基礎原理,就是經過將攝像機拍攝的圖片與視圖庫進行比較,若是匹配則命中。對於一個大型城市來講,攝像機抓拍的圖片數量會達到百億級規模。在對這些原始數據進行分析應用的過程當中就會涉及到對百億級規模的海量小文件的處理。網絡
相似的還有智慧金融,這也是一個會產生海量小文件的場景。金融業務不只有大量原始票據經過掃描造成圖片和描述信息文件,還有電子合同、簽名數據、人臉識別數據等。金融的影像數據通常單個文件大小爲幾KB至幾百KB不等,文件數量達到數億至數十億級規模,而且逐年增加,須要作長期的保存。架構
海量小文件體量龐大,但目前的文件系統包括本地文件系統、分佈式文件系統都是匹配大文件場景的。從細節來講,如對元數據的管理、數據佈局、緩存管理等的實現策略都側重於大文件,致使在海量小文件狀況下,存儲處理性能極差。(好比平常的文件拷貝,若是拷貝一個大文件的電影到移動硬盤,拷貝的速度能達到100MB/S,可是若是拷貝的是超過上萬個小圖片,拷貝速度可能不到5MB/s)併發
所以,海量小文件存儲問題一直被認爲是工業界和學術界的難題,是海量數據時代上空飄着的那朵烏雲。如前面所講的智能安防、智慧金融的存儲架構方案設計,就須要重點考慮到存儲系統對於海量小文件的處理性能難題。分佈式
具體來講,致使海量小文件處理性能差的緣由主要有以下三點:ide
元數據管理低效的問題
講這個問題以前,咱們先認識一下元數據。在存儲系統中,數據分爲兩部分進行存儲:一部分是真實數據;另外一部分是描述這份數據的元數據,好比文件系統中文件的文件名、文件大小、執行權限等。元數據有着明顯特色,那就是數量多,並且容量小。
在通用的文件系統設計中,若是須要訪問一份真實的數據就須要先訪問到該數據的元數據。但是咱們知道,當前主流的文件系統基本都是面向大文件設計的,在海量小文件的狀況下,由於必然會產生更大數量級的元數據,這會放大文件系統擴展性差、檢索效率低的問題。好比傳統NAS存儲採用二叉樹結構進行數據的存放,這種方法在遇到海量小文件的時候,文件系統在存儲海量小文件的同時還須要存儲更大數據級的海量元數據,NAS存儲在擴展性和檢索速度方面很容易就達到了瓶頸。因此,傳統的NAS文件系統在海量小文件下,性能衰減得異常厲害,通常文件數量級到達千萬級的時候效率就會變得極其低效。
所以,若是想要完全解決海量小文件的問題,首先就須要存儲系統有一個健壯高效的元數據管理平臺(庫)。若是沒有核心技術解決這個問題,這個存儲系統即便在其餘方面的優化作得再好,也僅能知足幾個億級別的小文件存儲,而沒法知足百億級別的小文件存儲。
I/O訪問流程複雜的問題
傳統的文件系統在文件讀寫的時候流程過於複雜,在讀取一個文件的時候,須要產生屢次IO。例如對於Linux系統在讀取文件的時候,至少須要先讀取文件目錄元數據到內存,緊接着把文件的索引節點(inode)裝載到內存,最後再讀取實際的文件內容,在訪問數據過程當中會屢次讀取元數據,效率極低。
機械磁盤對於隨機小IO讀寫性能低
當前不少文件系統都是將元數據分散存儲,從真實存儲的位置來看分散在存儲的全部磁盤當中,所以元數據的讀寫屬於隨機的IO。然而機械磁盤對於隨機的IO性能極低,所以在海量小文件的場景下因爲元數據讀寫會產生隨機高頻次的I/O讀寫,對於當前以機械盤爲主的存儲系統來講,性能極差。
(採用全閃存效果會比較好,可是目前來講,對於海量的非結構化數據若使用全閃存,從成原本看並不現實)
綜合上述分析,若是想要解決好海量小文件的存儲難題,就須要對症下藥。對於海量小文件的存儲優化能夠從元數據管理、數據組織、I/O 流程優化與緩存管理(業界一般稱爲Cache管理)等幾個方面下手。具體的技術包括經過優化元數據管理與數據組織方式、小文件合併、優化緩存命中率等方面,來提高海量小文件的存儲性能支撐,從而達到提高海量小文件訪問效率的目的。
元數據的承載。正如上文所說,海量小文件處理的瓶頸在於對元數據的處理,業內一般採用分佈式數據庫實現。經過對元數據進行獨立組織與承載,並經過元數據語義優化、寫入優化等,下降元數據在IO路徑和資源等方面沒必要要的性能消耗與寫入次數。匹配上優化的技術,減小IO數量,好比在處理業務高併發的時候,將併發的多個操做合併成一個操做,進一步提高吞吐。最後,爲了進一步保障元數據的小IO高性能,一般將元數據存儲在SSD的數據分層空間中,進一步加速元數據的訪問效率。
分佈式智能緩存技術。針對海量小文件設計的分佈式智能緩存層,可以讓小文件在寫入SSD後即返回,縮短IO路徑,有效下降時延,提升性能。同時還能夠有效下降原生糾刪碼的I/O寫入放大的問題,提升原生糾刪碼的性能,進一步提高分佈式存儲對海量小文件的性能支持。
小文件合併。經過將小文件落在智能緩存的同時還可以將小文件在線合併成大IO,而後經過條帶化技術(將大數據切分紅小數據併發存儲到不一樣硬盤)寫入HDD,極大地提高了IO的性能。而且小文件合併還可以減小文件數量,從而減小對應的元數據數量,來提高性能。
行業難題與機遇每每相伴而行,各大廠商在攻克海量小文件存儲難題上各顯神通,既有老牌廠商,也有近年來異軍突起的新銳玩家。在這其中,深信服存儲宛若一個老道的新手,在海量小文件的處理上攜清晰的解題思路強勢入局。根據深信服公開的技術資料來看,其EDS對企業級分佈式存儲處理海量小文件的性能優化思路與前面講的幾點不謀而合,其核心技術點能夠概括爲三點:
第一,深信服推出了一個全新的分佈式數據庫PhxKV來對獨立承載元數據。PhxKV具有優秀的性能擴展能力,可以輕鬆承載數百億規模的元數據,成爲深信服支撐百億海量小文件高性能的堅實基礎。深信服內部進行的性能測試顯示,PhxKV使用兩核時的吞吐,就能和MongoDB使用17核時的吞吐至關。
第二,經過智能緩存技術,採用高性能的SSD來加速海量小文件的讀寫效率並縮短I/O路徑。
第三,經過小文件合併技術來下降文件的數量,從而減小總體I/O讀寫頻次來提升I/O性能。
尤爲是針對海量小文件的頑疾,深信服企業級分佈式存儲EDS在性能提高方面表現搶眼,而且在權威機構測試和用戶的實際應用中獲得檢驗。
日前,深信服企業級分佈式存儲EDS經過中國泰爾實驗室權威機構多項指標測試驗證,其中對海量小文件承載的性能表現很搶眼。根據測試數據,深信服EDS經過三節點構建的對象存儲可以輕鬆承載100億小文件,且性能抖動不超過5%;對象上傳速度達到15,000個/s,對象下載速度達到40,000個/s。
筆者還了解到,深信服EDS在處理海量小文件時呈現出的高性能,是經過軟件機制和優化來最大程度發揮硬件長處、激發硬件潛能,最終實現用更低成本的硬件平臺,也可以得到高性能,帶來的是更具性價比的解題思路。
據深信服透露,南方某市公安反恐工程項目採用了深信服分佈式存儲進行智能安防的數據存儲,其中涉及到3.5PB的視頻存儲以及數十億級別的人臉識別的海量小文件存儲,是一個典型的大文件與海量小文件混合存儲的場景。
深信服企業級分佈式存儲EDS採用對象存儲與平臺進行對接,系統峯值每秒有將近3,000張圖片寫入存儲系統。目前存儲系統內保存的海量小文件數量已經超過50億,並且還在不斷增加當中。得益於深信服在海量小文件的性能優化,使得EDS平臺可以從容應對大併發的人臉識別系統,而且知足後續針對原始圖片數據的二次挖掘應用。
對於非結構化數據存儲來講,攻克了海量小文件存儲難題,基本表明了該存儲可以適配絕大多數非結構化數據存儲的場景。深信服分佈式存儲基於軟件定義技術、採用通用的X86服務器與以太網交換機,激發硬件潛能,在海量數據時代幫助用戶構建一個可靠、高性能、智能管理的海量數據存儲平臺。