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

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

最終更新日:May 07, 2026

デフォルトでは、Alibaba Cloud アカウント配下の同一リージョン内のすべてのバケットが帯域幅を共有します。複数のバケットが同時に大量のデータ転送を行うと、帯域幅の競合が発生し、重要サービスの転送が遅延する可能性があります。これを解決するには、リソースプール QoS の速度制限を設定します。しきい値ベースの速度制限により、特定のバケットが過剰な帯域幅を消費することを防ぎ、優先度ベースの速度制限により、コアサービスに最低限の帯域幅を保証します。これらの補完的な手法により、重要ワークロードの安定性が確保されます。

仕組み

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

バケットBucketGroupなど、各レベルのオブジェクトに対して帯域幅上限を設定することで、リソースの過剰消費を防止できます。

階層関係

リソースプール階層:リソースプールには、複数レベルのオブジェクト階層を含めることができます。以下の図は、一般的な構造の例です。

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

シナリオ 2:ネストされた BucketGroups

シナリオ 3:BucketGroups とバケットの混合

リクエスターディメンション(独立): リクエスターはリソースプール階層の一部ではなく、速度制限のための独立したディメンションです。

シナリオ 4:リクエスターおよびリソースプールの速度制限が同時に適用される場合

速度制限の原則

基本原則

resource pool: 最大 100Gbps
├─ bucket A: 最大 40Gbps ← 他のリソースがアイドル状態でも 40 Gbps を超えない
├─ bucket B: 最大 30Gbps
└─ bucket C: 無制限 ← 残りの帯域幅すべてを使用可能

制約ルール

  1. 複数の制限が同時に適用される場合:有効な帯域幅は、適用可能なすべての制限値のうち最小値となります。

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

  3. リクエスターは独立した制約です:この制約はリソースプールの階層制約に加えて適用され、最も低い制限値が優先されます。

RAM ユーザーがバケットにアクセスする場合、トラフィックは以下の両方の制限を受けます。

  • リクエスター制限 (20 Gbps) ← 独立ディメンション

  • バケット制限 (30 Gbps) ← リソースプール階層

有効な最大帯域幅 = min(20 Gbps, 30 Gbps) = 20 Gbps

優先度ベースの速度制限

リソースプール内で 3~10 段階の優先度を設定できます。数値が大きいほど優先度が高くなります。異なる優先度レベルのオブジェクトに最低帯域幅を割り当てることで、リソース競合時に高優先度サービスが最初に帯域幅を取得できるようにします。優先度が明示的に指定されていないオブジェクトは、デフォルトの優先度を使用します。最低帯域幅が設定されていない優先度レベルは、デフォルトのコミットメントを使用します。

コアメカニズム

  1. 保証帯域幅:各優先度レベルには最低帯域幅が設定されており、指定された帯域幅が利用可能であることを保証します。

  2. プリエンプションメカニズム:高優先度トラフィックは、低優先度トラフィックが最低帯域幅コミットメントを超えて使用している帯域幅を奪取できます。最も高い優先度から順にプリエンプションが行われます。

  3. アイドル帯域幅の利用:低優先度トラフィックは、高優先度の最低帯域幅コミットメントのうち未使用部分を利用できます。ただし、高優先度トラフィックは常に利用可能な帯域幅を優先的に使用できます。

  4. 構成制約:すべての優先度レベルにおける最低帯域幅コミットメントの合計は、リソースプールの総帯域幅を超えてはなりません。

典型的なシナリオ

以下のシナリオでは、リソースプールの総帯域幅制限は 100 Gbps で、複数の優先度レベルが設定されています。数値が大きいほど優先度が高くなります。

シナリオ 1:高優先度レベルが、最低帯域幅コミットメントを超える低優先度レベルから帯域幅をプリエンプトする場合

各優先度レベルの最低帯域幅コミットメントは 20 Gbps です。需要は Priority 1 が 10 Gbps、Priority 2 が 30 Gbps、Priority 3 が 80 Gbps です。

優先度

最低コミットメント

需要

実際の割り当て

説明

Priority 3

20 Gbps

80 Gbps

70 Gbps

