すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:リソースプール QoS を使用して重要なサービスの帯域幅を保証

最終更新日:Mar 21, 2026

デフォルトでは、同一リージョン内の Alibaba Cloud アカウント (root ユーザー) に属するすべてのバケットは帯域幅を共有します。複数のバケットが同時に大量のデータを転送すると、帯域幅競合が発生し、重要なサービスが遅延する可能性があります。リソースプール サービス品質 (QoS) の速度制限機能は、以下の 2 つの相補的な方法でこの問題を解決します。しきい値ベースの速度制限はバケットが使用できる最大帯域幅を上限として設定し、優先度ベースの速度制限は高優先度サービスに最低帯域幅を保証します。これらを組み合わせることで、負荷が高くなっても重要なサービスの安定性を維持できます。

仕組み

しきい値ベースの速度制限

しきい値ベースの速度制限は、リソースプール階層(リソースプール、BucketGroup、バケット)の各レベルで帯域幅の上限を設定し、単一のオブジェクトが過剰な帯域幅を使用することを防ぎます。

リソースプール階層

リソースプールは以下の構造をサポートしています。

フラットなバケット構造(シナリオ 1)

image

ネストされた BucketGroup(シナリオ 2)

image

Mixed BucketGroups and buckets(シナリオ 3)

image

リクエスター速度制限は独立したディメンションであり、リソースプール階層とは別に動作します。

リクエスター速度制限と階層速度制限の併用(シナリオ 4)

image

速度制限ルール

Resource pool: Max 100 Gbps
├─ Bucket A: Max 40 Gbps  ← 利用可能な帯域幅があっても 40 Gbps を超えられない
├─ Bucket B: Max 30 Gbps
└─ Bucket C: Unlimited    ← 残りの帯域幅すべてを利用可能

制限の組み合わせを規定する 3 つのルールがあります。

  1. すべてのアクティブな制限が同時に適用されます。 実際の帯域幅は、すべてのアクティブなルールの中で最も小さい値になります。

  2. 子階層の帯域幅は親階層の帯域幅を超えることができません。 下位階層のオブジェクトの帯域幅の合計は、親オブジェクトの帯域幅を超えることはできません。

  3. リクエスター制限は独立しています。 リクエスター制限はリソースプール階層制限とは別に適用され、より小さい値が有効になります。

例: RAM ユーザーが、リクエスター制限 20 Gbps、バケット制限 30 Gbps のバケットにアクセスします。

実際の最大帯域幅 = min(20 Gbps, 30 Gbps) = 20 Gbps

優先度ベースの速度制限

優先度ベースの速度制限は、優先度レベルごとに最低帯域幅コミットメントを割り当てることで、帯域幅競合時に高優先度サービスが優先的に帯域幅を取得できるようにします。

リソースプールごとに 3~10 段階の優先度レベルを設定できます。数値が大きいほど優先度が高くなります。明示的に優先度が設定されていないオブジェクトはデフォルトの優先度レベルを使用し、明示的に最低帯域幅コミットメントが設定されていない優先度レベルはデフォルトの最低帯域幅コミットメントを使用します。

帯域幅の割り当て方法

  1. 最低コミットメント保証: 各優先度レベルには保証された最低帯域幅があり、システムはこれを厳密に遵守します。

  2. プリエンプション: 高優先度のオブジェクトは、低優先度のオブジェクトが最低コミットメントを超えて使用している帯域幅を取り戻すことができます。プリエンプション競合では常に高優先度が勝ちます。

  3. アイドルリソースの活用: 低優先度のオブジェクトは、高優先度のオブジェクトのアイドル状態の最低帯域幅を利用できます。ただし、高優先度のオブジェクトが必要とした場合は、その帯域幅を優先的に再取得できます。

  4. 構成制約: すべての最低帯域幅コミットメントの合計は、リソースプールの総帯域幅を超えることはできません。

割り当て例

以下の例はすべて 100 Gbps のリソースプールを使用しています。

シナリオ 1:高優先度によるプリエンプション(3 レベル、各 20 Gbps)

Priority 1 が 10 Gbps、Priority 2 が 30 Gbps、Priority 3 が 80 Gbps 必要としています。

優先度最低コミットメント必須実際の割り当て備考
Priority 320 Gbps80 Gbps70 Gbps20 Gbps のコミットメント + Priority 1 のアイドル 10 Gbps + 残り 40 Gbps を取得
Priority 220 Gbps30 Gbps20 Gbps20 Gbps のコミットメントのみ取得。超過分は Priority 3 にプリエンプトされる。
Priority 120 Gbps10 Gbps10 Gbps必要な 10 Gbps を取得。残りの 10 Gbps のアイドル帯域幅は Priority 3 にプリエンプトされる。

最終的な割り当て:10 + 20 + 70 = 100 Gbps

