本文將向您介紹對象存儲OSS產(chǎn)品中涉及的幾個(gè)基本概念,以便于您更好地理解OSS產(chǎn)品。
存儲空間是用戶(hù)用于存儲對象(Object)的容器,所有的對象都必須隸屬于某個(gè)存儲空間。存儲空間具有各種配置屬性,包括地域、訪(fǎng)問(wèn)權限、存儲類(lèi)型等。用戶(hù)可以根據實(shí)際需求,創(chuàng )建不同類(lèi)型的存儲空間來(lái)存儲不同的數據。
存儲空間的命名規范如下:
對象是OSS存儲數據的基本單元,也被稱(chēng)為OSS的文件。和傳統的文件系統不同,對象沒(méi)有文件目錄層級結構的關(guān)系。對象由元信息(Object Meta),用戶(hù)數據(Data)和文件名(Key)組成,并且由存儲空間內部唯一的Key來(lái)標識。對象元信息是一組鍵值對,表示了對象的一些屬性,比如最后修改時(shí)間、大小等信息,同時(shí)用戶(hù)也可以在元信息中存儲一些自定義的信息。
對象的生命周期是從上傳成功到被刪除為止。在整個(gè)生命周期內,除通過(guò)追加方式上傳的Object可以通過(guò)繼續追加上傳寫(xiě)入數據外,其他方式上傳的Object內容無(wú)法編輯,您可以通過(guò)重復上傳同名的對象來(lái)覆蓋之前的對象。
對象的命名規范如下:
說(shuō)明 對象名稱(chēng)需要區分大小寫(xiě)。如無(wú)特殊說(shuō)明,本文檔中的對象、文件稱(chēng)謂等同于Object。
在各語(yǔ)言SDK中,ObjectKey、Key以及ObjectName是同一概念,均表示對Object執行相關(guān)操作時(shí)需要填寫(xiě)的Object名稱(chēng)。例如向某一存儲空間上傳Object時(shí),ObjectKey表示上傳的Object所在存儲空間的完整名稱(chēng),即包含文件后綴在內的完整路徑,如填寫(xiě)為abc/efg/123.jpg。
Region表示OSS的數據中心所在物理位置。用戶(hù)可以根據費用、請求來(lái)源等選擇合適的地域創(chuàng )建Bucket。一般來(lái)說(shuō),距離用戶(hù)更近的Region訪(fǎng)問(wèn)速度更快。詳情請參見(jiàn)OSS已經(jīng)開(kāi)通的Region。
Region是在創(chuàng )建Bucket的時(shí)候指定的,一旦指定之后就不允許更改。該Bucket下所有的Object都存儲在對應的數據中心,目前不支持Object級別的Region設置。
Object操作在OSS上具有原子性,操作要么成功要么失敗,不會(huì )存在有中間狀態(tài)的Object。OSS保證用戶(hù)一旦上傳完成之后讀到的Object是完整的,OSS不會(huì )返回給用戶(hù)一個(gè)部分上傳成功的Object。
Object操作在OSS同樣具有強一致性,用戶(hù)一旦收到了一個(gè)上傳(PUT)成功的響應,該上傳的Object就已經(jīng)立即可讀,并且Object的冗余數據已經(jīng)寫(xiě)成功。不存在一種上傳的中間狀態(tài),即read-after-write卻無(wú)法讀取到數據。對于刪除操作也是一樣的,用戶(hù)刪除指定的Object成功之后,該Object立即變?yōu)椴淮嬖凇?/p>
Endpoint表示OSS對外服務(wù)的訪(fǎng)問(wèn)域名。OSS以HTTP RESTful API的形式對外提供服務(wù),當訪(fǎng)問(wèn)不同的Region的時(shí)候,需要不同的域名。通過(guò)內網(wǎng)和外網(wǎng)訪(fǎng)問(wèn)同一個(gè)Region所需要的Endpoint也是不同的。例如杭州Region的外網(wǎng)Endpoint是oss-cn-hangzhou.aliyuncs.com,內網(wǎng)Endpoint是oss-cn-hangzhou-internal.aliyuncs.com。具體的內容請參見(jiàn)各個(gè)Region對應的Endpoint。
OSS使用基于糾刪碼、多副本的數據冗余存儲機制,將每個(gè)對象的不同冗余存儲在同一個(gè)區域內多個(gè)設施的多個(gè)設備上,確保硬件失效時(shí)的數據持久性和可用性。
對比項 | OSS | 文件系統 |
---|---|---|
數據模型 | OSS是一個(gè)分布式的對象存儲服務(wù),提供的是一個(gè)Key-Value對形式的對象存儲服務(wù)。 | 文件系統是一種典型的樹(shù)狀索引結構。 |
數據獲取 | 根據Object的名稱(chēng)(Key)唯一的獲取該Object的內容。雖然用戶(hù)可以使用類(lèi)似test1/test.jpg的名字,但是這并不表示用戶(hù)的Object是保存在test1目錄下面的。對于OSS來(lái)說(shuō),test1/test.jpg僅僅只是一個(gè)字符串,和a.jpg這種并沒(méi)有本質(zhì)的區別。因此不同名稱(chēng)的Object之間的訪(fǎng)問(wèn)消耗的資源是類(lèi)似的。 | 一個(gè)名為test1/test.jpg的文件,訪(fǎng)問(wèn)過(guò)程需要先訪(fǎng)問(wèn)到test1這個(gè)目錄,然后再在該目錄下查找名為test.jpg的文件。 |
優(yōu)勢 | 支持海量的用戶(hù)并發(fā)訪(fǎng)問(wèn)。 | 支持文件的修改,比如修改指定偏移位置的內容、截斷文件尾部等。也支持文件夾的操作,比如重命名目錄、刪除目錄、移動(dòng)目錄等非常容易。 |
劣勢 | OSS保存的Object不支持修改(追加寫(xiě)Object需要調用特定的接口,生成的Object也和正常上傳的Object類(lèi)型上有差別)。用戶(hù)哪怕是僅僅需要修改一個(gè)字節也需要重新上傳整個(gè)Object。OSS可以通過(guò)一些操作來(lái)模擬類(lèi)似文件夾的功能,但是代價(jià)非常昂貴。比如重命名目錄,希望將test1目錄重命名成test2,那么OSS的實(shí)際操作是將所有以test1/開(kāi)頭的Object都重新復制成以test2/開(kāi)頭的Object,這是一個(gè)非常消耗資源的操作。因此在使用OSS的時(shí)候要盡量避免類(lèi)似的操作。 | 受限于單個(gè)設備的性能。訪(fǎng)問(wèn)越深的目錄消耗的資源也越大,操作擁有很多文件的目錄也會(huì )非常慢。 |
因此,將OSS映射為文件系統是非常低效的,也是不建議的做法。如果一定要掛載成文件系統的話(huà),建議盡量只做寫(xiě)新文件、刪除文件、讀取文件這幾種操作。使用OSS應該充分發(fā)揮其優(yōu)點(diǎn),即海量數據處理能力,優(yōu)先用來(lái)存儲海量的非結構化數據,比如圖片、視頻、文檔等。
以下是OSS與文件系統的概念對比:
對象存儲 OSS | 文件系統 |
---|---|
Object | 文件 |
Bucket | 主目錄 |
Region | 無(wú) |
Endpoint | 無(wú) |
AccessKey | 無(wú) |
無(wú) | 多級目錄 |
GetService | 獲取主目錄列表 |
GetBucket | 獲取文件列表 |
PutObject | 寫(xiě)文件 |
AppendObject | 追加寫(xiě)文件 |
GetObject | 讀文件 |
DeleteObject | 刪除文件 |
無(wú) | 修改文件內容 |
CopyObject (目的和源相同) | 修改文件屬性 |
CopyObject | 復制文件 |
無(wú) | 重命名文件 |
英文 | 中文 |
---|---|
Bucket | 存儲空間 |
Object | 對象或者文件 |
Endpoint | OSS 訪(fǎng)問(wèn)域名 |
Region | 地域或者數據中心 |
Put Object | 簡(jiǎn)單上傳 |
Post Object | 表單上傳 |
Multipart Upload | 分片上傳 |
Append Object | 追加上傳 |
Get Object | 簡(jiǎn)單下載 |
Callback | 回調 |
Object Meta | 文件元信息。用來(lái)描述文件信息,例如長(cháng)度,類(lèi)型等 |
Data | 文件數據 |
Key | 文件名 |
ACL (Access Control List) | 存儲空間或者文件的權限 |
說(shuō)明 如果沒(méi)有特殊說(shuō)明,本文中出現和術(shù)語(yǔ)表中相同的英文和中文,表達的是相同的意思。有時(shí)候為了表述方便會(huì )混合使用。