20 Gbps のコミットメントを受信し、Priority 1 のアイドル帯域幅 10 Gbps をプリエンプトし、プールの残り 40 Gbps を取得します。

Priority 2

20 Gbps

30 Gbps

20 Gbps

20 Gbps のコミットメントを受信します。追加の 10 Gbps 需要は Priority 3 によってプリエンプトされます。

Priority 1

20 Gbps

10 Gbps

10 Gbps

需要どおり 10 Gbps を受信します。保証帯域幅の残り 10 Gbps はアイドル状態であり、Priority 3 によってプリエンプトされます。

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

シナリオ 2:高優先度が先にプリエンプトする場合

各優先度レベルの最低帯域幅コミットメントは 25 Gbps です。需要は Priority 1 が 0 Gbps、Priority 2 が 5 Gbps、Priority 3 が 40 Gbps、Priority 4 が 60 Gbps です。

優先度

最低コミットメント

需要

実際の割り当て

説明

Priority 4

25 Gbps

60 Gbps

60 Gbps

25 Gbps のコミットメントを受信し、高優先度により追加の 35 Gbps をプリエンプトします。

Priority 3

25 Gbps

40 Gbps

35 Gbps

25 Gbps のコミットメントを受信し、次に高い優先度として残りの 10 Gbps をプリエンプトします。

Priority 2

25 Gbps

5 Gbps

5 Gbps

需要がコミットメント未満です。需要どおり 5 Gbps を受信します。

Priority 1

25 Gbps

0 Gbps

0 Gbps

需要がコミットメント未満です。需要どおり 0 Gbps を受信します。

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

シナリオ 3:最低コミットメントの合計が総帯域幅未満の場合

各優先度レベルの最低帯域幅コミットメントは 10 Gbps(合計 40 Gbps)です。需要は Priority 1 が 50 Gbps、Priority 2 が 50 Gbps、Priority 3 が 30 Gbps、Priority 4 が 20 Gbps です。

優先度

最低コミットメント

需要

実際の割り当て

説明

Priority 4

10 Gbps

20 Gbps

20 Gbps

最高優先度であり、需要は完全に満たされます。

Priority 3

10 Gbps

30 Gbps

30 Gbps

2 番目に高い優先度であり、需要は完全に満たされます。

Priority 2

10 Gbps

50 Gbps

40 Gbps

10 Gbps のコミットメントを受信し、利用可能な帯域幅の残り 30 Gbps を取得します。

Priority 1

10 Gbps

50 Gbps

10 Gbps

10 Gbps のコミットメントのみを受信します。追加の需要は高優先度トラフィックによってプリエンプトされます。

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

速度制限手法の組み合わせ

両方の手法を併用する場合、リソースの有効帯域幅は、しきい値ベースの上限、優先度ベースの最低コミットメント、および実際の需要の相互作用によって決定されます。

優先順位ルール

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

  • 優先度ベースのコミットメントはソフト保証です。システムはこのコミットメントを満たすよう試みますが、割り当てはハードリミットを超えることはできません。

構成例

標準構成

bucket A は以下のように構成されています。

  • 優先度ベースの速度制限:最低帯域幅コミットメント 50 Gbps ← 優先度ディメンション

  • しきい値ベースの速度制限:最大上限 80 Gbps ← リソースプール階層

結果:bucket A の利用可能帯域幅は、保証された最低 50 Gbps から最大 80 Gbps の範囲になります。

競合する構成

bucket A が競合する構成を持つ場合:

  • 優先度ベースの速度制限:最低帯域幅コミットメント 80 Gbps ← 優先度ディメンション

  • しきい値ベースの速度制限:最大上限 50 Gbps ← リソースプール階層

結果:bucket A の実際の利用可能帯域幅は 50 Gbps になります。しきい値ベースの上限はハードリミットであり、より高い最低コミットメントを上書きして優先されます。

リソースプールの申請

ご利用のアカウントの特定リージョンにおける帯域幅が 400 Gbps に達する、またはそれを超える場合は、テクニカルサポートまでご連絡ください。リソースプール、コンソールアクセス、および優先度ベースの速度制限をご申請いただけます。

