文件系統vs對象存儲——選型和趨勢

2020-12-08 存儲在線

本文轉自:微信公眾號 企事錄,作者李明宇

如果我們在服務端存儲文件,例如一個O2O應用中的圖片或者企業級雲盤裡的文檔,以前我們可能會毫不猶豫地把它們放到文件系統裡,比如說NAS設備或者GlusterFS等分布式文件系統,但是,隨著技術的發展,我們有了一個新的選擇——對象存儲,今天我們來討論一下,對象存儲相對於文件系統有什麼特點?什麼時候我們應該選擇對象存儲?文件系統將來的發展方向是什麼?

一、對象存儲的概念

對象存儲和我們經常接觸到的硬碟和文件系統等存儲形態不同,它提供Key-Value(簡稱K/V)方式的RESTful數據讀寫接口,並且常以網絡服務的形式提供數據的訪問。

在早些年,特別是2006年以前,人們提到對象存儲,往往指的是以類似標準化組織SNIA定義的OSD(object storage device)和MDS(Metadata Server)為基本組成部分的分布式存儲,通常是分布式文件系統。我們經常聽到的分布式存儲Ceph的底層RADOS(Reliable Autonomous Distributed Object Store),即屬於這類對象存儲。

(圖片部分內容引用自Ceph官網和SwiftStack)

而2006年以後,人們說到對象存儲,往往指的是以AWS的S3為代表的,通過HTTP接口提供訪問的存儲服務或者存儲系統。類似的系統還有Rackspace於2009年開始研發並於2010年開源的OpenStack Swift(Rackspace的對象存儲服務開始於2008年,但是Swift項目的開發是從2009年開始的,Rackspace用Swift項目對其雲存儲系統進行了徹底重構)。這裡的「對象」(Object)和我們平時說的文件類似,如果我們把一個文件傳到對象存儲系統裡面存起來,就叫做一個對象。

從另一個角度來說,2006年以前常說的對象存儲,指的是一種存儲系統的架構;而2006年以後,人們說到對象存儲常指的是一種存儲形態,我們這裡討論的對象存儲也正是後者。

目前,對象存儲已經得到了廣泛的應用。具有代表性的大規模實現主要在各個公有雲服務商,比如AWS的S3、Rackspace的CloudFiles,國內的七牛雲存儲、阿里雲的開放存儲服務OSS也屬於對象存儲,最近,青雲也發布了對象存儲服務。

對象存儲也有一些著名的開源實現,如OpenStack Swift,開源的統一存儲系統Ceph也可以通過Ceph Object Gateway提供對象存儲服務,也稱作RADOS Gateway,縮寫為RADOSGW。

二、對象存儲與文件系統的比較

與文件系統相比,以AWS S3和Swift為代表的對象存儲有兩個顯著的特徵——REST風格的接口和扁平的數據組織結構。

1、對象存儲的接口

對於大多數文件系統來說,尤其是POSIX兼容的文件系統,提供open、close、read、write和lseek等接口。

而對象存儲的接口是REST風格的,通常是基於HTTP協議的RESTful Web API,通過HTTP請求中的PUT和GET等操作進行文件的上傳即寫入和下載即讀取,通過DELETE操作刪除文件。

(圖片內容來自SwiftStack)

對象存儲和文件系統在接口上的本質區別是對象存儲不支持和fread和fwrite類似的隨機位置讀寫操作,即一個文件PUT到對象存儲裡以後,如果要讀取,只能GET整個文件,如果要修改一個對象,只能重新PUT一個新的到對象存儲裡,覆蓋之前的對象或者形成一個新的版本。

