開發者 API 調用
OSS 支援 RESTFUL API 形式調用,基本上服務端控制台上的功能配置,都可以通過 API 完成配置操作。也可以通過 OpenAPI 對檔案進行叢集的管理,結果使用者通路控制台(RAM policy)加強客戶的安全屏蔽,目前支援的 API 如下;
GetService (ListBuckets)
對服務位址做Get請求可以傳回請求者擁有的所有存儲空間(Bucket),其中正斜線(/)表示根目錄。
PutBucket
PutBucket接口用于建立存儲空間(Bucket)
DeleteBucket
DeleteBucket用于删除某個存儲空間(Bucket)。
GetBucket (ListObjects)
GetBucket接口用于列舉存儲空間(Bucket)中所有檔案(Object)的資訊。
GetBucketInfo
GetBucketInfo接口用于檢視存儲空間(Bucket)的相關資訊。隻有Bucket的擁有者才能檢視Bucket的資訊。
GetBucketLocation
GetBucketLocation接口用于檢視存儲空間(Bucket)的位置資訊。隻有Bucket的擁有者才能檢視Bucket的位置資訊。
PutBucketACL
PutBucketACL接口用于修改存儲空間(Bucket)的通路權限。隻有該Bucket的建立者有權限執行此操作。
GetBucketAcl
GetBucketAcl接口用于擷取某個存儲空間(Bucket)的通路權限(ACL)。隻有Bucket的擁有者才能擷取Bucket的通路權限。
PutBucketLifecycle
PutBucketLifecycle接口用于設定存儲空間(Bucket)的生命周期規則。生命周期規則開啟後,OSS将按照配置規則,定期自動删除與規則相比對的檔案(Object)。隻有Bucket的擁有者才能發起此請求。
GetBucketLifecycle
GetBucketLifecycle接口用于檢視存儲空間(Bucket)的生命周期規則(Lifecycle)。隻有Bucket的擁有者才有權限檢視Bucket的生命周期規則。
DeleteBucketLifecycle
DeleteBucketLifecycle接口用于删除指定存儲空間(Bucket)的生命周期規則。使用DeleteBucketLifecycle接口删除指定Bucket所有的生命周期規則後,該Bucket中的檔案(Object)不會被自動删除。隻有Bucket的擁有者才能删除該Bucket的生命周期規則。
PutBucketVersioning
PutBucketVersioning用于設定指定 Bucket 的版本控制狀态。隻有 Bucket 所有者有權限執行此操作。
GetBucketVersioning
GetBucketVersioning接口用于擷取指定 Bucket 的版本控制狀态。
GetBucketVersions(ListObjectVersions)
GetBucketVersions接口用于列出 Bucket 中包括删除标記(Delete Marker)在内的所有 Object 的版本資訊。
PutBucketPolicy
PutBucketPolicy接口用于為指定的存儲空間(Bucket)設定授權政策(Policy)。
GetBucketPolicy
GetBucketPolicy用于擷取指定存儲空間(Bucket)的權限政策(Policy)。
DeleteBucketPolicy
DeleteBucketPolicy用于删除指定存儲空間(Bucket)的權限政策(Policy)。
GetBucketLogging
GetBucketLogging接口用于檢視存儲空間(Bucket)的通路日志配置。隻有Bucket的擁有者才能檢視Bucket的通路日志配置。
DeleteBucketLogging
DeleteBucketLogging用于關閉存儲空間(Bucket)的通路日志記錄功能。隻有Bucket的擁有者才有權限關閉Bucket通路日志記錄功能。
PutBucketLogging
PutBucketLogging接口用于為存儲空間(Bucket)開啟通路日志記錄功能。通路日志記錄功能開啟後,OSS将自動記錄通路Bucket請求的詳細資訊,并以小時為機關将通路日志作為一個檔案(Object)寫入指定的Bucket。
PutBucketWebsite
PutBucketWebsite接口用于将一個bucket設定成靜态網站托管模式,以及設定跳轉規則。
GetBucketWebsite
GetBucketWebsite接口用于檢視存儲空間(Bucket)的靜态網站托管狀态以及跳轉規則。
DeleteBucketWebsite
DeleteBucketWebsite接口用于關閉存儲空間(Bucket)的靜态網站托管模式以及跳轉規則。隻有Bucket的擁有者才能關閉Bucket的靜态網站托管模式。
GetBucketReferer
GetBucketReferer接口用于檢視存儲空間(Bucket)的防盜鍊(Referer)相關配置。
PutBucketReferer
PutBucketReferer接口用于設定存儲空間(Bucket)的防盜鍊(Referer)。您可以使用此接口設定Referer的通路白名單以及是否允許Referer字段為空。
PutBucketTags接口用來給某個Bucket添加或修改标簽。
GetBucketTags
GetBucketTags用于擷取存儲空間(Bucket)的标簽資訊。
DeleteBucketTags
DeleteBucketTags接口用于删除存儲空間(Bucket)标簽。
PutBucketEncryption
PutBucketEncryption接口用于配置Bucket的加密規則。
GetBucketEncryption
GetBucketEncryption接口用于擷取Bucket加密規則。
DeleteBucketEncryption
DeleteBucketEncryption接口用于删除Bucket加密規則。
PutBucketRequestPayment
PutBucketRequestPayment接口用于設定請求者付費模式。
GetBucketRequestPayment
GetBucketRequestPayment接口用于擷取請求者付費模式配置資訊。
PutBucketCORS
PutBucketcors接口用于為指定的存儲空間(Bucket)設定一個跨域資源共享(CORS)規則。如果Bucket已有CORS規則,使用此接口會覆寫原有規則。Bucket預設不開啟CORS功能,所有跨域請求的Origin都不被允許。
GetBucketCORS
GetBucketCORS接口用于擷取指定存儲空間(Bucket)目前的跨域資源共享(CORS)規則。
DeleteBucketCORS
DeleteBucketcors用于關閉指定存儲空間(Bucket)對應的跨域資源共享(CORS)功能并清空所有規則。
PutObject
上傳檔案到 OSS
GetObject
下載下傳 OSS 檔案
CopyObject
CopyObject接口用于在存儲空間(Bucket )内或同地域的Bucket之間拷貝檔案(Object)。使用CopyObject接口發送一個Put請求給OSS,OSS會自動判斷為拷貝操作,并直接在伺服器端執行該操作。
AppendObject
AppendObject接口用于以追加寫的方式上傳檔案(Object)。通過AppendObject操作建立的Object類型為Appendable Object,而通過PutObject上傳的Object是Normal Object。
DeleteObject
DeleteObject用于删除某個檔案(Object)。使用DeleteObject需要對該Object有寫權限。
DeleteMultipleObjects
DeleteMultipleObjects接口用于删除同一個存儲空間(Bucket)中的多個檔案(Object)。
HeadObject
HeadObject接口用于擷取某個檔案(Object)的元資訊。使用此接口不會傳回檔案内容。
GetObjectMeta
GetObjectMeta接口用于擷取一個檔案(Object)的中繼資料資訊,包括該Object的ETag、Size、LastModified資訊,并且不傳回該Object的内容。
PostObject
PostObject使用HTML表單上傳Object到指定Bucket。
Callback
使用者隻需要在發送給 OSS 的請求中攜帶相應的 Callback 參數,即能實作回調。本文詳細介紹Callback的實作原理。
RestoreObject
RestoreObject接口用于解凍歸檔類型(Archive)的檔案(Object)。
SelectObject
SelectObject用于對目标檔案執行SQL語句,傳回執行結果。
InitiateMultipartUpload
使用Multipart Upload模式傳輸資料前,必須先調用該接口來通知OSS初始化一個Multipart Upload事件。
UploadPart
初始化一個MultipartUpload之後,可以根據指定的Object名和Upload ID來分塊(Part)上傳資料。
UploadPartCopy
UploadPartCopy通過從一個已存在的Object中拷貝資料來上傳一個Part。
CompleteMultipartUpload
在将所有資料Part都上傳完成後,必須調用CompleteMultipartUpload接口來完成整個檔案的MultipartUpload。
AbortMultipartUpload
AbortMultipartUpload接口用于終止MultipartUpload事件。您需要提供MultipartUpload事件相應的Upload ID。
ListMultipartUploads
ListMultipartUploads用來列舉所有執行中的Multipart Upload事件,即已經初始化但還未Complete或者Abort的Multipart Upload事件。
ListParts
ListParts接口用于列舉指定Upload ID所屬的所有已經上傳成功Part。
PutObjectACL
PutObjectACL接口用于修改檔案(Object)的通路權限(ACL)。此操作隻有Bucket Owner有權限執行,且需對Object有讀寫權限。
GetObjectACL
GetObjectACL接口用來擷取某個存儲空間(Bucket)下的某個檔案(Object)的通路權限(ACL)。
GetSymlink
GetSymlink接口用于擷取軟連結。此操作需要您對該軟連結有讀權限。
PutSymlink
PutSymlink接口用于為OSS的TargetObject建立軟連結(Symlink),您可以通過該軟連結通路TargetObject。
PutObjectTagging
您可以通過PutObjectTagging接口設定或更新對象的标簽(Object Tagging)。
GetObjectTagging
您可以通過GetObjectTagging接口擷取對象的标簽資訊。
DeleteObjectTagging
您可以通過DeleteObjectTagging删除指定對象的标簽。
PutLiveChannel
通過RTMP協定上傳音視訊資料前,必須先調用該接口建立一個LiveChannel。調用PutLiveChannel接口會傳回RTMP推流位址,以及對應的播放位址。
ListLiveChannel
ListLiveChannel接口用于列舉指定的LiveChannel。
DeleteLiveChannel
DeleteLiveChannel接口用于删除指定的LiveChannel。
PutLiveChannelStatus
LiveChannel分為enabled和disabled兩種狀态。您可以使用PutLiveChannelStatus接口在兩種狀态之間進行切換。
GetLiveChannelInfo
GetLiveChannelInfo接口用于擷取指定LiveChannel的配置資訊。
GetLiveChannelStat
GetLiveChannelStat接口用于擷取指定LiveChannel的推流狀态資訊。
GetLiveChannelHistory
GetLiveChannelHistory接口用于擷取指定LiveChannel的推流記錄。使用GetLiveChannelHistory接口最多會傳回指定LiveChannel最近的10次推流記錄。
PostVodPlaylist
PostVodPlaylist接口用于為指定的LiveChannel生成一個點播用的播放清單。OSS會查詢指定時間範圍内由該LiveChannel推流生成的ts檔案,并将其拼裝為一個m3u8播放清單。
GetVodPlaylist
GetVodPlaylist接口用于檢視指定LiveChannel在指定時間段内推流生成的播放清單。
開發者 SDK 調用
如果使用者端不想自己計算鑒權,直接利用 SDK 封裝的 API 工具集,免去鑒權的複雜計算
支援 JAVA、 python、PHP 、GO 、C 、C# 、C++、Ruby 等
熱點存儲優化
OSS 後端采用的不是 hash key 的方式存儲,而是采用了 LSM Tree 結構,系統性能是靠分裂分區擴充的。這種場景要求使用者在存儲 OSS 内容時,在檔案命名上要避開熱點字首。使用者如果字首帶了類似日期資訊熱點字首,可能導緻在切換月份的時候從N個分區跳變到壓力集中到一個分區;
細節約定
OSS按照檔案名UTF-8編碼的順序對使用者資料進行自動分區,進而能夠處理海量檔案,以及承載高速率的客戶請求。不過,如果您在上傳大量檔案時,在命名上使用了順序字首(如時間戳或字母順序),可能會導緻大量檔案索引集中存儲于某個特定分區。這樣,當您的請求速率超過2000次/秒時(下載下傳、上傳、删除、拷貝、擷取中繼資料資訊等操作算1次操作,批量删除N個檔案、列舉N個檔案等操作算N次操作),會帶來如下後果:
該分區成為熱點分區,導緻分區的I/O能力被耗盡,或被系統自動限制請求速率。
熱點分區的存在會觸發系統進行持續的分區資料再均衡,這個過程可能會延長請求處理時間。
以上情況會降低OSS的水準擴充效果,導緻客戶的請求速率受限。
要解決這個問題,就要消除檔案名中的順序字首。您可以在檔案名字首中引入某種随機性,這樣檔案索引(以及 I/O 負載)就會均勻分布在多個分區。
下面提供了幾個将順序字首改為随機性字首的方法示例。
sample-bucket-01/2017-11-11/customer-1/file1
sample-bucket-01/2017-11-11/customer-2/file2
sample-bucket-01/2017-11-11/customer-3/file3
...
sample-bucket-01/2017-11-12/customer-2/file4
sample-bucket-01/2017-11-12/customer-5/file5
sample-bucket-01/2017-11-12/customer-7/file6
針對這種情況,可以對客戶ID計算哈希,即MD5(customer-id) ,并取若幹字元的哈希字首作為檔案名的字首。假如取4個字元的哈希字首,結果如下:
sample-bucket-01/2c99/2017-11-11/customer-1/file1
sample-bucket-01/7a01/2017-11-11/customer-2/file2
sample-bucket-01/1dbd/2017-11-11/customer-3/file3
sample-bucket-01/7a01/2017-11-12/customer-2/file4
sample-bucket-01/b1fc/2017-11-12/customer-5/file5
sample-bucket-01/2bb7/2017-11-12/customer-7/file6