チケットを送信する際に、以下の情報を提供してください。

重要

単一のリソースプール内のバケットは、同一ユーザーに属し、同一リージョンにあり、冗長タイプが同一である必要があります。リソースプール作成プロセスには、データ移行およびリソース再割り当てが含まれる場合があります。

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
Console access to resource pool: 必須
Priority-based throttling: 必須

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

この機能を使用して、最大帯域幅を制限し、特定のエンティティが過剰なリソースを消費することを防止します。

バケット帯域幅制限

これにより、単一バケットへの過剰なトラフィックが他のバケットのパフォーマンスに影響を与えることを防ぎます。

コンソール

Resource Pool QoS ページで、対象のリソースプール名をクリックします。次に、対象バケットの右側にある フロー制御の変更 をクリックし、必要に応じてバケット帯域幅を設定します。

ossutil

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

  1. qos.xml という名前のローカル XML ファイルでバケットの帯域幅制限を設定します。

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  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. qos.xml という名前のローカルファイルでバケットの帯域幅制限を設定します。

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  2. 帯域幅構成を特定のバケットに適用します。

    import alibabacloud_oss_v2 as oss
    
    def PutBucketQoSInfo():
       # 認証のために環境変数からアクセス認証情報を取得します。
        credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    
        # デフォルト設定を読み込み、設定ファイルを取得します。
        cfg = oss.config.load_default()
    
        # 認証情報プロバイダーを指定します。
        cfg.credentials_provider = credentials_provider
    
        # バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        cfg.region = "cn-hangzhou"
    
        # 設定ファイルを使用して OSSClient インスタンスを初期化します。
        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()
    
        # PutBucketQoSInfo 操作の入力パラメーターを指定して、バケットの QoS ルールを設定します。
        req = oss.OperationInput(
            op_name = 'PutBucketQoSInfo',  # 操作名。バケット QoS 情報を設定する操作を指定します。
            method = 'PUT',  # HTTP メソッドの種類。この例では、リソースを更新するために PUT を使用します。
            parameters = {
                'qosInfo': '',  # QoS 関連のパラメーター。
            },
            headers = None,  # リクエストヘッダー。追加のヘッダーを指定する必要がない場合は、フィールドを空のままにします。
            body = qos_xml_body,  # リクエストボディ。qos.xml ファイルから読み込んだ内容を含みます。
            bucket = 'examplebucket',  # バケット名。
        )
    
        # クライアントの invoke_operation メソッドを使用してリクエストを実行し、レスポンスまたはエラーメッセージを取得します。
        resp = client.invoke_operation(req)
    
        # 返された HTTP ステータスコードを表示します。
        print(resp.status_code)
    
        # レスポンスヘッダーを表示します。
        print(resp.headers)
    
    if __name__ == "__main__":
        GetBucketQoSInfo()

API

次のリクエストボディを使用して PutBucketQoSInfo 操作を呼び出し、バケットの帯域幅を制限します。

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

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

RAM ユーザー

複数のサービスが単一のバケットを共有する場合、特定の RAM ユーザーの帯域幅を制限することで、そのユーザーが過剰なリソースを消費することを防止できます。

コンソール

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

  2. Resource Pool QoS ページで、対象のリソースプール名をクリックします。次に、対象バケットの右側にある リクエスト元ごとのフロー制御 をクリックし、RAM ユーザーがバケットにアクセスする際に必要な帯域幅を設定します。

ossutil

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

