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

Object Storage Service:リソースプール QoS を使用してクリティカルサービスの帯域幅を保証する

最終更新日:Jul 07, 2026

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

仕組み

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

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

階層関係

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

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

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

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

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

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

速度制限の原則

基本原則

リソースプール:最大 100Gbps
├─ バケット A:最大 40Gbps ← 他のリソースがアイドル状態でも 40 Gbps を超えることはできません
├─ バケット B:最大 30Gbps
└─ バケット 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 です。要求は、優先度 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 の保証帯域幅を受け取ります。追加の 10 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 番目に高い優先度。要求は完全に満たされます。

優先度 2

10 Gbps

50 Gbps

40 Gbps

10 Gbps の保証帯域幅と、残りの利用可能な帯域幅 30 Gbps を受け取ります。

優先度 1

10 Gbps

50 Gbps

10 Gbps

10 Gbps の保証帯域幅のみを受け取ります。追加の要求は、優先度の高いトラフィックによって横取りされます。

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

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

両方の方法を使用する場合、リソースの有効な帯域幅は、しきい値ベースの上限、優先度ベースの最低保証帯域幅、および実際の要求の相互作用によって決まります。

優先順位のルール

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

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

構成例

標準構成

バケット A は以下のように構成されています:

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

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

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

競合する構成

バケット A が競合する構成を持つ場合:

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

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

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

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

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

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

重要

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

リージョン:中国 (杭州)
リソースプール名:qos-resource-pool-1
バケットリスト:qos-examplebucket-1, qos-examplebucket-2
合計アップロード帯域幅:300 Gbps
イントラネットアップロード帯域幅:100 Gbps
パブリックネットワークアップロード帯域幅:200 Gbps
合計ダウンロード帯域幅:100 Gbps
イントラネットダウンロード帯域幅:50 Gbps
パブリックネットワークダウンロード帯域幅:50 Gbps
リソースプールへのコンソールアクセス:必須
優先度ベースの速度制限:必須

コンソールでのバケットの追加

すでにリソースプールを作成している場合は、Object Storage Service (OSS) コンソールでオブジェクトバケットを追加できます。

  1. リソースプール QoS ページで、対象のリソースプールの詳細ページに移動し、[バケット] タブをクリックします。

  2. [バケットの追加] をクリックします。[バケットの追加] ダイアログボックスの左側にある [バケット] には、リソースプールと同じリージョンにあり、同じ冗長タイプを使用し、まだリソースプールに追加されていないバケットが表示されます。これらの要件を満たさないバケットは選択不可となり、手動でバケット名を入力することはできません。追加したいバケットを選択し、[>] をクリックして右側の [選択されたバケット] に移動します。一度に最大 20 個のバケットを追加できます。どちらかの側の検索ボックスを使用して、名前でバケットをフィルターできます。

  3. [OK] をクリックします。[以下のバケットをリソースプールに追加することを確認] ダイアログボックスで、追加するバケットのリストを確認し、[OK] をクリックして送信します。送信はキャンセルできません。キャンセルするには、テクニカルサポートに連絡してください。

  4. リクエストを送信すると、処理状況がバケットリストの上に表示されます。メッセージ内の [更新] をクリックしてステータスを更新できます。(送信後、アプリケーション一覧の表示が遅れる場合があります。)

送信後、バックエンドは通常 24 時間以内に処理を完了します。一部のバケットが正常に追加されると、それらは処理メッセージから削除され、まだ追加されていないバケットのみが残ります。すべてのバケットが追加されると、処理メッセージは消えます。送信後 24 時間経っても一部のバケットが追加されない場合、メッセージはそれらのバケットの追加リクエストが完了していないことを示します。この場合、テクニカルサポートに連絡してください。

重要
  • オブジェクトバケットのみ追加できます。テーブルバケットとベクターバケットはサポートされていません。

  • 追加するバケットは、リソースプールと同じリージョンにあり、同じ冗長タイプを使用する必要があります。たとえば、リソースプール内のすべてのバケットがローカル冗長ストレージ (LRS) の場合、同じリージョンの LRS バケットのみを追加できます。

  • 一度に最大 20 個のバケットを追加でき、1 日に最大 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>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__":
        PutBucketQoSInfo()

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 の 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. リソースプール 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. リソースプール QoS ページで、対象のリソースプールの名前をクリックします。次に、バケットグループの作成 をクリックし、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. リソースプールからバケットを 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 の 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. 優先度 QoS 構成ファイル 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 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("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("操作の呼び出しでエラーが発生しました: %v\n", err)
		os.Exit(1)
	}

	// 操作結果を出力します。
	fmt.Println("PutResourcePoolPriorityQoSConfiguration の結果:", res.Status)
}

API

PutResourcePoolPriorityQosConfiguration

リソースプールリクエスタの優先度の構成

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

ossutil

  1. リクエスタ優先度 QoS 構成ファイル 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 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("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("操作の呼び出しでエラーが発生しました: %v\n", err)
		os.Exit(1)
	}

	// 操作結果を出力します。
	fmt.Println("PutResourcePoolRequesterPriorityQoSConfiguration の結果:", res.Status)
}

API

PutResourcePoolRequesterPriorityQosConfiguration

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

帯域幅使用量の監視

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

帯域幅アラートの設定

クリティカルサービスの安定性を維持するために、Cloud Monitor サービスでアラートルールを作成できます。Cloud Monitor は、帯域幅使用量が 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 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 のリクエスタの速度制限をサポートします。

コンソールでリソースプールにバケットを追加する場合、一度に最大 20 個のバケットを追加できます。

バケットグループ

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

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

優先度ベースの速度制限

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

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

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

デフォルトが構成されていない限り、各優先度レベルには最低保証帯域幅が必要です。

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

帯域幅パラメーター

正の整数:Gbps 単位の特定の制限。

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

0:このタイプのトラフィックを禁止 (注意して使用)。

有効になるまでの時間

5 分以内。