1. 三種存儲類型
隨著PC、平板電腦、智能手機等電子設備的普及,互聯網極大的提升了人們的生活水平。網絡在豐富人們生活的同時,也產生了龐大的數據量。
圖1 各種電子設備
據IDC預測,全球數據總量預計2020年達到44個ZB,我國數據量將達到8060個EB,占全球數據總量的18%。44個ZB是什么規模呢?相當于44萬億GB。
數據量的迅速增加促進了存儲行業的發展,硬件方面和軟件方面都有了長足的進步。
本文主要對對象存儲進行一個簡單的說明,希望通過本文,您能對對象存儲有個大致的了解。
主流存儲類型分為三種:塊存儲、文件存儲以及對象存儲
塊存儲主要是將裸磁盤空間整個映射給主機,按照物理卷或邏輯卷的方式存儲數據。特點:速度快、保存的數據尺寸大、數據變化頻率高,缺點:可擴展程度小、容量小。(其實我們日常生活中見到的硬盤,就是塊存儲)
文件存儲,典型代表NAS。NAS是類似一個共享文件夾,用戶可以通過相應的傳輸協議,把數據放在上面。容量相對較大,但是速度較慢。
下面說到對象存儲了,不知道大家有沒有思考過一個問題。每天微信朋友圈或者微博,以及最近爆火的那些小視頻app,用戶上傳了海量的圖片或者視頻,它們都是存放在什么地方的呢?我個人認為,對象存儲,是存儲它們的一個不錯選擇。
對象存儲,對象指的是面向對象,集合了塊存儲和文件存儲的優點,擁有速度快、容量大等特性。并且容易搭配云計算,是一種新的網絡存儲架構。
當然,三種存儲類型并不是完全獨立的,還是有依賴關系的。對象存儲在底層存儲介質方面上,還是部分依賴塊存儲和文件存儲的。
圖2 三種存儲類型依賴關系
為了更好的說明三者的差異,我打個比方,假設有三個人想從A地到B地,現在有三種交通方式。甲選擇轎車、乙選擇公共汽車、丙選擇地鐵。塊存儲類似于轎車,速度快,但是容量小(轎車只能乘坐幾個人);文件存儲類似于公共汽車,速度慢(公共汽車有站點和紅綠燈需要考慮),但是容量較大(能多坐不少人);對象存儲類似于地鐵,速度快,容量大。
圖3 三種存儲類型類比
2.對象存儲原理
2.1 對象數據組成結構
與塊存儲和文件存儲管理數據的方式不同,對象存儲是以對象的形式管理數據的。對象和文件最大的不同,就是在文件基礎之上增加了元數據。一般情況下,對象分為三個部分:數據、元數據以及對象id。
對象的數據通常是無結構的數據,比如:圖片、視頻或文檔等;對象的元數據則指的是對象的相關描述,比如:圖片的大小、文檔的擁有者等;對象id則是一個全局的唯一標識符,用來區分對象的。
2.2 對象訪問方式
對象存儲,訪問對象的方式很方便,是通過REST接口對對象進行操作,用HTTP動詞(GET、POST、PUT、DELETE等)描述操作。除此之外,還有一種訪問方式,就是使用各大云商提供的客戶端去操作對象。比如:Amazon的s3cmd、阿里云的osscmd/ossutil、騰訊云的coscmd等。這些客戶端都是各個云商開發出來,可以以命令行的形式在操作系統中操作對象的工具,各大云商都有詳細的文檔說明,在這就不一一贅述了。
2.3 對象存儲優缺點
先說優點,之前大概也提了下:
可擴展性高:對象存儲能夠擴展數十乃至數百EB的容量,能夠充分利用高密度存儲;
效率高:扁平化結構,不受復雜目錄系統對性能的影響;
無需遷移:對象存儲是一種橫向擴展系統,隨著容量的增加,數據根據算法自動分布于所有的對象存儲節點;
安全性高:對象存儲通常憑借HTTP調用對象存儲本身提供的認證密鑰來提供數據訪問;
訪問方便:不光支持HTTP(S)協議,采用REST的API方式調用和檢索數據,同樣增加了NFS和SMB支持;
成本相對低:與塊存儲方式相比,對象存儲是最具成本效益的數據存儲類型,并且與云計算搭配,把對象存儲的這一特性發揮的淋漓盡致。
再提缺點:
最終一致性:由于不同節點的位置不同,數據同步時可能會有一定時間的延遲或者錯誤;
不易做數據庫:對象存儲比較適合存儲那些變動不大甚至不變的文件,而對于像數據庫這種需要直接與存儲裸盤相互映射的應用,還是塊存儲更合適。
3. 對象存儲應用
前面說了許多定義,可能許多朋友還是云里霧里的,不知道對象存儲怎么使用。下面,我以騰訊云的對象存儲(cos)為例,使用python的代碼方式來實際應用一下。
cos有一個存儲桶(bucket,其他云商也有)的概念,它是對象的載體,可理解為存放對象的“容器”。用戶可以通過騰訊云控制器、API、SDK等多種方式管理以及配置存儲桶。下圖是功能的整個流程圖,具體含義后面會介紹:
圖4 上傳圖片和查看圖片流程圖
3.1 創建bucket
我就不用代碼的方式創建存儲桶了,直接在騰訊控制臺創建一個bucket,命名為“tyun-cn-test”。bucket有三種類型私有讀寫、公有讀私有寫、公有讀寫,凡是帶“私有”二字的,是需要請求簽名的。為了測試完整,我選擇私有讀寫的方式,來做一個上傳圖片的功能。
創建完bucket之后,就可以寫代碼了,我使用cos提供的API進行圖片上傳。因為我選擇的bucket是私有讀寫的,所以上傳圖片之前,還需要先生成一個請求簽名。
3.2 生成cos的請求簽名
圖5 生成密鑰的python代碼
cos的請求簽名的文檔寫的挺詳細,不過它是以PHP的方式舉例的,我把它重新用python封裝了一個函數,有幾個參數需要注意。
函數中,sign_time為簽名的有效時間,http_method為操作方式(上傳文件時用PUT,獲取文件時用GET),remote_file_name為上傳到cos的文件名,api_url為bucket的訪問地址,secret_id和secret_key都是騰訊云API密鑰。
3.3 上傳圖片到cos
上傳圖片到cos的整個流程:先通過POST方式暫時把圖片上傳到后端服務器,然后調用cos的API,使用PUT的方式把圖片上傳到cos,之后返回一個圖片的cos地址,最后刪除后端服務器上的圖片。
圖6 服務器上image上傳到cos代碼
上圖,就是把圖片從服務器上傳到cos的大致實現,其中fname是圖片在服務器上的地址,_get_cos_sign()函數就是前面生成請求簽名的函數。
需要注意的是,上傳圖片(PUT)和獲取圖片(GET)的方式不同,所以生成請求簽名的時傳遞的http_method也需要區分。訪問返回的圖片地址,就會發現圖片已經上傳成功到cos上了。
4.總結
對象存儲,作為一個新的存儲類型,在云計算高速發展的今天,有著很大的用武之地。不過,盡管有著擴展性好、效率高等優點,其一致性仍是不好處理的問題。所以,不能把雞蛋放在同一個籃子里。合理選擇存儲類型,對用戶和企業來說,都是一個需要考慮的問題。
-
存儲
+關注
關注
13文章
4332瀏覽量
85952 -
NAS
+關注
關注
11文章
289瀏覽量
112521
發布評論請先 登錄
相關推薦
評論