次の例は、リソースプール内のバケットにアクセスする RAM ユーザーの帯域幅を制限する方法を示しています。

  1. qos.xml という名前のローカル XML ファイルで、リソースプール内のバケットにアクセスする RAM ユーザーの帯域幅制限を設定します。

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

  3. 帯域幅構成を RAM ユーザーに適用します。次のコマンドは、UID が 266xxxx の RAM ユーザーが examplebucket バケットにアクセスする場合に構成を適用します。

    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. (オプション)RAM ユーザーの帯域幅構成を表示します。

    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 ユーザーの帯域幅を制限できます。

  1. qos.xml という名前のローカルファイルで、リソースプール内のバケットにアクセスする RAM ユーザーの帯域幅制限を設定します。

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

  3. バケットにアクセスする RAM ユーザーに帯域幅構成を適用します。

    import alibabacloud_oss_v2 as oss
    
    def PutBucketRequesterQoSInfo():
        # 認証のために環境変数からアクセス認証情報を取得します。
        credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    
        # デフォルト設定を読み込み、設定ファイルを取得します。
        cfg = oss.config.load_default()
    
        # 認証情報プロバイダーを指定します。
        cfg.credentials_provider = credentials_provider
    
        # バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        cfg.region = "cn-hangzhou"
    
        # 設定ファイルを使用して OSSClient インスタンスを初期化します。
        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()
    
        # バケットにアクセスするリクエスターの速度制限ルールを設定するための PutBucketRequesterQoSInfo 操作の入力パラメーターを指定します。
        req = oss.OperationInput(
            op_name = 'PutBucketRequesterQoSInfo',  # 操作名。
            method = 'PUT',  # HTTP メソッドの種類。この例では PUT を使用します。
            parameters = {
                'requesterQosInfo': '',  # QoS 関連のパラメーター。
                'qosRequester': '2598732222222xxxx',  # リクエスターを識別するための一意の識別子。異なるリクエスターを区別するために使用されます。
            },
            headers = None,  # リクエストヘッダー。追加のヘッダーを指定する必要がない場合は、フィールドを空のままにします。
            body = qos_xml_body,  # リクエストボディ。qos.xml ファイルから読み込んだ内容を含みます。
            bucket = 'examplebucket',  # バケット名。
        )
    
        # クライアントの invoke_operation メソッドを使用してリクエストを実行し、レスポンスを取得します。
        resp = client.invoke_operation(req)
    
        # 返された HTTP ステータスコードを表示します。
        print(resp.status_code)
    
        # レスポンスヘッダーを表示します。
        print(resp.headers)
    
        # レスポンスボディを表示します。通常、リクエストによって返された具体的なデータが含まれます。
        print(resp.http_response.content)
    
    if __name__ == "__main__":
        PutBucketRequesterQoSInfo()

API

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

  2. 次のリクエストボディを使用して PutBucketRequesterQoSInfo 操作を呼び出し、バケットにアクセスする RAM ユーザーの帯域幅を制限します。

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

RAM ロール

コンテンツデリバリーネットワーク (CDN) とバケットを組み合わせて静的アセットを保存し、コンテンツ配信を高速化できます。非公開バケットから CDN がファイルを取得できるようにするには、オリジンフェッチを有効にする必要があります。CDN は RAM ロール AliyunCDNAccessingPrivateOSSRole を偽装します。このシナリオでは、オリジンフェッチ帯域幅を制限できます。

コンソール

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

  2. Resource Pool QoS ページで、対象のリソースプール名をクリックします。次に、対象バケットの右側にある リクエスト元ごとのフロー制御 をクリックし、必要なリクエスターバンド幅を設定します。

