Topik ini menjelaskan konfigurasi plugin throttling dan memberikan contoh untuk beberapa skenario umum.
1. Ikhtisar
Plugin throttling membatasi laju pemanggilan API. Anda dapat mengatur lalu lintas berdasarkan
API,App (AccessKey yang digunakan untuk akses),pengguna (pemilik aplikasi), atauparameter kustom.Plugin throttlingmendukung dua templat konfigurasi:Konfigurasi throttling berbasis parameter: Templat ini digunakan untuk mengonfigurasi throttling berdasarkan
parameter kustom.Konfigurasi throttling dasar: Templat ini kompatibel dengan fitur
throttlingdi konsol.
Fitur
throttlingkini merupakan bagian dari sistem plugin. Antarmukathrottlingdan konsol yang ada tetap tersedia.Kebijakan throttlingdanplugin throttlingmerupakan jenis plugin yang sama. Jika Anda mengikatplugin throttlingke suatu API,kebijakan throttling yang ada menjadi tidak berlaku.Saat Anda membuat atau memodifikasi kebijakan throttling di antarmuka atau konsol throttling asli, modifikasi disinkronkan ke sistem plugin. Namun, modifikasi yang Anda buat di sistem plugin tidak dapat disinkronkan ke antarmuka atau konsol throttling.
2. Konfigurasi throttling dasar
2.1 Kemampuan throttling
2.1.1 Ambang batas throttling
Batas lalu lintas API: Jumlah maksimum panggilan yang diizinkan per satuan waktu untuk suatu API yang dikaitkan dengan kebijakan tersebut. Satuan waktu dapat berupa detik, menit, jam, atau hari. Misalnya, 5.000 panggilan/menit.
Batas lalu lintas APP: Jumlah maksimum panggilan yang diizinkan per satuan waktu dari setiap aplikasi ke API apa pun yang dikaitkan dengan kebijakan tersebut. Misalnya, 50.000 panggilan/jam.
Batas lalu lintas pengguna: Jumlah maksimum panggilan yang diizinkan per satuan waktu dari setiap akun Alibaba Cloud ke API apa pun yang dikaitkan dengan kebijakan tersebut. Satu akun Alibaba Cloud dapat memiliki beberapa aplikasi, dan batas ini berlaku untuk total lalu lintas dari semua aplikasi yang dimiliki akun tersebut. Misalnya, 500.000 panggilan/hari.
Anda dapat menentukan semua ambang batas sebelumnya secara bersamaan dalam satu plugin throttling. Ambang batas throttling tingkat pengguna tidak boleh lebih besar dari ambang batas throttling tingkat API, dan ambang batas throttling tingkat aplikasi tidak boleh lebih besar dari ambang batas throttling tingkat pengguna.
Anda juga dapat menambahkan aplikasi atau pengguna khusus ke dalam kebijakan throttling. Dengan cara ini, Anda dapat mengatur ambang batas throttling khusus untuk setiap aplikasi atau pengguna. Ambang batas throttling khusus tidak boleh lebih besar dari ambang batas throttling tingkat API.
2.1.2 Satuan waktu dan algoritma throttling
Plugin throttling API Gateway mendukung detik (SECOND), menit (MINUTE), jam (HOUR), dan hari (DAY) sebagai satuan waktu. Algoritma jendela waktu tetap digunakan untuk satuan menit, jam, dan hari. Algoritma bucket token digunakan secara default untuk satuan detik. Jika algoritma bucket token tidak memenuhi kebutuhan Anda, Anda dapat mengonfigurasi algoritma jendela waktu tetap sebagai gantinya. Kedua algoritma tersebut dijelaskan sebagai berikut:
Algoritma bucket token: Ini adalah algoritma default untuk throttling tingkat detik. Algoritma bucket token memiliki dua konsep: bucket token dan antrian tunggu. Mesin API Gateway secara berkala menambahkan token ke bucket token. Saat permintaan klien tiba di API Gateway, permintaan tersebut terlebih dahulu mencoba mengambil token dari bucket. Jika token berhasil diambil, permintaan dilewatkan. Jika token tidak berhasil diambil, permintaan masuk ke antrian. Token batch berikutnya diprioritaskan untuk permintaan dalam antrian. Jika antrian penuh, permintaan selanjutnya menerima error 429. Untuk mencegah permintaan masuk ke antrian, Anda dapat mengonfigurasi
blockingMode: QUICK_RETURN. Dengan konfigurasi ini, jika permintaan gagal mendapatkan token, sistem segera mengembalikan error 429.Algoritma jendela waktu tetap: algoritma yang digunakan saat menit, jam, atau hari digunakan sebagai satuan waktu. Algoritma ini membatasi jumlah total permintaan yang diterima dalam satuan waktu. Sebagai contoh, batas 1.000 permintaan per menit menentukan bahwa kode 429 dikembalikan untuk permintaan melebihi batas. Hitungan permintaan diatur ulang di awal menit berikutnya.
2.2 Konfigurasikan plugin throttling dasar
Anda dapat mengonfigurasi plugin dalam format JSON atau YAML. Kedua format menggunakan skema yang sama. Anda dapat menggunakan alat konversi yaml ke json untuk mengonversi antar format. Kode berikut menunjukkan templat dalam format YAML.
---
unit: SECOND # Satuan waktu. Nilai yang valid: SECOND, MINUTE, HOUR, dan DAY.
apiDefault: 1000 # Ambang batas throttling default tingkat API.
controlMode: FIX_WINDOW # Menentukan bahwa algoritma jendela waktu tetap digunakan ketika satuan waktu adalah detik.
blockingMode: QUICK_RETURN # Menentukan bahwa kode 429 dikembalikan untuk permintaan yang gagal mendapatkan token saat menggunakan algoritma bucket token.
userDefault: 30 # Opsional. Ambang batas throttling default tingkat pengguna. Jika Anda menetapkan ambang batas ini ke 0, throttling tingkat pengguna tidak dilakukan. Ambang batas throttling tingkat pengguna tidak boleh lebih besar daripada ambang batas throttling tingkat API.
appDefault: 30 # Opsional. Ambang batas throttling default tingkat aplikasi. Jika Anda menetapkan ambang batas ini ke 0, throttling tingkat aplikasi tidak dilakukan. Ambang batas throttling tingkat aplikasi tidak boleh lebih besar daripada ambang batas throttling tingkat pengguna.
specials: # Opsional. Pengaturan throttling khusus. Anda dapat menetapkan ambang batas throttling untuk aplikasi atau pengguna khusus dalam kebijakan throttling.
- type: "APP" # Jenis throttling khusus. Nilai APP menentukan bahwa throttling dilakukan untuk aplikasi khusus berdasarkan AppKey mereka.
policies:
- key: 10123123 # ID aplikasi. Anda dapat memperoleh ID aplikasi dari halaman detail aplikasi. Untuk membuka halaman ini, pilih Call API > Apps di panel navigasi sebelah kiri konsol API Gateway dan klik nama aplikasi dalam daftar aplikasi.
value: 10 # Ambang batas throttling khusus untuk aplikasi. Ambang batas ini tidak boleh lebih besar daripada ambang batas throttling tingkat pengguna dalam kebijakan throttling.
- key: 10123123 # ID aplikasi.
value: 10 # Ambang batas throttling khusus untuk aplikasi. Ambang batas ini tidak boleh lebih besar daripada ambang batas throttling tingkat pengguna dalam kebijakan throttling.
- type: "USER" # Jenis throttling khusus. Nilai USER menentukan bahwa throttling dilakukan untuk akun Alibaba Cloud khusus.
policies:
- key: 123455 # ID akun Alibaba Cloud. Anda dapat mengarahkan kursor ke gambar profil di pojok kanan atas konsol Alibaba Cloud untuk memperoleh ID tersebut.
value: 100 # Ambang batas throttling khusus untuk akun Alibaba Cloud. Ambang batas ini tidak boleh lebih besar daripada ambang batas throttling tingkat API dalam kebijakan throttling.2.3 Gunakan dataset plugin bersama dengan plugin throttling dasar
2.3.1 Buat dataset plugin
Masuk ke konsol API Gateway. Di panel navigasi sebelah kiri, klik . Lalu, klik tab Plugin Datasets.
Di pojok kanan atas, klik Create Dataset. Di kotak dialog yang muncul, masukkan Name untuk dataset tersebut. Atur Type ke TRAFFIC_CONTROL_POLICY. Klik OK untuk membuat dataset.
Buka dataset yang telah Anda buat. Di pojok kanan atas, klik Create Dataset Entry. Di halaman yang muncul, konfigurasikan kunci dan nilai untuk plugin throttling. key adalah AppId atau ID akun Alibaba Cloud. value adalah nilai throttling yang sesuai.
2.3.2 Contoh penggunaan dataset plugin untuk plugin throttling
Plugin throttling dasar mendukung dataset plugin. Anda dapat menggunakan dataset plugin untuk mengonfigurasi ambang batas throttling khusus untuk aplikasi atau akun tertentu. Kode berikut menunjukkan contoh:
---
unit: SECOND # Satuan waktu. Nilai yang valid: SECOND, MINUTE, HOUR, dan DAY.
apiDefault: 1000 # Ambang batas throttling default tingkat API.
userDefault: 30 # Opsional. Ambang batas throttling default tingkat pengguna. Jika Anda menetapkan ambang batas ini ke 0, throttling tingkat pengguna tidak dilakukan. Ambang batas throttling tingkat pengguna tidak boleh lebih besar daripada ambang batas throttling tingkat API.
appDefault: 30 # Opsional. Ambang batas throttling default tingkat aplikasi. Jika Anda menetapkan ambang batas ini ke 0, throttling tingkat aplikasi tidak dilakukan. Ambang batas throttling tingkat aplikasi tidak boleh lebih besar daripada ambang batas throttling tingkat pengguna.
specials: # Opsional. Pengaturan throttling khusus. Anda dapat menetapkan ambang batas throttling untuk aplikasi atau pengguna khusus dalam kebijakan throttling.
- type: "APP" # Jenis throttling khusus. Nilai APP menentukan bahwa throttling dilakukan untuk aplikasi khusus berdasarkan AppKey mereka.
policyDatasetId: 87 b65008e92541938XXXXXXXX6eda5 # ID dataset plugin.
policies:
- key: 10123123 # ID aplikasi. Anda dapat memperoleh ID aplikasi dari halaman detail aplikasi. Untuk membuka halaman ini, pilih Call API > Apps di panel navigasi sebelah kiri konsol API Gateway dan klik nama aplikasi dalam daftar aplikasi.
value: 10 # Ambang batas throttling khusus untuk aplikasi. Ambang batas ini tidak boleh lebih besar daripada ambang batas throttling tingkat pengguna dalam kebijakan throttling.
- key: 10123123 # ID aplikasi.
value: 10 # Ambang batas throttling khusus untuk aplikasi. Ambang batas ini tidak boleh lebih besar daripada ambang batas throttling tingkat pengguna dalam kebijakan throttling.
- type: "USER" # Jenis throttling khusus. Nilai USER menentukan bahwa throttling dilakukan untuk akun Alibaba Cloud khusus.
policyDatasetId: 87 b65008eXXXXXXXXXXXXa236eda5 # ID dataset plugin.
policies:
- key: 123455 # ID akun Alibaba Cloud. Anda dapat mengarahkan kursor ke gambar profil di pojok kanan atas konsol Alibaba Cloud untuk memperoleh ID tersebut.
value: 100 # Ambang batas throttling khusus untuk akun Alibaba Cloud. Ambang batas ini tidak boleh lebih besar daripada ambang batas throttling tingkat API dalam kebijakan throttling.Dataset plugin hanya didukung oleh plugin throttling dasar. Plugin throttling berbasis parameter tidak mendukung dataset plugin.
3. Konfigurasi throttling berbasis parameter
Throttling berbasis parameter memungkinkan Anda mengontrol lalu lintas berdasarkan parameter permintaan pemanggil dan eksekusi kondisional. Konfigurasi throttling berbasis parameter berikut didukung:
Mendukung throttling pada tingkat detik, menit, jam, atau hari.
Memungkinkan Anda menetapkan kondisi berdasarkan parameter permintaan dan parameter sistem untuk mengeksekusi aturan throttling yang berbeda.
Memungkinkan Anda menyiapkan throttling menggunakan satu parameter atau kombinasi beberapa parameter.
Memungkinkan Anda menetapkan cakupan throttling ke API atau plugin.
3.1 Memulai cepat dengan throttling berbasis parameter
Pertimbangkan skenario di mana Anda ingin menerapkan aturan throttling berikut untuk setiap alamat IP klien. Jika pengguna melakukan autentikasi dengan kunci yang memiliki AppId 10001, tetapkan throttle ke 100 permintaan/detik. Untuk semua kasus lainnya, tetapkan throttle ke 10 permintaan/detik.
Untuk skenario ini, konfigurasikan plugin sebagai berikut. Contoh ini menggunakan yaml untuk mengonfigurasi plugin.
---
scope: "PLUGIN"
#
# Throttling ini bergantung pada dua parameter sistem:
# 1. AppId yang digunakan untuk tanda tangan pengguna, diperoleh dari parameter sistem CaAppId.
# 2. IP Klien sumber pengguna, diperoleh dari parameter sistem CaClientIp.
parameters:
AppId: "System: CaAppId"
ClientIP: "System: CaClientIp"
rules:
# Kebijakan throttling pertama. Berlaku ketika `AppId` adalah `10001`. Membatasi setiap ClientIP hingga `100/detik`.
- name: "Vip"
condition: "$AppId = 10001"
byParameters: "ClientIP"
limit: 100
period: SECOND
# Kebijakan throttling kedua bernama `PerClientIP`. Membatasi setiap ClientIP hingga `10/detik`.
- name: "PerClientIP"
byParameters: "ClientIP"
bypassEmptyValue: true # Ketika suatu aturan dalam `rules` tidak memiliki kondisi dan menggunakan parameter byParameters sebagai kondisi, aturan ini tidak berlaku jika parameternya kosong atau nilai kosong dilewatkan. Sebagai gantinya, kebijakan throttling default digunakan.
limit: 10
period: SECOND3.2 Konfigurasikan plugin throttling berbasis parameter
Anda dapat menggunakan format yaml atau json yang setara untuk mengonfigurasi metadata plugin.
---
scope: "PLUGIN" # Ruang lingkup plugin throttling. Nilai valid: PLUGIN dan API.
blockingMode: QUICK_RETURN # Menentukan bahwa permintaan tanpa token tidak masuk antrian. Sebagai gantinya, kode 429 dikembalikan. Untuk informasi lebih lanjut, lihat deskripsi bidang berikut.
controlMode: FIX_WINDOW # Menentukan bahwa algoritma jendela waktu tetap digunakan saat satuan waktu adalah detik.
defaultLimit: 100 # Nilai throttling default, jika nilai default ditentukan.
defaultPeriod: SECOND # Satuan waktu default untuk throttling.
defaultRetryAfterBySecond: 60 # Mengembalikan header Retry-After, yang memberikan saran tentang berapa lama harus menunggu sebelum permintaan berikutnya.
defaultErrorMessage: "Dibatasi oleh 100/SECOND"
parameters: # Parameter yang dapat digunakan untuk throttling.
clientIp: "System:CaClientIp"
userId: "Token:userId"
rules:
- name: "ByClientIp"
byParameters: "clientIp"
condition: "$clientIp !in_cidr '61.7.XX.XX/24'"
limit: 10
period: MINUTE
retryAfterBySecond: 60 # Mengembalikan header Retry-After, yang memberikan saran tentang berapa lama harus menunggu sebelum permintaan berikutnya.
errorMessage: "Dibatasi oleh 10/MINUTE dari ${clientIp}"
- name: "Maksimal 10 permintaan per menit diizinkan untuk setiap pengguna, kecuali administrator."
byParameters: "clientIp"
condition: "$userId !like 'admin%'"
limit: 10
period: MINUTE
retryAfterBySecond: 60 # Mengembalikan header Retry-After, yang memberikan saran tentang berapa lama harus menunggu sebelum permintaan berikutnya.
- name: "Maksimal 10 permintaan per menit diizinkan untuk setiap alamat IP klien."
byParameters: "clientIp"
condition: "$clientIp in_cidr '67.0.XX.XX/8'"
limit: 10
period: MINUTE
- name: "Maksimal 15 permintaan per menit diizinkan untuk setiap pengguna."
condition: "$userId !like 'admin%'"
limit: 15
period: MINUTE
byParameters: "clientIp"Bidang:
scope(Wajib): Cakupan plugin throttling. Nilai yang valid adalahAPIdanPLUGIN. Jika beberapa API dikaitkan dengan plugin yang sama, nilaiscopememengaruhi cakupan kebijakan throttling. Misalnya, jika kebijakan diatur ke10 panggilan/detik:Jika nilainya
API, kebijakan throttling berlaku untuk setiap API secara terpisah. Dalam contoh ini, batas untuk setiap API adalah10 panggilan/detik.Jika nilainya
PLUGIN, semua API yang dikaitkan dengan plugin ini berbagi batas tersebut. Jika plugin dalam contoh ini dikaitkan dengan sekelompok API, batas lalu lintas total untuk kelompok tersebut adalah10 panggilan/detik.
parameters(Wajib): Daftar parameter yang terlibat dalam throttling. Untuk informasi lebih lanjut, lihat deskripsi di Gunakan parameter dan ekspresi kondisional.rules(Opsional): Daftar kebijakan throttling. JikadefaultLimitdanperiodtidak diatur, bidang ini tidak boleh kosong. Setiap kebijakan throttling berisi bidang-bidang berikut:name(Wajib): Nama kebijakan throttling. Nilainya harus berupa string yang valid yang cocok dengan[A-Za-z0-9_-]+dan harus unik dalam plugin yang sama.byParameters(Wajib): Parameter throttling. Jika Anda menggunakan kombinasi beberapa parameter, pisahkan dengan koma (,). Misalnya,ClientIPberarti throttling dilakukan secara terpisah untuk setiap nilaiClientIP.UserId,Actionberarti throttling dilakukan secara terpisah untuk nilai gabungan kedua parameter ini.bypassEmptyValue(Opsional): Jika diatur ke true, aturan ini tidak berlaku jika parameter `byParameters` kosong atau nilai kosong dilewatkan. Ini hanya berlaku ketika aturan tidak memiliki `condition` dan menggunakan `byParameters` sebagai kondisi. Dalam kasus ini, kebijakan throttling default digunakan sebagai gantinya.condition(Opsional): Jika kondisi ditetapkan, kebijakan throttling ini hanya dieksekusi jika kondisi terpenuhi.limit(Wajib): Nilai throttling. Ini harus berupa bilangan bulat positif. Nilai-1berarti tidak ada throttling yang diterapkan jika kondisi ini terpenuhi.period(Wajib): Periode throttling. Nilai yang valid:SECOND,MINUTE,HOUR, atauDAY.errorMessage(Opsional): Pesan kesalahan kustom. Anda dapat mendefinisikannya sebagai templat. Parameter yang didefinisikan dalamparametersdapat dirujuk menggunakan format${Name}.retryAfterBySecond(Opsional): Mengembalikan header Retry-After, yang menyarankan berapa lama harus menunggu sebelum membuat permintaan berikutnya.
defaultLimit(Opsional): Nilai throttling default. Ini harus berupa bilangan bulat positif.defaultPeriod(Opsional): Periode throttling. Nilai yang valid:SECOND,MINUTE,HOUR, atauDAY.defaultErrorMessage(Opsional): Pesan kesalahan kustom. Saat pesan kesalahan kustom dikonfigurasi, headerX-Ca-Error-Messageyang dikembalikan menggunakan pesan kustom tersebut. Pesan ini tidak dapat menggunakan parameter.defaultRetryAfterBySecond(Opsional): Header Retry-After default yang dikembalikan, yang menyarankan berapa lama harus menunggu sebelum membuat permintaan berikutnya.blockingMode(Opsional): API Gateway menggunakan algoritma bucket token standar untuk mengimplementasikan throttling. Daftar berikut menjelaskan nilai bidang dan algoritmanya.QUEUE (Default): Algoritma bucket token memiliki dua konsep: bucket token dan antrian tunggu. Mesin API Gateway secara berkala menambahkan token ke bucket token. Saat permintaan klien tiba di API Gateway, permintaan tersebut terlebih dahulu mencoba mengambil token dari bucket. Jika token berhasil diambil, permintaan dilewatkan. Jika token tidak berhasil diambil, permintaan masuk ke antrian. Token batch berikutnya diprioritaskan untuk permintaan dalam antrian. Jika antrian penuh, permintaan selanjutnya menerima error 429.
QUICK_RETURN: Jika Anda menggunakan nilai ini, permintaan tidak menunggu token di antrian. Sebagai gantinya, kode 429 dikembalikan.
controlMode: Menentukan algoritma throttling yang digunakan ketika satuan waktu adalah `SECOND`. Nilai default adalah TOKEN_BUCKET (algoritma bucket token). Anda dapat mengaturnya ke FIX_WINDOW (algoritma jendela waktu tetap).
3.3 Parameter yang didukung oleh plugin throttling
Tabel berikut menjelaskan parameter yang didukung oleh plugin throttling.
Nama Lokasi | Ruang Lingkup | Deskripsi |
Method | Permintaan | Metode permintaan HTTP (huruf kapital), seperti |
Path | Permintaan | Jalur permintaan HTTP lengkap, seperti |
Header | Permintaan | Gunakan |
Query | Permintaan | Gunakan |
Form | Permintaan | Gunakan |
Host | Permintaan | Gunakan |
Parameter | Permintaan | Gunakan |
Sistem | Permintaan | Gunakan |
Token | Permintaan | Dalam skenario otorisasi |
3.4 Aturan Eksekusi
API Gateway melakukan throttling berbasis parameter menggunakan aturan berikut:
Plugin menggunakan konfigurasi
parametersuntuk mengambil nilai parameter dari konteks permintaan.Semua aturan yang
condition-nya bernilaitrueatau yang tidak memiliki konfigurasiconditiondieksekusi.Jika beberapa aturan yang cocok dalam daftar memiliki konfigurasi
byParametersyang sama, hanya aturan pertama dalam urutan konfigurasi yang dieksekusi. Aturan lainnya tidak berlaku.
4. Contoh
4.1 Throttling Dasar
Throttling dasar mendukung throttling tingkat API, berbasis AppKey, dan tingkat pengguna.
---
unit: SECOND # Satuan waktu default untuk throttling. Nilai yang valid: SECOND, MINUTE, HOUR, dan DAY.
apiDefault: 50 # Ambang batas throttling default tingkat API.
defaultRetryAfterBySecond: 60 # Secara default, header Retry-After dikembalikan, yang memberikan saran berapa lama harus menunggu sebelum permintaan berikutnya.
appDefault: 20 # Opsional. Ambang batas throttling default tingkat aplikasi. Ambang batas ini tidak boleh lebih besar daripada ambang batas throttling tingkat pengguna.
userDefault: 30 # Opsional. Ambang batas throttling default tingkat pengguna. Ambang batas ini tidak boleh lebih besar daripada ambang batas throttling tingkat API.
specials: # Opsional. Pengaturan throttling khusus. Anda dapat menetapkan ambang batas throttling untuk aplikasi atau pengguna khusus dalam kebijakan throttling.
- type: "APP" # Jenis throttling khusus. Nilai APP menunjukkan bahwa throttling dilakukan untuk aplikasi khusus berdasarkan AppKey mereka.
policies:
- key: 10001 # ID aplikasi. Anda dapat memperoleh ID aplikasi dari halaman detail aplikasi. Untuk membuka halaman ini, pilih Call API > Apps di panel navigasi sebelah kiri konsol API Gateway dan klik nama aplikasi dalam daftar aplikasi.
value: 3 # Ambang batas throttling khusus untuk aplikasi. Ambang batas ini tidak boleh lebih besar daripada ambang batas throttling tingkat pengguna.
- key: 10003
value: 40
- type: "USER" # Jenis throttling khusus. Nilai USER menunjukkan bahwa throttling dilakukan untuk akun Alibaba Cloud khusus.
policies:
- key: 102 # ID akun Alibaba Cloud. Anda dapat mengarahkan kursor ke gambar profil di pojok kanan atas Konsol Manajemen Alibaba Cloud untuk memperoleh ID tersebut.
value: 10 # Ambang batas throttling khusus untuk akun Alibaba Cloud. Ambang batas ini tidak boleh lebih besar daripada ambang batas throttling tingkat API.
- key: 233
value: 354.2 Throttling Berbasis Parameter
Contoh ini menunjukkan cara mengonfigurasi kebijakan pembatasan laju.
Setiap IP sumber diizinkan
100 panggilan/menit.Jika IP klien berada dalam rentang
58.66.XX.XX/24, akses tidak dibatasi.Untuk IP klien dalam rentang
63.0.XX.XXdan73.0.XX.XX/24, akses dibatasi hingga5 panggilan/hari.
---
scope: API # Ruang lingkup throttling. Nilai valid: API dan PLUGIN.
parameters: # Parameter yang digunakan untuk throttling. Throttling hanya dilakukan berdasarkan parameter ClientIP. Anda dapat memperoleh nilai parameter ini dari parameter sistem CaClientIp.
ClientIp: "System:CaClientIp"
rules:
- name: whitelist # Kebijakan daftar putih. Throttling tidak dilakukan untuk alamat IP klien yang memenuhi kondisi yang ditentukan dalam kebijakan ini.
condition: "$ClientIp in_cidr '58.66.XX.XX/24'"
limit: -1 # Nilai -1 menunjukkan bahwa throttling tidak dilakukan.
- name: banList # Kebijakan throttling khusus. Jika alamat IP klien memenuhi kondisi yang ditentukan dalam kebijakan ini, maksimal lima panggilan API per hari diizinkan untuk alamat IP klien tersebut.
condition: "$ClientIp in_cidr '63.0.XX.XX' or $ClientIp in_cidr '73.0.XX.XX/24'"
byParameters: "ClientIp"
limit: 5
period: DAY
- name: 100perIp # Kebijakan throttling default. Maksimal 100 panggilan API per menit diizinkan untuk setiap alamat IP klien.
byParameters: "ClientIp"
limit: 100
period: MINUTE # Satuan waktu. Nilai valid: SECOND, MINUTE, HOUR, dan DAY.4.3 Konfigurasi Anti-Serangan CC
Bagian ini memberikan contoh konfigurasi plugin throttling untuk mencegah serangan Challenge Collapsar (CC).
Setiap IP sumber diizinkan
3 panggilan/detik.Jika IP sumber melebihi batas
3 panggilan/detik, akses diblokir selama 10 detik.
---
scope: API # Ruang lingkup throttling. Nilai valid: API dan PLUGIN.
defaultLimit: 3000 # Ambang batas throttling default.
defaultPeriod: SECOND # Satuan waktu default untuk throttling.
defaultRetryAfterBySecond: 60 # Secara default, header Retry-After dikembalikan, yang memberikan saran tentang berapa lama harus menunggu sebelum permintaan berikutnya.
parameters: # Parameter yang digunakan untuk throttling. Throttling hanya dilakukan berdasarkan parameter ClientIP. Anda dapat memperoleh nilai parameter ini dari parameter sistem CaClientIp.
clientIp: "system:CaClientIp"
rules:
-name: "Setiap alamat IP klien dapat memulai tiga panggilan API per detik. Jika ambang ini dilampaui, alamat IP klien diblokir selama 10 detik."
byParameters: "clientIp"
limit: 3
period: SECOND
blockingPeriodBySecond: 10 # Hanya efektif untuk instance khusus.5. Kode Kesalahan
Kode Kesalahan | Kode Status HTTP | Pesan Kesalahan | Deskripsi |
T429ID | 429 | Dibatasi oleh INNER DOMAIN Flow Control, ${Domain} adalah domain uji, hanya 1000 permintaan per hari | Saat Anda menggunakan nama domain tingkat kedua default untuk akses, batasnya adalah 1.000 panggilan/hari (100 panggilan/hari untuk wilayah di luar Tiongkok dan di Tiongkok (Hong Kong)). Ikat nama domain kustom untuk menghapus batas ini. |
T429IN | 429 | Dibatasi oleh INSTANCE Flow Control | Ambang batas throttling untuk instans saat ini terpicu. |
T429GR | 429 | Dibatasi oleh GROUP Flow Control | Ambang batas throttling untuk grup saat ini terpicu. |
T429PA | 429 | Dibatasi oleh API Flow Control | Throttling API default pada plugin terpicu. |
T429PR | 429 | Dibatasi oleh PLUGIN Flow Control | Aturan throttling khusus dalam plugin terpicu. |
6. Batasan
Maksimal 16 parameter dapat didefinisikan.
Ekspresi tunggal tidak boleh melebihi 512 karakter.
Metadata plugin tunggal tidak boleh melebihi 50 KB dalam ukuran.
Setiap plugin dapat memiliki maksimal 16
rules.Setiap
ruledapat memiliki maksimal tiga parameter dalambyParameters.Jika parameter throttling memiliki banyak nilai unik, misalnya saat Anda menggunakan throttling tingkat hari berdasarkan IP sumber, sistem dapat melepaskan beberapa catatan throttling untuk mengelola penggunaan memori. Untuk instans arsitektur tanpa server, plugin throttling berbasis parameter memungkinkan maksimal 1.000 nilai parameter berbeda. Untuk instans khusus, plugin memungkinkan maksimal 100.000 nilai parameter berbeda.