Batasi tarif panggilan menurut kunci
BERLAKU UNTUK: Pengembang | Dasar | Dasar v2 | Standar | Standar v2 | Premium | Premium v2
Kebijakan rate-limit-by-key
mencegah lonjakan penggunaan API per kunci dengan membatasi tarif panggilan ke nomor tertentu per periode waktu tertentu. Kunci dapat memiliki nilai string arbitrer dan biasanya disediakan menggunakan ekspresi kebijakan. Kondisi kenaikan opsional dapat ditambahkan untuk menentukan permintaan mana yang harus diperhitungkan terhadap batas. Ketika tarif panggilan ini terlampaui, penelepon menerima kode status respons 429 Too Many Requests
.
Untuk memahami perbedaan antara batas tarif dan kuota, lihat Batas tarif dan kuota.
Perhatian
Karena sifat arsitektur pelambatan yang terdistribusi, pembatasan laju tidak pernah sepenuhnya akurat. Perbedaan antara jumlah permintaan yang dikonfigurasi dan permintaan sebenarnya yang diizinkan bervariasi berdasarkan volume dan tarif permintaan, latensi backend, dan faktor lainnya.
Catatan
Tetapkan elemen kebijakan dan elemen turunan dalam urutan yang disediakan dalam pernyataan kebijakan. Untuk membantu Anda mengonfigurasi kebijakan ini, portal menyediakan editor berbasis formulir berikut panduannya. Pelajari lebih lanjut cara mengatur atau mengedit kebijakan API Management.
Pernyataan kebijakan
<rate-limit-by-key calls="number"
renewal-period="seconds"
increment-condition="condition"
increment-count="number"
counter-key="key value"
retry-after-header-name="custom header name, replaces default 'Retry-After'"
retry-after-variable-name="policy expression variable name"
remaining-calls-header-name="header name"
remaining-calls-variable-name="policy expression variable name"
total-calls-header-name="header name"/>
Atribut
Atribut | Deskripsi | Wajib diisi | Default |
---|---|---|---|
panggilan | Jumlah total maksimum panggilan yang diizinkan untuk nilai kunci selama interval waktu yang ditentukan dalam renewal-period . Ekspresi kebijakan diizinkan. |
Ya | T/A |
penghitung-kunci | Kunci yang digunakan untuk kebijakan batas tarif. Untuk setiap nilai kunci, penghitung tunggal digunakan untuk semua cakupan tempat kebijakan dikonfigurasi. Ekspresi kebijakan diizinkan. | Ya | T/A |
kenaikan-kondisi | Ekspresi Boolean yang menentukan apakah permintaan harus dihitung terhadap tarif (true ). Ekspresi kebijakan diizinkan tetapi akan menunda evaluasi dan melawan tindakan kenaikan ke akhir alur keluar. |
No | T/A |
jumlah kenaikan | Jumlah di mana penghitung ditingkatkan per permintaan. Ekspresi kebijakan diizinkan tetapi akan menunda evaluasi dan kenaikan penghitung ke akhir alur keluar. | No | 1 |
periode-perpanjangan | Durasi dalam detik jendela geser yang selama itu jumlah permintaan yang diizinkan tidak boleh melebihi nilai yang ditentukan di calls . Nilai maksimum yang diizinkan: 300 detik. Ekspresi kebijakan diizinkan. |
Ya | T/A |
coba lagi-setelah-header-nama | Nama header respons kustom yang nilainya adalah interval coba lagi yang direkomendasikan dalam hitungan detik setelah laju panggilan yang ditentukan terlampaui untuk nilai kunci. Ekspresi kebijakan tidak diizinkan. | No | Retry-After |
coba lagi-setelah-nama-variabel | Nama variabel ekspresi kebijakan yang menyimpan interval coba lagi yang direkomendasikan dalam hitungan detik setelah laju panggilan yang ditentukan terlampaui untuk nilai kunci. Ekspresi kebijakan tidak diizinkan. | No | T/A |
sisa-panggilan-header-nama | Nama header respons yang nilainya setelah setiap eksekusi kebijakan adalah jumlah panggilan yang tersisa yang diizinkan untuk nilai kunci dalam interval waktu yang ditentukan dalam renewal-period . Ekspresi kebijakan tidak diizinkan. |
No | T/A |
sisa-panggilan-variabel-nama | Nama variabel ekspresi kebijakan yang setelah setiap eksekusi kebijakan menyimpan jumlah panggilan yang tersisa yang diizinkan untuk nilai kunci dalam interval waktu yang ditentukan dalam renewal-period . Ekspresi kebijakan tidak diizinkan. |
No | T/A |
total-panggilan-header-nama | Nama header respons yang nilainya adalah nilai yang ditentukan di calls . Ekspresi kebijakan tidak diizinkan. |
No | T/A |
Penggunaan
- Bagian kebijakan: masuk
- Cakupan kebijakan: global, ruang kerja, produk, API, operasi
- Gateway: klasik, v2, dihost sendiri, ruang kerja
Catatan penggunaan
- API Management menggunakan satu penghitung untuk setiap
counter-key
nilai yang Anda tentukan dalam kebijakan. Penghitung diperbarui di semua cakupan di mana kebijakan dikonfigurasi dengan nilai kunci tersebut. Jika Anda ingin mengonfigurasi penghitung terpisah pada cakupan yang berbeda (misalnya, API atau produk tertentu), tentukan nilai kunci yang berbeda pada cakupan yang berbeda. Misalnya, tambahkan string yang mengidentifikasi cakupan ke nilai ekspresi. - Jumlah batas laju dalam gateway yang dihost sendiri dapat dikonfigurasi untuk disinkronkan secara lokal (di antara instans gateway di seluruh node kluster), misalnya, melalui penyebaran bagan Helm untuk Kubernetes atau menggunakan templat penyebaran portal Azure. Namun, jumlah batas laju tidak disinkronkan dengan sumber daya gateway lain yang dikonfigurasi dalam instans API Management, termasuk gateway terkelola di cloud. Pelajari lebih lanjut
- Ketika
increment-condition
atauincrement-count
didefinisikan menggunakan ekspresi, evaluasi, dan kenaikan penghitung batas tarif ditunda ke akhir alur keluar untuk memungkinkan ekspresi kebijakan berdasarkan respons. Kondisi terlampaui batas tidak dievaluasi pada saat yang sama dalam hal ini dan akan dievaluasi pada panggilan masuk berikutnya. Ini mengarah pada kasus di mana429 Too Many Requests
kode status dikembalikan 1 panggilan lebih lambat dari biasanya.
Contoh
Dalam contoh berikut, batas kecepatan 10 panggilan per 60 detik ditentukan oleh alamat IP pemanggil. Setelah setiap eksekusi kebijakan, panggilan yang tersisa yang diizinkan untuk alamat IP penelepon tersebut dalam periode waktu disimpan dalam variabel remainingCallsPerIP
.
<policies>
<inbound>
<base />
<rate-limit-by-key calls="10"
renewal-period="60"
increment-condition="@(context.Response.StatusCode == 200)"
counter-key="@(context.Request.IpAddress)"
remaining-calls-variable-name="remainingCallsPerIP"/>
</inbound>
<outbound>
<base />
</outbound>
</policies>
Untuk informasi selengkapnya dan contoh kebijakan ini, lihat Pelambatan permintaan lanjutan dengan Azure API Management.
Kebijakan terkait
Konten terkait
Untuk informasi selengkapnya tentang bekerja dengan kebijakan, lihat:
- Tutorial: Mengubah dan melindungi API Anda
- Referensi Kebijakan untuk daftar lengkap pernyataan kebijakan dan pengaturannya
- Ekspresi kebijakan
- Mengatur atau mengedit kebijakan
- Menggunakan kembali konfigurasi kebijakan
- Repositori cuplikan kebijakan
- Toolkit kebijakan Azure API Management
- Kebijakan penulis menggunakan Microsoft Copilot di Azure