ossutil

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

  1. qos.xml という名前のローカル XML ファイルで、特定のバケットにアクセスする RAM ロールの帯域幅制限を設定します。

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

  3. 帯域幅構成を RAM ロールに適用します。次のコマンドは、ID が 362xxxx の RAM ロールが 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
  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 のみを使用して、バケットにアクセスする RAM ロールの帯域幅を制限できます。

  1. qos.xml という名前のローカルファイルで、リソースプール内のバケットにアクセスする RAM ロールの帯域幅制限を設定します。

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

  3. RAM ロールに帯域幅構成を適用します。

    import alibabacloud_oss_v2 as oss
    
    def PutBucketRequesterQoSInfo():
        # 認証のために環境変数からアクセス認証情報を取得します。
        credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    
        # デフォルト設定を読み込み、設定ファイルを取得します。
        cfg = oss.config.load_default()
    
        # 認証情報プロバイダーを指定します。
        cfg.credentials_provider = credentials_provider
    
        # バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        cfg.region = "cn-hangzhou"
    
        # 設定ファイルを使用して OSSClient インスタンスを初期化します。
        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()
    
        # バケットにアクセスするリクエスターの速度制限ルールを設定するための PutBucketRequesterQoSInfo 操作の入力パラメーターを指定します。
        req = oss.OperationInput(
            op_name = 'PutBucketRequesterQoSInfo',  # 操作名。
            method = 'PUT',  # HTTP メソッドの種類。この例では PUT を使用します。
            parameters = {
                'requesterQosInfo': '',  # QoS 関連のパラメーター。
                'qosRequester': '2598732222222xxxx',  # リクエスターを識別するための一意の識別子。異なるリクエスターを区別するために使用されます。
            },
            headers = None,  # リクエストヘッダー。追加のヘッダーを指定する必要がない場合は、フィールドを空のままにします。
            body = qos_xml_body,  # リクエストボディ。qos.xml ファイルから読み込んだ内容を含みます。
            bucket = 'examplebucket',  # バケット名。
        )
    
        # クライアントの invoke_operation メソッドを使用してリクエストを実行し、レスポンスを取得します。
        resp = client.invoke_operation(req)
    
        # 返された HTTP ステータスコードを表示します。
        print(resp.status_code)
    
        # レスポンスヘッダーを表示します。
        print(resp.headers)
    
        # レスポンスボディを表示します。通常、リクエストによって返された具体的なデータが含まれます。
        print(resp.http_response.content)
    
    if __name__ == "__main__":
        PutBucketRequesterQoSInfo()

API

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

  2. 次のリクエストボディを使用して PutBucketRequesterQoSInfo 操作を呼び出し、バケットにアクセスする RAM ロールの帯域幅を制限します。

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

BucketGroup 帯域幅制限

低優先度のバケットを BucketGroup にグループ化して、それらの総帯域幅を管理および制限できます。

コンソール

  1. Resource Pool QoS ページで、対象のリソースプール名をクリックします。次に、バケットグループの作成 をクリックし、BucketGroup の名前を定義して必要な帯域幅を設定します。

  2. 対象のリソースプールページで、対象バケットの右側にある バケットグループ をクリックし、低優先度のバケットを BucketGroup に追加します。

