全部产品
Search
文档中心

Alibaba Cloud SDK:Mekanisme backoff lanjutan berdasarkan kebijakan throttling

更新时间:Jul 02, 2025

Topik ini menjelaskan mekanisme backoff lanjutan berdasarkan kebijakan throttling.

Catatan

Mekanisme retry dan kebijakan throttling telah ditambahkan. Untuk informasi lebih lanjut, lihat Mekanisme Retry.

Pustaka inti aliyun-java-sdk-core V4.6.0 atau yang lebih baru mendukung mekanisme retry dan menyediakan mekanisme backoff lanjutan berdasarkan kebijakan throttling. Untuk informasi lebih lanjut, lihat Mekanisme Retry. Anda harus menambahkan dependensi Maven berikut:

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.6.0</version>
</dependency>
Penting
  1. Tidak semua Operasi API layanan cloud mendukung mekanisme backoff lanjutan berdasarkan kebijakan throttling. Untuk informasi tentang Operasi API yang mendukung mekanisme ini, lihat bagian Quotas Info di dokumentasi API setiap layanan. Sebagai contoh, lihat bagian Quotas Info dalam topik DescribeHpcClusters dari Elastic Compute Service (ECS).

  2. Anda dapat mengaktifkan mekanisme backoff berdasarkan kebijakan throttling di SDK terlepas dari apakah Operasi API layanan cloud mendukung mekanisme tersebut. Jika Operasi API tidak mendukung mekanisme ini, meskipun Anda mengaktifkannya, kebijakan backoff dan kebijakan untuk menonaktifkan permintaan API selama throttling yang ditentukan dalam SDK tidak akan berlaku. Efeknya sama seperti ketika Anda menonaktifkan mekanisme backoff berdasarkan kebijakan throttling di SDK. Namun, jika Operasi API tiba-tiba mendukung mekanisme ini, kebijakan throttling dan kebijakan untuk menonaktifkan permintaan API mungkin dipicu saat Anda memanggil Operasi API. Dalam hal ini, pemecahan masalah menjadi lebih sulit.

  3. Setelah mengaktifkan mekanisme backoff berdasarkan kebijakan throttling, kami sarankan Anda tetap memantau Operasi API yang gagal dipanggil. Jika Anda hanya menggunakan mekanisme ini, masalah mungkin gagal diselesaikan.

  4. Prasyarat dari contoh-contoh berikut adalah bahwa Operasi API mendukung mekanisme backoff berdasarkan kebijakan throttling.

Ikhtisar

Kebijakan backoff lanjutan berdasarkan kebijakan throttling diklasifikasikan menjadi dua kebijakan berikut:

  • Kebijakan backoff

  • Kebijakan untuk menonaktifkan permintaan API selama throttling

Interval untuk setiap retry dihitung menggunakan algoritma backoff eksponensial EqualJitter. Algoritma EqualJitter digunakan untuk menghitung waktu tunggu untuk retry berikutnya. Untuk informasi lebih lanjut, lihat Mekanisme Retry. Selain itu, mekanisme disediakan untuk menghitung waktu backoff lanjutan berdasarkan kebijakan throttling.

Aktifkan kebijakan backoff berdasarkan kebijakan throttling

Secara default, kebijakan backoff berdasarkan kebijakan throttling dinonaktifkan. Anda dapat menggunakan salah satu metode berikut untuk mengaktifkan kebijakan ini:

  1. Konfigurasikan kebijakan retry.

RetryPolicy retryPolicy = RetryPolicy.builder()
                .maxNumberOfRetries(3) // Jumlah maksimum retry.
                .maxDelayTimeMillis(20 * 1000) // Interval retry maksimum. Unit: milidetik. Jika interval terlampaui, tidak ada retry yang dilakukan.
                //.retryConditions(retryConditions) // Kebijakan yang digunakan untuk memicu retry.
                .enableAliyunThrottlingControl(true) // Aktifkan kebijakan backoff berdasarkan kebijakan throttling. 
                //.throttlingConditions(throttlingConditions) // Kebijakan yang digunakan untuk membatasi retry.
                .build();

request.setSysRetryPolicy(retryPolicy);
  1. Gunakan kebijakan retry default.