如果結合平時使用雲盤的經驗,就不難理解這個特點了,用戶會上傳文件到雲盤或者從雲盤下載文件。如果要修改一個文件,會把文件下載下來,修改以後重新上傳,替換之前的版本。實際上幾乎所有的網際網路應用,都是用這種存儲方式讀寫數據的,比如微信,在朋友圈裡發照片是上傳圖像、收取別人發的照片是下載圖像,也可以從朋友圈中刪除以前發送的內容;微博也是如此,通過微博API我們可以了解到,微博客戶端的每一張圖片都是通過REST風格的HTTP請求從服務端獲取的,而我們要發微博的話,也是通過HTTP請求將數據包括圖片傳上去的。在沒有對象存儲以前,開發者需要自己為客戶端提供HTTP的數據讀寫接口,並通過程序代碼轉換為對文件系統的讀寫操作。

能夠放棄隨機讀寫接口而採用REST接口的一個重要原因是計算機系統本身的演進呼喚存儲系統的變革,目前的計算機的內存大小已經和當初設計POSIX文件系統接口時大不一樣了。文件系統誕生於1960年代,當時的內存是以KB為單位的,內存資源非常寶貴,同時外存的數據讀寫速率也非常低,所以把文件中的一小部分數據加載進內存進行操作顯得非常有必要。而如今,計算機的內存是以GB為單位的,往往在幾十、幾百GB量級,而常常需要存取的文件——如圖片、文檔等,則是在MB級別,GB以上的文件數量非常少(多為長視頻、歸檔文件、虛擬機鏡像等,這一類數據我們會在本系列的後面幾篇中進行討論),外存和網絡的吞吐率較之1960年代,也有了數千倍的提升,把一個文件完全加載到內存中進行處理和可視化的已經開銷微不足道了,而帶來的計算效率和用戶體驗的提升卻是顯著的。

2、扁平的數據組織結構

對比文件系統,對象存儲的第二個特點是沒有嵌套的文件夾,而是採用扁平的數據組織結構,往往是兩層或者三層,例如AWS S3和華為的UDS,每個用戶可以把它的存儲空間劃分為「容器」(Bucket),然後往每個容器裡放對象,對象不能直接放到租戶的根存儲空間裡,必須放到某個容器下面,而不能嵌套,也就是說,容器下面不能再放一層容器,只能放對象。OpenStack Swift也類似

這就是所謂「扁平數據組織結構」,因為它和文件夾可以一級一級嵌套不同,層次關係是固定的,而且只有兩到三級,是扁平的。每一級的每個元素,例如S3中的某個容器或者某個對象,在系統中都有唯一的標識,用戶通過這個標識來訪問容器或者對象,所以,對象存儲提供的是一種K/V的訪問方式。

(圖片內容來自華為)

採用扁平的數據組織結構拋棄了嵌套的文件夾,避免維護龐大的目錄樹。隨著大數據和網際網路的發展,如今的存儲系統中,動輒數百萬、千萬甚至上億個文件/對象,單位時間內的訪問次數和並發訪問量也達到了前所未有的量級,在這種情況下,目錄樹會給存儲系統帶來很大的開銷和諸多問題,成為系統的瓶頸。反觀目錄結構的初衷——數據管理,如今作用非常有限,我們已經很難通過目錄的劃分對文件進行歸類和管理了,因為一個文件最終只能放到一個文件夾下,作為目錄樹的葉子節點存在,而文件的屬性是多維度的。目前各類應用中廣泛採用元數據檢索的方式進行數據的管理,通過對元數據的匹配得到一個Index或者Key,再根據這個Index或者Key找到並讀取數據,所以,對象存儲的扁平數據組織形式和K/V訪問方式更能滿足數據管理的需求。

不難看出,對象存儲有著鮮明的網際網路和大數據時代的特點,隨著「網際網路+」的推進,網際網路技術正在滲透到各行各業,數據量也在成指數倍數增長,對象存儲將發揮越來越大的作用。

三、文件系統和對象存儲系統的優劣和發展趨勢分析

上述分析了對象存儲的特點並與文件系統做了比較,接下來就不得不回答一個問題:文件系統是不是沒有生命力了?答案當然是否定的。對象存儲打破了文件系統一統天下的局面,給我們帶來了更多的選擇,並不意味著我們就要否定文件系統。

