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

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

最終更新日:Dec 17, 2025

デフォルトでは、同一リージョン内にある Alibaba Cloud アカウントに属するすべてのバケットは帯域幅を共有します。複数のバケットが同時に大量のデータを転送すると、帯域幅の競合が発生し、重要なサービスの伝送遅延を引き起こす可能性があります。この問題は、リソースプールの Quality of Service (QoS) 速度制限を設定することで解決できます。しきい値ベースの速度制限はバケットが過剰な帯域幅を使用するのを防ぎ、優先度ベースの速度制限はコアサービスに最低保証帯域幅を確保します。これら 2 つの方法は相互に補完し合い、重要なサービスの安定した運用を保証します。

仕組み

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

バケットや BucketGroup など、さまざまなレベルのオブジェクトに帯域幅制限を設定して、過剰なリソース使用を防ぐことができます。

階層関係

リソースプールの階層:リソースプールは多層構造を持つことができます。以下は一般的な階層構造です。

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

image

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

image

シナリオ 3:混合された BucketGroup とバケット

image

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

シナリオ 4:リクエスタの速度制限とリソースプールの階層の速度制限が同時に有効になる

image

速度制限の原則

基本原則

リソースプール:最大 100 Gbps
├─ バケット A:最大 40 Gbps ← アイドル状態でも 40 Gbps を超えることはできません
├─ バケット B:最大 30 Gbps
└─ バケット 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 から優先度 3 までの 3 つの優先度レベルがあります。

シナリオ 1:優先度の高いオブジェクトが、優先度の低いオブジェクトが最低保証を超えて使用している帯域幅を横取りする

各優先度レベルの最低保証は 20 Gbps です。優先度 1 は 10 Gbps、優先度 2 は 30 Gbps、優先度 3 は 80 Gbps を必要とします。

優先度

最小コミットメント

要求

実際の割り当て

説明

優先度 3

20 Gbps

80 Gbps

70 Gbps

20 Gbps の最低保証を取得 + 優先度 1 から 10 Gbps のアイドル帯域幅を横取り + リソースプールから残りの 40 Gbps を取得。

優先度 2

20 Gbps

30 Gbps

20 Gbps

20 Gbps の最低保証を取得。追加で要求された帯域幅は優先度 3 に横取りされます。

優先度 1

20 Gbps

10 Gbps

10 Gbps

要求通り 10 Gbps が割り当てられます。10 Gbps のアイドル状態の最低保証は優先度 3 に横取りされます。

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

シナリオ 2:より優先度の高いオブジェクトが横取りの優先権を持つ

各優先度レベルの最低保証は 25 Gbps です。優先度 1 は 0 Gbps、優先度 2 は 5 Gbps、優先度 3 は 40 Gbps、優先度 4 は 60 Gbps を必要とします。

優先度

最低保証

要求

実際の割り当て

説明

優先度 4

25 Gbps

60 Gbps

60 Gbps

25 Gbps の最低保証を取得 + 高い優先度により 35 Gbps を横取り。

優先度 3

25 Gbps

40 Gbps

35 Gbps

25 Gbps の最低保証を取得 + 次に高い優先度で残りの 10 Gbps を横取り。

優先度 2

25 Gbps

5 Gbps

5 Gbps

要求帯域幅が最低保証より少ないです。要求通り 5 Gbps が割り当てられます。

優先度 1

25 Gbps

0 Gbps

0 Gbps

要求帯域幅が最低保証より少ないです。要求通り 0 Gbps が割り当てられます。

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

シナリオ 3:最低保証の合計が合計帯域幅より少ない

各優先度レベルの最低保証は 10 Gbps (合計 40 Gbps) です。優先度 1 は 50 Gbps、優先度 2 は 50 Gbps、優先度 3 は 30 Gbps、優先度 4 は 20 Gbps を必要とします。

優先度

最低保証

要求

実際の割り当て

説明

優先度 4

10 Gbps

20 Gbps

20 Gbps

最も高い優先度。要求された帯域幅は完全に満たされます。

優先度 3

10 Gbps

30 Gbps

30 Gbps

次に高い優先度。要求された帯域幅は完全に満たされます。

優先度 2

10 Gbps

50 Gbps

40 Gbps

10 Gbps の最低保証 + 残りの 30 Gbps を取得。

優先度 1

10 Gbps

50 Gbps

10 Gbps

最低保証のみを取得。追加で要求された帯域幅は横取りされます。

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

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

速度制限対象の各リソースについて、しきい値ベースの速度制限の上限、優先度ベースの最低保証帯域幅、および実際の帯域幅要件の複合的な影響を考慮する必要があります。

