Secara default, semua bucket dalam satu Akun Alibaba Cloud di wilayah yang sama berbagi bandwidth. Ketika beberapa bucket mentransfer volume data besar secara bersamaan, persaingan bandwidth dapat menunda layanan kritis. Pembatasan kecepatan Quality of Service (QoS) kolam sumber daya mengatasi hal ini melalui dua metode komplementer: threshold-based throttling membatasi bandwidth maksimum yang dapat digunakan oleh suatu bucket, sedangkan priority-based throttling menjamin bandwidth minimum untuk layanan prioritas tinggi. Kombinasi keduanya menjaga stabilitas layanan kritis di bawah beban.
Cara kerja
Threshold-based throttling
Threshold-based throttling menetapkan batas atas bandwidth pada berbagai tingkatan hierarki kolam sumber daya—kolam sumber daya, BucketGroup, dan bucket—untuk mencegah objek tunggal mengonsumsi terlalu banyak bandwidth.
Aturan pembatasan kecepatan
Resource pool: Max 100 Gbps
├─ Bucket A: Max 40 Gbps ← Tidak dapat melebihi 40 Gbps meskipun bandwidth tersedia
├─ Bucket B: Max 30 Gbps
└─ Bucket C: Unlimited ← Dapat menggunakan seluruh bandwidth tersisaTiga aturan mengatur cara batas-batas tersebut digabungkan:
Semua batas aktif berlaku secara bersamaan. Bandwidth aktual adalah nilai minimum dari semua aturan aktif.
Bandwidth anak tidak boleh melebihi bandwidth induk. Jumlah bandwidth objek di tingkat bawah tidak boleh melebihi total bandwidth objek induknya.
Batas requester bersifat independen. Batas requester diterapkan bersamaan dengan batas hierarki kolam sumber daya, dan nilai yang lebih rendah yang berlaku.
Contoh: Pengguna RAM mengakses bucket dengan batas requester 20 Gbps dan batas bucket 30 Gbps.
Bandwidth maksimum aktual = min(20 Gbps, 30 Gbps) = 20 Gbps
Priority-based throttling
Priority-based throttling memberikan komitmen bandwidth minimum kepada objek berdasarkan tingkat prioritasnya, sehingga layanan prioritas tinggi mendapatkan bandwidth terlebih dahulu saat terjadi persaingan.
Konfigurasikan 3 hingga 10 tingkat prioritas per kolam sumber daya. Angka yang lebih tinggi menunjukkan prioritas lebih tinggi. Objek tanpa prioritas eksplisit menggunakan tingkat prioritas default; tingkat prioritas tanpa komitmen bandwidth minimum eksplisit menggunakan komitmen bandwidth minimum default.
Cara alokasi bandwidth
Jaminan komitmen minimum: Setiap tingkat prioritas memiliki bandwidth minimum terjamin yang dihormati secara ketat oleh sistem.
Preemption: Objek prioritas tinggi dapat merebut kembali bandwidth yang digunakan oleh objek prioritas rendah melebihi komitmen minimum mereka. Prioritas lebih tinggi selalu menang dalam semua kontes preemption.
Pemanfaatan sumber daya idle: Objek prioritas rendah dapat menggunakan bandwidth minimum idle dari objek prioritas lebih tinggi. Namun, objek prioritas lebih tinggi tetap memiliki hak utama ketika membutuhkannya kembali.
Batasan konfigurasi: Jumlah total komitmen bandwidth minimum tidak boleh melebihi total bandwidth kolam sumber daya.
Contoh alokasi
Semua contoh menggunakan kolam sumber daya 100 Gbps.
Skenario 1: Preemption prioritas tinggi (3 tingkat, masing-masing 20 Gbps)
Prioritas 1 membutuhkan 10 Gbps, Prioritas 2 membutuhkan 30 Gbps, Prioritas 3 membutuhkan 80 Gbps.
| Prioritas | Komitmen minimum | Dibutuhkan | Alokasi aktual | Catatan |
|---|---|---|---|---|
| Prioritas 3 | 20 Gbps | 80 Gbps | 70 Gbps | Mendapat 20 Gbps komitmen + 10 Gbps idle dari Prioritas 1 + 40 Gbps sisa |
| Prioritas 2 | 20 Gbps | 30 Gbps | 20 Gbps | Mendapat 20 Gbps komitmen. Tambahan direbut oleh Prioritas 3. |
| Prioritas 1 | 20 Gbps | 10 Gbps | 10 Gbps | Mendapat 10 Gbps sesuai kebutuhan. 10 Gbps idle direbut oleh Prioritas 3. |
Alokasi akhir: 10 + 20 + 70 = 100 Gbps
Skenario 2: Prioritas lebih tinggi unggul dalam preemption (4 tingkat, masing-masing 25 Gbps)
Prioritas 1 membutuhkan 0 Gbps, Prioritas 2 membutuhkan 5 Gbps, Prioritas 3 membutuhkan 40 Gbps, Prioritas 4 membutuhkan 60 Gbps.
| Prioritas | Komitmen minimum | Dibutuhkan | Alokasi aktual | Catatan |
|---|---|---|---|---|
| Prioritas 4 | 25 Gbps | 60 Gbps | 60 Gbps | Mendapat 25 Gbps komitmen + merebut 35 Gbps |
| Prioritas 3 | 25 Gbps | 40 Gbps | 35 Gbps | Mendapat 25 Gbps komitmen + merebut sisa 10 Gbps |
| Prioritas 2 | 25 Gbps | 5 Gbps | 5 Gbps | Kurang dari komitmen; mendapat tepat sesuai kebutuhan |
| Prioritas 1 | 25 Gbps | 0 Gbps | 0 Gbps | Tidak membutuhkan apa pun; seluruh bandwidth idle direbut |
Alokasi akhir: 0 + 5 + 35 + 60 = 100 Gbps
Skenario 3: Total komitmen kurang dari bandwidth kolam (4 tingkat, masing-masing 10 Gbps = total 40 Gbps)
Prioritas 1 membutuhkan 50 Gbps, Prioritas 2 membutuhkan 50 Gbps, Prioritas 3 membutuhkan 30 Gbps, Prioritas 4 membutuhkan 20 Gbps.
| Priority | Minimum commitment | Required | Actual allocation | Notes |
|---|---|---|---|---|
| Priority 4 | 10 Gbps | 20 Gbps | 20 Gbps | Prioritas tertinggi; mendapatkan bandwidth yang diminta secara penuh |
| Priority 3 | 10 Gbps | 30 Gbps | 30 Gbps | Prioritas tertinggi berikutnya; mendapatkan bandwidth yang diminta secara penuh |
| Priority 2 | 10 Gbps | 50 Gbps | 40 Gbps | Mendapatkan komitmen 10 Gbps + 30 Gbps sisa |
| Priority 1 | 10 Gbps | 50 Gbps | 10 Gbps | Hanya mendapatkan komitmen minimum |
Alokasi akhir: 10 + 40 + 30 + 20 = 100 Gbps
Menggunakan kedua metode pembatasan kecepatan secara bersamaan
Gabungkan threshold-based throttling dengan priority-based throttling untuk menetapkan batas atas dan bawah bagi setiap objek.
Batas threshold-based adalah batas keras. Bandwidth tidak pernah melebihi nilai ini, terlepas dari komitmen bandwidth minimum.
Komitmen minimum berbasis prioritas adalah jaminan lunak. Sistem menghormatinya dalam batas threshold-based.
Konfigurasi normal: Bucket A memiliki komitmen minimum 50 Gbps dan ambang batas 80 Gbps. Bandwidth tersedia: 50–80 Gbps.
Konflik konfigurasi: Bucket A memiliki komitmen minimum 80 Gbps dan ambang batas 50 Gbps. Ambang batas berlaku. Bandwidth tersedia: 50 Gbps.
Selalu atur batas threshold-based lebih tinggi daripada komitmen minimum berbasis prioritas agar objek prioritas tinggi dapat memanfaatkan bandwidth tambahan saat tersedia.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Bandwidth di wilayah target sebesar 400 Gbps atau lebih
Kolam sumber daya yang dibuat oleh Technical Support Alibaba Cloud (lihat Minta kolam sumber daya)
Minta kolam sumber daya
Hubungi Technical Support untuk meminta kolam sumber daya. Sertakan informasi berikut dalam tiket:
Region: China (Hangzhou)
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: YesSetelah kolam sumber daya dibuat, halaman Resource Pool QoS akan tersedia di Konsol OSS.
Konfigurasikan threshold-based throttling
Gunakan threshold-based throttling untuk membatasi bandwidth maksimum untuk bucket, BucketGroup, atau requester guna mencegah objek tunggal mengonsumsi terlalu banyak sumber daya.
Semua nilai bandwidth dalam konfigurasi XML menggunakan satuan Gbps. Atur nilai menjadi-1untuk unlimited (menggunakan bandwidth kolam bersama) atau0untuk memblokir seluruh trafik (gunakan dengan hati-hati).
Tetapkan batas bandwidth untuk bucket
Gunakan ini ketika satu bucket menghasilkan trafik berlebihan yang memengaruhi bucket lain dalam kolam sumber daya yang sama.
Konsol
Pada halaman Resource Pool QoS, klik nama kolam sumber daya target. Untuk bucket target, klik Modify Throttling Configuration dan atur nilai bandwidth.
| Field | Deskripsi |
|---|---|
| Total upload bandwidth | Batas unggah gabungan lintas jaringan internal dan publik (Gbps) |
| Internal network upload bandwidth | Batas unggah untuk trafik VPC/titik akhir internal (Gbps) |
| Public network upload bandwidth | Batas unggah untuk trafik internet (Gbps) |
| Total download bandwidth | Batas unduh gabungan lintas jaringan internal dan publik (Gbps) |
| Internal network download bandwidth | Batas unduh untuk trafik VPC/titik akhir internal (Gbps) |
| Public network download bandwidth | Batas unduh untuk trafik internet (Gbps) |
ossutil
Sebelum memulai, instal ossutil.
Buat file XML lokal bernama
qos.xmldengan konfigurasi bandwidth:Intranetmengacu pada trafik jaringan internal (VPC).Extranetmengacu pada trafik jaringan publik. Semua nilai dalam Gbps. Atur-1untuk unlimited.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" # Ganti dengan wilayah bucket Anda 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', # Ganti dengan nama bucket Anda ) resp = client.invoke_operation(req) print(resp.status_code) if __name__ == "__main__": put_bucket_qos_info()Terapkan konfigurasi ke bucket (ganti
examplebucketdengan nama bucket Anda):ossutil api invoke-operation --op-name put-bucket-qos-info --method PUT --bucket examplebucket --parameters qosInfo --body=file://qos.xml(Opsional) Verifikasi konfigurasi:
ossutil api invoke-operation --op-name get-bucket-qos-info --method GET --bucket examplebucket --parameters qosInfo
SDK
Batas bandwidth bucket didukung oleh Python SDK V2 dan Go SDK V2.
Buat
qos.xmldengan konten yang sama seperti contoh ossutil di atas.Terapkan konfigurasi: 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" # Ganti dengan wilayah bucket Anda 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', # Ganti dengan nama bucket Anda ) resp = client.invoke_operation(req) print(resp.status_code) if __name__ == "__main__": put_bucket_qos_info()
API
Panggil PutBucketQoSInfo dengan badan permintaan berikut:
<QoSConfiguration>
<TotalUploadBandwidth>100</TotalUploadBandwidth>
<IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
<ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
<TotalDownloadBandwidth>100</TotalDownloadBandwidth>
<IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
<ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
</QoSConfiguration>Tetapkan batas bandwidth untuk requester bucket
Gunakan ini ketika beberapa layanan berbagi bucket yang sama dan Anda perlu mencegah satu Pengguna RAM atau Peran RAM mengonsumsi terlalu banyak bandwidth.
Pengguna RAM
Konsol
Dapatkan ID Pengguna RAM.
Pada halaman Resource Pool QoS, klik nama kolam sumber daya target. Untuk bucket target, klik Configure Requester Throttling dan atur bandwidth untuk Pengguna RAM.
ossutil
Sebelum memulai, instal ossutil.
Buat
qos.xmldengan batas bandwidth untuk Pengguna RAM:<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>-1</ExtranetUploadBandwidth> <TotalDownloadBandwidth>100</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>-1</ExtranetDownloadBandwidth> </QoSConfiguration>Dapatkan ID Pengguna RAM.
Terapkan konfigurasi (ganti
examplebucketdan266xxxxdengan nilai Anda):ossutil api invoke-operation --op-name put-bucket-requester-qos-info --method PUT --bucket=examplebucket --parameters requesterQosInfo --parameters qosRequester=266xxxx --body file://qos.xml(Opsional) Verifikasi konfigurasi:
ossutil api invoke-operation --op-name get-bucket-requester-qos-info --method GET --bucket=examplebucket --parameters requesterQosInfo --parameters qosRequester=266xxxx
SDK
Batas bandwidth Pengguna RAM untuk bucket didukung oleh Python SDK V2 dan Go SDK V2.
Buat
qos.xmldengan konten yang sama seperti contoh ossutil di atas.Dapatkan ID Pengguna RAM.
Terapkan konfigurasi: 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" # Ganti dengan wilayah bucket Anda 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', # Ganti dengan ID Pengguna RAM }, headers=None, body=qos_xml_body, bucket='examplebucket', # Ganti dengan nama bucket Anda ) 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
Dapatkan ID Pengguna RAM.
Panggil PutBucketRequesterQoSInfo dengan badan permintaan berikut:
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>-1</ExtranetUploadBandwidth> <TotalDownloadBandwidth>100</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>-1</ExtranetDownloadBandwidth> </QoSConfiguration>
Peran RAM
Gunakan ini ketika Anda perlu membatasi bandwidth untuk Peran RAM yang mengakses bucket. Kasus umum: CDN mengakses bucket privat melalui peran AliyunCDNAccessingPrivateOSSRole untuk back-to-origin, dan Anda perlu membatasi bandwidth yang dapat dikonsumsinya.
Konsol
Dapatkan ID Peran RAM.
Pada halaman Resource Pool QoS, klik nama kolam sumber daya target. Untuk bucket target, klik Configure Requester Throttling dan atur bandwidth untuk Peran RAM.
ossutil
Sebelum memulai, instal ossutil.
Buat
qos.xmldengan batas bandwidth untuk Peran RAM:<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth> <TotalDownloadBandwidth>100</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>40</ExtranetDownloadBandwidth> </QoSConfiguration>Dapatkan ID Peran RAM.
Terapkan konfigurasi (ganti
examplebucketdan362xxxxdengan nilai Anda):ossutil api invoke-operation --op-name put-bucket-requester-qos-info --method PUT --bucket=examplebucket --parameters requesterQosInfo --parameters qosRequester=362xxxx --body file://qos.xml(Opsional) Daftar semua konfigurasi bandwidth Peran RAM dalam kolam sumber daya:
ossutil api invoke-operation --op-name list-resource-pool-requester-qos-infos --method GET --parameters resourcePool=examplePool --parameters requesterQosInfo
SDK
Batas bandwidth Peran RAM untuk bucket didukung oleh Python SDK V2 dan Go SDK V2.
Buat
qos.xmldengan konten yang sama seperti contoh ossutil di atas.Dapatkan ID Peran RAM.
Terapkan konfigurasi: 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" # Ganti dengan wilayah bucket Anda 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', # Ganti dengan ID Peran RAM }, headers=None, body=qos_xml_body, bucket='examplebucket', # Ganti dengan nama bucket Anda ) 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
Dapatkan ID Peran RAM.
Panggil PutBucketRequesterQoSInfo dengan badan permintaan berikut:
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth> <TotalDownloadBandwidth>100</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>40</ExtranetDownloadBandwidth> </QoSConfiguration>
Tetapkan batas bandwidth untuk BucketGroup
Gunakan ini untuk mengelompokkan bucket prioritas rendah dan membatasi bandwidth gabungan mereka guna mencegah beban kerja latar belakang bersaing dengan layanan kritis di tingkat kolam.
Nama BucketGroup harus terdiri dari 3–30 karakter, hanya menggunakan huruf kecil, angka, dan tanda hubung.
Konsol
Pada halaman Resource Pool QoS, klik nama kolam sumber daya target. Klik Create BucketGroup, masukkan nama, dan atur batas bandwidth.
Untuk setiap bucket yang akan ditambahkan ke grup, klik Configure BucketGroup di sebelah kanan bucket.
ossutil
Sebelum memulai, instal ossutil.
Tambahkan bucket ke BucketGroup (jalankan sekali per bucket):
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(Opsional) Daftar semua bucket dalam BucketGroup:
ossutil api invoke-operation --op-name list-resource-pool-bucket-groups --method GET --parameters resourcePool=pool-for-ai --parameters resourcePoolBucketGroupBuat
qos.xmldengan batas bandwidth untuk BucketGroup:<QoSConfiguration> <TotalUploadBandwidth>20</TotalUploadBandwidth> <IntranetUploadBandwidth>-1</IntranetUploadBandwidth> <ExtranetUploadBandwidth>10</ExtranetUploadBandwidth> <TotalDownloadBandwidth>30</TotalDownloadBandwidth> <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth> </QoSConfiguration>Terapkan konfigurasi bandwidth ke 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(Opsional) Verifikasi konfigurasi:
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
Batas bandwidth BucketGroup didukung oleh Python SDK V2 dan Go SDK V2.
Tambahkan bucket ke 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', # Ganti dengan nama BucketGroup Anda 'resourcePool': 'example-resource-pool', # Ganti dengan nama kolam sumber daya Anda }, headers=None, body=None, bucket='examplebucket', # Ganti dengan nama bucket Anda ) resp = client.invoke_operation(req) print(resp.status_code) if __name__ == "__main__": put_bucket_resource_pool_bucket_group()Buat
qos.xmldengan batas bandwidth (konten sama seperti contoh ossutil di atas).Terapkan konfigurasi bandwidth ke 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', # Ganti dengan nama kolam sumber daya Anda 'resourcePoolBucketGroup': 'example-group', # Ganti dengan nama BucketGroup Anda }, 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
Panggil PutResourcePoolBucketGroupQoSInfo dengan badan permintaan berikut:
<QoSConfiguration>
<TotalUploadBandwidth>20</TotalUploadBandwidth>
<IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
<ExtranetUploadBandwidth>10</ExtranetUploadBandwidth>
<TotalDownloadBandwidth>30</TotalDownloadBandwidth>
<IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
<ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
</QoSConfiguration>Tetapkan batas bandwidth untuk requester kolam sumber daya
Gunakan ini ketika beberapa Pengguna RAM mengakses bucket berbeda dalam kolam sumber daya yang sama dan Anda perlu mencegah satu pengguna saja memonopoli bandwidth seluruh kolam.
Konsol
Dapatkan ID Pengguna RAM atau ID Peran RAM.
Pada halaman Resource Pool QoS, klik nama kolam sumber daya target. Pada tab Resource Pool Requester List, klik Modify Throttling Configuration untuk Pengguna RAM atau Peran RAM target.
ossutil
Sebelum memulai, instal ossutil.
Buat
qos.xmldengan batas bandwidth:<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>50</IntranetUploadBandwidth> <ExtranetUploadBandwidth>50</ExtranetUploadBandwidth> <TotalDownloadBandwidth>200</TotalDownloadBandwidth> <IntranetDownloadBandwidth>150</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>50</ExtranetDownloadBandwidth> </QoSConfiguration>Dapatkan ID Pengguna RAM atau ID Peran RAM.
Terapkan konfigurasi (ganti
examplepooldan266xxxxdengan nilai Anda):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(Opsional) Daftar semua konfigurasi Pengguna RAM dalam kolam sumber daya:
ossutil api invoke-operation --op-name list-resource-pool-requester-qos-infos --method GET --parameters resourcePool=examplePool --parameters requesterQosInfo
SDK
Batas bandwidth requester kolam sumber daya didukung oleh Python SDK V2 dan Go SDK V2.
Buat
qos.xmldengan konten yang sama seperti contoh ossutil di atas.Dapatkan ID Pengguna RAM atau ID Peran RAM.
Terapkan konfigurasi: 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', # Ganti dengan nama kolam sumber daya Anda 'qosRequester': '2598732222222xxxx', # Ganti dengan ID Pengguna RAM atau Peran RAM }, 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
Dapatkan ID Pengguna RAM atau ID Peran RAM.
Panggil PutResourcePoolRequesterQoSInfo dengan badan permintaan berikut:
<QoSConfiguration> <TotalUploadBandwidth>100</TotalUploadBandwidth> <IntranetUploadBandwidth>50</IntranetUploadBandwidth> <ExtranetUploadBandwidth>50</ExtranetUploadBandwidth> <TotalDownloadBandwidth>200</TotalDownloadBandwidth> <IntranetDownloadBandwidth>150</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>50</ExtranetDownloadBandwidth> </QoSConfiguration>
Konfigurasikan priority-based throttling
Gunakan priority-based throttling untuk menjamin bandwidth minimum bagi layanan prioritas tinggi. Gabungkan dengan threshold-based throttling untuk menentukan batas bawah dan atas bagi setiap objek.
Tetapkan prioritas kolam sumber daya
Gunakan ini ketika kolam sumber daya berisi beberapa bucket dan Anda perlu memastikan bucket layanan inti mendapatkan bandwidth yang cukup bahkan saat terjadi persaingan.
ossutil
Buat file konfigurasi prioritas bernama
priority-qos.xml:<PriorityQosConfiguration> <PriorityCount>3</PriorityCount> <DefaultPriorityLevel>1</DefaultPriorityLevel> <!-- Default minimum bandwidth commitment for unassigned priority levels --> <DefaultGuaranteedQosConfiguration> <TotalUploadBandwidth>10</TotalUploadBandwidth> <IntranetUploadBandwidth>5</IntranetUploadBandwidth> <ExtranetUploadBandwidth>5</ExtranetUploadBandwidth> <TotalDownloadBandwidth>20</TotalDownloadBandwidth> <IntranetDownloadBandwidth>10</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>10</ExtranetDownloadBandwidth> </DefaultGuaranteedQosConfiguration> <!-- Priority 3 (highest): core service buckets --> <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: important service buckets --> <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>Terapkan konfigurasi (ganti
hz-rp-03dengan nama kolam sumber daya Anda):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(Opsional) Verifikasi konfigurasi:
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() {
// Ganti cn-hangzhou dengan wilayah bucket Anda
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion("cn-hangzhou")
client := oss.NewClient(cfg)
resourcePool := "hz-rp-01" // Ganti dengan nama kolam sumber daya Anda
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
Tetapkan prioritas requester kolam sumber daya
Gunakan ini dalam platform Software as a Service (SaaS) multi-penyewa tempat pelanggan dari tier berbeda mengakses kolam sumber daya yang sama. Berikan prioritas lebih tinggi kepada pelanggan premium untuk menjamin bandwidth mereka, sementara pelanggan standar berbagi sumber daya yang tersisa.
ossutil
Buat file konfigurasi prioritas requester bernama
requester-priority-qos.xml:<PriorityQosConfiguration> <PriorityCount>3</PriorityCount> <DefaultPriorityLevel>1</DefaultPriorityLevel> <!-- Default minimum bandwidth commitment for unassigned requesters --> <DefaultGuaranteedQosConfiguration> <TotalUploadBandwidth>10</TotalUploadBandwidth> <IntranetUploadBandwidth>5</IntranetUploadBandwidth> <ExtranetUploadBandwidth>5</ExtranetUploadBandwidth> <TotalDownloadBandwidth>20</TotalDownloadBandwidth> <IntranetDownloadBandwidth>10</IntranetDownloadBandwidth> <ExtranetDownloadBandwidth>10</ExtranetDownloadBandwidth> </DefaultGuaranteedQosConfiguration> <!-- Priority 3 (highest): premium customers --> <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: standard customers --> <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>Terapkan konfigurasi:
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(Opsional) Verifikasi konfigurasi:
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") // Ganti dengan wilayah Anda
client := oss.NewClient(cfg)
resourcePool := "hz-rp-01" // Ganti dengan nama kolam sumber daya Anda
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
Monitoring dan Peringatan
Monitor penggunaan bandwidth
Buka CloudMonitor - Object Storage Service Resource Pool untuk melihat penggunaan bandwidth real-time untuk setiap layanan dalam kolam sumber daya.
Atur peringatan bandwidth
Buat aturan peringatan di CloudMonitor untuk mendapatkan notifikasi sebelum masalah bandwidth memengaruhi layanan kritis. Misalnya, picu peringatan ketika penggunaan bandwidth melebihi 80% agar Anda memiliki waktu untuk menyesuaikan konfigurasi sebelum trafik puncak tiba.
Menuju produksi
Perencanaan kapasitas
Ikuti panduan berikut sebelum menerapkan resource pool QoS di lingkungan produksi.
Jaga total komitmen minimum di bawah 50% bandwidth kolam.
Simpan setidaknya 50% bandwidth sebagai ruang elastis untuk penjadwalan dinamis. Ini meningkatkan pemanfaatan keseluruhan dan mencegah objek prioritas tinggi kekurangan bandwidth saat permintaan melonjak secara tak terduga.
Contoh konfigurasi untuk kolam 100 Gbps:
Komitmen minimum Prioritas 3: 20 Gbps
Komitmen minimum Prioritas 2: 20 Gbps
Komitmen minimum Prioritas 1: 10 Gbps
Total komitmen: 50 Gbps (ruang elastis 50 Gbps)Gunakan 3 hingga 5 tingkat prioritas.
Tingkat lebih banyak meningkatkan kompleksitas manajemen tanpa manfaat berarti. Struktur tier praktis:
Layanan inti: Prioritas 4–5
Layanan penting: Prioritas 3
Layanan reguler: Prioritas 1–2
Atur batas threshold di atas komitmen minimum.
Ini memungkinkan objek prioritas tinggi melebihi batas terjamin mereka saat bandwidth tersedia:
Komitmen minimum (lantai): Bucket A — 50 Gbps
Batas threshold-based (langit-langit): Bucket A — 80 Gbps
Bandwidth aktual tersedia: 50–80 GbpsPraktik terbaik
Platform video-on-demand
Streaming langsung: Prioritas 3, komitmen minimum 50 Gbps
Konten on-demand: Prioritas 1, komitmen minimum 20 Gbps
Back-to-origin CDN: Batas threshold-based 100 Gbps
Platform SaaS multi-penyewa
Pelanggan Edisi Perusahaan: Prioritas 3, dengan komitmen bandwidth minimum
Pelanggan Edisi Gratis: Prioritas 1, berbagi bandwidth tersisa
Batas per penyewa: Threshold-based throttling untuk mencegah satu penyewa memonopoli bandwidth
Data Lake Analytics
Analytic real-time: Prioritas 2, komitmen minimum 30 Gbps
Analytic offline: Prioritas 1, komitmen minimum 20 Gbps
Data arsip: Batas threshold-based 10 Gbps
Pencegahan risiko
Tinjau penggunaan kuota secara berkala. Gunakan CloudMonitor untuk melacak tren penggunaan bandwidth untuk setiap objek dan sesuaikan konfigurasi segera:
Jika komitmen bandwidth minimum untuk objek prioritas tinggi secara konsisten terpenuhi kurang dari 95% waktu, tingkatkan komitmen tersebut atau kurangi komitmen untuk objek prioritas rendah.
Jika objek prioritas rendah tidak mendapatkan bandwidth sama sekali dalam periode panjang, kurangi komitmen prioritas tinggi atau lakukan scale-out kolam sumber daya.
Atur peringatan multi-level:
Tingkat peringatan (80%): Siapkan rencana scale-out.
Tingkat kritis (90%): Mulai respons darurat segera.
Hindari konflik konfigurasi:
Jumlah komitmen bandwidth minimum tidak boleh melebihi total bandwidth kolam sumber daya.
Batas threshold-based harus lebih tinggi daripada komitmen minimum berbasis prioritas.
Ketika bucket termasuk dalam BucketGroup, prioritas BucketGroup yang berlaku—bukan prioritas individu bucket.
Uji perubahan sebelum produksi:
Validasi perubahan konfigurasi di lingkungan staging terlebih dahulu.
Simpan konfigurasi saat ini sebelum membuat perubahan untuk memungkinkan rollback cepat.
Terapkan perubahan selama jam sepi.
Kuota dan batasan
Perubahan konfigurasi berlaku dalam waktu 5 menit.
| Sumber daya | Kuota/Batasan |
|---|---|
| Kolam sumber daya per wilayah | 100 |
| Bucket per kolam sumber daya | 100 |
| BucketGroup per kolam sumber daya | 100 |
| Requester dengan throttling per kolam sumber daya | 300 |
| Panjang nama BucketGroup | 3–30 karakter |
| Karakter nama BucketGroup | Huruf kecil, angka, tanda hubung (-) |
| Tingkat prioritas per kolam sumber daya | 3–10 (bilangan bulat) |
| Nilai tingkat prioritas | Bilangan bulat dari 1 hingga jumlah total tingkat prioritas |
| Batasan komitmen bandwidth minimum | Jumlah semua komitmen tidak boleh melebihi total bandwidth kolam |
| Lantai komitmen bandwidth minimum | Minimal MIN[5, (ambang batas tingkat atas) / (2 x jumlah tingkat prioritas)] Gbps |
| Parameter bandwidth: bilangan bulat positif | Menetapkan batas dalam Gbps |
| Parameter bandwidth: -1 | Unlimited (menggunakan bandwidth kolam bersama) |
| Parameter bandwidth: 0 | Memblokir seluruh trafik — gunakan dengan hati-hati |