ossutil

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

  1. 次のコマンドは、scheduled-posts バケットおよび archived-comments バケットを BucketGroup に追加します。

    1. 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
    2. 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
    3. (オプション)BucketGroup 内のバケット一覧を取得します。

      ossutil api invoke-operation --op-name list-resource-pool-bucket-groups --method GET --parameters resourcePool=pool-for-ai --parameters resourcePoolBucketGroup
  2. qos.xml という名前のローカル XML ファイルで、リソースプール内の特定の BucketGroup の帯域幅制限を設定します。

    <QoSConfiguration>
      <TotalUploadBandwidth>20</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>10</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>30</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  3. 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
  4. (オプション)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 の帯域幅を制限できます。

  1. リソースプールからバケットを BucketGroup に追加します。

    import alibabacloud_oss_v2 as oss
    
    def PutBucketResourcePoolBucketGroup():
        # 認証のために環境変数からアクセス認証情報を取得します。
        credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    
        # デフォルト設定を読み込み、設定ファイルを取得します。
        cfg = oss.config.load_default()
    
        # 認証情報プロバイダーを指定します。
        cfg.credentials_provider = credentials_provider
    
        # バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        cfg.region = "cn-hangzhou"
    
        # 設定ファイルを使用して OSSClient インスタンスを初期化します。
        client = oss.Client(cfg)
    
        # PutBucketResourcePoolBucketGroup 操作の入力パラメーターを指定します。
        req = oss.OperationInput(
            op_name = 'PutBucketResourcePoolBucketGroup',  # 操作名。
            method = 'PUT',  # HTTP メソッドの種類。この例では PUT を使用します。
            parameters = {
                'resourcePoolBucketGroup': 'example-group',  # リソースプール内のバケットグループ名。
                'resourcePool': 'example-resource-pool',               # リソースプール名。
            },
            headers = None,  # リクエストヘッダー。追加のヘッダーを指定する必要がない場合は、フィールドを空のままにします。
            body = None,  # リクエストボディ。通常、PUT リクエストでは不要です。
            bucket = 'examplebucket',  # バケット名。
        )
    
        # クライアントの invoke_operation メソッドを使用してリクエストを実行し、レスポンスを取得します。
        resp = client.invoke_operation(req)
    
        # 返された HTTP ステータスコードを表示します。
        print(resp.status_code)
    
        # レスポンスヘッダーを表示します。
        print(resp.headers)
    
        # レスポンスボディを表示します。通常、リクエストによって返された具体的なデータが含まれます。
        print(resp.http_response.content)
    
    if __name__ == "__main__":
        PutBucketResourcePoolBucketGroup()
  2. qos.xml という名前のローカル XML ファイルで、リソースプール内の特定の BucketGroup の帯域幅制限を設定します。

    <QoSConfiguration>
      <TotalUploadBandwidth>20</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>10</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>30</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  3. BucketGroup に帯域幅構成を適用します。

    import alibabacloud_oss_v2 as oss
    
    def PutResourcePoolBucketGroupQoSInfo():
        # 認証のために環境変数からアクセス認証情報を取得します。
        credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    
        # デフォルト設定を読み込み、設定ファイルを取得します。
        cfg = oss.config.load_default()
    
        # 認証情報プロバイダーを指定します。
        cfg.credentials_provider = credentials_provider
    
        # バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        cfg.region = "cn-hangzhou"
    
        # 設定ファイルを使用して OSSClient インスタンスを初期化します。
        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()
    
        # PutResourcePoolBucketGroupQoSInfo 操作の入力パラメーターを指定します。
        req = oss.OperationInput(
            op_name = 'PutResourcePoolBucketGroupQoSInfo',  # 操作名。
            method = 'PUT',  # HTTP メソッドの種類。この例では PUT を使用します。
            parameters = {
                'resourcePoolBucketGroupQosInfo': '',  # QoS 関連のパラメーター。
                'resourcePool': 'example-resource-pool',           #  リソースプール名
                'resourcePoolBucketGroup': 'example-group',  # バケットグループ名。
            },
            headers = None,  # リクエストヘッダー。追加のヘッダーを指定する必要がない場合は、フィールドを空のままにします。
            body = qos_xml_body,  # リクエストボディ。qos.xml ファイルから読み込んだ内容を含みます。
            bucket = None,  # バケット名。PUT リクエストでは不要です。この操作は特定のバケットに対して実行されません。
        )
    
        # クライアントの invoke_operation メソッドを使用してリクエストを実行し、レスポンスを取得します。
        resp = client.invoke_operation(req)
    
        # 返された HTTP ステータスコードを表示します。
        print(resp.status_code)
    
        # レスポンスヘッダーを表示します。
        print(resp.headers)
    
        # レスポンスボディを表示します。通常、リクエストによって返された具体的なデータが含まれます。
        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 ユーザーが同一リソースプール内の異なるバケットにアクセスする場合、個別の帯域幅制限を設定することで、特定のユーザーがプールの帯域幅を独占することを防止できます。

コンソール

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

  2. Resource Pool QoS ページで、対象のリソースプール名をクリックします。リクエスト元ごとのフロー制御 タブで、対象の RAM ユーザーまたは RAM ロールの右側にある フロー制御の変更 をクリックし、必要なリクエスターバンド幅を設定します。

