對象存儲、HDFS、CDN之間的關系


先說結論:

對象存儲是一個種存儲數據的方式,HDFS是一種分布式存儲文件的方式,對象存儲和HDFS因為底層存儲結構設計的不同使得兩者的存儲的應用場景不同,適合存儲的數據類型也不同。如果需要RESTful HTTP接口、不需要目錄結構、數據修改也不頻繁,扁平數據管理結構的對象存儲是比較好的選擇。

CDN是一種加速數據庫訪問的分發策略。其中存儲的靜態資源完美契合了對象存儲的應用場景,所以CDN底層數據多采用對象存儲服務器來存儲。CDN的典型應用案例是網頁的動靜態資源分離以及、圖片視頻的加速加載。

三種存儲類型

塊存儲

典型設備: 磁盤陣列,硬盤

塊存儲將文件拆分為單個數據塊,然后將這些塊作為單獨的數據片段來存儲。每條數據都有不同的地址,因此無需將它們存儲在文件結構中。主要是將裸磁盤空間映射給主機使用的。

優點:

  • 通過Raid與LVM等手段,對數據提供了保護。
  • 多塊廉價的硬盤組合起來,提高容量。
  • 多塊磁盤組合出來的邏輯盤,提升讀寫效率。

缺點:

  • 采用SAN架構組網時,光纖交換機,造價成本高。
  • 主機之間無法共享數據。

使用場景:

  • docker容器、虛擬機磁盤存儲分配。
  • 日志存儲。
  • 文件存儲。

對象存儲(Object Storage)

典型設備: 內置大容量硬盤的分布式服務器(swift, s3)

多台服務器內置大容量硬盤,安裝上對象存儲管理軟件,對外提供讀寫訪問功能。對象存儲將獲取的每個數據片段指定為對象。數據保存在單獨的存儲庫中,而不是以文件的形式保存在文件夾中,數據與關聯的元數據和唯一標識符捆綁在一起,以形成存儲池。

對象存儲服務(Object Storage Service)是一款穩定、安全、高效、易用的雲存儲服務,支持標准Restful API接口和扁平的數據組織形式。可存儲任意數量和形式的非結構化數據。較為適合存儲更新頻率較低的數據。對象存儲沒有文件夾的概念,每個資源的獲取都是通過唯一的key來索引獲取的,而之所以我們有時獲取到的對象存儲url中感覺資源是存儲在某個目錄下,比如https://xxx/{bucket}/aa/bb/cc.jpg,感覺這個資源就是存在aa/bb文件夾下的cc.jpg文件,但是事實上是因為「aa/bb/cc.jpg」這個資源的key本身自帶了'/'字符,而不是對象存儲把各級目錄用'/'字符分割開了。

根據業務方對數據訪問頻率的不同,可以細分為標准存儲、低頻訪問、歸檔存儲和深度歸檔存儲。訪問頻率依次降低,雲產商報的單價也越低。

對象存儲優點:

  • 同時具備塊存儲的讀寫高速和文件存儲的共享等特性。
  • 數據分析能力更為出色。 對象存儲由元數據驅動,對每個數據片段進行這種級別的分類后,分析機會就大得多。
  • 可擴展性極高。 可以永久持續地添加數據。沒有限制。
  • 數據檢索速度更快。 由於對象存儲的分類結構以及沒有文件夾層次結構,因此,您可以更快地檢索數據。
  • 成本降低。 由於對象存儲的橫向擴展特性,因此能夠以較低的成本存儲所有數據。
  • 資源優化。 由於對象存儲沒有歸檔層次結構,而且元數據可以完全自定義,因此限制比文件或塊存儲的要少得多。

對象存儲的使用場景:

使用場景: (適合更新變動較少的數據)圖片存儲、視頻存儲、音頻存儲。

參考: Ceph介紹及原理架構分享

文件存儲

典型設備: FTP、NFS服務器

為了克服塊存儲文件無法共享的問題,所以有了文件存儲。在服務器上架設FTP與NFS服務,就是文件存儲。文件存儲將數據作為一條信息存儲在文件夾中,以便於區分其他數據進行組織。這也稱為分層存儲,模仿了紙質文件的存儲方式。當您需要訪問數據時,您的計算機系統需要知道數據的路徑。

