Anda sedang melihat dokumentasi Apigee Edge.
Buka
dokumentasi Apigee X. info
Kebijakan Spike Arrest melindungi dari lonjakan traffic dengan elemen <Rate>
. Elemen ini men-throttle jumlah permintaan yang diproses oleh proxy API dan dikirim ke backend, guna melindungi dari kelambatan performa dan periode nonaktif.
Elemen <SpikeArrest>
Menentukan kebijakan Penahanan Spike.
Nilai Default | Lihat tab Kebijakan Default di bawah |
Wajib? | Opsional |
Jenis | Objek kompleks |
Elemen Induk | t/a |
Elemen Turunan |
<Identifier> <MessageWeight> <Rate> (Wajib)<UseEffectiveCount> |
Sintaksis
Elemen <SpikeArrest>
menggunakan sintaksis berikut:
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <DisplayName>display_name</DisplayName> <Properties/> <Identifier ref="flow_variable"/> <MessageWeight ref="flow_variable"/> <Rate ref="flow_variable">rate[pm|ps]</Rate> <UseEffectiveCount>[false|true]</UseEffectiveCount> </SpikeArrest>
Kebijakan Default
Contoh berikut menunjukkan setelan default saat Anda menambahkan kebijakan Spike Arrest ke flow di UI Edge:
<SpikeArrest async="false" continueOnError="false" enabled="true" name="Spike-Arrest-1"> <DisplayName>Spike Arrest-1</DisplayName> <Properties/> <Identifier ref="request.header.some-header-name"/> <MessageWeight ref="request.header.weight"/> <Rate>30ps</Rate> <UseEffectiveCount>true</UseEffectiveCount> </SpikeArrest>
Elemen ini memiliki atribut berikut yang sama untuk semua kebijakan:
Atribut | Default | Wajib? | Deskripsi |
---|---|---|---|
name |
T/A | Wajib |
Nama internal kebijakan. Nilai atribut Secara opsional, gunakan elemen |
continueOnError |
false | Opsional | Tetapkan ke "false" untuk menampilkan error saat kebijakan gagal. Hal ini wajar untuk sebagian besar kebijakan. Tetapkan ke "true" agar eksekusi flow berlanjut meskipun kebijakan gagal. |
enabled |
benar | Opsional | Tetapkan ke "true" untuk menerapkan kebijakan. Tetapkan ke "false" untuk "menonaktifkan" kebijakan. Kebijakan ini tidak akan diterapkan meskipun tetap dilampirkan ke flow. |
async |
false | Tidak digunakan lagi | Atribut ini tidak digunakan lagi. |
Contoh
Contoh berikut menunjukkan beberapa cara untuk menggunakan kebijakan Penangkapan Spike:
Contoh 1
Contoh berikut menetapkan rasio ke lima per detik:
<SpikeArrest name="Spike-Arrest-1"> <Rate>5ps</Rate> </SpikeArrest>
Kebijakan ini memperlancar kecepatan menjadi satu permintaan yang diizinkan setiap 200 milidetik (1.000/5).
Contoh 2
Contoh berikut menetapkan kecepatan ke 12 per menit:
<SpikeArrest name="Spike-Arrest-1"> <Rate>12pm</Rate> </SpikeArrest>
Kebijakan contoh ini memperlancar kecepatan menjadi satu permintaan yang diizinkan setiap lima detik (60/12).
Contoh 3
Contoh berikut membatasi permintaan hingga 12 per menit (satu permintaan diizinkan setiap lima detik, atau 60/12):
<SpikeArrest name="Spike-Arrest-1"> <Rate>12pm</Rate> <Identifier ref="client_id" /> <MessageWeight ref="request.header.weight" /> </SpikeArrest>
Selain itu, elemen <MessageWeight>
menerima nilai kustom (header
weight
) yang menyesuaikan bobot pesan untuk aplikasi atau klien tertentu. Hal ini
memberikan kontrol tambahan atas throttling untuk entitas yang diidentifikasi dengan elemen
<Identifier>
.
Contoh 4
Contoh berikut menginstruksikan Spike Arrest untuk mencari nilai runtime yang ditetapkan melalui
permintaan yang diteruskan sebagai variabel alur request.header.runtime_rate
:
<SpikeArrest name="Spike-Arrest-1"> <Rate ref="request.header.runtime_rate" /> </SpikeArrest>
Nilai variabel flow harus dalam bentuk intpm
atau
intps
.
Untuk mencoba contoh ini, jalankan permintaan seperti berikut:
curl http://myorg-myenv.apigee.net/price -H 'runtime_rate:30ps'
Referensi elemen turunan
Bagian ini menjelaskan elemen turunan <SpikeArrest>
.
<DisplayName>
Gunakan selain atribut name
untuk memberi label kebijakan di editor proxy UI pengelolaan dengan nama yang berbeda dan terdengar lebih alami.
Elemen <DisplayName>
bersifat umum untuk semua kebijakan.
Nilai Default | t/a |
Wajib? | Opsional. Jika Anda menghapus <DisplayName> , nilai
atribut name kebijakan akan digunakan |
Jenis | String |
Elemen Induk | <PolicyElement> |
Elemen Turunan | Tidak ada |
Elemen <DisplayName>
menggunakan sintaksis berikut:
Sintaksis
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
Contoh
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
Elemen <DisplayName>
tidak memiliki atribut atau elemen turunan.
<Identifier>
Memungkinkan Anda memilih cara mengelompokkan permintaan sehingga kebijakan Penangkapan Spike dapat diterapkan berdasarkan klien. Misalnya, Anda dapat mengelompokkan permintaan berdasarkan ID developer, yang dalam hal ini permintaan setiap developer akan diperhitungkan dalam rasio Penangkapan Lonjakan mereka sendiri, dan bukan semua permintaan ke proxy.
Gunakan bersama dengan elemen <MessageWeight>
untuk kontrol yang lebih mendetail atas throttling permintaan.
Jika Anda membiarkan elemen <Identifier>
kosong, satu batas kapasitas akan diterapkan untuk semua permintaan
yang masuk ke proxy API tersebut.
Nilai Default | t/a |
Wajib? | Opsional |
Jenis | String |
Elemen Induk |
<SpikeArrest>
|
Elemen Turunan | Tidak ada |
Sintaksis
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Identifier ref="flow_variable"/> </SpikeArrest>
Contoh 1
Contoh berikut menerapkan kebijakan Penangkapan Spike per ID developer:
<SpikeArrest name="Spike-Arrest-1"> <Identifier ref="developer.id"/> <Rate>42pm</Rate/> </SpikeArrest>
Tabel berikut menjelaskan atribut <Identifier>
:
Atribut | Deskripsi | Default | Ketersediaan |
---|---|---|---|
ref |
Mengidentifikasi variabel yang digunakan Spike Arrest mengelompokkan permintaan masuk. Anda dapat menggunakan variabel flow apa pun untuk menunjukkan klien unik, seperti yang tersedia dengan kebijakan VerifyAPIKey. Anda juga dapat menetapkan variabel kustom menggunakan kebijakan JavaScript atau kebijakanAssignMessage. | t/a | Wajib |
Elemen ini juga dibahas dalam postingan Komunitas Apigee berikut: http://community.apigee.com/questions/2807/how-does-the-edge-quota-policy-work-when-no-identi.html.
<MessageWeight>
Menentukan pembobotan yang ditentukan untuk setiap pesan. Bobot pesan mengubah dampak satu permintaan pada penghitungan tingkat Penangkapan Spike. Bobot pesan dapat berupa variabel alur apa pun, seperti header HTTP, parameter kueri, parameter formulir, atau konten isi pesan. Anda juga dapat menggunakan variabel kustom menggunakan kebijakan JavaScript atau kebijakanAssignMessage.
Gunakan bersama dengan <Identifier>
untuk lebih membatasi permintaan oleh
klien atau aplikasi tertentu.
Misalnya, jika lonjakan <Rate>
adalah 10pm
, dan aplikasi mengirimkan
permintaan dengan bobot 2
, hanya lima pesan per menit yang diizinkan dari
klien tersebut karena setiap permintaan dihitung sebagai 2.
Nilai Default | t/a |
Wajib? | Opsional |
Jenis | Bilangan Bulat |
Elemen Induk |
<SpikeArrest>
|
Elemen Turunan | Tidak ada |
Sintaksis
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <MessageWeight ref="flow_variable"/> </SpikeArrest>
Contoh 1
Contoh berikut membatasi permintaan hingga 12 per menit (satu permintaan diizinkan setiap lima detik, atau 60/12):
<SpikeArrest name="Spike-Arrest-1"> <Rate>12pm</Rate> <Identifier ref="client_id" /> <MessageWeight ref="request.header.weight" /> </SpikeArrest>
Dalam contoh ini, <MessageWeight>
menerima nilai kustom (header weight
dalam permintaan) yang menyesuaikan bobot pesan untuk klien tertentu. Hal ini
memberikan kontrol tambahan atas throttling untuk entitas yang diidentifikasi dengan elemen
<Identifier>
.
Tabel berikut menjelaskan atribut <MessageWeight>
:
Atribut | Deskripsi | Ketersediaan | Default |
---|---|---|---|
ref |
Mengidentifikasi variabel flow yang berisi bobot pesan untuk klien tertentu. URL ini dapat berupa variabel alur apa pun, seperti parameter kueri HTTP, header, atau konten isi pesan. Untuk mengetahui informasi selengkapnya, lihat Referensi variabel flow. Anda juga dapat menetapkan variabel kustom menggunakan kebijakan JavaScript atau kebijakanAssignMessage. | Wajib | T/A |
<Rate>
Menentukan tingkat pembatasan lonjakan (atau burst) traffic dengan menetapkan jumlah
permintaan yang diizinkan dalam interval per menit atau per detik. Anda juga dapat menggunakan elemen ini bersamaan dengan <Identifier>
dan <MessageWeight>
untuk membatasi traffic dengan lancar pada runtime dengan menerima nilai dari klien.
Nilai Default | t/a |
Wajib? | Wajib |
Jenis | Bilangan Bulat |
Elemen Induk |
<SpikeArrest>
|
Elemen Turunan | Tidak ada |
Sintaksis
Anda dapat menentukan tarif dengan salah satu cara berikut:
- Tarif statis yang Anda tentukan sebagai isi elemen
<Rate>
- Nilai variabel, yang dapat diteruskan oleh klien; identifikasi
nama variabel flow menggunakan atribut
ref
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Rate ref="flow_variable">rate[pm|ps]</Rate> </SpikeArrest>
Nilai laju yang valid (baik ditetapkan sebagai nilai variabel atau dalam isi elemen) harus sesuai dengan format berikut:
intps
(jumlah permintaan per detik, diperhalus menjadi interval milidetik)intpm
(jumlah permintaan per menit, diperhalus menjadi interval detik)
Nilai int harus berupa bilangan bulat positif, bukan nol.
Contoh 1
Contoh berikut menetapkan kecepatan ke lima permintaan per detik:
<SpikeArrest name="Spike-Arrest-1"> <Rate>5ps</Rate> </SpikeArrest>
Kebijakan ini memperlancar kecepatan menjadi satu permintaan yang diizinkan setiap 200 milidetik (1.000/5).
Contoh 2
Contoh berikut menetapkan kecepatan ke 12 permintaan per menit:
<SpikeArrest name="Spike-Arrest-1"> <Rate>12pm</Rate> </SpikeArrest>
Kebijakan contoh ini memperlancar kecepatan menjadi satu permintaan yang diizinkan setiap lima detik (60/12).
Tabel berikut menjelaskan atribut <Rate>
:
Atribut | Deskripsi | Ketersediaan | Default |
---|---|---|---|
ref |
Mengidentifikasi variabel flow yang menentukan laju. String ini dapat berupa variabel alur apa pun, seperti parameter kueri HTTP, header, atau konten isi pesan, atau nilai seperti KVM. Untuk informasi selengkapnya, lihat Referensi variabel flow.
Anda juga dapat menggunakan variabel kustom menggunakan kebijakan JavaScript atau kebijakanAssignMessage. Jika Anda menentukan Contoh: <Rate ref="request.header.custom_rate">1pm</Rate> Dalam contoh ini, jika klien tidak meneruskan header "custom_rate", tarif untuk proxy API adalah 1 permintaan per menit untuk semua klien. Jika klien meneruskan header "custom_rate", batas kapasitas menjadi 10 permintaan per detik untuk semua klien di proxy — sampai permintaan tanpa header "custom_rate" dikirim. Anda dapat menggunakan Jika Anda menentukan nilai untuk |
Opsional | t/a |
<UseEffectiveCount>
Mendistribusikan jumlah Spike Arrest Anda di seluruh Message Processors (MP) saat menggunakan grup penskalaan otomatis.
Sintaksis
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <UseEffectiveCount>[false|true]</UseEffectiveCount> </SpikeArrest>
Contoh 1
Contoh berikut menetapkan <UseEffectiveCount>
ke benar (true):
<SpikeArrest name='Spike-Arrest-1'> <Rate>40ps</Rate> <UseEffectiveCount>true</UseEffectiveCount> </SpikeArrest>
Elemen <UseEffectiveCount>
bersifat opsional. Nilai defaultnya adalah false
jika elemen dihilangkan dari kebijakan Spike Arrest Anda.
Nilai Default | Salah |
Wajib? | Opsional |
Jenis | Boolean |
Elemen Induk |
<SpikeArrest>
|
Elemen Turunan | Tidak ada |
Tabel berikut menjelaskan atribut elemen <UseEffectiveCount>
:
Atribut | Deskripsi | Default | Ketersediaan |
---|---|---|---|
ref |
Mengidentifikasi variabel yang berisi nilai <UseEffectiveCount> . ID ini dapat berupa
variabel alur apa pun, seperti parameter kueri HTTP, header, atau konten isi pesan. Untuk mengetahui informasi selengkapnya, lihat Referensi variabel flow. Anda juga dapat menetapkan variabel kustom menggunakan kebijakan JavaScript atau kebijakanAssignMessage. |
t/a | Opsional |
Efek <UseEffectiveCount>
bergantung pada nilainya:
true
: Batas kecepatan lonjakan MP adalah<Rate>
dibagi jumlah MP saat ini dalam pod yang sama. Batas agregat adalah nilai<Rate>
. Saat MP ditambahkan (atau dihapus) secara dinamis, batas kapasitas lonjakan individual akan meningkat (atau menurun), tetapi batas agregat akan tetap sama.false
(ini adalah nilai default jika dihilangkan): Setiap batas kapasitas lonjakan MP hanyalah nilai<Rate>
-nya. Batas agregat adalah jumlah tarif semua MP. Saat MP ditambahkan (atau dihapus), batas kapasitas lonjakan individualnya akan tetap sama, tetapi batas gabungannya akan meningkat (atau menurun).
Tabel berikut menunjukkan efek <UseEffectiveCount>
pada batas kapasitas efektif setiap MP:
Nilai <UseEffectiveCount> |
||||||
---|---|---|---|---|---|---|
false |
false |
false |
true |
true |
true |
|
Jumlah anggota parlemen | 8 | 4 | 2 | 8 | 4 | 2 |
Nilai <Rate> |
10 | 10 | 10 | 40 | 40 | 40 |
Rasio Efektif per MP | 10 | 10 | 10 | 5 | 10 | 20 |
Batas Agregat | 80 | 40 | 20 | 40* | 40* | 40* |
* Sama seperti <Rate> . |
Dalam contoh ini, perhatikan bahwa jika jumlah MP diturunkan dari 4 menjadi 2, dan
<UseEffectiveCount>
adalah false
, rasio efektif per MP tetap sama (pada
10). Namun, jika <UseEffectiveCount>
adalah true
, laju efektif per MP akan berubah dari 10 menjadi 20 jika jumlah MP diturunkan dari 4 menjadi 2.
Variabel alur
Saat kebijakan Spike Arrest dijalankan, variabel flow berikut akan diisi:
Variabel | Jenis | Izin | Deskripsi |
---|---|---|---|
ratelimit.policy_name.failed |
Boolean | Hanya Baca | Menunjukkan apakah kebijakan gagal atau tidak (true atau
false ). |
Untuk informasi selengkapnya, lihat Referensi variabel flow.
Referensi error
Bagian ini menjelaskan kode kesalahan dan pesan error yang ditampilkan serta variabel kesalahan yang disetel oleh Edge saat kebijakan ini memicu error. Informasi ini penting untuk diketahui apakah Anda mengembangkan aturan kesalahan untuk menangani kesalahan. Untuk mempelajari lebih lanjut, lihat Yang perlu Anda ketahui tentang error kebijakan dan Menangani kesalahan.
Error runtime
Error ini dapat terjadi saat kebijakan dieksekusi.
Kode kesalahan | Status HTTP | Penyebab | Perbaiki |
---|---|---|---|
policies.ratelimit.FailedToResolveSpikeArrestRate |
500 |
Error ini terjadi jika referensi ke variabel yang berisi setelan tarif dalam elemen <Rate> tidak dapat diselesaikan menjadi nilai dalam kebijakan Penanggulangan Spike. Elemen ini bersifat wajib dan digunakan untuk menentukan rasio penangkapan lonjakan dalam bentuk intpm atau intps . |
build |
policies.ratelimit.InvalidMessageWeight |
500 |
Error ini terjadi jika nilai yang ditentukan untuk elemen <MessageWeight> melalui
variabel flow tidak valid (nilai non-bilangan bulat). |
build |
policies.ratelimit.SpikeArrestViolation |
429 |
Batas kapasitas terlampaui. |
Error saat deployment
Error ini dapat terjadi saat Anda men-deploy proxy yang berisi kebijakan ini.
Nama error | Penyebab | Perbaiki |
---|---|---|
InvalidAllowedRate |
Jika tingkat penangkapan lonjakan yang ditentukan dalam elemen <Rate> Kebijakan Penangkapan Spike tidak berupa bilangan bulat atau jika tarif tidak memiliki ps atau pm sebagai akhiran, deployment proxy API akan gagal. |
build |
Variabel kesalahan
Variabel ini ditetapkan saat terjadi error runtime. Untuk informasi selengkapnya, lihat Yang perlu Anda ketahui tentang error kebijakan.
Variabel | Dari mana | Contoh |
---|---|---|
fault.name="fault_name" |
fault_name adalah nama kesalahannya, seperti yang tercantum dalam tabel Error runtime di atas. Nama kesalahan adalah bagian terakhir dari kode kesalahan. | fault.name Matches "SpikeArrestViolation" |
ratelimit.policy_name.failed |
policy_name adalah nama kebijakan yang ditentukan pengguna yang menampilkan kesalahan. | ratelimit.SA-SpikeArrestPolicy.failed = true |
Contoh respons error
Berikut adalah contoh respons error:
{ "fault":{ "detail":{ "errorcode":"policies.ratelimit.SpikeArrestViolation" }, "faultstring":"Spike arrest violation. Allowed rate : 10ps" } }
Contoh aturan kesalahan
Berikut adalah contoh aturan kesalahan untuk menangani kesalahan SpikeArrestViolation
:
<FaultRules> <FaultRule name="Spike Arrest Errors"> <Step> <Name>JavaScript-1</Name> <Condition>(fault.name Matches "SpikeArrestViolation") </Condition> </Step> <Condition>ratelimit.Spike-Arrest-1.failed=true</Condition> </FaultRule> </FaultRules>
Kode status HTTP saat ini untuk melebihi batas kapasitas yang ditetapkan oleh kebijakan Kuota atau Penangkapan Lonjakan adalah 429
(Terlalu Banyak Permintaan). Untuk mengubah kode status HTTP menjadi 500
(Error Server Internal), tetapkan
properti features.isHTTPStatusTooManyRequestEnabled
ke false
menggunakan
API
Perbarui properti organisasi.
Contoh:
curl -u email:password -X POST -H "Content-type:application/xml" http://api.enterprise.apigee.com/v1/organizations/myorg -d \ "<Organization type="trial" name="MyOrganization"> <Properties> <Property name="features.isHTTPStatusTooManyRequestEnabled">true</Property> . . . </Properties> </Organization>"
Skema
Setiap jenis kebijakan ditentukan oleh skema XML (.xsd
). Sebagai referensi, skema kebijakan tersedia di GitHub.
Topik terkait
- Kebijakan kuota: Kebijakan kuota, untuk membatasi traffic pada masing-masing klien
- Pembatasan kapasitas untuk ringkasan pembatasan kapasitas
- Membandingkan Kebijakan Kuota dan SpikeArrest
- Contoh proxy API yang berfungsi