ossutil

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

  1. qos.xml という名前のローカル XML ファイルで、リソースプールにアクセスする RAM ユーザーまたは RAM ロールの帯域幅制限を設定します。

    <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. 帯域幅構成を RAM ユーザーに適用します。次のコマンドは、UID が 266xxxx の RAM ユーザーに構成を適用します。

    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 のみを使用して、リソースプールにアクセスする RAM ユーザーまたは RAM ロールの帯域幅を制限できます。

  1. qos.xml という名前のローカルファイルで、リソースプールにアクセスする特定の RAM ユーザーまたは RAM ロールの帯域幅制限を設定します。

    <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. 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
    
        # バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        cfg.region = "cn-hangzhou"
    
        # 設定ファイルを使用して OSSClient インスタンスを初期化します。
        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()
    
        # PutResourcePoolRequesterQoSInfo 操作の入力パラメーターを指定します。
        req = oss.OperationInput(
            op_name = 'PutResourcePoolRequesterQoSInfo',  # 操作名。
            method = 'PUT',  # HTTP メソッドの種類。この例では PUT を使用します。
            parameters = {
                'requesterQosInfo': '',  # QoS 関連のパラメーター。
                'resourcePool': 'example-resource-pool',  # リソースプール名。
                'qosRequester': '2598732222222xxxx',  # リクエスターの ID。
            },
            headers = None,  # リクエストヘッダー。追加のヘッダーを指定する必要がない場合は、フィールドを空のままにします。
            body = qos_xml_body,  # リクエストボディ。qos.xml ファイルから読み込んだ内容を含みます。
            bucket = None,  # バケット名。PUT リクエストでは不要です。操作は特定のバケットに対して実行されません。
        )
    
        # クライアントの invoke_operation メソッドを使用してリクエストを実行し、レスポンスを取得します。
        resp = client.invoke_operation(req)
    
        # 返された HTTP ステータスコードを表示します。
        print(resp.status_code)
    
        # レスポンスヘッダーを表示します。
        print(resp.headers)
    
        # レスポンスボディを表示します。通常、リクエストによって返された具体的なデータが含まれます。
        print(resp.http_response.content)
    
    if __name__ == "__main__":
        PutResourcePoolRequesterQoSInfo()