シナリオ 2:プリエンプションにおける高優先度の優先(4 レベル、各 25 Gbps)

Priority 1 が 0 Gbps、Priority 2 が 5 Gbps、Priority 3 が 40 Gbps、Priority 4 が 60 Gbps 必要としています。

優先度最低コミットメント必須実際の割り当て備考
Priority 425 Gbps60 Gbps60 Gbps25 Gbps のコミットメント + 35 Gbps をプリエンプト
Priority 325 Gbps40 Gbps35 Gbps25 Gbps のコミットメント + 残り 10 Gbps をプリエンプト
Priority 225 Gbps5 Gbps5 Gbpsコミットメント未満だが、必要な分だけ取得
Priority 125 Gbps0 Gbps0 Gbps必要なし。すべてのアイドル帯域幅がプリエンプトされる。

最終的な割り当て:0 + 5 + 35 + 60 = 100 Gbps

シナリオ 3:コミットメント合計がプール帯域幅未満(4 レベル、各 10 Gbps = 合計 40 Gbps)

Priority 1 が 50 Gbps、Priority 2 が 50 Gbps、Priority 3 が 30 Gbps、Priority 4 が 20 Gbps 必要としています。

優先度最低コミットメント必須実際の割り当て備考
Priority 410 Gbps20 Gbps20 Gbps最優先度のため、必要な帯域幅すべてを取得
Priority 310 Gbps30 Gbps30 Gbps次に優先度が高いので、必要な帯域幅すべてを取得
Priority 210 Gbps50 Gbps40 Gbps10 Gbps のコミットメント + 残り 30 Gbps を取得
Priority 110 Gbps50 Gbps10 Gbps最低コミットメントのみ取得

最終的な割り当て:10 + 40 + 30 + 20 = 100 Gbps

両方の速度制限方式の併用

しきい値ベースの速度制限と優先度ベースの速度制限を組み合わせて、各オブジェクトの上限と下限を同時に設定します。

  • しきい値ベースの制限はハードリミットです。 最低帯域幅コミットメントに関係なく、帯域幅がこの値を超えることはありません。

  • 優先度ベースの最低コミットメントはソフト保証です。 システムはしきい値ベースの制限内でこれを遵守します。

通常の構成: バケット A の最低コミットメントが 50 Gbps、しきい値が 80 Gbps の場合、利用可能な帯域幅は 50~80 Gbps です。

構成の競合: バケット A の最低コミットメントが 80 Gbps、しきい値が 50 Gbps の場合、しきい値が優先されます。利用可能な帯域幅は 50 Gbps です。

重要

高優先度のオブジェクトが利用可能な帯域幅があるときに追加で使用できるように、しきい値ベースの制限は常に優先度ベースの最低コミットメントより高く設定してください。

前提条件

作業を開始する前に、以下の条件を満たしていることを確認してください。

  • 対象リージョンの帯域幅が400 Gbps 以上であること

  • Alibaba Cloud テクニカルサポートによって作成されたリソースプールがあること(リソースプールの申請を参照)

リソースプールの申請

テクニカルサポートに連絡して、リソースプールを申請してください。チケットに以下の情報を記載します。

Region: 中国 (杭州)
Resource pool name: qos-resource-pool-1
Bucket list: qos-examplebucket-1, qos-examplebucket-2
Total upload bandwidth: 300 Gbps
Internal network upload bandwidth: 100 Gbps
Public network upload bandwidth: 200 Gbps
Total download bandwidth: 100 Gbps
Internal network download bandwidth: 50 Gbps
Public network download bandwidth: 50 Gbps
Enable resource pool in console: Yes
Enable priority-based throttling: Yes

リソースプールが作成されると、OSS コンソールにリソースプール QoSページが表示されます。

しきい値ベースの速度制限の設定

しきい値ベースの速度制限を使用して、バケット、BucketGroup、またはリクエスターの最大帯域幅を上限として設定します。これにより、単一のオブジェクトが過剰なリソースを使用することを防ぎます。

XML 構成のすべての帯域幅値はGbps 単位です。-1 を設定すると無制限(共有プール帯域幅を使用)、0 を設定するとすべてのトラフィックをブロックします(慎重に使用してください)。

バケットの帯域幅制限の設定

同一リソースプール内の他のバケットに影響を与えるほどの過剰なトラフィックを生成するバケットがある場合に使用します。

コンソール

リソースプール QoSページで、対象のリソースプール名をクリックします。対象のバケットについて、速度制限構成の変更をクリックし、帯域幅の値を設定します。