文件存儲優缺點

優點:

  • 造價低,隨便一台機器就可以了。
  • 方便文件共享。

缺點:

  • 讀寫速率低。
  • 傳輸速率慢。

文件存儲使用場景:

  • 日志存儲。
  • 有目錄結構的文件存儲。

參考: Ceph介紹及原理架構分享

對象存儲與文件存儲的區別

所謂文件系統的本質是POSIX接口,“對象”這個名詞是做對象存儲的人為了把自己做的東西和文件系統區分開而用的術語,把存在對象存儲里的文件叫做“對象”,所以選擇文件系統還是對象存儲,跟你把這堆數據稱作對象還是文件並沒有直接關系,而是要看你是需要POSIX還是RESTful HTTP接口,是需要目錄結構還是適用扁平數據管理結構以及數據是否高頻修改。對象存儲將所有內容放置在一個稱為存儲池的扁平地址空間中。如果需要RESTful HTTP接口、不需要目錄結構、數據修改也不頻繁,扁平數據管理結構的對象存儲是比較好的選擇。

參考: 學習筆記 - swift 對象存儲 和 Hadoop文件系統 區別

1、概念上的區別

對象存儲也就是我們說的鍵值存儲,其接口就是簡單的GET,PUT,DEL和其他擴展。

文件存儲通常支持POSIX接口,它跟傳統的文件系統是一個類型,區別在於分布式存儲提供了並行化的功能,如Ceph的CephFS。但有時也會把GFS,HDFS這種非POSIX接口的類文件存儲接口歸入此類。

2、IO特點區別

針對對象存儲來說,接口簡單,一個對象就可以看成是一個文件,只能全寫全拼,都是以大文件為主,因此要求足夠的IO帶寬。

文件存儲的話具有更豐富的文件名及入口,是需要考慮目錄、文件屬性等支持的。實現一個支持並行化的文件存儲應該是很困難的。

3、Ceph支持

Ceph是同時支持對象存儲和文件存儲的,只是對應的接口不同。對象存儲接口主要以S3與Swift為主,文件存儲的話是以libcephfs庫與posix接口為主。因此在接口上會存在一定的差異。

以上信息就是眾一互聯針對對象存儲和文件存儲的概念以及區別的介紹,希望大家對這兩種存儲方式有了一定的了解,在后期選擇存儲方式的時候就會有一定的參考。

參考: 對象存儲和文件存儲的區別

HDFS(Hadoop Distributed File System)

HDFS是一種依靠網絡通信的分布式文件存儲系統,是傳統NFS(Network File System,網絡文件系統)的延伸。HDFS的文件分布在集群機器上,同時提供副本進行容錯及可靠性保證。例如客戶端寫入讀取文件的直接操作都是分布在集群各個機器上的,沒有單點性能壓力。

HDFS 是用來處理大吞吐量的離線數據,它需要犧牲一定的延時為代價,因此它不太適合哪些對延時有較高要求的應用程序。

其次,HDFS 被設計用來處理大數據文件,它通常對大文件進行優化,而在處理大量小文件時反而會使其耗費更多內存,從而影響數據處理的效率。此外,HDFS 中一次只能寫入一個文件,不支持多用戶並發寫入。

參考: 學習筆記 - swift 對象存儲 和 Hadoop文件系統 區別深入理解HDFS:Hadoop分布式文件系統

Ceph

Ceph是加州大學Santa Cruz分校的Sage Weil(DreamHost的聯合創始人)專為博士論文設計的新一代自由軟件分布式文件系統。自2007年畢業之后,Sage開始全職投入到Ceph開 發之中,使其能適用於生產環境。Ceph的主要目標是設計成基於POSIX的沒有單點故障的分布式文件系統,使數據能容錯和無縫的復制。2010年3 月,Linus Torvalds將Ceph client合並到內 核2.6.34中。IBM開發者園地的一篇文章

探討了Ceph的架構,它的容錯實現和簡化海量數據管理的功能。

參考: Ceph 分布式文件系統

