本文將向您介紹對象存儲OSS產品中涉及的幾個基本概念,以便于您更好地理解OSS產品。
存儲空間(Bucket)
存儲空間是用戶用于存儲對象(Object)的容器,所有的對象都必須隸屬于某個存儲空間。存儲空間具有各種配置屬性,包括地域、訪問權限、存儲類型等。用戶可以根據實際需求,創建不同類型的存儲空間來存儲不同的數據。
同一個存儲空間的內部是扁平的,沒有文件系統的目錄等概念,所有的對象都直接隸屬于其對應的存儲空間。
每個用戶可以擁有多個存儲空間。
存儲空間的名稱在OSS范圍內必須是全局唯一的。存儲空間創建成功后,名稱將無法修改。
說明全局唯一表示阿里云所有的用戶創建的Bucket名稱都不能相同。例如用戶A創建了名稱為example的Bucket,其他用戶無法再次創建名稱為example的Bucket。
存儲空間內部的對象數目沒有限制。
存儲空間的命名規范如下:
只能包括小寫字母、數字和短劃線(-)。
必須以小寫字母或者數字開頭和結尾。
長度必須在3~63字符之間。
對象(Object)
對象是OSS存儲數據的基本單元,也被稱為OSS的文件。和傳統的文件系統不同,對象沒有文件目錄層級結構的關系。對象由元數據(Object Meta)、用戶數據(Data)和文件名(Key)組成,并且由存儲空間內部唯一的Key來標識。對象元數據是一組鍵值對,表示了對象的一些屬性,例如文件類型、編碼方式等信息,同時用戶也可以在元數據中存儲一些自定義的信息。
對象的生命周期是從上傳成功到被刪除為止。在整個生命周期內,除使用追加方式上傳的Object可以通過繼續追加上傳寫入數據外,使用其他方式上傳的Object內容無法編輯,您可以通過重復上傳同名的對象來覆蓋之前的對象。
對象的命名規范如下:
使用UTF-8編碼。
長度必須在1~1023字符之間。
不能以正斜線(/)或者反斜線(\)開頭。
說明對象名稱需要區分大小寫。如無特殊說明,本文檔中的對象、文件稱謂等同于Object。
ObjectKey
在各語言SDK中,ObjectKey、Key以及ObjectName是同一概念,均表示對Object執行相關操作時需要填寫的Object名稱。例如向某一存儲空間上傳Object時,ObjectKey表示上傳的Object所在存儲空間的完整名稱,即包含文件后綴在內的完整路徑,如填寫為abc/efg/123.jpg
。
Object類型
Object包含以下三種類型:
Normal
通過簡單上傳生成的Object。上傳結束之后內容是固定的,只能讀取,不能修改。如果Object內容發生了改變,只能重新上傳同名的Object來覆蓋之前的內容。簡單上傳適用于上傳小于5 GB的單個文件、一次HTTP請求交互即可完成上傳的場景。更多信息,請參見簡單上傳。
Multipart
通過分片上傳生成的Object。上傳結束之后內容是固定的,只能讀取,不能修改。如果Object內容發生了改變,只能重新上傳同名的Object來覆蓋之前的內容。分片上傳適用于大文件加速上傳、網絡環境較差、文件大小不確定的場景。更多信息,請參見分片上傳。
Appendable
通過追加上傳生成的Object。追加上傳可在視頻數據產生之后即時將數據上傳至同一個Object。追加上傳適用于視頻監控、視頻直播等領域生成的實時視頻流場景。更多信息,請參見追加上傳。
不支持在不同類型的Object之間相互轉換。例如,Normal類型的Object無法轉換為Multipart或者Appendable類型。
Region(地域)
Region表示OSS的數據中心所在物理位置。用戶可以根據費用、請求來源等選擇合適的地域創建Bucket。一般來說,距離用戶更近的Region訪問速度更快。更多信息,請參見OSS已經開通的Region。
Region是在創建Bucket的時候指定的。Bucket創建成功后,Region將無法修改。該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,指的是訪問身份驗證中用到的AccessKey ID和AccessKey Secret。OSS通過使用AccessKey ID和AccessKey Secret對稱加密的方法來驗證某個請求的發送者身份。AccessKey ID用于標識用戶;AccessKey Secret是用戶用于加密簽名字符串和OSS用來驗證簽名字符串的密鑰,必須保密。對于OSS來說,AccessKey的來源有:
Bucket的擁有者申請的AccessKey。
被Bucket的擁有者通過RAM授權給第三方請求者的AccessKey。
被Bucket的擁有者通過STS授權給第三方請求者的AccessKey。
更多AccessKey介紹請參見創建AccessKey。
原子性和強一致性
原子性
Object操作在OSS上具有原子性,操作要么成功要么失敗,不存在中間狀態的Object。當Object上傳完成時,OSS即可保證讀到的Object是完整的,OSS不會返回給用戶一個部分上傳成功的Object。
強一致性
Object操作在OSS同樣具有強一致性,當用戶收到了上傳(PUT)成功的響應時,該上傳的Object進入立即可讀狀態,并且Object的冗余數據已經寫入成功。不存在上傳的中間狀態,即執行read-after-write,卻無法讀取到數據。對于刪除操作,用戶刪除指定的Object成功之后,該Object立即不存在。
數據冗余機制
OSS使用基于糾刪碼的數據冗余存儲機制,確保硬件失效時的數據持久性和可用性。
OSS Object操作具有強一致性,當用戶收到了上傳或復制成功的響應時,該上傳的Object就已經立即可讀,且數據已經冗余寫入到多個設備中。
OSS會通過計算網絡流量包的校驗和,驗證數據包在客戶端和服務端之間傳輸中是否出錯,保證數據完整傳輸。
OSS的冗余存儲機制,可支持兩個存儲設施并發損壞時,仍維持數據不丟失。
當數據存入OSS后,OSS會檢測和修復丟失的冗余,確保數據持久性和可用性。
OSS會周期性地通過校驗等方式驗證數據的完整性,及時發現因硬件失效等原因造成的數據損壞。當檢測到數據有部分損壞或丟失時,OSS會利用冗余的數據,進行重建并修復損壞數據。
OSS術語表
英文 | 中文 |
Bucket | 存儲空間 |
Object | 對象或者文件 |
Endpoint | OSS訪問域名 |
Region | 地域或者數據中心 |
AccessKey | AccessKey ID和AccessKey Secret的統稱,訪問密鑰 |
Put Object | 簡單上傳 |
Post Object | 表單上傳 |
Multipart Upload | 分片上傳 |
Append Object | 追加上傳 |
Get Object | 簡單下載 |
Callback | 回調 |
Object Meta | 文件元數據。用來描述文件信息,例如文件類型、編碼方式等 |
Data | 文件數據 |
Key | 文件名 |
ACL (Access Control List) | 存儲空間或者文件的權限 |
如果沒有特殊說明,本文中出現和術語表中相同的英文和中文,表達的是相同的意思。某些場景下,為了表述方便會混合使用。