フィールド説明
アップロード帯域幅合計内部ネットワークおよびパブリックネットワーク全体でのアップロード上限(Gbps)
内部ネットワークアップロード帯域幅VPC/内部エンドポイントトラフィックのアップロード上限(Gbps)
パブリックネットワークアップロード帯域幅インターネットトラフィックのアップロード上限(Gbps)
ダウンロード帯域幅合計内部ネットワークおよびパブリックネットワーク全体でのダウンロード上限(Gbps)
内部ネットワークダウンロード帯域幅VPC/内部エンドポイントトラフィックのダウンロード上限(Gbps)
パブリックネットワークダウンロード帯域幅インターネットトラフィックのダウンロード上限(Gbps)

ossutil

作業を開始する前に、ossutil をインストールしてください。

  1. 帯域幅構成を含むローカル XML ファイル qos.xml を作成します。

    Intranet は内部ネットワーク(VPC)トラフィックを指します。Extranet はパブリックネットワークトラフィックを指します。すべての値は Gbps 単位です。無制限にするには -1 を設定します。
       import alibabacloud_oss_v2 as oss
    
       def put_bucket_qos_info():
           credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    
           cfg = oss.config.load_default()
           cfg.credentials_provider = credentials_provider
           cfg.region = "cn-hangzhou"  # ご使用のバケットのリージョンに置き換えてください
    
           client = oss.Client(cfg)
    
           with open('qos.xml', 'r') as f:
               qos_xml_body = f.read()
    
           req = oss.OperationInput(
               op_name='PutBucketQoSInfo',
               method='PUT',
               parameters={'qosInfo': ''},
               headers=None,
               body=qos_xml_body,
               bucket='examplebucket',  # ご使用のバケット名に置き換えてください
           )
    
           resp = client.invoke_operation(req)
           print(resp.status_code)
    
       if __name__ == "__main__":
           put_bucket_qos_info()
  2. バケットに構成を適用します(examplebucket はご利用のバケット名に置き換えてください)。

       ossutil api invoke-operation --op-name put-bucket-qos-info --method PUT --bucket examplebucket --parameters qosInfo --body=file://qos.xml
  3. (任意)構成を確認します。

       ossutil api invoke-operation --op-name get-bucket-qos-info --method GET --bucket examplebucket --parameters qosInfo

SDK

バケット帯域幅制限は Python SDK V2 および Go SDK V2 でサポートされています。

  1. 上記の ossutil の例と同じ内容で qos.xml を作成します。

  2. 構成を適用します:Python

       import alibabacloud_oss_v2 as oss
    
       def put_bucket_qos_info():
           credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    
           cfg = oss.config.load_default()
           cfg.credentials_provider = credentials_provider
           cfg.region = "cn-hangzhou"  # ご利用のバケットのリージョンに置き換えてください
    
           client = oss.Client(cfg)
    
           with open('qos.xml', 'r') as f:
               qos_xml_body = f.read()
    
           req = oss.OperationInput(
               op_name='PutBucketQoSInfo',
               method='PUT',
               parameters={'qosInfo': ''},
               headers=None,
               body=qos_xml_body,
               bucket='examplebucket',  # ご利用のバケット名に置き換えてください
           )
    
           resp = client.invoke_operation(req)
           print(resp.status_code)
    
       if __name__ == "__main__":
           put_bucket_qos_info()

API

以下のリクエストボディで PutBucketQoSInfo を呼び出します。

<QoSConfiguration>
  <TotalUploadBandwidth>100</TotalUploadBandwidth>
  <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
  <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
  <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
  <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
  <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
</QoSConfiguration>

バケットリクエスターの帯域幅制限の設定

複数のサービスが同じバケットを共有しており、単一の RAM ユーザーまたは RAM ロールが過剰な帯域幅を使用しないようにする必要がある場合に使用します。

RAM ユーザー

コンソール
  1. RAM ユーザー ID を取得します。

  2. リソースプール QoSページで、対象のリソースプール名をクリックします。対象のバケットについて、リクエスター速度制限の設定をクリックし、RAM ユーザーの帯域幅を設定します。

ossutil

