デフォルトでは、同一リージョン内の Alibaba Cloud アカウント (root ユーザー) に属するすべてのバケットは帯域幅を共有します。複数のバケットが同時に大量のデータを転送すると、帯域幅競合が発生し、重要なサービスが遅延する可能性があります。リソースプール サービス品質 (QoS) の速度制限機能は、以下の 2 つの相補的な方法でこの問題を解決します。しきい値ベースの速度制限はバケットが使用できる最大帯域幅を上限として設定し、優先度ベースの速度制限は高優先度サービスに最低帯域幅を保証します。これらを組み合わせることで、負荷が高くなっても重要なサービスの安定性を維持できます。
仕組み
しきい値ベースの速度制限
しきい値ベースの速度制限は、リソースプール階層(リソースプール、BucketGroup、バケット)の各レベルで帯域幅の上限を設定し、単一のオブジェクトが過剰な帯域幅を使用することを防ぎます。
速度制限ルール
Resource pool: Max 100 Gbps
├─ Bucket A: Max 40 Gbps ← 利用可能な帯域幅があっても 40 Gbps を超えられない
├─ Bucket B: Max 30 Gbps
└─ Bucket C: Unlimited ← 残りの帯域幅すべてを利用可能制限の組み合わせを規定する 3 つのルールがあります。
すべてのアクティブな制限が同時に適用されます。 実際の帯域幅は、すべてのアクティブなルールの中で最も小さい値になります。
子階層の帯域幅は親階層の帯域幅を超えることができません。 下位階層のオブジェクトの帯域幅の合計は、親オブジェクトの帯域幅を超えることはできません。
リクエスター制限は独立しています。 リクエスター制限はリソースプール階層制限とは別に適用され、より小さい値が有効になります。
例: RAM ユーザーが、リクエスター制限 20 Gbps、バケット制限 30 Gbps のバケットにアクセスします。
実際の最大帯域幅 = min(20 Gbps, 30 Gbps) = 20 Gbps
優先度ベースの速度制限
優先度ベースの速度制限は、優先度レベルごとに最低帯域幅コミットメントを割り当てることで、帯域幅競合時に高優先度サービスが優先的に帯域幅を取得できるようにします。
リソースプールごとに 3~10 段階の優先度レベルを設定できます。数値が大きいほど優先度が高くなります。明示的に優先度が設定されていないオブジェクトはデフォルトの優先度レベルを使用し、明示的に最低帯域幅コミットメントが設定されていない優先度レベルはデフォルトの最低帯域幅コミットメントを使用します。
帯域幅の割り当て方法
最低コミットメント保証: 各優先度レベルには保証された最低帯域幅があり、システムはこれを厳密に遵守します。
プリエンプション: 高優先度のオブジェクトは、低優先度のオブジェクトが最低コミットメントを超えて使用している帯域幅を取り戻すことができます。プリエンプション競合では常に高優先度が勝ちます。
アイドルリソースの活用: 低優先度のオブジェクトは、高優先度のオブジェクトのアイドル状態の最低帯域幅を利用できます。ただし、高優先度のオブジェクトが必要とした場合は、その帯域幅を優先的に再取得できます。
構成制約: すべての最低帯域幅コミットメントの合計は、リソースプールの総帯域幅を超えることはできません。
割り当て例
以下の例はすべて 100 Gbps のリソースプールを使用しています。
シナリオ 1:高優先度によるプリエンプション(3 レベル、各 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 のコミットメントのみ取得。超過分は Priority 3 にプリエンプトされる。 |
| Priority 1 | 20 Gbps | 10 Gbps | 10 Gbps | 必要な 10 Gbps を取得。残りの 10 Gbps のアイドル帯域幅は Priority 3 にプリエンプトされる。 |
最終的な割り当て:10 + 20 + 70 = 100 Gbps
シナリオ 2:プリエンプションにおける高優先度の優先(4 レベル、各 25 Gbps)
Priority 1 が 0 Gbps、Priority 2 が 5 Gbps、Priority 3 が 40 Gbps、Priority 4 が 60 Gbps 必要としています。
| 優先度 | 最低コミットメント | 必須 | 実際の割り当て | 備考 |
|---|---|---|---|---|
| Priority 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 | コミットメント未満だが、必要な分だけ取得 |
| Priority 1 | 25 Gbps | 0 Gbps | 0 Gbps | 必要なし。すべてのアイドル帯域幅がプリエンプトされる。 |
最終的な割り当て:0 + 5 + 35 + 60 = 100 Gbps
シナリオ 3:コミットメント合計がプール帯域幅未満(4 レベル、各 10 Gbps = 合計 40 Gbps)
Priority 1 が 50 Gbps、Priority 2 が 50 Gbps、Priority 3 が 30 Gbps、Priority 4 が 20 Gbps 必要としています。
| 優先度 | 最低コミットメント | 必須 | 実際の割り当て | 備考 |
|---|---|---|---|---|
| Priority 4 | 10 Gbps | 20 Gbps | 20 Gbps | 最優先度のため、必要な帯域幅すべてを取得 |
| Priority 3 | 10 Gbps | 30 Gbps | 30 Gbps | 次に優先度が高いので、必要な帯域幅すべてを取得 |
| Priority 2 | 10 Gbps | 50 Gbps | 40 Gbps | 10 Gbps のコミットメント + 残り 30 Gbps を取得 |
| Priority 1 | 10 Gbps | 50 Gbps | 10 Gbps | 最低コミットメントのみ取得 |
最終的な割り当て:10 + 40 + 30 + 20 = 100 Gbps
両方の速度制限方式の併用
しきい値ベースの速度制限と優先度ベースの速度制限を組み合わせて、各オブジェクトの上限と下限を同時に設定します。
しきい値ベースの制限はハードリミットです。 最低帯域幅コミットメントに関係なく、帯域幅がこの値を超えることはありません。
優先度ベースの最低コミットメントはソフト保証です。 システムはしきい値ベースの制限内でこれを遵守します。
通常の構成: バケット A の最低コミットメントが 50 Gbps、しきい値が 80 Gbps の場合、利用可能な帯域幅は 50~80 Gbps です。
構成の競合: バケット A の最低コミットメントが 80 Gbps、しきい値が 50 Gbps の場合、しきい値が優先されます。利用可能な帯域幅は 50 Gbps です。
高優先度のオブジェクトが利用可能な帯域幅があるときに追加で使用できるように、しきい値ベースの制限は常に優先度ベースの最低コミットメントより高く設定してください。
前提条件
作業を開始する前に、以下の条件を満たしていることを確認してください。
対象リージョンの帯域幅が400 Gbps 以上であること
Alibaba Cloud テクニカルサポートによって作成されたリソースプールがあること(リソースプールの申請を参照)
リソースプールの申請
テクニカルサポートに連絡して、リソースプールを申請してください。チケットに以下の情報を記載します。
Region: 中国 (杭州)
Resource pool name: qos-resource-pool-1
Bucket list: qos-examplebucket-1, qos-examplebucket-2
Total upload bandwidth: 300 Gbps
Internal network upload bandwidth: 100 Gbps
Public network upload bandwidth: 200 Gbps
Total download bandwidth: 100 Gbps
Internal network download bandwidth: 50 Gbps
Public network download bandwidth: 50 Gbps
Enable resource pool in console: Yes
Enable priority-based throttling: Yesリソースプールが作成されると、OSS コンソールにリソースプール QoSページが表示されます。
しきい値ベースの速度制限の設定
しきい値ベースの速度制限を使用して、バケット、BucketGroup、またはリクエスターの最大帯域幅を上限として設定します。これにより、単一のオブジェクトが過剰なリソースを使用することを防ぎます。
XML 構成のすべての帯域幅値はGbps 単位です。-1を設定すると無制限(共有プール帯域幅を使用)、0を設定するとすべてのトラフィックをブロックします(慎重に使用してください)。
バケットの帯域幅制限の設定
同一リソースプール内の他のバケットに影響を与えるほどの過剰なトラフィックを生成するバケットがある場合に使用します。
コンソール
リソースプール QoSページで、対象のリソースプール名をクリックします。対象のバケットについて、速度制限構成の変更をクリックし、帯域幅の値を設定します。
| フィールド | 説明 |
|---|---|
| アップロード帯域幅合計 | 内部ネットワークおよびパブリックネットワーク全体でのアップロード上限(Gbps) |
| 内部ネットワークアップロード帯域幅 | VPC/内部エンドポイントトラフィックのアップロード上限(Gbps) |
| パブリックネットワークアップロード帯域幅 | インターネットトラフィックのアップロード上限(Gbps) |
| ダウンロード帯域幅合計 | 内部ネットワークおよびパブリックネットワーク全体でのダウンロード上限(Gbps) |
| 内部ネットワークダウンロード帯域幅 | VPC/内部エンドポイントトラフィックのダウンロード上限(Gbps) |
| パブリックネットワークダウンロード帯域幅 | インターネットトラフィックのダウンロード上限(Gbps) |
ossutil
作業を開始する前に、ossutil をインストールしてください。
帯域幅構成を含むローカル XML ファイル
qos.xmlを作成します。Intranetは内部ネットワーク(VPC)トラフィックを指します。Extranetはパブリックネットワークトラフィックを指します。すべての値は Gbps 単位です。無制限にするには-1を設定します。import alibabacloud_oss_v2 as oss def put_bucket_qos_info(): credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider() cfg = oss.config.load_default() cfg.credentials_provider = credentials_provider cfg.region = "cn-hangzhou" # ご使用のバケットのリージョンに置き換えてください client = oss.Client(cfg) with open('qos.xml', 'r') as f: qos_xml_body = f.read() req = oss.OperationInput( op_name='PutBucketQoSInfo', method='PUT', parameters={'qosInfo': ''}, headers=None, body=qos_xml_body, bucket='examplebucket', # ご使用のバケット名に置き換えてください ) resp = client.invoke_operation(req) print(resp.status_code) if __name__ == "__main__": put_bucket_qos_info()バケットに構成を適用します(
examplebucketはご利用のバケット名に置き換えてください)。ossutil api invoke-operation --op-name put-bucket-qos-info --method PUT --bucket examplebucket --parameters qosInfo --body=file://qos.xml(任意)構成を確認します。
ossutil api invoke-operation --op-name get-bucket-qos-info --method GET --bucket examplebucket --parameters qosInfo
SDK
バケット帯域幅制限は Python SDK V2 および Go SDK V2 でサポートされています。
上記の ossutil の例と同じ内容で
qos.xmlを作成します。構成を適用します:Python
import alibabacloud_oss_v2 as oss def put_bucket_qos_info(): credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider() cfg = oss.config.load_default() cfg.credentials_provider = credentials_provider cfg.region = "cn-hangzhou" # ご利用のバケットのリージョンに置き換えてください client = oss.Client(cfg) with open('qos.xml', 'r') as f: qos_xml_body = f.read() req = oss.OperationInput( op_name='PutBucketQoSInfo', method='PUT', parameters={'qosInfo': ''}, headers=None, body=qos_xml_body, bucket='examplebucket', # ご利用のバケット名に置き換えてください ) resp = client.invoke_operation(req) print(resp.status_code) if __name__ == "__main__": put_bucket_qos_info()
API
以下のリクエストボディで PutBucketQoSInfo を呼び出します。
<QoSConfiguration>
<TotalUploadBandwidth>100</TotalUploadBandwidth>
<IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
<ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
<TotalDownloadBandwidth>100</TotalDownloadBandwidth>
<IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
<ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
</QoSConfiguration>バケットリクエスターの帯域幅制限の設定
複数のサービスが同じバケットを共有しており、単一の RAM ユーザーまたは RAM ロールが過剰な帯域幅を使用しないようにする必要がある場合に使用します。
RAM ユーザー
コンソール
RAM ユーザー ID を取得します。
リソースプール QoSページで、対象のリソースプール名をクリックします。対象のバケットについて、リクエスター速度制限の設定をクリックし、RAM ユーザーの帯域幅を設定します。
ossutil
作業を開始する前に、ossutil をインストールしてください。
RAM ユーザーの帯域幅制限を含む
qos.xmlを作成します。<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>-1</ExtranetUploadBandwidth> <TotalDownloadBandwidth>100</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>-1</ExtranetDownloadBandwidth> </QoSConfiguration>RAM ユーザー ID を取得します。
構成を適用します(
examplebucketおよび266xxxxはご利用の値に置き換えてください)。ossutil api invoke-operation --op-name put-bucket-requester-qos-info --method PUT --bucket=examplebucket --parameters requesterQosInfo --parameters qosRequester=266xxxx --body file://qos.xml(任意)構成を確認します。
ossutil api invoke-operation --op-name get-bucket-requester-qos-info --method GET --bucket=examplebucket --parameters requesterQosInfo --parameters qosRequester=266xxxx
SDK
バケットに対する RAM ユーザーの帯域幅制限は Python SDK V2 および Go SDK V2 でサポートされています。
上記の ossutil の例と同じ内容で
qos.xmlを作成します。RAM ユーザー ID を取得します。
構成を適用します:Python
import alibabacloud_oss_v2 as oss def put_bucket_requester_qos_info(): credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider() cfg = oss.config.load_default() cfg.credentials_provider = credentials_provider cfg.region = "cn-hangzhou" # ご利用のバケットのリージョンに置き換えてください client = oss.Client(cfg) with open('qos.xml', 'r') as f: qos_xml_body = f.read() req = oss.OperationInput( op_name='PutBucketRequesterQoSInfo', method='PUT', parameters={ 'requesterQosInfo': '', 'qosRequester': '2598732222222xxxx', # RAM ユーザー ID に置き換えてください }, headers=None, body=qos_xml_body, bucket='examplebucket', # ご利用のバケット名に置き換えてください ) resp = client.invoke_operation(req) print(resp.status_code) print(resp.headers) print(resp.http_response.content) if __name__ == "__main__": put_bucket_requester_qos_info()
API
RAM ユーザー ID を取得します。
以下のリクエストボディで PutBucketRequesterQoSInfo を呼び出します。
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>-1</ExtranetUploadBandwidth> <TotalDownloadBandwidth>100</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>-1</ExtranetDownloadBandwidth> </QoSConfiguration>
RAM ロール
バケットにアクセスする RAM ロールの帯域幅を制限する必要がある場合に使用します。一般的なケースとして、CDN が back-to-origin で非公開バケットにアクセスするために AliyunCDNAccessingPrivateOSSRole ロールを使用しており、その帯域幅使用量を上限として制限したい場合があります。
コンソール
RAM ロール ID を取得します。
リソースプール QoSページで、対象のリソースプール名をクリックします。対象のバケットについて、リクエスター速度制限の設定をクリックし、RAM ロールの帯域幅を設定します。
ossutil
作業を開始する前に、ossutil をインストールしてください。
RAM ロールの帯域幅制限を含む
qos.xmlを作成します。<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth> <TotalDownloadBandwidth>100</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>40</ExtranetDownloadBandwidth> </QoSConfiguration>RAM ロール ID を取得します。
構成を適用します(
examplebucketおよび362xxxxはご利用の値に置き換えてください)。ossutil api invoke-operation --op-name put-bucket-requester-qos-info --method PUT --bucket=examplebucket --parameters requesterQosInfo --parameters qosRequester=362xxxx --body file://qos.xml(任意)リソースプール内のすべての RAM ロール帯域幅構成を一覧表示します。
ossutil api invoke-operation --op-name list-resource-pool-requester-qos-infos --method GET --parameters resourcePool=examplePool --parameters requesterQosInfo
SDK
バケットに対する RAM ロールの帯域幅制限は Python SDK V2 および Go SDK V2 でサポートされています。
上記の ossutil の例と同じ内容で
qos.xmlを作成します。RAM ロール ID を取得します。
構成を適用します:Python
import alibabacloud_oss_v2 as oss def put_bucket_requester_qos_info(): credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider() cfg = oss.config.load_default() cfg.credentials_provider = credentials_provider cfg.region = "cn-hangzhou" # ご利用のバケットのリージョンに置き換えてください client = oss.Client(cfg) with open('qos.xml', 'r') as f: qos_xml_body = f.read() req = oss.OperationInput( op_name='PutBucketRequesterQoSInfo', method='PUT', parameters={ 'requesterQosInfo': '', 'qosRequester': '2598732222222xxxx', # RAM ロール ID に置き換えてください }, headers=None, body=qos_xml_body, bucket='examplebucket', # ご利用のバケット名に置き換えてください ) resp = client.invoke_operation(req) print(resp.status_code) print(resp.headers) print(resp.http_response.content) if __name__ == "__main__": put_bucket_requester_qos_info()
API
RAM ロール ID を取得します。
以下のリクエストボディで PutBucketRequesterQoSInfo を呼び出します。
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth> <TotalDownloadBandwidth>100</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>40</ExtranetDownloadBandwidth> </QoSConfiguration>
BucketGroup の帯域幅制限の設定
低優先度のバケットをグループ化し、その合計帯域幅を上限として設定する場合に使用します。これにより、バックグラウンドワークロードがプールレベルで重要なサービスと競合することを防ぎます。
BucketGroup 名は 3~30 文字で、小文字、数字、ハイフンのみを使用できます。
コンソール
リソースプール QoSページで、対象のリソースプール名をクリックします。BucketGroup の作成をクリックし、名前を入力して帯域幅制限を設定します。
グループに追加する各バケットについて、バケットの右側にあるBucketGroup の設定をクリックします。
ossutil
作業を開始する前に、ossutil をインストールしてください。
バケットを BucketGroup に追加します(バケットごとに 1 回実行)。
ossutil api invoke-operation --op-name put-bucket-resource-pool-bucket-group --method PUT --bucket scheduled-posts --parameters resourcePool=pool-for-ai --parameters resourcePoolBucketGroup=test-group ossutil api invoke-operation --op-name put-bucket-resource-pool-bucket-group --method PUT --bucket archived-comments --parameters resourcePool=pool-for-ai --parameters resourcePoolBucketGroup=test-group(任意)BucketGroup 内のすべてのバケットを一覧表示します。
ossutil api invoke-operation --op-name list-resource-pool-bucket-groups --method GET --parameters resourcePool=pool-for-ai --parameters resourcePoolBucketGroupBucketGroup の帯域幅制限を含む
qos.xmlを作成します。<QoSConfiguration> <TotalUploadBandwidth>20</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>10</ExtranetUploadBandwidth> <TotalDownloadBandwidth>30</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth> </QoSConfiguration>BucketGroup に帯域幅構成を適用します。
ossutil api invoke-operation --op-name put-resource-pool-bucket-group-qos-info --method PUT --parameters resourcePoolBucketGroupQosInfo --parameters resourcePool pool-for-ai --parameters resourcePoolBucketGroup offline-group --body=file://qos.xml(任意)構成を確認します。
ossutil api invoke-operation --op-name get-resource-pool-bucket-group-qos-info --method GET --parameters resourcePool=pool-for-ai --parameters resourcePoolBucketGroup=offline-group --parameters resourcePoolBucketGroupQoSInfo
SDK
BucketGroup 帯域幅制限は Python SDK V2 および Go SDK V2 でサポートされています。
バケットを BucketGroup に追加します:Python
import alibabacloud_oss_v2 as oss def put_bucket_resource_pool_bucket_group(): credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider() cfg = oss.config.load_default() cfg.credentials_provider = credentials_provider cfg.region = "cn-hangzhou" client = oss.Client(cfg) req = oss.OperationInput( op_name='PutBucketResourcePoolBucketGroup', method='PUT', parameters={ 'resourcePoolBucketGroup': 'example-group', # ご利用の BucketGroup 名に置き換えてください 'resourcePool': 'example-resource-pool', # ご利用のリソースプール名に置き換えてください }, headers=None, body=None, bucket='examplebucket', # ご利用のバケット名に置き換えてください ) resp = client.invoke_operation(req) print(resp.status_code) if __name__ == "__main__": put_bucket_resource_pool_bucket_group()帯域幅制限を含む
qos.xmlを作成します(上記の ossutil の例と同じ内容)。BucketGroup に帯域幅構成を適用します:Python
import alibabacloud_oss_v2 as oss def put_resource_pool_bucket_group_qos_info(): credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider() cfg = oss.config.load_default() cfg.credentials_provider = credentials_provider cfg.region = "cn-hangzhou" client = oss.Client(cfg) with open('qos.xml', 'r') as f: qos_xml_body = f.read() req = oss.OperationInput( op_name='PutResourcePoolBucketGroupQoSInfo', method='PUT', parameters={ 'resourcePoolBucketGroupQosInfo': '', 'resourcePool': 'example-resource-pool', # ご利用のリソースプール名に置き換えてください 'resourcePoolBucketGroup': 'example-group', # ご利用の BucketGroup 名に置き換えてください }, headers=None, body=qos_xml_body, bucket=None, ) resp = client.invoke_operation(req) print(resp.status_code) if __name__ == "__main__": put_resource_pool_bucket_group_qos_info()
API
以下のリクエストボディで PutResourcePoolBucketGroupQoSInfo を呼び出します。
<QoSConfiguration>
<TotalUploadBandwidth>20</TotalUploadBandwidth>
<IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
<ExtranetUploadBandwidth>10</ExtranetUploadBandwidth>
<TotalDownloadBandwidth>30</TotalDownloadBandwidth>
<IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
<ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
</QoSConfiguration>リソースプールリクエスターの帯域幅制限の設定
複数の RAM ユーザーが同一リソースプール内の異なるバケットにアクセスしており、単一のユーザーがプール全体の帯域幅を独占しないようにする必要がある場合に使用します。
コンソール
RAM ユーザー ID または RAM ロール ID を取得します。
リソースプール QoSページで、対象のリソースプール名をクリックします。リソースプールリクエスターリストタブで、対象の RAM ユーザーまたは RAM ロールについて速度制限構成の変更をクリックします。
ossutil
作業を開始する前に、ossutil をインストールしてください。
帯域幅制限を含む
qos.xmlを作成します。<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>50</IntranetUploadBandwidth> <ExtranetUploadBandwidth>50</ExtranetUploadBandwidth> <TotalDownloadBandwidth>200</TotalDownloadBandwidth> <IntranetDownloadBandwidth>150</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>50</ExtranetDownloadBandwidth> </QoSConfiguration>RAM ユーザー ID または RAM ロール ID を取得します。
構成を適用します(
examplepoolおよび266xxxxはご利用の値に置き換えてください)。ossutil api invoke-operation --op-name put-resource-pool-requester-qos-info --method PUT --parameters resourcePool=examplepool --parameters qosRequester=266xxxx --parameters requesterQosInfo --body=file://qos.xml(任意)リソースプール内のすべての 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 でサポートされています。
上記の ossutil の例と同じ内容で
qos.xmlを作成します。RAM ユーザー ID または RAM ロール ID を取得します。
構成を適用します:Python
import alibabacloud_oss_v2 as oss def put_resource_pool_requester_qos_info(): credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider() cfg = oss.config.load_default() cfg.credentials_provider = credentials_provider cfg.region = "cn-hangzhou" client = oss.Client(cfg) with open('qos.xml', 'r') as f: qos_xml_body = f.read() req = oss.OperationInput( op_name='PutResourcePoolRequesterQoSInfo', method='PUT', parameters={ 'requesterQosInfo': '', 'resourcePool': 'example-resource-pool', # ご利用のリソースプール名に置き換えてください 'qosRequester': '2598732222222xxxx', # RAM ユーザーまたはロール ID に置き換えてください }, headers=None, body=qos_xml_body, bucket=None, ) resp = client.invoke_operation(req) print(resp.status_code) print(resp.headers) print(resp.http_response.content) if __name__ == "__main__": put_resource_pool_requester_qos_info()
API
RAM ユーザー ID または RAM ロール ID を取得します。
以下のリクエストボディで PutResourcePoolRequesterQoSInfo を呼び出します。
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>50</IntranetUploadBandwidth> <ExtranetUploadBandwidth>50</ExtranetUploadBandwidth> <TotalDownloadBandwidth>200</TotalDownloadBandwidth> <IntranetDownloadBandwidth>150</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>50</ExtranetDownloadBandwidth> </QoSConfiguration>
優先度ベースの速度制限の設定
優先度ベースの速度制限を使用して、高優先度サービスの最低帯域幅を保証します。しきい値ベースの速度制限と組み合わせて、各オブジェクトの下限と上限を定義します。
リソースプール優先度の設定
リソースプールに複数のバケットが含まれており、競合時でもコアサービスのバケットに十分な帯域幅を確保する必要がある場合に使用します。
ossutil
priority-qos.xmlという名前の優先度構成ファイルを作成します。<PriorityQosConfiguration> <PriorityCount>3</PriorityCount> <DefaultPriorityLevel>1</DefaultPriorityLevel> <!-- 優先度レベルが割り当てられていない場合のデフォルト最低帯域幅コミットメント --> <DefaultGuaranteedQosConfiguration> <TotalUploadBandwidth>10</TotalUploadBandwidth> <IntranetUploadBandwidth>5</IntranetUploadBandwidth> <ExtranetUploadBandwidth>5</ExtranetUploadBandwidth> <TotalDownloadBandwidth>20</TotalDownloadBandwidth> <IntranetDownloadBandwidth>10</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>10</ExtranetDownloadBandwidth> </DefaultGuaranteedQosConfiguration> <!-- Priority 3(最高優先度):コアサービスバケット --> <QosPriorityLevelConfiguration> <PriorityLevel>3</PriorityLevel> <GuaranteedQosConfiguration> <TotalUploadBandwidth>50</TotalUploadBandwidth> <IntranetUploadBandwidth>20</IntranetUploadBandwidth> <ExtranetUploadBandwidth>30</ExtranetUploadBandwidth> <TotalDownloadBandwidth>80</TotalDownloadBandwidth> <IntranetDownloadBandwidth>30</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>50</ExtranetDownloadBandwidth> </GuaranteedQosConfiguration> <Subjects> <Bucket>critical-bucket</Bucket> <BucketGroup>core-group</BucketGroup> </Subjects> </QosPriorityLevelConfiguration> <!-- Priority 2:重要サービスバケット --> <QosPriorityLevelConfiguration> <PriorityLevel>2</PriorityLevel> <GuaranteedQosConfiguration> <TotalUploadBandwidth>30</TotalUploadBandwidth> <IntranetUploadBandwidth>10</IntranetUploadBandwidth> <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth> <TotalDownloadBandwidth>50</TotalDownloadBandwidth> <IntranetDownloadBandwidth>20</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>30</ExtranetDownloadBandwidth> </GuaranteedQosConfiguration> <Subjects> <Bucket>important-bucket</Bucket> </Subjects> </QosPriorityLevelConfiguration> </PriorityQosConfiguration>構成を適用します(
hz-rp-03はご利用のリソースプール名に置き換えてください)。ossutil api invoke-operation --op-name put-resource-pool-priority-qos-configuration --method PUT --parameters resourcePool=hz-rp-03 --parameters priorityQos --body=file://priority-qos.xml(任意)構成を確認します。
ossutil api invoke-operation --op-name get-resource-pool-priority-qos-configuration --method GET --parameters resourcePool=hz-rp-03 --parameters priorityQos
SDK
Go
package main
import (
"bytes"
"context"
"crypto/md5"
"encoding/base64"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func PutResourcePoolPriorityQosConfiguration() {
// cn-hangzhou をご利用のバケットのリージョンに置き換えてください
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion("cn-hangzhou")
client := oss.NewClient(cfg)
resourcePool := "hz-rp-01" // ご利用のリソースプール名に置き換えてください
qosConf, err := os.ReadFile("priority-qos.xml")
if err != nil {
fmt.Printf("failed to read priority-qos.xml: %v\n", err)
os.Exit(1)
}
calcMd5 := func(input []byte) string {
if len(input) == 0 {
return "1B2M2Y8AsgTpgAmY7PhCfg=="
}
h := md5.New()
h.Write(input)
return base64.StdEncoding.EncodeToString(h.Sum(nil))
}
input := &oss.OperationInput{
OpName: "PutResourcePoolPriorityQoSConfiguration",
Method: "PUT",
Parameters: map[string]string{
"priorityQos": "",
"resourcePool": resourcePool,
},
Headers: map[string]string{
"Content-MD5": calcMd5(qosConf),
},
Body: bytes.NewReader(qosConf),
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
fmt.Println("PutResourcePoolPriorityQoSConfiguration result:", res.Status)
}API
リソースプールリクエスター優先度の設定
複数のテナントが共通のリソースプールにアクセスする SaaS プラットフォームで、異なるグレードの顧客に対して使用します。プレミアム顧客に高い優先度を割り当てて帯域幅を保証し、スタンダード顧客は残りのリソースを共有します。
ossutil
requester-priority-qos.xmlという名前のリクエスター優先度構成ファイルを作成します。<PriorityQosConfiguration> <PriorityCount>3</PriorityCount> <DefaultPriorityLevel>1</DefaultPriorityLevel> <!-- 割り当てられていないリクエスターのデフォルト最低帯域幅コミットメント --> <DefaultGuaranteedQosConfiguration> <TotalUploadBandwidth>10</TotalUploadBandwidth> <IntranetUploadBandwidth>5</IntranetUploadBandwidth> <ExtranetUploadBandwidth>5</ExtranetUploadBandwidth> <TotalDownloadBandwidth>20</TotalDownloadBandwidth> <IntranetDownloadBandwidth>10</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>10</ExtranetDownloadBandwidth> </DefaultGuaranteedQosConfiguration> <!-- Priority 3(最高優先度):プレミアム顧客 --> <QosPriorityLevelConfiguration> <PriorityLevel>3</PriorityLevel> <GuaranteedQosConfiguration> <TotalUploadBandwidth>60</TotalUploadBandwidth> <IntranetUploadBandwidth>20</IntranetUploadBandwidth> <ExtranetUploadBandwidth>40</ExtranetUploadBandwidth> <TotalDownloadBandwidth>100</TotalDownloadBandwidth> <IntranetDownloadBandwidth>40</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>60</ExtranetDownloadBandwidth> </GuaranteedQosConfiguration> <Subjects> <Requester>123456789012****</Requester> <Requester>234567890123****</Requester> </Subjects> </QosPriorityLevelConfiguration> <!-- Priority 2:スタンダード顧客 --> <QosPriorityLevelConfiguration> <PriorityLevel>2</PriorityLevel> <GuaranteedQosConfiguration> <TotalUploadBandwidth>30</TotalUploadBandwidth> <IntranetUploadBandwidth>10</IntranetUploadBandwidth> <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth> <TotalDownloadBandwidth>50</TotalDownloadBandwidth> <IntranetDownloadBandwidth>20</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>30</ExtranetDownloadBandwidth> </GuaranteedQosConfiguration> <Subjects> <Requester>345678901234****</Requester> </Subjects> </QosPriorityLevelConfiguration> </PriorityQosConfiguration>構成を適用します。
ossutil api invoke-operation --op-name put-resource-pool-requester-priority-qos-configuration --method PUT --parameters resourcePool=hz-rp-03 --parameters requesterPriorityQos --body=file://requester-priority-qos.xml(任意)構成を確認します。
ossutil api invoke-operation --op-name get-resource-pool-requester-priority-qos-configuration --method GET --parameters resourcePool=hz-rp-03 --parameters requesterPriorityQos
SDK
Go
package main
import (
"bytes"
"context"
"crypto/md5"
"encoding/base64"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func PutResourcePoolRequesterPriorityQosConfiguration() {
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion("cn-hangzhou") // ご利用のリージョンに置き換えてください
client := oss.NewClient(cfg)
resourcePool := "hz-rp-01" // ご利用のリソースプール名に置き換えてください
qosConf, err := os.ReadFile("requester-priority-qos.xml")
if err != nil {
fmt.Printf("failed to read requester-priority-qos.xml: %v\n", err)
os.Exit(1)
}
calcMd5 := func(input []byte) string {
if len(input) == 0 {
return "1B2M2Y8AsgTpgAmY7PhCfg=="
}
h := md5.New()
h.Write(input)
return base64.StdEncoding.EncodeToString(h.Sum(nil))
}
input := &oss.OperationInput{
OpName: "PutResourcePoolRequesterPriorityQoSConfiguration",
Method: "PUT",
Parameters: map[string]string{
"requesterPriorityQos": "",
"resourcePool": resourcePool,
},
Headers: map[string]string{
"Content-MD5": calcMd5(qosConf),
},
Body: bytes.NewReader(qosConf),
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
fmt.Println("PutResourcePoolRequesterPriorityQoSConfiguration result:", res.Status)
}API
モニタリングとアラート機能
帯域幅使用量のモニタリング
CloudMonitor - Object Storage Service リソースプールにアクセスして、リソースプール内の各サービスのリアルタイム帯域幅使用量を確認します。
帯域幅アラートの設定
CloudMonitor でアラートルールを作成し、重要なサービスに影響が出る前に通知を受け取るようにします。たとえば、帯域幅使用量が 80% を超えた時点でアラートをトリガーすることで、ピークトラフィックが発生する前に構成を調整する時間を確保できます。
本番環境に適用
容量計画
リソースプール QoS を本番環境に導入する前に、以下のガイドラインに従ってください。
最低コミットメント合計をプール帯域幅の 50% 未満に保ちます。
動的スケジューリング用に帯域幅の少なくとも 50% を弾力的な余裕として確保します。これにより、全体的な利用率が向上し、需要が予期せず急増した場合でも高優先度のオブジェクトが帯域幅不足になることを防げます。
100 Gbps プールの構成例:
Priority 3 最低コミットメント:20 Gbps
Priority 2 最低コミットメント:20 Gbps
Priority 1 最低コミットメント:10 Gbps
コミットメント合計:50 Gbps(50 Gbps の弾力的余裕)優先度レベルは 3~5 段階にします。
レベルを増やすと管理が複雑になり、実質的なメリットが得られません。実用的な階層構造の例:
コアサービス:Priority 4~5
重要サービス:Priority 3
通常サービス:Priority 1~2
しきい値制限を最低コミットメントより高く設定します。
これにより、利用可能な帯域幅がある場合に高優先度のオブジェクトが保証された下限を超えてバーストできます。
最低コミットメント(下限): バケット A — 50 Gbps
しきい値ベースの制限(上限): バケット A — 80 Gbps
実際の利用可能帯域幅: 50~80 Gbpsベストプラクティス
ビデオオンデマンドプラットフォーム
ライブストリーム:Priority 3、最低コミットメント 50 Gbps
オンデマンドコンテンツ:Priority 1、最低コミットメント 20 Gbps
CDN back-to-origin:しきい値ベースの制限 100 Gbps
マルチテナント SaaS プラットフォーム
Enterprise Edition 顧客:Priority 3、最低帯域幅コミットメントあり
無料版顧客:Priority 1、残りの帯域幅を共有
単一テナント上限:しきい値ベースの速度制限で、いずれかのテナントが帯域幅を独占しないように防止
データレイク分析
リアルタイム分析:Priority 2、最低コミットメント 30 Gbps
オフライン分析:Priority 1、最低コミットメント 20 Gbps
アーカイブデータ:しきい値ベースの制限 10 Gbps
リスク防止
クォータ使用量を定期的に確認します。 CloudMonitor を使用して各オブジェクトの帯域幅使用量の傾向を追跡し、構成を迅速に調整します。
高優先度オブジェクトの最低帯域幅コミットメントが継続的に 95% 未満しか満たされていない場合は、そのコミットメントを増やすか、低優先度オブジェクトのコミットメントを減らします。
低優先度オブジェクトが長時間帯域幅をまったく取得できない場合は、高優先度のコミットメントを減らすか、リソースプールをスケールアウトします。
マルチレベルのアラートを設定します。
警告レベル(80%):スケールアウト計画を準備します。
重大レベル(90%):緊急対応を直ちに開始します。
構成の競合を回避します。
最低帯域幅コミットメントの合計は、リソースプールの総帯域幅を超えてはなりません。
しきい値ベースの制限は、優先度ベースの最低コミットメントより高くする必要があります。
バケットが BucketGroup に属している場合、バケット個別の優先度ではなく BucketGroup の優先度が適用されます。
本番環境への適用前に変更をテストします。
構成変更はまずステージング環境で検証します。
変更前に現在の構成を保存して、迅速にロールバックできるようにします。
変更はオフピーク時間帯に適用します。
クォータと制限事項
構成変更は 5 分以内に反映されます。
| リソース | クォータ/制限 |
|---|---|
| リージョンあたりのリソースプール数 | 100 |
| リソースプールあたりのバケット数 | 100 |
| リソースプールあたりの BucketGroup 数 | 100 |
| リソースプールあたりの速度制限付きリクエスター数 | 300 |
| BucketGroup 名の長さ | 3~30 文字 |
| BucketGroup 名に使用可能な文字 | 小文字、数字、ハイフン(-) |
| リソースプールあたりの優先度レベル数 | 3~10(整数) |
| 優先度レベルの値 | 1 から優先度レベル総数までの整数 |
| 最低帯域幅コミットメント制約 | すべてのコミットメントの合計は、プールの総帯域幅を超えてはならない |
| 最低帯域幅コミットメントの下限 | MIN[5, (上位レベルのしきい値) / (2 × 優先度レベル数)] Gbps 以上 |
| 帯域幅パラメーター:正の整数 | Gbps 単位で制限を設定 |
| 帯域幅パラメーター:-1 | 無制限(共有プール帯域幅を使用) |
| 帯域幅パラメーター:0 | すべてのトラフィックをブロック — 慎重に使用してください |