天天看點

簡單易用,API調配全掌握

開發者 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

繼續閱讀