作業を開始する前に、ossutil をインストールしてください。

  1. RAM ユーザーの帯域幅制限を含む qos.xml を作成します。

       <QoSConfiguration>
         <TotalUploadBandwidth>100</TotalUploadBandwidth>
         <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
         <ExtranetUploadBandwidth>-1</ExtranetUploadBandwidth>
         <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
         <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
         <ExtranetDownloadBandwidth>-1</ExtranetDownloadBandwidth>
       </QoSConfiguration>
  2. RAM ユーザー ID を取得します。

  3. 構成を適用します(examplebucket および 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
  4. (任意)構成を確認します。

       ossutil api invoke-operation --op-name get-bucket-requester-qos-info --method GET --bucket=examplebucket --parameters requesterQosInfo --parameters qosRequester=266xxxx
SDK

バケットに対する RAM ユーザーの帯域幅制限は Python SDK V2 および Go SDK V2 でサポートされています。

  1. 上記の ossutil の例と同じ内容で qos.xml を作成します。

  2. RAM ユーザー ID を取得します。

  3. 構成を適用します:Python

       import alibabacloud_oss_v2 as oss
    
       def put_bucket_requester_qos_info():
           credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
           cfg = oss.config.load_default()
           cfg.credentials_provider = credentials_provider
           cfg.region = "cn-hangzhou"  # ご利用のバケットのリージョンに置き換えてください
    
           client = oss.Client(cfg)
    
           with open('qos.xml', 'r') as f:
               qos_xml_body = f.read()
    
           req = oss.OperationInput(
               op_name='PutBucketRequesterQoSInfo',
               method='PUT',
               parameters={
                   'requesterQosInfo': '',
                   'qosRequester': '2598732222222xxxx',  # RAM ユーザー ID に置き換えてください
               },
               headers=None,
               body=qos_xml_body,
               bucket='examplebucket',  # ご利用のバケット名に置き換えてください
           )
    
           resp = client.invoke_operation(req)
           print(resp.status_code)
           print(resp.headers)
           print(resp.http_response.content)
    
       if __name__ == "__main__":
           put_bucket_requester_qos_info()
API
  1. RAM ユーザー ID を取得します。

  2. 以下のリクエストボディで PutBucketRequesterQoSInfo を呼び出します。

       <QoSConfiguration>
         <TotalUploadBandwidth>100</TotalUploadBandwidth>
         <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
         <ExtranetUploadBandwidth>-1</ExtranetUploadBandwidth>
         <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
         <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
         <ExtranetDownloadBandwidth>-1</ExtranetDownloadBandwidth>
       </QoSConfiguration>

RAM ロール

バケットにアクセスする RAM ロールの帯域幅を制限する必要がある場合に使用します。一般的なケースとして、CDN が back-to-origin で非公開バケットにアクセスするために AliyunCDNAccessingPrivateOSSRole ロールを使用しており、その帯域幅使用量を上限として制限したい場合があります。

コンソール
  1. RAM ロール ID を取得します。

  2. リソースプール QoSページで、対象のリソースプール名をクリックします。対象のバケットについて、リクエスター速度制限の設定をクリックし、RAM ロールの帯域幅を設定します。

ossutil

作業を開始する前に、ossutil をインストールしてください。

  1. RAM ロールの帯域幅制限を含む qos.xml を作成します。

       <QoSConfiguration>
         <TotalUploadBandwidth>100</TotalUploadBandwidth>
         <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
         <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
         <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
         <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
         <ExtranetDownloadBandwidth>40</ExtranetDownloadBandwidth>
       </QoSConfiguration>
  2. RAM ロール ID を取得します。

  3. 構成を適用します(examplebucket および 362xxxx はご利用の値に置き換えてください)。

       ossutil api invoke-operation --op-name put-bucket-requester-qos-info --method PUT --bucket=examplebucket --parameters requesterQosInfo --parameters qosRequester=362xxxx --body file://qos.xml
  4. (任意)リソースプール内のすべての RAM ロール帯域幅構成を一覧表示します。

       ossutil api invoke-operation --op-name list-resource-pool-requester-qos-infos --method GET --parameters resourcePool=examplePool --parameters requesterQosInfo
SDK

バケットに対する RAM ロールの帯域幅制限は Python SDK V2 および Go SDK V2 でサポートされています。

  1. 上記の ossutil の例と同じ内容で qos.xml を作成します。

  2. RAM ロール ID を取得します。

  3. 構成を適用します:Python

       import alibabacloud_oss_v2 as oss
    
       def put_bucket_requester_qos_info():
           credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
           cfg = oss.config.load_default()
           cfg.credentials_provider = credentials_provider
           cfg.region = "cn-hangzhou"  # ご利用のバケットのリージョンに置き換えてください
    
           client = oss.Client(cfg)
    
           with open('qos.xml', 'r') as f:
               qos_xml_body = f.read()
    
           req = oss.OperationInput(
               op_name='PutBucketRequesterQoSInfo',
               method='PUT',
               parameters={
                   'requesterQosInfo': '',
                   'qosRequester': '2598732222222xxxx',  # RAM ロール ID に置き換えてください
               },
               headers=None,
               body=qos_xml_body,
               bucket='examplebucket',  # ご利用のバケット名に置き換えてください
           )
    
           resp = client.invoke_operation(req)
           print(resp.status_code)
           print(resp.headers)
           print(resp.http_response.content)
    
       if __name__ == "__main__":
           put_bucket_requester_qos_info()
API
  1. RAM ロール ID を取得します。

  2. 以下のリクエストボディで PutBucketRequesterQoSInfo を呼び出します。

       <QoSConfiguration>
         <TotalUploadBandwidth>100</TotalUploadBandwidth>
         <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
         <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
         <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
         <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
         <ExtranetDownloadBandwidth>40</ExtranetDownloadBandwidth>
       </QoSConfiguration>

BucketGroup の帯域幅制限の設定

低優先度のバケットをグループ化し、その合計帯域幅を上限として設定する場合に使用します。これにより、バックグラウンドワークロードがプールレベルで重要なサービスと競合することを防ぎます。

BucketGroup 名は 3~30 文字で、小文字、数字、ハイフンのみを使用できます。

コンソール

  1. リソースプール QoSページで、対象のリソースプール名をクリックします。BucketGroup の作成をクリックし、名前を入力して帯域幅制限を設定します。

  2. グループに追加する各バケットについて、バケットの右側にあるBucketGroup の設定をクリックします。

ossutil

作業を開始する前に、ossutil をインストールしてください。

  1. バケットを BucketGroup に追加します(バケットごとに 1 回実行)。

       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
    
       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
  2. (任意)BucketGroup 内のすべてのバケットを一覧表示します。

       ossutil api invoke-operation --op-name list-resource-pool-bucket-groups --method GET --parameters resourcePool=pool-for-ai --parameters resourcePoolBucketGroup
  3. BucketGroup の帯域幅制限を含む qos.xml を作成します。

       <QoSConfiguration>
         <TotalUploadBandwidth>20</TotalUploadBandwidth>
         <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
         <ExtranetUploadBandwidth>10</ExtranetUploadBandwidth>
         <TotalDownloadBandwidth>30</TotalDownloadBandwidth>
         <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
         <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
       </QoSConfiguration>
  4. 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
  5. (任意)構成を確認します。

       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

BucketGroup 帯域幅制限は Python SDK V2 および Go SDK V2 でサポートされています。

  1. バケットを BucketGroup に追加します:Python

       import alibabacloud_oss_v2 as oss
    
       def put_bucket_resource_pool_bucket_group():
           credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
           cfg = oss.config.load_default()
           cfg.credentials_provider = credentials_provider
           cfg.region = "cn-hangzhou"
    
           client = oss.Client(cfg)
    
           req = oss.OperationInput(
               op_name='PutBucketResourcePoolBucketGroup',
               method='PUT',
               parameters={
                   'resourcePoolBucketGroup': 'example-group',  # ご利用の BucketGroup 名に置き換えてください
                   'resourcePool': 'example-resource-pool',     # ご利用のリソースプール名に置き換えてください
               },
               headers=None,
               body=None,
               bucket='examplebucket',  # ご利用のバケット名に置き換えてください
           )
    
           resp = client.invoke_operation(req)
           print(resp.status_code)
    
       if __name__ == "__main__":
           put_bucket_resource_pool_bucket_group()
  2. 帯域幅制限を含む qos.xml を作成します(上記の ossutil の例と同じ内容)。

  3. BucketGroup に帯域幅構成を適用します:Python

       import alibabacloud_oss_v2 as oss
    
       def put_resource_pool_bucket_group_qos_info():
           credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
           cfg = oss.config.load_default()
           cfg.credentials_provider = credentials_provider
           cfg.region = "cn-hangzhou"
    
           client = oss.Client(cfg)
    
           with open('qos.xml', 'r') as f:
               qos_xml_body = f.read()
    
           req = oss.OperationInput(
               op_name='PutResourcePoolBucketGroupQoSInfo',
               method='PUT',
               parameters={
                   'resourcePoolBucketGroupQosInfo': '',
                   'resourcePool': 'example-resource-pool',    # ご利用のリソースプール名に置き換えてください
                   'resourcePoolBucketGroup': 'example-group', # ご利用の BucketGroup 名に置き換えてください
               },
               headers=None,
               body=qos_xml_body,
               bucket=None,
           )
    
           resp = client.invoke_operation(req)
           print(resp.status_code)
    
       if __name__ == "__main__":
           put_resource_pool_bucket_group_qos_info()

API

以下のリクエストボディで PutResourcePoolBucketGroupQoSInfo を呼び出します。

<QoSConfiguration>
  <TotalUploadBandwidth>20</TotalUploadBandwidth>
  <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
  <ExtranetUploadBandwidth>10</ExtranetUploadBandwidth>
  <TotalDownloadBandwidth>30</TotalDownloadBandwidth>
  <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
  <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
</QoSConfiguration>

リソースプールリクエスターの帯域幅制限の設定

複数の RAM ユーザーが同一リソースプール内の異なるバケットにアクセスしており、単一のユーザーがプール全体の帯域幅を独占しないようにする必要がある場合に使用します。

コンソール

  1. RAM ユーザー ID または RAM ロール ID を取得します。

  2. リソースプール QoSページで、対象のリソースプール名をクリックします。リソースプールリクエスターリストタブで、対象の RAM ユーザーまたは RAM ロールについて速度制限構成の変更をクリックします。

ossutil

作業を開始する前に、ossutil をインストールしてください。

  1. 帯域幅制限を含む qos.xml を作成します。

       <QoSConfiguration>
         <TotalUploadBandwidth>100</TotalUploadBandwidth>
         <IntranetUploadBandwidth>50</IntranetUploadBandwidth>
         <ExtranetUploadBandwidth>50</ExtranetUploadBandwidth>
         <TotalDownloadBandwidth>200</TotalDownloadBandwidth>
         <IntranetDownloadBandwidth>150</IntranetDownloadBandwidth>
         <ExtranetDownloadBandwidth>50</ExtranetDownloadBandwidth>
       </QoSConfiguration>
  2. RAM ユーザー ID または RAM ロール ID を取得します。

  3. 構成を適用します(examplepool および 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
  4. (任意)リソースプール内のすべての 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 でサポートされています。

  1. 上記の ossutil の例と同じ内容で qos.xml を作成します。

  2. RAM ユーザー ID または RAM ロール ID を取得します。

  3. 構成を適用します:Python

       import alibabacloud_oss_v2 as oss
    
       def put_resource_pool_requester_qos_info():
           credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
           cfg = oss.config.load_default()
           cfg.credentials_provider = credentials_provider
           cfg.region = "cn-hangzhou"
    
           client = oss.Client(cfg)
    
           with open('qos.xml', 'r') as f:
               qos_xml_body = f.read()
    
           req = oss.OperationInput(
               op_name='PutResourcePoolRequesterQoSInfo',
               method='PUT',
               parameters={
                   'requesterQosInfo': '',
                   'resourcePool': 'example-resource-pool',  # ご利用のリソースプール名に置き換えてください
                   'qosRequester': '2598732222222xxxx',       # RAM ユーザーまたはロール ID に置き換えてください
               },
               headers=None,
               body=qos_xml_body,
               bucket=None,
           )
    
           resp = client.invoke_operation(req)
           print(resp.status_code)
           print(resp.headers)
           print(resp.http_response.content)
    
       if __name__ == "__main__":
           put_resource_pool_requester_qos_info()

API

  1. RAM ユーザー ID または RAM ロール ID を取得します。

  2. 以下のリクエストボディで PutResourcePoolRequesterQoSInfo を呼び出します。

       <QoSConfiguration>
         <TotalUploadBandwidth>100</TotalUploadBandwidth>
         <IntranetUploadBandwidth>50</IntranetUploadBandwidth>
         <ExtranetUploadBandwidth>50</ExtranetUploadBandwidth>
         <TotalDownloadBandwidth>200</TotalDownloadBandwidth>
         <IntranetDownloadBandwidth>150</IntranetDownloadBandwidth>
         <ExtranetDownloadBandwidth>50</ExtranetDownloadBandwidth>
       </QoSConfiguration>

優先度ベースの速度制限の設定

優先度ベースの速度制限を使用して、高優先度サービスの最低帯域幅を保証します。しきい値ベースの速度制限と組み合わせて、各オブジェクトの下限と上限を定義します。

リソースプール優先度の設定

リソースプールに複数のバケットが含まれており、競合時でもコアサービスのバケットに十分な帯域幅を確保する必要がある場合に使用します。

ossutil

  1. 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>
    
         <!-- Priority 3(最高優先度):コアサービスバケット -->
         <QosPriorityLevelConfiguration>
           <PriorityLevel>3</PriorityLevel>
           <GuaranteedQosConfiguration>
             <TotalUploadBandwidth>50</TotalUploadBandwidth>
             <IntranetUploadBandwidth>20</IntranetUploadBandwidth>
             <ExtranetUploadBandwidth>30</ExtranetUploadBandwidth>
             <TotalDownloadBandwidth>80</TotalDownloadBandwidth>
             <IntranetDownloadBandwidth>30</IntranetDownloadBandwidth>
             <ExtranetDownloadBandwidth>50</ExtranetDownloadBandwidth>
           </GuaranteedQosConfiguration>
           <Subjects>
             <Bucket>critical-bucket</Bucket>
             <BucketGroup>core-group</BucketGroup>
           </Subjects>
         </QosPriorityLevelConfiguration>
    
         <!-- Priority 2:重要サービスバケット -->
         <QosPriorityLevelConfiguration>
           <PriorityLevel>2</PriorityLevel>
           <GuaranteedQosConfiguration>
             <TotalUploadBandwidth>30</TotalUploadBandwidth>
             <IntranetUploadBandwidth>10</IntranetUploadBandwidth>
             <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
             <TotalDownloadBandwidth>50</TotalDownloadBandwidth>
             <IntranetDownloadBandwidth>20</IntranetDownloadBandwidth>
             <ExtranetDownloadBandwidth>30</ExtranetDownloadBandwidth>
           </GuaranteedQosConfiguration>
           <Subjects>
             <Bucket>important-bucket</Bucket>
           </Subjects>
         </QosPriorityLevelConfiguration>
       </PriorityQosConfiguration>
  2. 構成を適用します(hz-rp-03 はご利用のリソースプール名に置き換えてください)。

       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
  3. (任意)構成を確認します。

       ossutil api invoke-operation --op-name get-resource-pool-priority-qos-configuration --method GET --parameters resourcePool=hz-rp-03 --parameters priorityQos

SDK

Go

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() {
    // cn-hangzhou をご利用のバケットのリージョンに置き換えてください
    cfg := oss.LoadDefaultConfig().
        WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
        WithRegion("cn-hangzhou")

    client := oss.NewClient(cfg)

    resourcePool := "hz-rp-01" // ご利用のリソースプール名に置き換えてください

    qosConf, err := os.ReadFile("priority-qos.xml")
    if err != nil {
        fmt.Printf("failed to read priority-qos.xml: %v\n", err)
        os.Exit(1)
    }

    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",
        Parameters: map[string]string{
            "priorityQos":  "",
            "resourcePool": resourcePool,
        },
        Headers: map[string]string{
            "Content-MD5": calcMd5(qosConf),
        },
        Body:   bytes.NewReader(qosConf),
        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("PutResourcePoolPriorityQoSConfiguration result:", res.Status)
}

API

PutResourcePoolPriorityQosConfiguration

リソースプールリクエスター優先度の設定

複数のテナントが共通のリソースプールにアクセスする SaaS プラットフォームで、異なるグレードの顧客に対して使用します。プレミアム顧客に高い優先度を割り当てて帯域幅を保証し、スタンダード顧客は残りのリソースを共有します。

ossutil

  1. 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>
    
         <!-- Priority 3(最高優先度):プレミアム顧客 -->
         <QosPriorityLevelConfiguration>
           <PriorityLevel>3</PriorityLevel>
           <GuaranteedQosConfiguration>
             <TotalUploadBandwidth>60</TotalUploadBandwidth>
             <IntranetUploadBandwidth>20</IntranetUploadBandwidth>
             <ExtranetUploadBandwidth>40</ExtranetUploadBandwidth>
             <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
             <IntranetDownloadBandwidth>40</IntranetDownloadBandwidth>
             <ExtranetDownloadBandwidth>60</ExtranetDownloadBandwidth>
           </GuaranteedQosConfiguration>
           <Subjects>
             <Requester>123456789012****</Requester>
             <Requester>234567890123****</Requester>
           </Subjects>
         </QosPriorityLevelConfiguration>
    
         <!-- Priority 2:スタンダード顧客 -->
         <QosPriorityLevelConfiguration>
           <PriorityLevel>2</PriorityLevel>
           <GuaranteedQosConfiguration>
             <TotalUploadBandwidth>30</TotalUploadBandwidth>
             <IntranetUploadBandwidth>10</IntranetUploadBandwidth>
             <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
             <TotalDownloadBandwidth>50</TotalDownloadBandwidth>
             <IntranetDownloadBandwidth>20</IntranetDownloadBandwidth>
             <ExtranetDownloadBandwidth>30</ExtranetDownloadBandwidth>
           </GuaranteedQosConfiguration>
           <Subjects>
             <Requester>345678901234****</Requester>
           </Subjects>
         </QosPriorityLevelConfiguration>
       </PriorityQosConfiguration>
  2. 構成を適用します。

       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
  3. (任意)構成を確認します。

       ossutil api invoke-operation --op-name get-resource-pool-requester-priority-qos-configuration --method GET --parameters resourcePool=hz-rp-03 --parameters requesterPriorityQos

SDK

Go

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() {
    cfg := oss.LoadDefaultConfig().
        WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
        WithRegion("cn-hangzhou") // ご利用のリージョンに置き換えてください

    client := oss.NewClient(cfg)

    resourcePool := "hz-rp-01" // ご利用のリソースプール名に置き換えてください

    qosConf, err := os.ReadFile("requester-priority-qos.xml")
    if err != nil {
        fmt.Printf("failed to read requester-priority-qos.xml: %v\n", err)
        os.Exit(1)
    }

    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",
        Parameters: map[string]string{
            "requesterPriorityQos": "",
            "resourcePool":         resourcePool,
        },
        Headers: map[string]string{
            "Content-MD5": calcMd5(qosConf),
        },
        Body:   bytes.NewReader(qosConf),
        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("PutResourcePoolRequesterPriorityQoSConfiguration result:", res.Status)
}

API

PutResourcePoolRequesterPriorityQosConfiguration

モニタリングとアラート機能

帯域幅使用量のモニタリング

CloudMonitor - Object Storage Service リソースプールにアクセスして、リソースプール内の各サービスのリアルタイム帯域幅使用量を確認します。

帯域幅アラートの設定

CloudMonitor でアラートルールを作成し、重要なサービスに影響が出る前に通知を受け取るようにします。たとえば、帯域幅使用量が 80% を超えた時点でアラートをトリガーすることで、ピークトラフィックが発生する前に構成を調整する時間を確保できます。

本番環境に適用

容量計画

リソースプール QoS を本番環境に導入する前に、以下のガイドラインに従ってください。

最低コミットメント合計をプール帯域幅の 50% 未満に保ちます。

動的スケジューリング用に帯域幅の少なくとも 50% を弾力的な余裕として確保します。これにより、全体的な利用率が向上し、需要が予期せず急増した場合でも高優先度のオブジェクトが帯域幅不足になることを防げます。

100 Gbps プールの構成例:

Priority 3 最低コミットメント:20 Gbps
Priority 2 最低コミットメント:20 Gbps
Priority 1 最低コミットメント:10 Gbps
コミットメント合計:50 Gbps(50 Gbps の弾力的余裕)

優先度レベルは 3~5 段階にします。

レベルを増やすと管理が複雑になり、実質的なメリットが得られません。実用的な階層構造の例:

  • コアサービス:Priority 4~5

  • 重要サービス:Priority 3

  • 通常サービス:Priority 1~2

しきい値制限を最低コミットメントより高く設定します。

これにより、利用可能な帯域幅がある場合に高優先度のオブジェクトが保証された下限を超えてバーストできます。

最低コミットメント(下限):      バケット A — 50 Gbps
しきい値ベースの制限(上限): バケット A — 80 Gbps
実際の利用可能帯域幅:          50~80 Gbps

ベストプラクティス

ビデオオンデマンドプラットフォーム

  • ライブストリーム:Priority 3、最低コミットメント 50 Gbps

  • オンデマンドコンテンツ:Priority 1、最低コミットメント 20 Gbps

  • CDN back-to-origin:しきい値ベースの制限 100 Gbps

マルチテナント SaaS プラットフォーム

  • Enterprise Edition 顧客:Priority 3、最低帯域幅コミットメントあり

  • 無料版顧客:Priority 1、残りの帯域幅を共有

  • 単一テナント上限:しきい値ベースの速度制限で、いずれかのテナントが帯域幅を独占しないように防止

データレイク分析

  • リアルタイム分析:Priority 2、最低コミットメント 30 Gbps

  • オフライン分析:Priority 1、最低コミットメント 20 Gbps

  • アーカイブデータ:しきい値ベースの制限 10 Gbps

リスク防止

クォータ使用量を定期的に確認します。 CloudMonitor を使用して各オブジェクトの帯域幅使用量の傾向を追跡し、構成を迅速に調整します。

  • 高優先度オブジェクトの最低帯域幅コミットメントが継続的に 95% 未満しか満たされていない場合は、そのコミットメントを増やすか、低優先度オブジェクトのコミットメントを減らします。

  • 低優先度オブジェクトが長時間帯域幅をまったく取得できない場合は、高優先度のコミットメントを減らすか、リソースプールをスケールアウトします。

マルチレベルのアラートを設定します。

  • 警告レベル(80%):スケールアウト計画を準備します。

  • 重大レベル(90%):緊急対応を直ちに開始します。

構成の競合を回避します。

  • 最低帯域幅コミットメントの合計は、リソースプールの総帯域幅を超えてはなりません。

  • しきい値ベースの制限は、優先度ベースの最低コミットメントより高くする必要があります。

  • バケットが BucketGroup に属している場合、バケット個別の優先度ではなく BucketGroup の優先度が適用されます。

本番環境への適用前に変更をテストします。

  • 構成変更はまずステージング環境で検証します。

  • 変更前に現在の構成を保存して、迅速にロールバックできるようにします。

  • 変更はオフピーク時間帯に適用します。

クォータと制限事項

構成変更は 5 分以内に反映されます。

リソースクォータ/制限
リージョンあたりのリソースプール数100
リソースプールあたりのバケット数100
リソースプールあたりの BucketGroup 数100
リソースプールあたりの速度制限付きリクエスター数300
BucketGroup 名の長さ3~30 文字
BucketGroup 名に使用可能な文字小文字、数字、ハイフン(-)
リソースプールあたりの優先度レベル数3~10(整数)
優先度レベルの値1 から優先度レベル総数までの整数
最低帯域幅コミットメント制約すべてのコミットメントの合計は、プールの総帯域幅を超えてはならない
最低帯域幅コミットメントの下限MIN[5, (上位レベルのしきい値) / (2 × 優先度レベル数)] Gbps 以上
帯域幅パラメーター:正の整数Gbps 単位で制限を設定
帯域幅パラメーター:-1無制限(共有プール帯域幅を使用)
帯域幅パラメーター:0すべてのトラフィックをブロック — 慎重に使用してください