API

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

  2. 次のリクエストボディを使用して PutResourcePoolRequesterQoSInfo 操作を呼び出し、リソースプールにアクセスする RAM ユーザーまたは RAM ロールの帯域幅を制限します。

    <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 という名前の優先度 QoS 構成ファイルを作成します。

    <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>
  2. 構成を適用します。

    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

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 main() {
	// バケットが配置されているリージョンを指定します。たとえば、中国 (杭州) の場合はリージョンを 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

PutResourcePoolPriorityQosConfiguration

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

マルチテナント SaaS プラットフォームでは、同一リソースプールにアクセスする異なる階層のリクエスターに優先度を割り当てることができます。これにより、VIP 顧客に帯域幅を保証し、他の顧客は残りのリソースを共有できます。

ossutil

  1. requester-priority-qos.xml という名前のリクエスタープライオリティ QoS 構成ファイルを作成します。

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

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 main() {
	// バケットが配置されているリージョンを指定します。たとえば、中国 (杭州) の場合はリージョンを 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

PutResourcePoolRequesterPriorityQosConfiguration

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

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

Cloud Monitor-Object Storage Service (OSS) リソースプール ページにアクセスして、リソースプール内の重要サービスのリアルタイム帯域幅使用量をモニタリングします。これにより、効果的なリソース割り当てとサービスの安定性が確保されます。

帯域幅アラートの設定

重要サービスの安定性を維持するために、Cloud Monitor サービスでアラートルールを作成できます。帯域幅使用量が 80% を超えると、Cloud Monitor が自動的にアラートをトリガーし、ピークトラフィック時に帯域幅構成を迅速に調整できます。

本番環境に適用

容量計画

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

動的スケジューリングのための柔軟なスペースを少なくとも 50% 確保することで、リソースプールの全体的な利用率が向上します。

推奨構成:
リソースプールの総帯域幅:100 Gbps
Priority 3 の最低帯域幅コミットメント:20 Gbps
Priority 2 の最低帯域幅コミットメント:20 Gbps
Priority 1 の最低帯域幅コミットメント:10 Gbps
合計:50 Gbps(50 Gbps を柔軟なスペースとして確保)

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

優先度レベルが多すぎると管理が複雑になります。ビジネス上の重要度に基づいて、サービスを 3~5 段階に分類することを推奨します。

  • コアサービス(優先度 4~5)

  • 重要サービス(優先度 3)

  • 標準サービス(優先度 1~2)

3. しきい値ベースの速度制限を、最低帯域幅コミットメントより高く設定します。

これにより、容量に余裕がある場合に高優先度オブジェクトがより多くの帯域幅を利用できるようになります。

推奨構成:
Bucket A の最低帯域幅コミットメント:50 Gbps
Bucket A のしきい値ベースの速度制限:80 Gbps
有効帯域幅:50~80 Gbps(50 Gbps が保証され、80 Gbps が上限)

ベストプラクティス

ユースケース 1:ビデオオンデマンドプラットフォーム

  • ライブストリーム:優先度 3 を割り当て、最低帯域幅コミットメントを 50 Gbps に設定します。

  • オンデマンドコンテンツ:優先度 1 を割り当て、最低帯域幅コミットメントを 20 Gbps に設定します。

  • CDN オリジンフェッチ:しきい値ベースの速度制限を 100 Gbps に設定します。

ユースケース 2:マルチテナント SaaS プラットフォーム

  • エンタープライズ顧客:優先度 3 を割り当て、専用の最低帯域幅コミットメントを設定します。

  • フリーティア顧客:優先度 1 を割り当て、残りのリソースを共有します。

  • テナントごとの上限:しきい値ベースの速度制限を使用して、単一テナントが過剰な帯域幅を消費することを防止します。

ユースケース 3:データレイク分析

  • リアルタイム分析:優先度 2 を割り当て、最低帯域幅コミットメントを 30 Gbps に設定します。

  • バッチ分析:優先度 1 を割り当て、最低帯域幅コミットメントを 20 Gbps に設定します。

  • データアーカイブ:しきい値ベースの速度制限を 10 Gbps に設定します。

リスク軽減

1. クォータ使用量を定期的に確認します

Cloud Monitor を使用して、すべてのオブジェクトの帯域幅使用量の傾向を追跡し、必要に応じてクォータを調整します。

  • 高優先度オブジェクトが一貫して最低帯域幅コミットメントを受信できない場合(たとえば、充足率が 95% 未満の場合)、コミットメントを増やすか、低優先度オブジェクトのコミットメントを減らすことを検討してください。

  • 低優先度オブジェクトが頻繁に帯域幅不足に陥る場合、高優先度オブジェクトの最低帯域幅コミットメントを減らすか、リソースプールをスケールアウトすることを検討してください。

2. マルチレベルアラートを設定します

  • 警告レベル(80%):早期警告として使用し、スケールアウト計画を立てる時間を確保します。

  • 重大レベル(90%):緊急対応をトリガーするために使用します(例:緊急計画の実行)。

3. 構成の競合を回避します

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

  • オブジェクトのしきい値ベースの速度制限は、その最低帯域幅コミットメントより高く設定する必要があります。

  • バケットが BucketGroup の一部である場合、BucketGroup の優先度がバケットの個別優先度設定よりも優先されます。

4. 変更とロールバックを管理します

  • 大きな変更を行う前に、ステージング環境で構成を検証してください。

  • 必要に応じて迅速にロールバックできるよう、現在の構成を必ずバックアップしてください。

  • サービスへの影響を最小限に抑えるため、すべての変更はオフピーク時間帯にスケジュールしてください。

クォータと制限事項

項目

クォータ/制限

リソースプール

リージョンあたり最大 100 個のリソースプール。

リソースプールあたり最大 100 個のバケット。

リソースプールあたり最大 100 個のバケットグループ。

リソースプールは最大 300 人のリクエスターの速度制限をサポートします。

バケットグループ

名前は 3~30 文字である必要があります。

名前には小文字、数字、ハイフン (-) のみを使用できます。

優先度ベースの速度制限

優先度レベル数:3~10。

優先度レベル:1 から優先度レベル総数までの整数。

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

デフォルトが設定されていない限り、各優先度レベルには最低帯域幅コミットメントが必要です。

最低帯域幅コミットメントの最小値は、MIN[5, (親リソースプールの対応項目のしきい値) / (2 * 優先度レベル数)] Gbps です。

帯域幅パラメーター

正の整数:Gbps 単位の具体的な制限値。

-1:無制限(リソースプール帯域幅を共有)。

0:このタイプのトラフィックを禁止(慎重に使用)。

適用までの時間

5 分以内。