All Products
Search
Document Center

Object Storage Service:Gunakan QoS kolam sumber daya untuk menjamin bandwidth bagi layanan kritis

Last Updated:Mar 21, 2026

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.

Hierarki kolam sumber daya

Kolam sumber daya mendukung struktur berikut:

Struktur bucket datar (Skenario 1)

image

Nested BucketGroups (Scenario 2)

image

BucketGroups dan bucket campuran (Skenario 3)

image

Requester throttling merupakan dimensi independen—beroperasi di luar hierarki kolam sumber daya dan diterapkan bersamaan dengannya.

Requester throttling dan hierarki throttling bersamaan (Skenario 4)

image

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 tersisa

Tiga aturan mengatur cara batas-batas tersebut digabungkan:

  1. Semua batas aktif berlaku secara bersamaan. Bandwidth aktual adalah nilai minimum dari semua aturan aktif.

  2. Bandwidth anak tidak boleh melebihi bandwidth induk. Jumlah bandwidth objek di tingkat bawah tidak boleh melebihi total bandwidth objek induknya.

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

  1. Jaminan komitmen minimum: Setiap tingkat prioritas memiliki bandwidth minimum terjamin yang dihormati secara ketat oleh sistem.

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

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

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

PrioritasKomitmen minimumDibutuhkanAlokasi aktualCatatan
Prioritas 320 Gbps80 Gbps70 GbpsMendapat 20 Gbps komitmen + 10 Gbps idle dari Prioritas 1 + 40 Gbps sisa
Prioritas 220 Gbps30 Gbps20 GbpsMendapat 20 Gbps komitmen. Tambahan direbut oleh Prioritas 3.
Prioritas 120 Gbps10 Gbps10 GbpsMendapat 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.

PrioritasKomitmen minimumDibutuhkanAlokasi aktualCatatan
Prioritas 425 Gbps60 Gbps60 GbpsMendapat 25 Gbps komitmen + merebut 35 Gbps
Prioritas 325 Gbps40 Gbps35 GbpsMendapat 25 Gbps komitmen + merebut sisa 10 Gbps
Prioritas 225 Gbps5 Gbps5 GbpsKurang dari komitmen; mendapat tepat sesuai kebutuhan
Prioritas 125 Gbps0 Gbps0 GbpsTidak 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.

PriorityMinimum commitmentRequiredActual allocationNotes
Priority 410 Gbps20 Gbps20 GbpsPrioritas tertinggi; mendapatkan bandwidth yang diminta secara penuh
Priority 310 Gbps30 Gbps30 GbpsPrioritas tertinggi berikutnya; mendapatkan bandwidth yang diminta secara penuh
Priority 210 Gbps50 Gbps40 GbpsMendapatkan komitmen 10 Gbps + 30 Gbps sisa
Priority 110 Gbps50 Gbps10 GbpsHanya 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.

Penting

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

Setelah 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 -1 untuk unlimited (menggunakan bandwidth kolam bersama) atau 0 untuk 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.

FieldDeskripsi
Total upload bandwidthBatas unggah gabungan lintas jaringan internal dan publik (Gbps)
Internal network upload bandwidthBatas unggah untuk trafik VPC/titik akhir internal (Gbps)
Public network upload bandwidthBatas unggah untuk trafik internet (Gbps)
Total download bandwidthBatas unduh gabungan lintas jaringan internal dan publik (Gbps)
Internal network download bandwidthBatas unduh untuk trafik VPC/titik akhir internal (Gbps)
Public network download bandwidthBatas unduh untuk trafik internet (Gbps)

ossutil