// Kebijakan default. Parameter request adalah enableAliyunThrottlingControl. Nilai true menentukan bahwa kebijakan backoff berdasarkan kebijakan throttling diaktifkan. Nilai false menentukan bahwa kebijakan backoff berdasarkan kebijakan throttling dinonaktifkan.
RetryPolicy retryPolicy = RetryPolicy.defaultRetryPolicy( 
true 
);

request.setSysRetryPolicy(retryPolicy);

Manfaat mengaktifkan kebijakan backoff berdasarkan kebijakan throttling

  1. Retry yang tidak perlu dikurangi, sehingga mengurangi konsumsi sistem.

  2. Algoritma backoff dapat digunakan untuk menghitung waktu backoff yang lebih akurat guna meningkatkan tingkat keberhasilan retry.

Pengaturan lanjutan

Kebijakan backoff: Hitung waktu backoff berdasarkan kebijakan throttling

Setelah kebijakan backoff berdasarkan kebijakan throttling diaktifkan, waktu backoff dihitung dengan logika berikut:

  1. Jika throttling tidak dipicu, EqualJitter digunakan untuk menghitung interval retry.

  2. Jika throttling dipicu, interval retry adalah nilai yang lebih besar antara sisa waktu siklus throttling saat ini dan hasil perhitungan EqualJitter. Jika interval retry lebih besar dari interval retry maksimum, pengecualian dilemparkan, dan sisa waktu siklus throttling saat ini disimpan di pool cache. Dengan cara ini, sisa waktu siklus throttling saat ini dapat digunakan oleh kebijakan untuk menonaktifkan permintaan API selama throttling.

Kebijakan untuk menonaktifkan permintaan API selama throttling

Setelah kebijakan backoff berdasarkan kebijakan throttling diaktifkan, jika throttling dipicu, server mengembalikan informasi kuota tersisa tentang throttling di header. Server mengembalikan informasi seperti jumlah panggilan API yang tersisa dan sisa waktu siklus throttling saat ini ke klien dalam dimensi "User" dan "API + User". Jika panggilan API dithrottle, jumlah panggilan API yang tersisa adalah 0.

Catatan

Kunci yang sesuai dengan dua dimensi di header:

  • Dimensi "API + User": X-RateLimit-User-API

  • Dimensi "User": X-RateLimit-User

Contoh dimensi "API + User":

"X-RateLimit-User-API" : "Remain:1,Limit:2,Time:1000,TimeLeft:122,Reset:1637835220000"

Remain: jumlah panggilan API yang tersisa. Nilai parameter Remain adalah tipe INT. Jika nilainya -1, jumlah panggilan API yang tersisa cukup. Jika panggilan API dithrottle, nilai 0 dikembalikan.

Limit: ambang batas throttling maksimum. Nilainya adalah tipe INT.
Time: rentang waktu throttling. Nilainya adalah tipe LONG. Unit: milidetik.
TimeLeft: sisa waktu siklus throttling saat ini. Nilainya adalah tipe LONG. Unit: milidetik.
Reset: waktu mulai siklus throttling berikutnya. Nilainya adalah tipe LONG dan merupakan timestamp dalam milidetik

.

SDK mengelola sisa waktu siklus throttling saat ini. Selama waktu backoff yang dihitung berdasarkan sisa waktu siklus throttling saat ini, inisiasi panggilan atau retry dibatasi. Jika waktu backoff lebih besar dari interval retry maksimum, kesalahan dilemparkan. Jika waktu backoff tidak lebih besar dari interval retry maksimum, sistem menunggu hingga panggilan dapat diinisiasi atau diretry.

Aktifkan debugging throttling

Setelah kebijakan backoff berdasarkan kebijakan throttling diaktifkan, jika throttling dipicu, server mengembalikan informasi kuota tersisa tentang throttling di header. Anda juga dapat meminta untuk mengembalikan informasi kuota dalam panggilan dengan menyetel X-RateLimit-Mode ke debug di header permintaan.

request.putHeadParameter("X-RateLimit-Mode", "debug");

Dengan cara ini, Anda dapat memperoleh informasi kuota tersisa di header respons setiap panggilan API.