預設情況下,阿里雲帳號下同一地區的所有Bucket共用頻寬。當多個Bucket並發傳輸大量資料時,可能因頻寬爭搶導致關鍵業務傳輸延遲。通過配置資源集區QoS流控可解決此問題:閾值流控防止某個Bucket佔用過多頻寬,優先順序流控保障核心業務最小頻寬,兩種方案互補使用,確保重要業務穩定運行。
工作原理
閾值流控
為各層級對象(Bucket、BucketGroup)設定頻寬上限,防止資源過度佔用。
層級關係說明
資源集區層級結構:資源集區內部可以形成多層級的內含項目關聯性,實際情境中可能有以下幾種層級結構。
要求者流控維度(獨立維度):要求者不是資源集區的層級結構成員,而是一個獨立的流控維度。
流控生效原則
基本原則
資源集區: 最大100Gbps
├─ Bucket A: 最大40Gbps ← 即使空閑,也不能超過40Gbps
├─ Bucket B: 最大30Gbps
└─ Bucket C: 不限制 ← 可使用全部剩餘頻寬約束規則
多層級限制同時生效:實際頻寬取所有生效規則的最小值
下層頻寬之和不能超過上層總頻寬
要求者維度獨立約束:與資源集區層級約束同時生效,取最小值
樣本
RAM使用者訪問Bucket時,同時受:
要求者限制(20Gbps)← 獨立維度
Bucket限制(30Gbps)← 資源集區層級
實際最大頻寬 = min(20Gbps, 30Gbps) = 20Gbps
優先順序流控
在資源集區層面配置3-10個優先順序等級。優先順序等級越大,優先順序越高。為不同優先順序的對象分配保底頻寬,確保高優先順序業務在資源競爭時優先獲得頻寬。如果沒有為對象配置優先順序等級,則使用預設優先順序等級。如果沒有為優先順序等級配置保底頻寬,則使用預設保底頻寬。
核心機制
保底保障:每個優先順序都有保底頻寬,硬性保證一定可以達到該保底頻寬
搶佔機制:高優先順序可以搶佔低優先順序超出保底頻寬部分的頻寬,且更高優先順序優先搶佔
空閑利用:低優先順序也可以使用高優先順序閒置保底頻寬,但較高優先順序優先使用
配置約束:所有優先順序保底頻寬之和 ≤ 資源集區總頻寬
典型情境
以下情境資源集區總限制100Gbps,優先順序1到優先順序3。
兩種流控配合使用
對每個流控資源需要同時考慮閾值流控上限、優先順序流控保底和實際需求的多維度影響。
生效原則
閾值流控上限是硬限制:無論保底多高,最終不能超過閾值上限
優先順序保底是軟保障:在閾值上限範圍內盡量滿足保底
配置樣本
正常配置
Bucket A 同時配置:
優先順序流控:保底50Gbps ← 優先順序維度
閾值流控:最大80Gbps ← 資源集區層級
結果:Bucket A 可用頻寬為 50-80Gbps(至少50,最多80)
配置衝突
Bucket A 同時配置:
優先順序流控:保底80Gbps ← 優先順序維度
閾值流控:最大50Gbps ← 資源集區層級
結果:Bucket A 實際可用頻寬為 50Gbps(閾值流控上限優先,而不是80Gbps)
申請資源集區
當阿里雲帳號下某個地區的頻寬達到400 Gbps或以上時,可聯絡支援人員申請建立資源集區、控制台使用資源集區以及優先順序流控。
提交工單時需提供以下資訊:
單個資源集區內的Bucket需滿足同一使用者、同一地區且相同冗餘類型。建立資源集區過程中可能存在資料移轉與資源騰挪。
地區:華東1(杭州)
資源集區名稱:qos-resource-pool-1
Bucket列表:qos-examplebucket-1, qos-examplebucket-2
總上傳頻寬:300 Gbps
內網上傳頻寬:100 Gbps
外網上傳頻寬:200 Gbps
總下載頻寬:100 Gbps
內網下載頻寬:50 Gbps
外網下載頻寬:50 Gbps
控制台使用資源集區:需要
優先順序流控:需要配置閾值流控
適合需要限制頻寬上限,防止某個對象佔用過多資源的情境。
配置Bucket頻寬上限
防止某個Bucket流量過大影響其他Bucket。
控制台
在資源集區QoS頁面,單擊目標資源集區名稱,然後單擊資源集區內目標Bucket右側的修改流控配置,按照以上要求設定Bucket頻寬。
ossutil
使用前,需安裝ossutil。
通過本地XML設定檔(qos.xml)配置指定Bucket的頻寬上限。
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth> <TotalDownloadBandwidth>100</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth> </QoSConfiguration>為指定Bucket(樣本值為examplebucket)添加以上頻寬配置。
ossutil api invoke-operation --op-name put-bucket-qos-info --method PUT --bucket examplebucket --parameters qosInfo --body=file://qos.xml查看Bucket的頻寬配置。
ossutil api invoke-operation --op-name get-bucket-qos-info --method GET --bucket examplebucket --parameters qosInfo
SDK
目前僅支援通過Python SDK V2和Go SDK V2為Bucket設定頻寬上限。
通過本地qos.xml檔案配置Bucket的頻寬上限。
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth> <TotalDownloadBandwidth>100</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth> </QoSConfiguration>為指定Bucket設定以上頻寬配置。
import alibabacloud_oss_v2 as oss def PutBucketQoSInfo(): # 從環境變數中載入憑證資訊,用於身分識別驗證 credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider() # 載入預設配置並擷取設定物件 cfg = oss.config.load_default() # 設定憑證提供者 cfg.credentials_provider = credentials_provider # 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou cfg.region = "cn-hangzhou" # 使用設定物件初始化OSS用戶端 client = oss.Client(cfg) # 初始化qos_xml_body為空白字串 qos_xml_body = "" # 開啟名為'qos.xml'的檔案,並讀取其中的內容到qos_xml_body變數中 with open('qos.xml', 'r') as qos_file: qos_xml_body = qos_file.read() # 構造一個操作輸入請求對象,用於設定儲存空間的QoS資訊 req = oss.OperationInput( op_name = 'PutBucketQoSInfo', # 操作名稱,這裡是指定設定儲存空間QoS資訊的操作 method = 'PUT', # HTTP方法類型,此處為PUT,表示更新資源 parameters = { 'qosInfo': '', # 這裡是參數列表,指定要設定的是QoS資訊 }, headers = None, # 要求標頭資訊,如果不需要特殊設定則可以為None body = qos_xml_body, # 請求體,包含之前從'qos.xml'檔案讀取的內容 bucket = 'examplebucket', # 目標儲存空間的名稱 ) # 調用用戶端的invoke_operation方法執行請求,並接收響應 resp = client.invoke_operation(req) # 列印響應的狀態代碼 print(resp.status_code) # 列印響應的頭部資訊 print(resp.headers) if __name__ == "__main__": PutBucketQoSInfo()
API
調用PutBucketQoSInfo按以下樣本限制Bucket頻寬。
<QoSConfiguration>
<TotalUploadBandwidth>100</TotalUploadBandwidth>
<IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
<ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
<TotalDownloadBandwidth>100</TotalDownloadBandwidth>
<IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
<ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
</QoSConfiguration>配置Bucket要求者頻寬上限
RAM使用者
多個業務共用同一個Bucket,需要限制某個RAM使用者的頻寬,避免其過度佔用。
控制台
ossutil
使用前,需安裝ossutil。
以下樣本用於限制RAM使用者訪問資源集區內某個Bucket的頻寬:
通過本地XML設定檔(qos.xml)配置指定RAM使用者訪問資源集區內某個Bucket的頻寬上限。
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>-1</ExtranetUploadBandwidth> <TotalDownloadBandwidth>100</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>-1</ExtranetDownloadBandwidth> </QoSConfiguration>查看RAM使用者ID。
為訪問Bucket(樣本值為examplebucket)的RAM使用者(UID為266xxxx)添加以上頻寬配置。
ossutil api invoke-operation --op-name put-bucket-requester-qos-info --method PUT --bucket=examplebucket --parameters requesterQosInfo --parameters qosRequester=266xxxx --body file://qos.xml(可選)擷取該RAM使用者訪問資源集區內某個Bucket的頻寬配置。
ossutil api invoke-operation --op-name get-bucket-requester-qos-info --method GET --bucket=examplebucket --parameters requesterQosInfo --parameters qosRequester=266xxxx
SDK
目前僅支援通過Python SDK V2和Go SDK V2限制RAM使用者訪問Bucket的頻寬上限。
通過本地qos.xml檔案配置指定RAM使用者訪問資源集區內某個Bucket的頻寬上限。
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>-1</ExtranetUploadBandwidth> <TotalDownloadBandwidth>100</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>-1</ExtranetDownloadBandwidth> </QoSConfiguration>查看RAM使用者ID。
為訪問Bucket的RAM使用者佈建以上頻寬配置。
import alibabacloud_oss_v2 as oss def PutBucketRequesterQoSInfo(): # 從環境變數中載入憑證資訊,用於身分識別驗證 credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider() # 載入預設配置並擷取設定物件 cfg = oss.config.load_default() # 設定憑證提供者 cfg.credentials_provider = credentials_provider # 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou cfg.region = "cn-hangzhou" # 使用設定物件初始化OSS用戶端 client = oss.Client(cfg) # 初始化qos_xml_body為空白字串 qos_xml_body = "" # 開啟名為'qos.xml'的檔案,並讀取其中的內容到qos_xml_body變數中 with open('qos.xml', 'r') as qos_file: qos_xml_body = qos_file.read() # 構造一個操作輸入請求對象,用於設定儲存空間的要求者QoS資訊 req = oss.OperationInput( op_name = 'PutBucketRequesterQoSInfo', # 操作名稱,這裡是指定設定儲存空間要求者QoS資訊的操作 method = 'PUT', # HTTP方法類型,此處為PUT,表示更新資源 parameters = { 'requesterQosInfo': '', # 參數列表,指定要設定的是要求者QoS資訊 'qosRequester': '2598732222222xxxx', # 要求者的唯一識別碼,用於區分不同的要求者 }, headers = None, # 要求標頭資訊,如果不需要特殊設定則可以為None body = qos_xml_body, # 請求體,包含之前從'qos.xml'檔案讀取的內容 bucket = 'examplebucket', # 目標儲存空間的名稱 ) # 調用用戶端的invoke_operation方法執行請求,並接收響應 resp = client.invoke_operation(req) # 列印響應的狀態代碼 print(resp.status_code) # 列印響應的頭部資訊 print(resp.headers) # 列印響應的內容(HTTP響應體),通常包含請求返回的具體資料 print(resp.http_response.content) if __name__ == "__main__": PutBucketRequesterQoSInfo()
API
查看RAM使用者ID。
調用PutBucketRequesterQoSInfo按以下樣本限制RAM使用者訪問Bucket的頻寬。
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>-1</ExtranetUploadBandwidth> <TotalDownloadBandwidth>100</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>-1</ExtranetDownloadBandwidth> </QoSConfiguration>
RAM角色
使用Bucket儲存靜態資源並啟用CDN加速。為使CDN能從私人Bucket擷取檔案,需開啟私人Bucket回源。CDN通過RAM角色AliyunCDNAccessingPrivateOSSRole訪問Bucket,需要限制其回源頻寬。
控制台
ossutil
使用前,需安裝ossutil。
通過本地XML設定檔(qos.xml)配置該角色訪問指定Bucket的頻寬上限。
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth> <TotalDownloadBandwidth>100</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>40</ExtranetDownloadBandwidth> </QoSConfiguration>查看RAM角色ID。
為該角色(角色ID為362xxxx)添加訪問指定Bucket(樣本值為examplebucket)頻寬配置。
ossutil api invoke-operation --op-name put-bucket-requester-qos-info --method PUT --bucket=examplebucket --parameters requesterQosInfo --parameters qosRequester=362xxxx --body file://qos.xml(可選)列舉資源集區所有RAM角色的頻寬配置。
ossutil api invoke-operation --op-name list-resource-pool-requester-qos-infos --method GET --parameters resourcePool=examplePool --parameters requesterQosInfo
SDK
目前僅支援通過Python SDK V2和Go SDK V2限制RAM角色訪問Bucket的頻寬上限。
通過本地qos.xml檔案配置指定RAM使用者訪問資源集區內某個Bucket的頻寬上限。
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth> <TotalDownloadBandwidth>100</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>40</ExtranetDownloadBandwidth> </QoSConfiguration>查看RAM角色ID。
為RAM角色設定以上頻寬配置。
import alibabacloud_oss_v2 as oss def PutBucketRequesterQoSInfo(): # 從環境變數中載入憑證資訊,用於身分識別驗證 credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider() # 載入預設配置並擷取設定物件 cfg = oss.config.load_default() # 設定憑證提供者 cfg.credentials_provider = credentials_provider # 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou cfg.region = "cn-hangzhou" # 使用設定物件初始化OSS用戶端 client = oss.Client(cfg) # 初始化qos_xml_body為空白字串 qos_xml_body = "" # 開啟名為'qos.xml'的檔案,並讀取其中的內容到qos_xml_body變數中 with open('qos.xml', 'r') as qos_file: qos_xml_body = qos_file.read() # 構造一個操作輸入請求對象,用於設定儲存空間的要求者QoS資訊 req = oss.OperationInput( op_name = 'PutBucketRequesterQoSInfo', # 操作名稱,這裡是指定設定儲存空間要求者QoS資訊的操作 method = 'PUT', # HTTP方法類型,此處為PUT,表示更新資源 parameters = { 'requesterQosInfo': '', # 參數列表,指定要設定的是要求者QoS資訊 'qosRequester': '2598732222222xxxx', # 要求者的唯一識別碼,用於區分不同的要求者 }, headers = None, # 要求標頭資訊,如果不需要特殊設定則可以為None body = qos_xml_body, # 請求體,包含之前從'qos.xml'檔案讀取的內容 bucket = 'examplebucket', # 目標儲存空間的名稱 ) # 調用用戶端的invoke_operation方法執行請求,並接收響應 resp = client.invoke_operation(req) # 列印響應的狀態代碼 print(resp.status_code) # 列印響應的頭部資訊 print(resp.headers) # 列印響應的內容(HTTP響應體),通常包含請求返回的具體資料 print(resp.http_response.content) if __name__ == "__main__": PutBucketRequesterQoSInfo()
API
查看RAM角色ID。
調用PutBucketRequesterQoSInfo按以下樣本限制RAM角色訪問Bucket的頻寬。
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth> <TotalDownloadBandwidth>100</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>40</ExtranetDownloadBandwidth> </QoSConfiguration>
配置BucketGroup頻寬上限
將低優先順序Bucket加入BucketGroup統一管理,限制其總頻寬。
控制台
在資源集區QoS頁面,單擊目標資源集區名稱,然後單擊建立BucketGroup,定義BucketGroup名稱並按照要求設定BucketGroup頻寬。
在目標資源集區頁面,單擊目標Bucket右側的配置BucketGroup,將低優先順序Bucket加入BucketGroup。
ossutil
使用前,需安裝ossutil。
將
scheduled-posts和archived-comments兩個Bucket加入BucketGroup。將
scheduled-posts加入BucketGroup。ossutil api invoke-operation --op-name put-bucket-resource-pool-bucket-group --method PUT --bucket scheduled-posts --parameters resourcePool=pool-for-ai --parameters resourcePoolBucketGroup=test-group將
archived-comments加入BucketGroup。ossutil api invoke-operation --op-name put-bucket-resource-pool-bucket-group --method PUT --bucket archived-comments --parameters resourcePool=pool-for-ai --parameters resourcePoolBucketGroup=test-group(可選)擷取BucketGroup中添加的Bucket列表。
ossutil api invoke-operation --op-name list-resource-pool-bucket-groups --method GET --parameters resourcePool=pool-for-ai --parameters resourcePoolBucketGroup
通過本地XML設定檔(qos.xml)配置資源集區內指定BucketGroup的頻寬上限。
<QoSConfiguration> <TotalUploadBandwidth>20</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>10</ExtranetUploadBandwidth> <TotalDownloadBandwidth>30</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth> </QoSConfiguration>為BucketGroup配置頻寬。
ossutil api invoke-operation --op-name put-resource-pool-bucket-group-qos-info --method PUT --parameters resourcePoolBucketGroupQosInfo --parameters resourcePool pool-for-ai --parameters resourcePoolBucketGroup offline-group --body=file://qos.xml(可選)擷取BucketGroup的頻寬配置。
ossutil api invoke-operation --op-name get-resource-pool-bucket-group-qos-info --method GET --parameters resourcePool=pool-for-ai --parameters resourcePoolBucketGroup=offline-group --parameters resourcePoolBucketGroupQoSInfo
SDK
目前僅支援通過Python SDK V2和Go SDK V2限制BucketGroup的頻寬上限。
將資源集區內的兩個Bucket分別加入BucketGroup。
import alibabacloud_oss_v2 as oss def PutBucketResourcePoolBucketGroup(): # 從環境變數中載入憑證資訊,用於身分識別驗證 credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider() # 載入預設配置並擷取設定物件 cfg = oss.config.load_default() # 設定憑證提供者 cfg.credentials_provider = credentials_provider # 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou cfg.region = "cn-hangzhou" # 使用設定物件初始化OSS用戶端 client = oss.Client(cfg) # 構造一個操作輸入請求對象,用於將儲存空間添加到指定的資源集區儲存空間組 req = oss.OperationInput( op_name = 'PutBucketResourcePoolBucketGroup', # 操作名稱,這裡是指定將儲存空間添加到資源集區儲存空間組的操作 method = 'PUT', # HTTP方法類型,此處為PUT,表示更新資源 parameters = { 'resourcePoolBucketGroup': 'example-group', # 儲存空間組的唯一識別碼,用於區分不同的儲存空間組 'resourcePool': 'example-resource-pool', # 資源集區的唯一識別碼,用於區分不同的資源集區 }, headers = None, # 要求標頭資訊,如果不需要特殊設定則可以為None body = None, # 請求體,由於是PUT請求且無需傳遞額外資料,因此為None bucket = 'examplebucket', # 目標儲存空間的名稱,表示要將該儲存空間添加到指定的資源集區儲存空間組 ) # 調用用戶端的invoke_operation方法執行請求,並接收響應 resp = client.invoke_operation(req) # 列印響應的狀態代碼 print(resp.status_code) # 列印響應的頭部資訊 print(resp.headers) # 列印響應的內容(HTTP響應體),通常包含請求返回的具體資料 print(resp.http_response.content) if __name__ == "__main__": PutBucketResourcePoolBucketGroup()通過本地XML設定檔(qos.xml)配置資源集區內指定BucketGroup的頻寬上限。
<QoSConfiguration> <TotalUploadBandwidth>20</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>10</ExtranetUploadBandwidth> <TotalDownloadBandwidth>30</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth> </QoSConfiguration>為BucketGroup配置頻寬。
import alibabacloud_oss_v2 as oss def PutResourcePoolBucketGroupQoSInfo(): # 從環境變數中載入憑證資訊,用於身分識別驗證 credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider() # 載入預設配置並擷取設定物件 cfg = oss.config.load_default() # 設定憑證提供者 cfg.credentials_provider = credentials_provider # 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou cfg.region = "cn-hangzhou" # 使用設定物件初始化OSS用戶端 client = oss.Client(cfg) # 初始化qos_xml_body為空白字串 qos_xml_body = "" # 開啟名為'qos.xml'的檔案,並讀取其中的內容到qos_xml_body變數中 with open('qos.xml', 'r') as qos_file: qos_xml_body = qos_file.read() # 構造一個操作輸入請求對象,用於設定資源集區儲存空間組的QoS資訊 req = oss.OperationInput( op_name = 'PutResourcePoolBucketGroupQoSInfo', # 操作名稱,這裡是指定設定資源集區儲存空間組QoS資訊的操作 method = 'PUT', # HTTP方法類型,此處為PUT,表示更新資源 parameters = { 'resourcePoolBucketGroupQosInfo': '', # 參數列表,指定要設定的是資源集區儲存空間組QoS資訊 'resourcePool': 'example-resource-pool', # 資源集區的唯一識別碼,用於區分不同的資源集區 'resourcePoolBucketGroup': 'example-group', # 儲存空間組的唯一識別碼,用於區分不同的儲存空間組 }, headers = None, # 要求標頭資訊,如果不需要特殊設定則可以為None body = qos_xml_body, # 請求體,包含之前從'qos.xml'檔案讀取的內容 bucket = None, # 目標儲存空間的名稱,這裡不需要指定具體的儲存空間,因此為None ) # 調用用戶端的invoke_operation方法執行請求,並接收響應 resp = client.invoke_operation(req) # 列印響應的狀態代碼 print(resp.status_code) # 列印響應的頭部資訊 print(resp.headers) # 列印響應的內容(HTTP響應體),通常包含請求返回的具體資料 print(resp.http_response.content) if __name__ == "__main__": PutResourcePoolBucketGroupQoSInfo()
API
調用PutResourcePoolBucketGroupQoSInfo按以下樣本限制BucketGroup的頻寬。
<QoSConfiguration>
<TotalUploadBandwidth>20</TotalUploadBandwidth>
<IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
<ExtranetUploadBandwidth>10</ExtranetUploadBandwidth>
<TotalDownloadBandwidth>30</TotalDownloadBandwidth>
<IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
<ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
</QoSConfiguration>配置資源集區要求者頻寬上限
多個RAM使用者訪問同一資源集區的不同Bucket,需要限制各內建寬上限,防止某使用者獨佔資源集區頻寬。
控制台
ossutil
使用前,需安裝ossutil。
通過本地XML設定檔(qos.xml)為RAM使用者或者RAM角色配置訪問資源集區的頻寬上限。
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>50</IntranetUploadBandwidth> <ExtranetUploadBandwidth>50</ExtranetUploadBandwidth> <TotalDownloadBandwidth>200</TotalDownloadBandwidth> <IntranetDownloadBandwidth>150</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>50</ExtranetDownloadBandwidth> </QoSConfiguration>為RAM使用者(UID為266xxxx)添加以上頻寬配置。
ossutil api invoke-operation --op-name put-resource-pool-requester-qos-info --method PUT --parameters resourcePool=examplepool --parameters qosRequester=266xxxx --parameters requesterQosInfo --body=file://qos.xml(可選)列舉資源集區所有RAM使用者的頻寬配置。
ossutil api invoke-operation --op-name list-resource-pool-requester-qos-infos --method GET --parameters resourcePool=examplePool --parameters requesterQosInfo
SDK
目前僅支援通過Python SDK V2和Go SDK V2限制RAM使用者或RAM角色訪問資源集區的頻寬上限。
通過本地qos.xml檔案配置指定RAM使用者或RAM角色訪問資源集區的頻寬上限。
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>50</IntranetUploadBandwidth> <ExtranetUploadBandwidth>50</ExtranetUploadBandwidth> <TotalDownloadBandwidth>200</TotalDownloadBandwidth> <IntranetDownloadBandwidth>150</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>50</ExtranetDownloadBandwidth> </QoSConfiguration>為RAM使用者或RAM角色設定以上頻寬配置。
import alibabacloud_oss_v2 as oss def PutResourcePoolRequesterQoSInfo(): # 從環境變數中載入憑證資訊,用於身分識別驗證 credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider() # 載入預設配置並擷取設定物件 cfg = oss.config.load_default() # 設定憑證提供者 cfg.credentials_provider = credentials_provider # 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou cfg.region = "cn-hangzhou" # 使用設定物件初始化OSS用戶端 client = oss.Client(cfg) # 初始化qos_xml_body為空白字串 qos_xml_body = "" # 開啟名為'qos.xml'的檔案,並讀取其中的內容到qos_xml_body變數中 with open('qos.xml', 'r') as qos_file: qos_xml_body = qos_file.read() # 構造一個操作輸入請求對象,用於設定資源集區要求者的QoS資訊 req = oss.OperationInput( op_name = 'PutResourcePoolRequesterQoSInfo', # 操作名稱,這裡是指定設定資源集區要求者QoS資訊的操作 method = 'PUT', # HTTP方法類型,此處為PUT,表示更新資源 parameters = { 'requesterQosInfo': '', # 參數列表,指定要設定的是要求者QoS資訊 'resourcePool': 'example-resource-pool', # 資源集區的唯一識別碼,用於區分不同的資源集區 'qosRequester': '2598732222222xxxx', # 要求者的唯一識別碼,用於區分不同的要求者 }, headers = None, # 要求標頭資訊,如果不需要特殊設定則可以為None body = qos_xml_body, # 請求體,包含之前從'qos.xml'檔案讀取的內容 bucket = None, # 目標儲存空間的名稱,這裡不需要指定具體的儲存空間,因此為None ) # 調用用戶端的invoke_operation方法執行請求,並接收響應 resp = client.invoke_operation(req) # 列印響應的狀態代碼 print(resp.status_code) # 列印響應的頭部資訊 print(resp.headers) # 列印響應的內容(HTTP響應體),通常包含請求返回的具體資料 print(resp.http_response.content) if __name__ == "__main__": PutResourcePoolRequesterQoSInfo()
API
調用PutResourcePoolRequesterQoSInfo按以下樣本限制RAM使用者或RAM角色訪問資源集區的頻寬。
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>50</IntranetUploadBandwidth> <ExtranetUploadBandwidth>50</ExtranetUploadBandwidth> <TotalDownloadBandwidth>200</TotalDownloadBandwidth> <IntranetDownloadBandwidth>150</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>50</ExtranetDownloadBandwidth> </QoSConfiguration>
配置優先順序流控
適合需要保障核心業務最小頻寬,在資源競爭時優先滿足高優先順序對象的情境。
配置資源集區優先順序
資源集區中有多個Bucket,需要確保核心業務Bucket在頻寬緊張時仍能獲得足夠頻寬。
ossutil
建立優先順序設定檔
priority-qos.xml。<PriorityQosConfiguration> <PriorityCount>3</PriorityCount> <DefaultPriorityLevel>1</DefaultPriorityLevel> <DefaultGuaranteedQosConfiguration> <TotalUploadBandwidth>10</TotalUploadBandwidth> <IntranetUploadBandwidth>5</IntranetUploadBandwidth> <ExtranetUploadBandwidth>5</ExtranetUploadBandwidth> <TotalDownloadBandwidth>20</TotalDownloadBandwidth> <IntranetDownloadBandwidth>10</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>10</ExtranetDownloadBandwidth> </DefaultGuaranteedQosConfiguration> <QosPriorityLevelConfiguration> <PriorityLevel>3</PriorityLevel> <GuaranteedQosConfiguration> <TotalUploadBandwidth>50</TotalUploadBandwidth> <TotalDownloadBandwidth>80</TotalDownloadBandwidth> <ExtranetUploadBandwidth>30</ExtranetUploadBandwidth> <IntranetUploadBandwidth>20</IntranetUploadBandwidth> <ExtranetDownloadBandwidth>50</ExtranetDownloadBandwidth> <IntranetDownloadBandwidth>30</IntranetDownloadBandwidth> </GuaranteedQosConfiguration> <Subjects> <Bucket>critical-bucket</Bucket> <BucketGroup>core-group</BucketGroup> </Subjects> </QosPriorityLevelConfiguration> <QosPriorityLevelConfiguration> <PriorityLevel>2</PriorityLevel> <GuaranteedQosConfiguration> <TotalUploadBandwidth>30</TotalUploadBandwidth> <TotalDownloadBandwidth>50</TotalDownloadBandwidth> <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth> <IntranetUploadBandwidth>10</IntranetUploadBandwidth> <ExtranetDownloadBandwidth>30</ExtranetDownloadBandwidth> <IntranetDownloadBandwidth>20</IntranetDownloadBandwidth> </GuaranteedQosConfiguration> <Subjects> <Bucket>important-bucket</Bucket> </Subjects> </QosPriorityLevelConfiguration> </PriorityQosConfiguration>應用配置。
ossutil api invoke-operation --op-name put-resource-pool-priority-qos-configuration --method PUT --parameters resourcePool=hz-rp-03 --parameters priorityQos --body=file://priority-qos.xml擷取並驗證配置。
ossutil api invoke-operation --op-name get-resource-pool-priority-qos-configuration --method GET --parameters resourcePool=hz-rp-03 --parameters priorityQos
SDK
package main
import (
"bytes"
"context"
"crypto/md5"
"encoding/base64"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func PutResourcePoolPriorityQosConfiguration() {
// 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou。
var region = "cn-hangzhou"
// 載入預設配置並設定憑證提供者和地區
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 建立OSS用戶端
client := oss.NewClient(cfg)
// 定義資源集區名稱
resourcePool := "hz-rp-01"
// 讀取優先順序QoS設定檔內容
qosConf, err := os.ReadFile("priority-qos.xml")
if err != nil {
// 如果讀取QoS設定檔時發生錯誤,則列印錯誤資訊並退出程式
fmt.Printf("failed to read qos.xml: %v\n", err)
os.Exit(1)
}
// 計算輸入資料的MD5值,並將其轉換為Base64編碼字串
calcMd5 := func(input []byte) string {
if len(input) == 0 {
return "1B2M2Y8AsgTpgAmY7PhCfg=="
}
h := md5.New()
h.Write(input)
return base64.StdEncoding.EncodeToString(h.Sum(nil))
}
// 建立操作輸入參數,包括操作名稱、方法類型、參數等
input := &oss.OperationInput{
OpName: "PutResourcePoolPriorityQoSConfiguration", // 操作名稱
Method: "PUT", // HTTP方法類型
Parameters: map[string]string{
"priorityQos": "", // 優先順序QoS資訊相關參數
"resourcePool": resourcePool, // 資源集區名稱
},
Headers: map[string]string{
"Content-MD5": calcMd5(qosConf), // 佈建要求體的MD5校正碼,用於驗證資料完整性
},
Body: bytes.NewReader(qosConf), // 請求體,包含QoS配置內容
Bucket: nil, // 此操作不針對特定儲存空間
}
// 執行操作請求,並接收響應結果或錯誤
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
// 如果發生錯誤,則列印錯誤資訊並退出程式
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
// 列印操作結果
fmt.Println("The result of PutResourcePoolPriorityQoSConfiguration:", res.Status)
}API
配置資源集區要求者優先順序
多租戶SaaS平台,不同等級的客戶訪問同一資源集區,需要為VIP客戶保障頻寬,普通客戶共用剩餘資源。
ossutil
建立要求者優先順序設定檔
requester-priority-qos.xml。<PriorityQosConfiguration> <PriorityCount>3</PriorityCount> <DefaultPriorityLevel>1</DefaultPriorityLevel> <DefaultGuaranteedQosConfiguration> <TotalUploadBandwidth>10</TotalUploadBandwidth> <IntranetUploadBandwidth>5</IntranetUploadBandwidth> <ExtranetUploadBandwidth>5</ExtranetUploadBandwidth> <TotalDownloadBandwidth>20</TotalDownloadBandwidth> <IntranetDownloadBandwidth>10</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>10</ExtranetDownloadBandwidth> </DefaultGuaranteedQosConfiguration> <QosPriorityLevelConfiguration> <PriorityLevel>3</PriorityLevel> <GuaranteedQosConfiguration> <TotalUploadBandwidth>60</TotalUploadBandwidth> <TotalDownloadBandwidth>100</TotalDownloadBandwidth> <ExtranetUploadBandwidth>40</ExtranetUploadBandwidth> <IntranetUploadBandwidth>20</IntranetUploadBandwidth> <ExtranetDownloadBandwidth>60</ExtranetDownloadBandwidth> <IntranetDownloadBandwidth>40</IntranetDownloadBandwidth> </GuaranteedQosConfiguration> <Subjects> <Requester>123456789012****</Requester> <Requester>234567890123****</Requester> </Subjects> </QosPriorityLevelConfiguration> <QosPriorityLevelConfiguration> <PriorityLevel>2</PriorityLevel> <GuaranteedQosConfiguration> <TotalUploadBandwidth>30</TotalUploadBandwidth> <TotalDownloadBandwidth>50</TotalDownloadBandwidth> <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth> <IntranetUploadBandwidth>10</IntranetUploadBandwidth> <ExtranetDownloadBandwidth>30</ExtranetDownloadBandwidth> <IntranetDownloadBandwidth>20</IntranetDownloadBandwidth> </GuaranteedQosConfiguration> <Subjects> <Requester>345678901234****</Requester> </Subjects> </QosPriorityLevelConfiguration> </PriorityQosConfiguration>應用配置
ossutil api invoke-operation --op-name put-resource-pool-requester-priority-qos-configuration --method PUT --parameters resourcePool=hz-rp-03 --parameters requesterPriorityQos --body=file://requester-priority-qos.xml(可選)擷取並驗證配置。
ossutil api invoke-operation --op-name get-resource-pool-requester-priority-qos-configuration --method GET --parameters resourcePool=hz-rp-03 --parameters requesterPriorityQos
SDK
package main
import (
"bytes"
"context"
"crypto/md5"
"encoding/base64"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func PutResourcePoolRequesterPriorityQosConfiguration() {
// 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou。
var region = "cn-hangzhou"
// 載入預設配置並設定憑證提供者和地區
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 建立OSS用戶端
client := oss.NewClient(cfg)
// 定義資源集區名稱
resourcePool := "hz-rp-01"
// 讀取要求者優先順序QoS設定檔內容
qosConf, err := os.ReadFile("requester-priority-qos.xml")
if err != nil {
// 如果讀取QoS設定檔時發生錯誤,則列印錯誤資訊並退出程式
fmt.Printf("failed to read qos.xml: %v\n", err)
os.Exit(1)
}
// 計算輸入資料的MD5值,並將其轉換為Base64編碼字串
calcMd5 := func(input []byte) string {
if len(input) == 0 {
return "1B2M2Y8AsgTpgAmY7PhCfg=="
}
h := md5.New()
h.Write(input)
return base64.StdEncoding.EncodeToString(h.Sum(nil))
}
// 建立操作輸入參數,包括操作名稱、方法類型、參數等
input := &oss.OperationInput{
OpName: "PutResourcePoolRequesterPriorityQoSConfiguration", // 操作名稱
Method: "PUT", // HTTP方法類型
Parameters: map[string]string{
"requesterPriorityQos": "", // 要求者優先順序QoS資訊相關參數
"resourcePool": resourcePool, // 資源集區名稱
},
Headers: map[string]string{
"Content-MD5": calcMd5(qosConf), // 佈建要求體的MD5校正碼,用於驗證資料完整性
},
Body: bytes.NewReader(qosConf), // 請求體,包含QoS配置內容
Bucket: nil, // 此操作不針對特定儲存空間
}
// 執行操作請求,並接收響應結果或錯誤
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
// 如果發生錯誤,則列印錯誤資訊並退出程式
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
// 列印操作結果
fmt.Println("The result of PutResourcePoolRequesterPriorityQoSConfiguration:", res.Status)
}API
監控與警示
監控頻寬使用
在業務運行期間,可以在CloudMonitor-Object Storage Service資源集區,即時查看資源集區內關鍵業務的頻寬使用方式,確保資源分派合理且業務運行穩定。
設定頻寬警示
為確保關鍵業務穩定運行,可以通過CloudMonitor服務建立警示規則,當頻寬使用率超過 80% 時自動觸發警示,便於及時調整頻寬配置應對業務高峰。
應用於生產環境
容量規劃建議
1. 保底頻寬之和建議小於資源集區總頻寬的50%。
預留50%以上的彈性空間用於動態調度,可有效提升資源集區整體頻寬利用率。
推薦配置:
資源集區總頻寬:100Gbps
優先順序3保底:20Gbps
優先順序2保底:20Gbps
優先順序1保底:10Gbps
總計:50Gbps(預留50Gbps彈性空間)2. 優先順序數量建議3-5個
過多優先順序增加管理複雜度,建議根據業務重要性分為3-5級:
核心業務(優先順序4-5)
重要業務(優先順序3)
普通業務(優先順序1-2)
3. 閾值流控上限應高於優先順序保底
確保高優先順序對象在資源充足時能夠使用更多頻寬:
建議配置:
優先順序流控:Bucket A 保底50Gbps
閾值流控:Bucket A 最大80Gbps
實際可用:50-80Gbps(至少50,最多80)最佳實務
情境1:ApsaraVideo for VOD平台
直播流:優先順序3,保底50Gbps
點播內容:優先順序1,保底20Gbps
CDN回源:閾值流控限制最大100Gbps
情境2:多租戶SaaS平台
企業版客戶:優先順序3,分配保底頻寬
免費版客戶:優先順序1,共用剩餘資源
單租戶上限:閾值流控防止單租戶過度佔用
情境3:資料湖分析
即時分析:優先順序2,保底30Gbps
離線分析:優先順序1,保底20Gbps
歸檔資料:閾值流控限制最大10Gbps
風險防範
1. 定期審查配額使用
通過CloudMonitor查看各對象的頻寬使用趨勢,及時調整配額:
高優先順序對象保底頻寬滿足率持續<95%,考慮增加保底或降低低優先順序保底
低優先順序對象長期無法使用,考慮降低高優先順序保底或擴容資源集區
2. 設定多級警示
警告級(80%):提前預警,準備擴容方案
嚴重級(90%):立即處理,啟動應急預案
3. 避免配置衝突
保底頻寬之和不能超過資源集區總頻寬
閾值流控上限應高於優先順序保底
Bucket同屬BucketGroup時,按BucketGroup優先順序生效
4. 變更與復原
重要變更前,在測試環境驗證配置
儲存當前配置,便於快速復原
業務低峰期執行變更操作
配額與限制
限制項 | 配額/限制 |
資源集區 | 單個地區最多100個資源集區 |
單個資源集區最多100個Bucket | |
單個資源集區最多100個BucketGroup | |
單個資源集區最多為300個要求者配置流控 | |
BucketGroup | 名稱限制3-30個字元 |
只支援小寫字母、數字和虛線 | |
優先順序流控 | 優先順序數量:3-10個 |
優先順序等級:正整數,≥1且≤優先順序總數 | |
保底頻寬之和≤資源集區總頻寬 | |
若無預設保底,則每個優先順序都必須配置保底頻寬 | |
保底頻寬的最小值需要滿足MIN[5,上層資源集區對應項的閾值 / (2 * 優先順序數量)] Gbps | |
頻寬參數 | 正整數:具體限制值(單位Gbps) |
-1:不限制(共用資源池頻寬) | |
0:禁止該類型流量(謹慎使用) | |
配置後生效延遲 | 5分鐘內 |