Pembatasan permintaan lanjutan dengan Azure API Management

BERLAKU UNTUK: Semua tingkatAN API Management

Mampu membatasi permintaan masuk adalah peran kunci dari Azure API Management. Baik dengan mengontrol laju permintaan atau total permintaan/data yang ditransfer, API Management memungkinkan penyedia API untuk melindungi API mereka dari penyalahgunaan dan membuat nilai untuk tingkat produk API yang berbeda.

Batas laju dan kuota

Batas laju dan kuota digunakan untuk tujuan yang berbeda.

Batas tarif

Batas angka permintaan biasanya digunakan untuk melindungi dari ledakan volume yang singkat dan intens. Misalnya, jika Anda tahu layanan backend Anda memiliki penyempitan di databasenya dengan volume panggilan tinggi, Anda dapat menetapkan kebijakan rate-limit-by-key untuk tidak mengizinkan volume panggilan tinggi dengan menggunakan pengaturan ini.

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.

Kuota

Kuota biasanya digunakan untuk mengontrol frekuensi panggilan untuk jangka waktu yang lebih lama. Misalnya, kuota dapat mengatur jumlah total panggilan yang dapat dilakukan pelanggan tertentu dalam bulan tertentu. Untuk memonetisasi API Anda, kuota juga dapat diatur secara berbeda untuk langganan berbasis tingkat. Misalnya, langganan tingkat Dasar mungkin dapat melakukan tidak lebih dari 10.000 panggilan sebulan tetapi tingkat Premium bisa naik hingga 100.000.000 panggilan setiap bulan.

Dalam Azure API Management, batas laju biasanya disebarluaskan lebih cepat di seluruh node untuk melindungi dari lonjakan. Sebaliknya, informasi kuota penggunaan digunakan dalam jangka panjang dan karenanya implementasinya berbeda.

Catatan

Saat sumber daya komputasi yang mendasarinya dimulai ulang di platform layanan, API Management dapat terus menangani permintaan untuk waktu yang singkat setelah kuota tercapai.

Pembatasan berbasis produk

Kemampuan pembatasan laju yang dicakup untuk langganan tertentu berguna bagi penyedia API untuk menerapkan batasan pada pengembang yang telah mendaftar untuk menggunakan API mereka. Namun, itu tidak membantu, misalnya, dalam pembatasan masing-masing pengguna akhir API. Dimungkinkan bagi satu pengguna aplikasi pengembang untuk mengkonsumsi seluruh kuota dan kemudian mencegah pelanggan pengembang lainnya untuk dapat menggunakan aplikasi tersebut. Selain itu, beberapa pelanggan yang mungkin menghasilkan volume permintaan yang tinggi dapat membatasi akses ke pengguna sesekali.

Pembatasan berbasis kunci kustom

Catatan

Kebijakan rate-limit-by-key dan quota-by-key tidak tersedia saat berada di tingkat Konsumsi Azure API Management. Kebijakan quota-by-key ini juga saat ini tidak tersedia di tingkat v2.

Kebijakan rate-limit-by-key dan quota-by-key memberikan solusi yang lebih fleksibel untuk kontrol lalu lintas. Kebijakan ini memungkinkan Anda menentukan ekspresi untuk mengidentifikasi kunci yang digunakan untuk melacak penggunaan lalu lintas. Cara kerja ini paling mudah diilustrasikan dengan sebuah contoh.

Pembatasan alamat IP

Kebijakan berikut membatasi satu alamat IP klien hanya untuk 10 panggilan setiap menit, dengan total 1.000.000 panggilan dan 10.000 kilobyte bandwidth per bulan.

<rate-limit-by-key  calls="10"
          renewal-period="60"
          counter-key="@(context.Request.IpAddress)" />

<quota-by-key calls="1000000"
          bandwidth="10000"
          renewal-period="2629800"
          counter-key="@(context.Request.IpAddress)" />

Jika semua klien di Internet menggunakan alamat IP yang unik, ini mungkin cara yang efektif untuk membatasi penggunaan oleh pengguna. Namun, kemungkinan beberapa pengguna berbagi satu alamat IP publik karena mereka mengakses Internet melalui perangkat NAT. Meskipun demikian, untuk API yang memungkinkan akses tidak terautentikasi, IpAddress mungkin menjadi pilihan terbaik.

Pembatasan identitas pengguna

Jika pengguna akhir diautentikasi, maka kunci pembatasan dapat dibuat berdasarkan informasi yang secara unik mengidentifikasi pengguna tersebut.

<rate-limit-by-key calls="10"
    renewal-period="60"
    counter-key="@(context.Request.Headers.GetValueOrDefault("Authorization","").AsJwt()?.Subject)" />

Contoh ini menunjukkan cara mengekstrak header Otorisasi, mengonversinya menjadi objek JWT dan menggunakan subjek token untuk mengidentifikasi pengguna dan menggunakannya sebagai kunci pembatasan laju. Jika identitas pengguna disimpan di JWT sebagai salah satu klaim lainnya, maka nilai itu dapat digunakan sebagai gantinya.

Kebijakan gabungan

Meskipun kebijakan pembatasan berbasis pengguna memberikan kontrol lebih dari kebijakan pembatasan berbasis langganan, masih ada nilai yang menggabungkan kedua kemampuan tersebut. Pembatasan berdasarkan kunci langganan produk (Membatasi laju panggilan berdasarkan langganan dan Menetapkan kuota penggunaan berdasarkan langganan) adalah cara yang bagus untuk mengaktifkan monetisasi API dengan membebankan biaya berdasarkan tingkat penggunaan. Kontrol yang lebih baik untuk dapat membatasi berdasarkan pengguna adalah pelengkap dan pencegah perilaku satu pengguna dari merendahkan pengalaman pengguna lain.

Pembatasan yang digerakkan klien

Ketika kunci pembatasan didefinisikan menggunakan ekspresi kebijakan, maka penyedia APIlah yang memilih bagaimana pembatasan dicakup. Namun, pengembang mungkin ingin mengontrol bagaimana mereka membatasi laju pelanggan mereka sendiri. Ini dapat diaktifkan oleh penyedia API dengan memperkenalkan header kustom untuk memungkinkan aplikasi klien pengembang untuk mengkomunikasikan kunci ke API.

<rate-limit-by-key calls="100"
          renewal-period="60"
          counter-key="@(request.Headers.GetValueOrDefault("Rate-Key",""))"/>

Ini memungkinkan aplikasi klien pengembang untuk memilih bagaimana mereka ingin membuat kunci pembatasan laju. Pengembang klien dapat membuat tingkat laju mereka sendiri dengan mengalokasikan set kunci kepada pengguna dan memutar penggunaan kunci.

Ringkasan

Azure API Management menyediakan pembatasan laju dan kuota untuk melindungi dan menambah nilai pada layanan API Anda. Kebijakan pembatasan baru dengan aturan pelingkupan khusus memungkinkan Anda mengontrol kebijakan tersebut dengan lebih baik untuk memungkinkan pelanggan Anda membangun aplikasi yang lebih baik. Contoh dalam artikel ini menunjukkan penggunaan kebijakan baru ini dengan membuat kunci pembatas laju dengan alamat IP klien, identitas pengguna, dan nilai yang dihasilkan klien. Namun, ada banyak bagian lain dari pesan yang dapat digunakan seperti agen pengguna, fragmen jalur URL, ukuran pesan.

Langkah berikutnya

Silakan beri kami umpan balik Anda sebagai masalah GitHub untuk topik ini. Akan sangat menyenangkan mendengar tentang nilai-nilai kunci potensial lainnya yang telah menjadi pilihan logis dalam skenario Anda.