而對於一些場景,比如虛擬機活動鏡像的存儲,或者說虛擬機硬碟文件的存儲,還有大數據處理等場景,對象存儲就顯得捉襟見肘了。而文件系統在這些領域有突出的表現,比如Nutanix的NDFS(Nutanix Distributed Filesystem)和VMware的VMFS(VMware Filesystem)在虛擬機鏡像存儲方面表現很出色,Google文件系統GFS及其開源實現HDFS被廣泛用於支撐基於MapReduce模型的大數據處理支持得很好,而且能夠很好地支持百GB級、TB級甚至更大文件的存儲。

由此看來文件系統將來的發展趨勢更多的是專用文件系統,而不再是像以前那樣,以前一套Filesystem適用於所有場景,更有一些部分要讓位於對象存儲或者其他存儲形態。

從另一個角度來看,現代對象存儲系統的「甜區」在哪裡:1. 網際網路和類似網際網路的應用場景,這不僅僅是因為REST風格的HTTP的接口,而且還因為大多數對象存儲系統在設計上能夠非常方便地進行橫向擴展以適應大量用戶高並發訪問的場景;2. 海量十KB級到GB級對象/文件的存儲,小於10KB的數據更適用於使用K/V資料庫,而大於10GB的文件最好將其分割為多個對象並行寫入對象存儲系統中,多數對象存儲系統都有單個對象大小上限的限制。所以,如果應用具有上述兩種特點,對象存儲是首選。

也有人在對象存儲上做出進一步的開發或者改進,使其能夠很好地支持歸檔備份、MapReduce大數據處理等場景,甚至將對象存儲的接口轉為文件系統接口;反之,OpenStack Swift等對象存儲系統也支持使用GlusterFS等通用文件系統作為存儲後端。人們為什麼會在這些對象存儲和文件系統相互轉換的技術上進行人力和資金的投入?這些做法的意義何在?應該在什麼時候使用這些技術?我們將在本系列的後續章節中給出答案。

本系列還將以OpenStack Swift為例來剖析對象存儲的設計與實現,並且討論對象存儲在實際應用中所遇到的問題以及在Swift中是如何解決的,進而討論對象存儲的發展對底層硬體帶來的挑戰和機遇。另外,由於對象存儲和傳統存儲形態的差別,性能評估已經不能以IOPS和讀寫速率等傳統指標來衡量,應當如何對對象存儲進行評估?我們也將在後續章節中進行探討。

