對象存儲從理論到實踐

今日頭條
新鈦云服
1. 三種存儲類型 隨著PC、平板電腦、智能手機(jī)等電子設(shè)備的普及,互聯(lián)網(wǎng)極大的提升了人們的生活水平。網(wǎng)絡(luò)在豐富人們生活的同時,也產(chǎn)生了龐大的數(shù)據(jù)量。 圖1 各種電子設(shè)備 據(jù)IDC預(yù)測,全球數(shù)據(jù)總量預(yù)計...

1. 三種存儲類型

隨著PC、平板電腦、智能手機(jī)等電子設(shè)備的普及,互聯(lián)網(wǎng)極大的提升了人們的生活水平。網(wǎng)絡(luò)在豐富人們生活的同時,也產(chǎn)生了龐大的數(shù)據(jù)量。

圖1 各種電子設(shè)備

據(jù)IDC預(yù)測,全球數(shù)據(jù)總量預(yù)計2020年達(dá)到44個ZB,我國數(shù)據(jù)量將達(dá)到8060個EB,占全球數(shù)據(jù)總量的18%。44個ZB是什么規(guī)模呢?相當(dāng)于44萬億GB。

數(shù)據(jù)量的迅速增加促進(jìn)了存儲行業(yè)的發(fā)展,硬件方面和軟件方面都有了長足的進(jìn)步。

本文主要對對象存儲進(jìn)行一個簡單的說明,希望通過本文,您能對對象存儲有個大致的了解。

主流存儲類型分為三種:塊存儲、文件存儲以及對象存儲

塊存儲主要是將裸磁盤空間整個映射給主機(jī),按照物理卷或邏輯卷的方式存儲數(shù)據(jù)。特點:速度快、保存的數(shù)據(jù)尺寸大、數(shù)據(jù)變化頻率高,缺點:可擴(kuò)展程度小、容量小。(其實我們?nèi)粘I钪幸姷降挠脖P,就是塊存儲)

文件存儲,典型代表NAS。NAS是類似一個共享文件夾,用戶可以通過相應(yīng)的傳輸協(xié)議,把數(shù)據(jù)放在上面。容量相對較大,但是速度較慢。

下面說到對象存儲了,不知道大家有沒有思考過一個問題。每天微信朋友圈或者微博,以及最近爆火的那些小視頻app,用戶上傳了海量的圖片或者視頻,它們都是存放在什么地方的呢?我個人認(rèn)為,對象存儲,是存儲它們的一個不錯選擇。

對象存儲,對象指的是面向?qū)ο?,集合了塊存儲和文件存儲的優(yōu)點,擁有速度快、容量大等特性。并且容易搭配云計算,是一種新的網(wǎng)絡(luò)存儲架構(gòu)。

當(dāng)然,三種存儲類型并不是完全獨立的,還是有依賴關(guān)系的。對象存儲在底層存儲介質(zhì)方面上,還是部分依賴塊存儲和文件存儲的。

圖2 三種存儲類型依賴關(guān)系

為了更好的說明三者的差異,我打個比方,假設(shè)有三個人想從A地到B地,現(xiàn)在有三種交通方式。甲選擇轎車、乙選擇公共汽車、丙選擇地鐵。塊存儲類似于轎車,速度快,但是容量?。ㄞI車只能乘坐幾個人);文件存儲類似于公共汽車,速度慢(公共汽車有站點和紅綠燈需要考慮),但是容量較大(能多坐不少人);對象存儲類似于地鐵,速度快,容量大。

圖3 三種存儲類型類比

2.對象存儲原理

2.1 對象數(shù)據(jù)組成結(jié)構(gòu)

與塊存儲和文件存儲管理數(shù)據(jù)的方式不同,對象存儲是以對象的形式管理數(shù)據(jù)的。對象和文件最大的不同,就是在文件基礎(chǔ)之上增加了元數(shù)據(jù)。一般情況下,對象分為三個部分:數(shù)據(jù)、元數(shù)據(jù)以及對象id。

對象的數(shù)據(jù)通常是無結(jié)構(gòu)的數(shù)據(jù),比如:圖片、視頻或文檔等;對象的元數(shù)據(jù)則指的是對象的相關(guān)描述,比如:圖片的大小、文檔的擁有者等;對象id則是一個全局的唯一標(biāo)識符,用來區(qū)分對象的。

2.2 對象訪問方式

對象存儲,訪問對象的方式很方便,是通過REST接口對對象進(jìn)行操作,用HTTP動詞(GET、POST、PUT、DELETE等)描述操作。除此之外,還有一種訪問方式,就是使用各大云商提供的客戶端去操作對象。比如:Amazon的s3cmd、阿里云的osscmd/ossutil、騰訊云的coscmd等。這些客戶端都是各個云商開發(fā)出來,可以以命令行的形式在操作系統(tǒng)中操作對象的工具,各大云商都有詳細(xì)的文檔說明,在這就不一一贅述了。

2.3 對象存儲優(yōu)缺點

先說優(yōu)點,之前大概也提了下:

可擴(kuò)展性高:對象存儲能夠擴(kuò)展數(shù)十乃至數(shù)百EB的容量,能夠充分利用高密度存儲;

效率高:扁平化結(jié)構(gòu),不受復(fù)雜目錄系統(tǒng)對性能的影響;

無需遷移:對象存儲是一種橫向擴(kuò)展系統(tǒng),隨著容量的增加,數(shù)據(jù)根據(jù)算法自動分布于所有的對象存儲節(jié)點;

安全性高:對象存儲通常憑借HTTP調(diào)用對象存儲本身提供的認(rèn)證密鑰來提供數(shù)據(jù)訪問;

訪問方便:不光支持HTTP(S)協(xié)議,采用REST的API方式調(diào)用和檢索數(shù)據(jù),同樣增加了NFS和SMB支持;

成本相對低:與塊存儲方式相比,對象存儲是最具成本效益的數(shù)據(jù)存儲類型,并且與云計算搭配,把對象存儲的這一特性發(fā)揮的淋漓盡致。

再提缺點:

最終一致性:由于不同節(jié)點的位置不同,數(shù)據(jù)同步時可能會有一定時間的延遲或者錯誤;

不易做數(shù)據(jù)庫:對象存儲比較適合存儲那些變動不大甚至不變的文件,而對于像數(shù)據(jù)庫這種需要直接與存儲裸盤相互映射的應(yīng)用,還是塊存儲更合適。

3. 對象存儲應(yīng)用

前面說了許多定義,可能許多朋友還是云里霧里的,不知道對象存儲怎么使用。下面,我以騰訊云的對象存儲(cos)為例,使用python的代碼方式來實際應(yīng)用一下。

cos有一個存儲桶(bucket,其他云商也有)的概念,它是對象的載體,可理解為存放對象的“容器”。用戶可以通過騰訊云控制器、API、SDK等多種方式管理以及配置存儲桶。下圖是功能的整個流程圖,具體含義后面會介紹:

3.1 創(chuàng)建bucket

我就不用代碼的方式創(chuàng)建存儲桶了,直接在騰訊控制臺創(chuàng)建一個bucket,命名為“tyun-cn-test”。bucket有三種類型私有讀寫、公有讀私有寫、公有讀寫,凡是帶“私有”二字的,是需要請求簽名的。為了測試完整,我選擇私有讀寫的方式,來做一個上傳圖片的功能。

創(chuàng)建完bucket之后,就可以寫代碼了,我使用cos提供的API進(jìn)行圖片上傳。因為我選擇的bucket是私有讀寫的,所以上傳圖片之前,還需要先生成一個請求簽名。

3.2 生成cos的請求簽名

圖5 生成密鑰的python代碼

cos的請求簽名的文檔寫的挺詳細(xì),不過它是以PHP的方式舉例的,我把它重新用python封裝了一個函數(shù),有幾個參數(shù)需要注意。

函數(shù)中,sign_time為簽名的有效時間,http_method為操作方式(上傳文件時用PUT,獲取文件時用GET),remote_file_name為上傳到cos的文件名,api_url為bucket的訪問地址,secret_id和secret_key都是騰訊云API密鑰。

3.3 上傳圖片到cos

上傳圖片到cos的整個流程:先通過POST方式暫時把圖片上傳到后端服務(wù)器,然后調(diào)用cos的API,使用PUT的方式把圖片上傳到cos,之后返回一個圖片的cos地址,最后刪除后端服務(wù)器上的圖片。

圖6 服務(wù)器上image上傳到cos代碼

上圖,就是把圖片從服務(wù)器上傳到cos的大致實現(xiàn),其中fname是圖片在服務(wù)器上的地址,_get_cos_sign()函數(shù)就是前面生成請求簽名的函數(shù)。

需要注意的是,上傳圖片(PUT)和獲取圖片(GET)的方式不同,所以生成請求簽名的時傳遞的http_method也需要區(qū)分。訪問返回的圖片地址,就會發(fā)現(xiàn)圖片已經(jīng)上傳成功到cos上了。

4.總結(jié)

對象存儲,作為一個新的存儲類型,在云計算高速發(fā)展的今天,有著很大的用武之地。不過,盡管有著擴(kuò)展性好、效率高等優(yōu)點,其一致性仍是不好處理的問題。所以,不能把雞蛋放在同一個籃子里。合理選擇存儲類型,對用戶和企業(yè)來說,都是一個需要考慮的問題。

兩年研發(fā)和架構(gòu)經(jīng)驗,曾在威鋒網(wǎng)任職后端工程師,參與并主導(dǎo)過產(chǎn)品設(shè)計、研發(fā)、測試和運維(威鋒網(wǎng)的rds、威鋒搜索)等完整產(chǎn)品生命周期流程,python、php開發(fā)者,狂熱技術(shù)愛好者。solr、zookeeper、saltstack、influxdb等開源項目愛好者和研究者。

THEEND

最新評論(評論僅代表用戶觀點)

更多
暫無評論