CDN(Content Distribute Network)

讓數據離用戶更近一點

CDN(Content Delivery Network)是內容分發網絡。基本思路就是在網絡各處部署服務節點,系統實時地根據網絡流量、負載狀況、服務節點到用戶的響應時間等信息,自動將用戶請求到導向離用戶最近的節點上。目的就是讓用戶就近取得數據,提高響應速度。

CDN本質上是一個分布式緩存系統,每個服務節點上都緩存了源站的一部分數據,也就是用戶最近經常訪問的數據。這樣大部分用戶請求其實都是在CDN邊緣節點上完成,並沒有達到 源站 ,這樣減少了響應時間,也減輕了 源站 的負擔,可以實現高流量、大並發的網站訪問。

CDN對動態資源是無效的,主要適合對靜態資源的訪問加速。比如一些網頁內容需要數據查詢才能獲得,而每次要獲得查詢結果都要經過數據庫的操作,再經過Web應用服務器的一些邏輯處理才能得到,這樣就沒法用CDN來加速。因為每次請求的數據都不一樣,緩存過去訪問過的數據沒有意義。

CDN主要應用於站點加速,提高網站中靜態數據的訪問性能,比如圖片、音頻、視頻、靜態HTML網頁等。網站靜態數據以前一般是用文件存儲的形式保存,現在則主要用對象存儲。使用對象存儲的原因還是因為對象存儲適合存儲低頻修改、組織結構扁平化的數據,而靜態資源大多為視頻、圖片、音頻,完美符合對象存儲的應用場景。

CDN 的關鍵技術

(1)內容發布:借助於索引、緩存、流分裂、組播等技術,將內容發布或投遞到距離用戶最近的服務節點;

(2)內容路由:整體性的網絡負載均衡技術,通過內容路由器中的重定向機制,在多個服務節點上均衡用戶的請求;

(3)內容交換:根據內容、服務節點以及用戶的信息,利用應用層交換、流分裂等技術,智能地平衡負載流量;

(4)性能管理:通過內部和外部監控系統,獲取網絡部件的狀況信息,測量內容發布的端到端性能。

三者的關系

對象存儲的核心是存儲,以及計算能力(圖片處理),CDN的核心是分發,是一種內容調度機制和策略,本身不會給用戶提供直接操作存儲的入口,底層使用的存儲結構是對象存儲。CDN是對象存儲的一個典型應用場景。網站靜態數據以前一般是用文件存儲的形式保存,現在則主要用對象存儲。使用對象存儲的原因還是因為對象存儲適合存儲低頻修改、組織結構扁平化的數據,而靜態資源大多為視頻、圖片、音頻,完美符合對象存儲的應用場景。

HDFS稱為Hadoop 分布式文件系統,是一種基於文件的存儲,與之相對的是基於對象的存儲,也就是對象存儲Object Storage),對象存儲的存取單元都是對象。HDFS與對象存儲的區別是對象存儲支持RESTful HTTP接口、不需要目錄結構、數據修改也不頻繁,數據管理結構扁平。 兩者的應用場景不同。

CDN與對象存儲的配合使用

一般申請一個CDN域名,然后將這個CDN域名綁定某個源站,就能夠用這個CDN域名代替對象存儲原本的臨時域名來訪問資源,使用方式也只需用cdn域名替換原來的對象存儲域名即可,在域名后面帶上{bucket}/key即可。

比如下面是七牛雲給bucket綁定域名的界面。

在新打開的標簽頁中輸入已經備案的域名,點擊創建,之后就可以使用這個域名來訪問bucket的資源了,使用方式還是「域名/{bucket}/{objectName}」

從cdn下載資源有兩種方式,一種是后端下載后傳遞給前端,另一種是前端直接從CDN下載。后端下載應該就是建立socket連接,然后傳輸數據流,前端下載不太清楚是怎么實現的,所以后來學習了一下,詳見: 前端從web服務器或者CDN下載資源
 
參考:
歡迎關注公眾號 TestDevelop , 我在這里分享各種測試開發技術知識、溝通技巧、職場感言。歡迎后續與我共同成長。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM