Anti-pola: Mengonfigurasi kuota yang tidak didistribusikan

Anda sedang melihat dokumentasi Apigee dan Apigee Hybrid.
Lihat dokumentasi Apigee Edge.

Apigee menyediakan kemampuan untuk mengonfigurasi jumlah permintaan yang diizinkan ke Proxy API selama jangka waktu tertentu menggunakan Kebijakan kuota.

Antipola

Permintaan proxy API dapat dilayani oleh satu atau beberapa komponen Apigee terdistribusi yang disebut Pemroses Pesan. Jika ada beberapa Pemroses Pesan yang dikonfigurasi untuk melayani permintaan API, kuota kemungkinan akan terlampaui karena setiap Pemroses Pesan menyimpan "jumlah" permintaannya sendiri yang diproses.

Mari kita jelaskan ini dengan bantuan contoh. Pertimbangkan Kebijakan kuota berikut untuk proxy API:

<!-- /antipatterns/examples/1-6.xml -->
<Quota name="CheckTrafficQuota">
  <Interval>1</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="100"/>
</Quota>

Konfigurasi di atas akan memungkinkan total 100 permintaan per jam.

Namun dalam praktiknya, saat beberapa pemroses pesan melayani permintaan API, hal berikut akan terjadi:

Ditentukan Nanti

Dalam ilustrasi di atas:

  • Kebijakan kuota dikonfigurasi untuk mengizinkan 100 permintaan per jam.
  • Permintaan ke Proxy API dilayani oleh dua Pemroses Pesan.
  • Setiap Pemroses Pesan mempertahankan variabel jumlah kuotanya sendiri, quota_count_mp1 dan quota_count_mp2, untuk melacak jumlah permintaan yang sedang diproses.
  • Oleh karena itu, setiap Pemroses Pesan akan mengizinkan 100 permintaan API secara terpisah. Efek akhirnya adalah total 200 permintaan diproses, bukan 100 permintaan.

Dampak

Situasi ini menggagalkan tujuan konfigurasi kuota dan dapat memiliki efek yang merugikan pada server backend yang melayani permintaan.

Server backend dapat:

  • Stres karena traffic masuk yang lebih tinggi dari yang diperkirakan
  • Menjadi tidak responsif terhadap permintaan API baru yang menyebabkan error 503

Praktik Terbaik

Pertimbangkan untuk menyetel elemen <Distributed> ke true dalam Kebijakan kuota guna memastikan bahwa penghitung umum digunakan untuk melacak permintaan API di semua Pemroses Pesan. Elemen <Distributed> dapat ditetapkan seperti yang ditunjukkan dalam cuplikan kode di bawah ini:

<!-- /antipatterns/examples/1-7.xml -->
<Quota name="CheckTrafficQuota">
  <Interval>1</Interval>
  <TimeUnit>hour</TimeUnit>
  <Distributed>true</Distributed>
  <Allow count="100"/>
</Quota>