原則

  • しきい値ベースの速度制限はハードリミットです。最終的な帯域幅は、最低保証帯域幅に関係なく、この制限を超えることはできません。

  • 優先度ベースの最低保証はソフトギャランティです。システムは、しきい値ベースの制限内で最低保証を満たそうとします。

設定例

通常の設定

バケット A には以下の設定があります:

  • 優先度ベースの速度制限:最低保証 50 Gbps ← 優先度ディメンション

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

結果:バケット A の利用可能な帯域幅は 50 Gbps から 80 Gbps (最低 50 Gbps、最大 80 Gbps) です。

設定の競合

バケット A には以下の設定があります:

  • 優先度ベースの速度制限:最低保証 80 Gbps ← 優先度ディメンション

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

結果:バケット A の実際の利用可能な帯域幅は 50 Gbps です (しきい値ベースの速度制限が優先され、80 Gbps にはなりません)。

リソースプールのリクエスト

あるリージョンにおけるご利用の Alibaba Cloud アカウントの帯域幅が 400 Gbps 以上に達した場合、テクニカルサポートに連絡して、リソースプールの作成をリクエストし、コンソールでリソースプールと優先度ベースの速度制限機能を有効にすることができます。

チケットを起票する際に、以下の情報を提供してください:

リージョン:中国 (杭州)
リソースプール名:qos-resource-pool-1
バケットリスト:qos-examplebucket-1, qos-examplebucket-2
合計アップロード帯域幅:300 Gbps
内部ネットワークアップロード帯域幅:100 Gbps
パブリックネットワークアップロード帯域幅:200 Gbps
合計ダウンロード帯域幅:100 Gbps
内部ネットワークダウンロード帯域幅:50 Gbps
パブリックネットワークダウンロード帯域幅:50 Gbps
コンソールでリソースプールを有効にする:はい
優先度ベースの速度制限を有効にする:はい

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

この方法は、オブジェクトが過剰なリソースを使用するのを防ぐために最大帯域幅を制限する必要があるシナリオに適しています。

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

1 つのバケットからの過剰なトラフィックが他のバケットに影響を与えるのを防ぐことができます。

コンソール

リソースプールの 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. リソースプールの 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) に上記の帯域幅設定を追加するには、次のコマンドを実行します。この例では、バケット名は 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 という名前のローカル 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 がプライベートバケットからファイルをフェッチできるようにするには、プライベートバケットの back-to-origin を有効にする必要があります。CDN は RAM ロール AliyunCDNAccessingPrivateOSSRole を介してバケットにアクセスします。そのオリジン帯域幅を制限する必要がある場合があります。

コンソール

  1. RAM ロール ID を表示します。

  2. リソースプールの QoS ページで、対象のリソースプールの名前をクリックします。次に、対象のバケットの [リクエスタの速度制限を設定] をクリックし、必要な帯域幅を設定します。

ossutil

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

  1. qos.xml という名前のローカル 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. このロール (ロール ID 362xxxx) が特定のバケットにアクセスするための帯域幅設定を追加するには、次のコマンドを実行します。この例では、バケット名は 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 という名前のローカル 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. リソースプールの QoS ページで、対象のリソースプールの名前をクリックします。次に、[BucketGroup の作成] をクリックし、BucketGroup の名前を入力して、必要な帯域幅を設定します。

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

