本部分將向您介紹本產品中涉及的幾個基本概念,以便於您更好地理解Object Storage Service 產品。
儲存空間(Bucket)
儲存空間是您用於儲存物件(Object)的容器,所有的對象都必須隸屬於某個儲存空間。您可以設定和修改儲存空間屬性用來控制地域、存取權限、生命週期等,這些屬性設定直接作用於該儲存空間內所有對象,因此您可以通過靈活建立不同的儲存空間來完成不同的管理功能。
- 同一個儲存空間的內部是扁平的,沒有檔案系統的目錄等概念,所有的對象都直接隸屬於其對應的儲存空間。
- 每個使用者可以擁有多個儲存空間。
- 儲存空間的名稱在 OSS 範圍內必須是全域唯一的,一旦建立之後無法修改名稱。
- 儲存空間內部的對象數目沒有限制。
儲存空間的命名規範如下:
- 只能包括小寫字母、數字和短橫線(-)。
- 必須以小寫字母或者數字開頭和結尾。
- 長度必須在3–63位元組之間。
對象/檔案(Object)
對象是 OSS 儲存資料的基本單元,也被稱為 OSS 的檔案。對象由元資訊(Object Meta),使用者資料(Data)和檔案名(Key)組成。對象由儲存空間內部唯一的 Key 來標識。對象元資訊是一個鍵值對,表示了對象的一些屬性,比如最後修改時間、大小等資訊,同時使用者也可以在元資訊中儲存一些自訂的資訊。
對象的生命週期是從上傳成功到被刪除為止。在整個生命週期內,對象資訊不可變更。重複上傳同名的對象會覆蓋之前的對象,因此,OSS 不支援修改檔案的部分內容等操作。
OSS 提供了追加上傳功能,使用者可以使用該功能不斷地在Object尾部追加寫入資料。
對象的命名規範如下:
- 使用UTF-8編碼。
- 長度必須在1–1023位元組之間。
- 不能以正斜線(/)或者反斜線(\)開頭。
说明 對象名稱需要區分大小寫。如無特殊說明,本文檔中的對象、檔案稱謂等同於 Object。
Region(地域)
Region 表示 OSS 的資料中心所在的地域,物理位置。使用者可以根據費用、請求來源等綜合選擇資料存放區的 Region。一般來說,距離使用者更近的 Region 訪問速度更快。詳情請查看OSS 已經開通的 Region。
Region是在建立 Bucket 的時候指定的,一旦指定之後就不允許更改。該 Bucket 下所有的 Object 都儲存在對應的資料中心,目前不支援 Object 等級的 Region 設定。
Endpoint(訪問網域名稱)
Endpoint 表示 OSS 對外服務的訪問網域名稱。OSS 以 HTTP RESTful API 的形式對外提供服務,當訪問不同的 Region 的時候,需要不同的網域名稱。通過內網和外網訪問同一個 Region 所需要的 Endpoint 也是不同的。例如杭州 Region 的外網 Endpoint 是 oss-cn-hangzhou.aliyuncs.com,內網 Endpoint 是 oss-cn-hangzhou-internal.aliyuncs.com。具體的內容請參見各個 Region 對應的 Endpoint。
AccessKey(存取金鑰)
AccessKey,簡稱 AK,指的是訪問身分識別驗證中用到的 AccessKeyId 和AccessKeySecret。OSS 通過使用 AccessKeyId 和 AccessKeySecret 對稱式加密的方法來驗證某個請求的寄件者身份。AccessKeyId 用於標識使用者,AccessKeySecret 是使用者用於加密簽名字元串和 OSS 用來驗證簽名字元串的密鑰,其中 AccessKeySecret 必須保密。對於 OSS 來說,AccessKey 的來源有:
- Bucket 的擁有者申請的 AccessKey。
- 被 Bucket 的擁有者通過 RAM 授權給第三方要求者的 AccessKey。
- 被 Bucket 的擁有者通過 STS 授權給第三方要求者的 AccessKey。
更多 AccessKey 介紹請參見存取控制。
強一致性
Object 操作在 OSS 上具有原子性,操作要麼成功要麼失敗,不會存在有中間狀態的Object。OSS 保證使用者一旦上傳完成之後讀到的 Object 是完整的,OSS 不會返回給使用者一個部分上傳成功的 Object。
Object 操作在 OSS 上同樣具有強一致性,使用者一旦收到了一個上傳(PUT)成功的響應,該上傳的 Object 就已經立即可讀,並且資料的三份副本已經寫成功。不存在一種上傳的中間狀態,即 read-after-write 卻無法讀取到資料。對於刪除操作也是一樣的,使用者刪除指定的 Object 成功之後,該 Object 立即變為不存在。
強一致性方便了使用者架構設計,可以使用跟傳統存放裝置同樣的邏輯來使用OSS,修改立即可見,無需考慮最終一致性帶來的各種問題。
OSS與檔案系統的對比
對比項 | OSS | 檔案系統 |
---|---|---|
資料模型 | OSS 是一個分布式的Object Storage Service服務,提供的是一個 Key-Value 對形式的Object Storage Service服務。 | 檔案系統是一種典型的樹狀索引結構。 |
資料獲取 | 根據 Object 的名稱(Key)唯一的獲取該Object的內容。 雖然使用者可以使用類似 test1/test.jpg 的名字,但是這並不表示使用者的 Object 是保存在test1 目錄下面的。對於 OSS 來說,test1/test.jpg 僅僅只是一個字元串,和a.jpg 這種並沒有本質的區別。因此不同名稱的 Object 之間的訪問消耗的資源是類似的。 |
一個名為 test1/test.jpg 的檔案,訪問過程需要先訪問到 test1 這個目錄,然後再在該目錄下尋找名為 test.jpg 的檔案。 |
優勢 | 支援海量的使用者並發訪問。 | 支援檔案的修改,比如修改指定位移位置的內容、截斷檔案尾部等。也支援檔案夾的操作,比如重新命名目錄、刪除目錄、移動目錄等非常容易。 |
劣勢 | OSS 保存的 Object 不支援修改(追加寫 Object 需要調用特定的介面,生成的 Object 也和正常上傳的 Object 類型上有差別)。使用者哪怕是僅僅需要修改一個位元組也需要重新上傳整個 Object。 OSS可以通過一些操作來類比類似檔案夾的功能,但是代價非常昂貴。比如重新命名目錄,希望將 test1 目錄重新命名成 test2,那麼 OSS 的實際操作是將所有以 test1/ 開頭的 Object 都重新複製成以 test2/ 開頭的 Object,這是一個非常消耗資源的操作。因此在使用 OSS 的時候要盡量避免類似的操作。 |
受限於單個裝置的效能。訪問越深的目錄消耗的資源也越大,操作擁有很多檔案的目錄也會非常慢。 |
因此,將 OSS 映射為檔案系統是非常低效的,也是不建議的做法。如果一定要掛載成檔案系統的話,建議盡量只做寫新檔案、刪除檔案、讀取檔案這幾種操作。使用 OSS 應該充分發揮其優點,即海量資料處理能力,優先用來儲存海量的非結構化資料,比如圖片、視頻、文檔等。
以下是OSS與檔案系統的概念對比:
Object Storage Service | 檔案系統 |
---|---|
Object | 檔案 |
Bucket | 主目錄 |
Region | 無 |
Endpoint | 無 |
AccessKey | 無 |
無 | 多級目錄 |
GetService | 獲取主目錄列表 |
GetBucket | 獲取檔案清單 |
PutObject | 寫檔案 |
AppendObject | 追加寫檔案 |
GetObject | 讀檔案 |
DeleteObject | 刪除檔案 |
無 | 修改檔案內容 |
CopyObject (目的和源相同) | 修改檔案屬性 |
CopyObject | 複製檔案 |
無 | 重新命名檔案 |