相關焦點

  • 「最強科普」什麼是文件系統,分布文件系統有哪幾類?
    ▉ 本地文件系統和網絡文件系統文件系統早期是本地作業系統管理存儲設備的一種方式,早期的管理需求大多基於本地的文件管理,比如Ext4 、XFS、FAT32和Btrfs等文件系統,這些文件系統之後能提供本地磁碟格式化並使用。
  • 對象存儲九大關鍵特徵
    基於塊的系統(例如光纖通道和iSCSI)無法很好地向外擴展,並且沒有真正的了解所存儲的數據。它們是以低延遲和高粒度提供內容的「啞」塊設備。文件系統將一些結構放在數據上,將文件對象放入層級結構(文件夾/目錄)然後將元數據附加到這些對象上。然而,元數據通常只是基於存儲文件所需的信息(創建時間,時間更新,訪問規則)存儲文件。
  • 杉巖數據:對象存儲智能化的探路者
    在對象存儲與文件存儲的對比中,特別是在大量文件的並發性能方面,對象存儲比文件存儲要強的多,同時,在系統中存入大量文件後的性能穩定性方面,對象存儲的表現也比文件存儲要強的多。從技術角度看,由於文件存儲要維護龐大且複雜的文件目錄,當文件數越來越多,目錄越來越複雜,文件存儲的性能就越差。
  • XSKY 進入Gartner全球分布式文件與對象存儲VoC四象限報告
    日前,國際權威諮詢機構Gartner發布了最新的Gartner Peer Insights平臺年度報告《Gartner Peer Insights『Voice of the Customer』:Distributed File Systems and Object Storage》(分布式文件與對象存儲
  • 被BAT集體看好的對象存儲 有什麼了不起?
    ,可提供基於分布式系統之上的對象形式的數據存儲服務。對象存儲和我們經常接觸到的塊和文件系統等存儲形態不同,它提供RESTful API數據讀寫接口及豐富的SDK接口,並且常以網絡服務的形式提供數據的訪問。簡單理解,對象存儲類似酒店的代客泊車。顧客(前端應用)把車鑰匙交給服務生,換來一張收據(對象的標識符)。顧客不用關心車(數據)具體停在哪個車位,這樣省事兒、省時間。
  • 使用文件對象讀取Python文件內容
    使用open函數可以打開文件並返回一個文件對象,返回的文件對象用來讀取和寫入文件內容。那麼,如何使用文件對象來讀取文件內容呢?如何讓讀取的文件內容初始化一個Python列表呢?文本文件和二進位文件使用文件對象讀取文件內容時,要根據文件的不同存儲類型選擇不同的讀取方式。一般來說,文件的存儲類型主要分為文本文件和二進位文件兩大類。
  • 6分鐘徹底掌握存儲和備份區別
    一直以來,存儲和備份是兩個相近的概念,但是又有很大區別的。如果不是專業的技術專家,是比較難搞清楚這兩者之間區別,特別是雲的出現,這兩個概念往往容易混在一起看。本文從幾個方面快速對比下存儲和備份這兩個概念的區別和發展,以及演變趨勢。1.
  • 在檔案文件管理中,RFID設備如何正確選型?
    RFID數據採集系統,包括讀寫器、讀寫天線和電子標籤,在檔案文件管理中,通過電子標籤與檔案盒或文件袋進行綁定,通過天線和讀寫器將信號傳遞到系統當中,形成自動化的數據採集工作。這三者共同決定了RFID系統的實際效果,選擇不同的RFID設備對整個項目實際應用效果會有很大影響,在RFID項目中串讀,誤讀,識別率低是最常見的問題,也是用戶最頭疼的問題,這些問題其實都通過選擇合適的RFID設備來解決。那麼以RFID檔案文件管理為案例,分析下RFID設備如何正確選型。
  • 從邊緣到數據中心到雲,HCP對象存儲八大利器
    他們也寄希望於通過分布式文件解決方案來滿足規模和性能等方面的需求,以進一步支持高性能計算、實時分析和AI等。  在對象存儲領域的發展中,從當初滿足海量非結構化數據的歸檔需求,到當前對象存儲也融入了快閃記憶體創新技術具備高性能的工作負載支撐能力,因而對象存儲迎來了全新的發展期。不僅僅針對大數據,而且也聚焦更快的數據,緊跟用戶業務的速度來助力交付數據。
  • Gartner 2016對象存儲,HCP名列前茅
    在此次報告中,Gartner分析師Arun Chandrasekaran、Raj Bala 和Garth Landers就12家對象存儲產品的七項關鍵能力進行了評估,分別是:存儲效率、互操作性、管理性、性能、恢復能力、安全性及多租戶技術。分析師還評估了存儲產品在五大應用場景中的表現,即分析、歸檔、備份、雲存儲和內容分發。
  • 搜索那點事兒:Lucene文件存儲和讀取技術詳解
    Lucene的檢索算法屬於索引檢索,即用空間來換取時間,對需要檢索的文件、字符流進行全文索引,在檢索的時候對索引進行快速的檢索,得到檢索位置,這個位置記錄檢索詞出現的文件路徑或者某個關鍵詞。Lucene的索引是用文件存儲,Lucene中的文件操作都是通過這Directory來實現的,下面來介紹一下Lucene有關文件存儲和讀取的有關技術。
  • JuiceFS 開源,分布式文件系統
    1 月 11 日, Juicedata 果汁數據科技宣布開源分布式文件系統 JuiceFS。
  • IPFS紅岸智能周雪松:分布式文件系統
    紅岸智能 周雪松新系列知識點針對這幾種不同的數據類型,分布式存儲系統適合處理不同的類型的數據,將分布式存儲系統劃分為以下幾種:分布式文件系統:>處理非結構化的數據,將非結構化的數據都當做文件形式的存儲對象,處理對象是文件,形成一個分布式文件系統。
  • HDS升級對象存儲平臺 發布HCP Anywhere
    對象存儲廠商HDS已經升級了其對象存儲平臺,為BYOD(帶自己的設備上班)用戶提供了防火牆保護的文件同步和共享功能。與之前的版本相比,Hitachi Content Platform Anywhere增加了同步和共享功能。新版本將數據保存在HCP上,它在這裡可以得到安全地保護,而不是被發布到BYOD設備中。
  • Hitachi Vantara對象存儲助力中意人壽 構建高效可靠的影像數據...
    Hitachi Vantara基於HCP對象存儲完善了中意人壽的IT基礎資源池整體能力框架,充分發揮了資源池的集中化和規模化效應,幫助中意人壽提升了整體IT服務能力和業務支撐水平。過去,中意人壽影像平臺系統採用了傳統的Content Manager+文件系統,在數據存儲管理和運維方面存在著諸多不足: 統一管理:數據分布在多個文件系統上,空間增長過快,管理不便; 備份:存在備份時間過長導致備份失敗問題; 合規:針對影像業務合規要求,目前文件系統無法實現; 安全:病毒、誤刪除等;
  • 海納百川·智慧不凡丨UCloud對象存儲UFile品牌升級US3
    UCloud對象存儲產品UFile正式升級為US3,採用新一代自研存儲引擎,為更多用戶提供安全可靠、極致性能、成本可控、便捷易用的對象存儲服務。US3穩定可用性提升5倍,帶寬提升2倍,IOPS提升10倍,歸檔存儲型對象存儲價格降低30%。
  • InterPlanetary File System星際文件系統
    InterPlanetary File System,縮寫IPFS:是一個旨在創建持久且分布式存儲和共享文件的網絡傳輸協議。它是一種內容可尋址的對等超媒體分發協議。在IPFS網絡中的節點將構成一個分布式文件系統。
  • 瑞馳NxSDS全融合存儲系統:讓複雜的存儲統一化
    目前,該公司取得了相關領域內的共計34項專利和16項著作權。在2019年,瑞馳還獲得了厚安基金上億元的B輪投資,得到了資本的認可。  面向越來越大的海量數據存儲複雜度挑戰,瑞馳認為統一異構存儲管理將成為行業發展的必然趨勢。「我們在服務客戶的過程中,確實看到了企業存在這方面的需求。」瑞馳副總裁林海鵬先生補充道。
  • 希捷推出對象存儲軟體CORTX 在GitHub開源定義存儲平臺代碼
    在今日的 DFatasphere 線上活動期間,希捷(Seagate)推出了與 S3 平臺兼容的對象存儲軟體 CORTX,並在 GitHub 上開源了這款軟體定義存儲(SDS)平臺的代碼。作為 GitHub 存儲庫的一部分,希捷還以「CORTX 社區」名義組建了一支研發人員團隊,提供了一個方便快速開啟測試的預構建虛擬機鏡像。
  • UCloud對象存儲US3標準型低頻訪問型歸檔型產品介紹及定價
    UCloud優刻得對象存儲US3(原名UFile)是為網際網路應用提供非結構化文件雲存儲的服務。用戶可通過瀏覽器、HTTP RESTful API 、SDK等多種方式實現文件的在線存取與管理。US3雲存儲服務按需使用,支持存儲空間的無限擴展,幫助用戶有效降低海量文件的存儲成本;US3同時支持熱點數據的高並發訪問,提升終端用戶訪問體驗。實名認證用戶均可享受20GB免費雲存儲空間和20GB/月免費下載流量。