ossutil

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

  1. scheduled-postsarchived-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. リソースプールから 2 つのバケットを 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. リソースプールの 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) に上記の帯域幅設定を追加するには、次のコマンドを実行します。

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

    <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 PutResourcePoolPriorityQosConfiguration() {
	// バケットが配置されているリージョンを指定します。たとえば、中国 (杭州) の場合は 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), // データ整合性を確保するために、リクエストボディの Content-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

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

マルチテナントの Software as a Service (SaaS) プラットフォームでは、異なるレベルの顧客が同じリソースプールにアクセスする可能性があります。VIP 顧客の帯域幅を保証し、通常の顧客が残りのリソースを共有するようにする必要がある場合があります。

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>
      
      <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 PutResourcePoolRequesterPriorityQosConfiguration() {
	// バケットが配置されているリージョンを指定します。たとえば、中国 (杭州) の場合は 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), // データ整合性を確保するために、リクエストボディの Content-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

モニタリングとアラート

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

ビジネス運用中に、CloudMonitor - Object Storage Service リソースプール ページに移動して、リソースプール内の重要なサービスのリアルタイムの帯域幅使用量を確認できます。これにより、リソースが合理的に割り当てられ、サービスが安定して実行されていることを確認できます。

帯域幅アラートの設定

重要なサービスの安定した運用を確保するために、CloudMonitor サービスでアラートルールを作成できます。たとえば、帯域幅使用量が 80% を超えたときに自動的にアラートをトリガーするルールを設定できます。これにより、ピーク時のビジネストラフィックに対応するために、帯域幅設定を迅速に調整できます。

本番運用

キャパシティプランニングの推奨事項

1. 最低保証帯域幅の合計は、リソースプールの合計帯域幅の 50% 未満にすること。

帯域幅の 50% 以上を動的スケジューリングのための弾力的なスペースとして確保します。これにより、リソースプールの全体的な帯域幅利用率を効果的に向上させることができます。

推奨設定:
リソースプールの合計帯域幅:100 Gbps
優先度 3 の最低保証:20 Gbps
優先度 2 の最低保証:20 Gbps
優先度 1 の最低保証:10 Gbps
合計:50 Gbps (50 Gbps の弾力的なスペースを確保)

2. 3 から 5 の優先度レベルを推奨します。

優先度レベルが多すぎると、管理が複雑になります。重要度に基づいてサービスを 3 から 5 のレベルに分けることを推奨します:

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

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

  • 通常サービス (優先度 1-2)

3. しきい値ベースの速度制限の上限は、優先度ベースの最低保証よりも高く設定すること。

リソースが十分にある場合に、優先度の高いオブジェクトがより多くの帯域幅を使用できるようにします:

推奨設定:
優先度ベースの速度制限:バケット A の最低保証 50 Gbps
しきい値ベースの速度制限:バケット A の最大 80 Gbps
実際の利用可能帯域幅:50-80 Gbps (最低 50、最大 80)

ベストプラクティス

シナリオ 1:ビデオオンデマンドプラットフォーム

  • ライブストリーミング:優先度 3、最低保証 50 Gbps。

  • オンデマンドコンテンツ:優先度 1、最低保証 20 Gbps。

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

シナリオ 2:マルチテナント SaaS プラットフォーム

  • Enterprise Edition の顧客:優先度 3、割り当てられた最低保証帯域幅あり。

  • Free Edition の顧客:優先度 1、残りのリソースを共有。

  • 単一テナントの制限:しきい値ベースの速度制限を使用して、単一のテナントが過剰なリソースを使用するのを防ぎます。

シナリオ 3:データレイク分析

  • リアルタイム分析:優先度 2、最低保証 30 Gbps。

  • オフライン分析:優先度 1、最低保証 20 Gbps。

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

リスク防止

1. クォータ使用量の定期的な確認

CloudMonitor を使用して、各オブジェクトの帯域幅使用量の傾向を確認し、クォータを迅速に調整できます:

  • 優先度の高いオブジェクトの最低保証帯域幅が常に 95% 未満しか満たされない場合は、最低保証を増やすか、優先度の低いオブジェクトの最低保証を減らすことを検討してください。

  • 優先度の低いオブジェクトが長期間帯域幅を使用できない場合は、優先度の高いオブジェクトの最低保証を減らすか、リソースプールをスケールアウトすることを検討してください。

2. 多段階のアラート設定

  • 警告レベル (80%):スケールアウト計画を準備するための早期警告を提供します。

  • 重大レベル (90%):緊急計画を開始するために即時の対応が必要です。

3. 設定の競合の回避

  • 最低保証帯域幅の合計は、リソースプールの合計帯域幅を超えることはできません。

  • しきい値ベースの速度制限の上限は、優先度ベースの最低保証よりも高く設定する必要があります。

  • バケットが BucketGroup に属している場合、BucketGroup の優先度が有効になります。

4. 変更とロールバック

  • 重要な変更を行う前に、ステージング環境で設定を検証してください。

  • 迅速なロールバックのために、現在の設定を保存しておく必要があります。

  • 変更はオフピーク時に実行する必要があります。

クォータと制限

制限

クォータ/制限

リソースプール

各リージョンは 100 のリソースプールに制限されます。

各リソースプールには最大 100 のバケットを作成できます。

各リソースプールには最大 100 の BucketGroup を含めることができます。

リソースプールごとに最大 300 のリクエスタに対して速度制限を設定できます。

BucketGroup

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

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

優先度ベースの速度制限

優先度レベルの数は 3 から 10 までの整数にすることができます。

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

最低保証帯域幅の合計は、リソースプールの合計帯域幅を超えることはできません。

デフォルトの最低保証帯域幅が設定されていない場合は、各優先度レベルに設定する必要があります。

最低保証帯域幅は、MIN[5, (上位リソースプール内の対応するリソースのしきい値) / (2 × 優先度レベルの数)] Gbps 以上である必要があります。

帯域幅パラメーター

正の整数:制限を Gbps 単位で指定します。

-1:無制限 (共有リソースプールの帯域幅を使用します)。

0:このタイプのトラフィックを禁止します。注意して使用してください。

設定が有効になるまでの遅延

5 分以内。