Sebelum memulai, instal ossutil.

  1. Buat file XML lokal bernama qos.xml dengan konfigurasi bandwidth:

    Intranet mengacu pada trafik jaringan internal (VPC). Extranet mengacu pada trafik jaringan publik. Semua nilai dalam Gbps. Atur -1 untuk 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()
  2. Terapkan konfigurasi ke bucket (ganti examplebucket dengan nama bucket Anda):

       ossutil api invoke-operation --op-name put-bucket-qos-info --method PUT --bucket examplebucket --parameters qosInfo --body=file://qos.xml
  3. (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.

  1. Buat qos.xml dengan konten yang sama seperti contoh ossutil di atas.

  2. 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
  1. Dapatkan ID Pengguna RAM.

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

  1. Buat qos.xml dengan 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>
  2. Dapatkan ID Pengguna RAM.

  3. Terapkan konfigurasi (ganti examplebucket dan 266xxxx dengan 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
  4. (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.

  1. Buat qos.xml dengan konten yang sama seperti contoh ossutil di atas.

  2. Dapatkan ID Pengguna RAM.

  3. 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
  1. Dapatkan ID Pengguna RAM.

  2. 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
  1. Dapatkan ID Peran RAM.

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

  1. Buat qos.xml dengan 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>
  2. Dapatkan ID Peran RAM.

  3. Terapkan konfigurasi (ganti examplebucket dan 362xxxx dengan 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
  4. (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.

  1. Buat qos.xml dengan konten yang sama seperti contoh ossutil di atas.

  2. Dapatkan ID Peran RAM.

  3. 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
  1. Dapatkan ID Peran RAM.

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

  1. Pada halaman Resource Pool QoS, klik nama kolam sumber daya target. Klik Create BucketGroup, masukkan nama, dan atur batas bandwidth.

  2. Untuk setiap bucket yang akan ditambahkan ke grup, klik Configure BucketGroup di sebelah kanan bucket.

ossutil

Sebelum memulai, instal ossutil.

  1. 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
  2. (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 resourcePoolBucketGroup
  3. Buat qos.xml dengan batas bandwidth untuk BucketGroup:

       <QoSConfiguration>
         <TotalUploadBandwidth>20</TotalUploadBandwidth>
         <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
         <ExtranetUploadBandwidth>10</ExtranetUploadBandwidth>
         <TotalDownloadBandwidth>30</TotalDownloadBandwidth>
         <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
         <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
       </QoSConfiguration>
  4. 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
  5. (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.

  1. 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()
  2. Buat qos.xml dengan batas bandwidth (konten sama seperti contoh ossutil di atas).

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

  1. Dapatkan ID Pengguna RAM atau ID Peran RAM.

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

  1. Buat qos.xml dengan batas bandwidth:

       <QoSConfiguration>
         <TotalUploadBandwidth>100</TotalUploadBandwidth>
         <IntranetUploadBandwidth>50</IntranetUploadBandwidth>
         <ExtranetUploadBandwidth>50</ExtranetUploadBandwidth>
         <TotalDownloadBandwidth>200</TotalDownloadBandwidth>
         <IntranetDownloadBandwidth>150</IntranetDownloadBandwidth>
         <ExtranetDownloadBandwidth>50</ExtranetDownloadBandwidth>
       </QoSConfiguration>
  2. Dapatkan ID Pengguna RAM atau ID Peran RAM.

  3. Terapkan konfigurasi (ganti examplepool dan 266xxxx dengan 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
  4. (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.

  1. Buat qos.xml dengan konten yang sama seperti contoh ossutil di atas.

  2. Dapatkan ID Pengguna RAM atau ID Peran RAM.

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

  1. Dapatkan ID Pengguna RAM atau ID Peran RAM.

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

  1. 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>
  2. Terapkan konfigurasi (ganti hz-rp-03 dengan 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
  3. (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

PutResourcePoolPriorityQosConfiguration

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

  1. 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>
  2. 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
  3. (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

PutResourcePoolRequesterPriorityQosConfiguration

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 Gbps

Praktik 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 dayaKuota/Batasan
Kolam sumber daya per wilayah100
Bucket per kolam sumber daya100
BucketGroup per kolam sumber daya100
Requester dengan throttling per kolam sumber daya300
Panjang nama BucketGroup3–30 karakter
Karakter nama BucketGroupHuruf kecil, angka, tanda hubung (-)
Tingkat prioritas per kolam sumber daya3–10 (bilangan bulat)
Nilai tingkat prioritasBilangan bulat dari 1 hingga jumlah total tingkat prioritas
Batasan komitmen bandwidth minimumJumlah semua komitmen tidak boleh melebihi total bandwidth kolam
Lantai komitmen bandwidth minimumMinimal MIN[5, (ambang batas tingkat atas) / (2 x jumlah tingkat prioritas)] Gbps
Parameter bandwidth: bilangan bulat positifMenetapkan batas dalam Gbps
Parameter bandwidth: -1Unlimited (menggunakan bandwidth kolam bersama)
Parameter bandwidth: 0Memblokir seluruh trafik — gunakan dengan hati-hati