雲計算

簡單易用,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字段為空。
PutBucketReferer

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
...

Leave a Reply

Your email address will not be published. Required fields are marked *