Anda sedang melihat dokumentasi Apigee Edge.
Buka
dokumentasi Apigee X. info
Edge Microgateway v. 3.1.x
Audiens
Topik ini ditujukan bagi operator Edge Microgateway yang ingin menggunakan plugin yang sudah ada yang diinstal dengan microgateway. Bagian ini juga membahas penangkapan lonjakan dan plugin kuota secara mendetail (keduanya disertakan dengan penginstalan). Jika Anda adalah developer yang ingin mengembangkan plugin baru, baca Mengembangkan plugin kustom.
Apa itu plugin Edge Microgateway?
Plugin adalah modul Node.js yang menambahkan fungsi ke Edge Microgateway. Modul plugin mengikuti pola yang konsisten dan disimpan di lokasi yang dikenal oleh Edge Microgateway, sehingga microgateway dapat menemukan dan memuatnya secara otomatis. Edge Microgateway menyertakan beberapa plugin yang sudah ada, dan Anda juga dapat membuat plugin kustom, seperti yang dijelaskan dalam Mengembangkan plugin kustom.
Plugin yang sudah ada yang dipaketkan dengan Edge Microgateway
Beberapa plugin yang ada disediakan dengan Edge Microgateway saat penginstalan. Fitur ini mencakup:
Pengaya | Diaktifkan secara default | Deskripsi |
---|---|---|
analytics | Ya | Mengirim data analisis dari Edge Microgateway ke Apigee Edge. |
oauth | Ya | Menambahkan token OAuth dan validasi Kunci API ke Edge Microgateway. Lihat Menyiapkan dan mengonfigurasi Edge Microgateway. |
kuota | Tidak | Menerapkan kuota pada permintaan ke Edge Microgateway. Menggunakan Apigee Edge untuk menyimpan dan mengelola kuota. Lihat Menggunakan plugin kuota. |
spikearrest | Tidak | Melindungi dari lonjakan traffic dan serangan DoS. Lihat Menggunakan plugin lonjakan penangkapan. |
header-huruf besar | Tidak | Contoh proxy yang dikomentari, yang dimaksudkan sebagai panduan untuk membantu developer menulis plugin kustom. Lihat contoh plugin Edge Microgateway. |
akumulasi permintaan | Tidak | Mengumpulkan data permintaan ke dalam satu objek sebelum meneruskan data ke pengendali berikutnya dalam rantai plugin. Berguna untuk menulis plugin transformasi yang perlu beroperasi pada satu objek konten permintaan yang terakumulasi. |
akumulasi-respons | Tidak | Mengumpulkan data respons ke dalam satu objek sebelum meneruskan data ke pengendali berikutnya dalam rantai plugin. Berguna untuk menulis plugin transformasi yang perlu beroperasi pada satu objek konten respons yang terakumulasi. |
transformasi huruf besar | Tidak | Mentransformasi data permintaan atau respons. Plugin ini mewakili penerapan praktik terbaik dari plugin transformasi. Plugin contoh ini melakukan transformasi sederhana (mengonversi data permintaan atau respons ke huruf besar); tetapi dapat dengan mudah disesuaikan untuk melakukan jenis transformasi lain, seperti XML ke JSON. |
json2xm | Tidak | Mentransformasi data permintaan atau respons berdasarkan header jenis konten atau penerimaan. Untuk mengetahui detailnya, lihat dokumentasi plugin di GitHub. |
quota-memory | Tidak | Menerapkan kuota pada permintaan ke Edge Microgateway. Menyimpan dan mengelola kuota di memori lokal. |
healthcheck | Tidak | Menampilkan informasi tentang proses Edge Microgateway -- penggunaan memori, penggunaan CPU, dll. Untuk menggunakan plugin ini, panggil URL /healthcheck pada instance Edge Microgateway Anda. Plugin ini dimaksudkan sebagai contoh yang dapat Anda gunakan untuk menerapkan plugin health check Anda sendiri. |
Tempat menemukan plugin yang ada
Plugin yang sudah ada yang dipaketkan dengan Edge Microgateway terletak di sini, dengan [prefix]
adalah direktori awalan npm
. Lihat
Di mana Edge Microgateway diinstal jika Anda tidak dapat menemukan direktori ini.
[prefix]/lib/node_modules/edgemicro/node_modules/microgateway-plugins
Menambahkan dan mengonfigurasi plugin
Ikuti pola ini untuk menambahkan dan mengonfigurasi plugin:
- Hentikan Edge Microgateway.
- Buka file konfigurasi Edge Microgateway. Untuk mengetahui detailnya, lihat Membuat perubahan konfigurasi untuk mengetahui opsi yang tersedia.
- Tambahkan plugin ke elemen
plugins:sequence
file konfigurasi, seperti berikut. Plugin dijalankan sesuai urutan kemunculannya dalam daftar ini.
edgemicro: home: ../gateway port: 8000 max_connections: -1 max_connections_hard: -1 logging: level: info dir: /var/tmp stats_log_interval: 60 plugins: dir: ../plugins sequence: - oauth - plugin-name
- Mengonfigurasi plugin. Beberapa plugin memiliki parameter opsional yang dapat Anda konfigurasi di file konfigurasi. Misalnya, Anda dapat menambahkan stanza berikut untuk mengonfigurasi plugin lonjakan penangkapan. Lihat Menggunakan plugin lonjakan penangkapan
untuk informasi selengkapnya.
edgemicro: home: ../gateway port: 8000 max_connections: -1 max_connections_hard: -1 logging: level: info dir: /var/tmp stats_log_interval: 60 plugins: dir: ../plugins sequence: - oauth - spikearrest spikearrest: timeUnit: minute allow: 10
- Simpan file.
- Mulai ulang atau muat ulang Edge Microgateway, bergantung pada file konfigurasi yang Anda edit.
Konfigurasi khusus plugin
Anda dapat mengganti parameter plugin yang ditentukan dalam file konfigurasi dengan membuat konfigurasi khusus plugin di direktori ini:
[prefix]/lib/node_modules/edgemicro/node_modules/microgateway-plugins/config
dengan [prefix]
adalah direktori awalan npm
. Lihat
Di mana Edge Microgateway diinstal jika Anda tidak dapat menemukan direktori ini.
plugins/<plugin_name>/config/default.yaml
. Misalnya, Anda dapat menempatkan blok ini di plugins/spikearrest/config/default.yaml
, dan blok tersebut akan menggantikan setelan konfigurasi lainnya.
spikearrest: timeUnit: hour allow: 10000 buffersize: 0
Menggunakan plugin lonjakan penangkapan
Plugin penangkapan lonjakan traffic memberikan perlindungan dari lonjakan traffic. Aturan ini men-throttle jumlah permintaan yang diproses oleh instance Edge Microgateway.
Menambahkan plugin lonjakan penangkapan
Lihat Menambahkan dan mengonfigurasi plugin.
Contoh konfigurasi untuk penangkapan lonjakan
edgemicro: home: ../gateway port: 8000 max_connections: -1 max_connections_hard: -1 logging: level: info dir: /var/tmp stats_log_interval: 60 plugins: dir: ../plugins sequence: - oauth - spikearrest spikearrest: timeUnit: minute allow: 10 bufferSize: 5
Opsi konfigurasi untuk penangkapan lonjakan
- timeUnit: Seberapa sering jendela eksekusi penangkapan lonjakan direset. Nilai yang valid adalah detik atau menit.
- allow: Jumlah maksimum permintaan yang diizinkan selama timeUnit. Lihat juga Jika Anda menjalankan beberapa proses Edge Micro.
- bufferSize: (opsional, default = 0) jika bufferSize > 0, penangkapan lonjakan akan menyimpan jumlah permintaan ini dalam buffer. Segera setelah "jendela" eksekusi berikutnya terjadi, permintaan yang di-buffer akan diproses terlebih dahulu. Lihat juga Menambahkan buffer.
Bagaimana cara kerja penangkapan lonjakan?
Anggap penangkapan lonjakan sebagai cara untuk melindungi dari lonjakan traffic secara umum, bukan sebagai cara untuk membatasi traffic ke jumlah permintaan tertentu. API dan backend Anda dapat menangani jumlah traffic tertentu, dan kebijakan penangkapan lonjakan membantu Anda memperlancar traffic ke jumlah umum yang Anda inginkan.
Perilaku penghentian lonjakan runtime berbeda dengan yang mungkin Anda lihat dari nilai literal per menit atau per detik yang Anda masukkan.
Misalnya, Anda menentukan tarif 30 permintaan per menit, seperti ini:
spikearrest: timeUnit: minute allow: 30
Dalam pengujian, Anda mungkin berpikir bahwa Anda dapat mengirim 30 permintaan dalam waktu 1 detik, asalkan permintaan tersebut muncul dalam satu menit. Namun itu bukanlah cara kebijakan menerapkan setelan. Jika Anda memikirkannya, 30 permintaan dalam periode 1 detik dapat dianggap sebagai lonjakan mini di beberapa lingkungan.
Lalu apa yang sebenarnya terjadi? Untuk mencegah perilaku seperti lonjakan, penangkapan lonjakan akan memperhalus traffic yang diizinkan dengan membagi setelan Anda menjadi beberapa interval yang lebih kecil, seperti berikut:
Tarif per menit
Tarif per menit diperhalus menjadi interval detik yang diizinkan untuk permintaan. Misalnya, 30 permintaan per menit akan dihaluskan seperti ini:
60 detik (1 menit) / 30 = interval 2 detik, atau sekitar 1 permintaan diizinkan setiap 2 detik. Permintaan kedua dalam waktu 2 detik akan gagal. Selain itu, permintaan ke-31 dalam satu menit akan gagal.
Tarif per detik
Tarif per detik diperhalus menjadi permintaan yang diizinkan dalam interval milidetik. Misalnya, 10 permintaan/detik akan dihaluskan seperti ini:
1.000 milidetik (1 detik) / 10 = interval 100 milidetik, atau sekitar 1 permintaan diizinkan setiap 100 milidetik. Permintaan kedua dalam waktu 100 md akan gagal. Selain itu, permintaan ke-11 dalam satu detik akan gagal.
Saat batas terlampaui
Jika jumlah permintaan melebihi batas dalam interval waktu yang ditentukan, penangkapan lonjakan akan menampilkan pesan error ini dengan status HTTP 503:
{"error": "spike arrest policy violated"}
Menambahkan buffering
Anda memiliki opsi untuk menambahkan buffering ke kebijakan. Katakanlah Anda menetapkan buffer ke 10. Anda akan melihat bahwa API tidak langsung menampilkan error saat batas penangkapan lonjakan terlampaui. Sebagai gantinya, permintaan akan di-buffer (hingga jumlah yang ditentukan), dan permintaan yang di-buffer akan diproses segera setelah jendela eksekusi berikutnya yang sesuai tersedia. bufferSize default-nya adalah 0.
Jika Anda menjalankan beberapa proses Edge Micro
Jumlah permintaan yang diizinkan bergantung pada jumlah proses pekerja Edge Micro yang sedang
berjalan. Penahanan lonjakan menghitung jumlah permintaan yang diizinkan per proses pekerja. Secara default,
jumlah proses Edge Micro sama dengan jumlah CPU di mesin tempat Edge Micro
diinstal. Namun, Anda dapat mengonfigurasi jumlah proses pekerja saat memulai Edge Micro
menggunakan opsi --processes
pada perintah start
. Misalnya, jika Anda ingin penangkapan lonjakan dipicu pada 100 permintaan dalam jangka waktu tertentu, dan jika Anda memulai Edge Microgateway dengan opsi --processes 4
, tetapkan allow: 25
dalam konfigurasi penangkapan lonjakan. Singkatnya, aturan praktisnya adalah menetapkan parameter konfigurasi allow
ke nilai "jumlah penangkapan lonjakan yang diinginkan / jumlah proses".
Menggunakan plugin kuota
Kuota menentukan jumlah pesan permintaan yang diizinkan untuk dikirim oleh aplikasi ke API selama satu jam, hari, minggu, atau bulan. Jika aplikasi mencapai batas kuota, panggilan API berikutnya akan ditolak. Lihat juga Apa perbedaan antara penangkapan lonjakan dan kuota?.
Menambahkan plugin kuota
Lihat Menambahkan dan mengonfigurasi plugin.
Konfigurasi produk di Apigee Edge
Anda mengonfigurasi kuota di UI Apigee Edge tempat Anda mengonfigurasi produk API. Anda perlu mengetahui produk mana yang berisi proxy microgateway-aware yang ingin dibatasi dengan kuota. Produk ini harus ditambahkan ke aplikasi developer. Saat Anda melakukan panggilan API yang diautentikasi menggunakan kunci di aplikasi developer, kuota akan diterapkan ke panggilan API tersebut.
- Login ke akun organisasi Apigee Edge Anda.
- Di UI Edge, buka produk yang terkait dengan microgateway-aware proxy tempat Anda ingin menerapkan kuota.
- Di UI, pilih Products dari menu Publish.
- Buka produk yang berisi API tempat Anda ingin menerapkan kuota.
- Klik Edit.
- Di kolom Quota, tentukan interval kuota. Misalnya, 100 permintaan setiap
satu menit. Atau 50.000 permintaan setiap 2 jam.
- Klik Simpan.
- Pastikan produk ditambahkan ke aplikasi developer. Anda memerlukan kunci dari aplikasi ini untuk melakukan panggilan API yang diautentikasi.
Contoh konfigurasi untuk kuota
edgemicro: home: ../gateway port: 8000 max_connections: -1 max_connections_hard: -1 logging: level: info dir: /var/tmp stats_log_interval: 60 plugins: dir: ../plugins sequence: - oauth - quota
Opsi konfigurasi untuk kuota
Untuk mengonfigurasi plugin kuota, tambahkan elemen quotas
ke file konfigurasi Anda,
seperti yang ditunjukkan pada contoh berikut:
edgemicro: home: ../gateway port: 8000 max_connections: -1 max_connections_hard: -1 logging: level: info dir: /var/tmp stats_log_interval: 60 plugins: dir: ../plugins sequence: - oauth - quota quotas: bufferSize: hour: 20000 minute: 500 month: 1 default: 10000 useDebugMpId: true failOpen: true ...
Opsi | Deskripsi |
---|---|
buffersize |
(Bilangan bulat) Ukuran buffer yang akan ditetapkan untuk interval waktu yang ditentukan. Unit waktu
yang diizinkan mencakup: hour , minute , day ,
week , month , dan default . |
failOpen |
Saat fitur ini diaktifkan, jika terjadi error pemrosesan kuota atau jika permintaan "kuota berlaku" ke Edge gagal memperbarui penghitung kuota jarak jauh, kuota akan diproses berdasarkan jumlah lokal hanya hingga sinkronisasi kuota jarak jauh berikutnya yang berhasil dilakukan. Dalam kedua kasus ini, flag quota-failed-open ditetapkan dalam objek permintaan.
Untuk mengaktifkan fitur kuota "gagal dibuka", tetapkan konfigurasi berikut: edgemicro: ... quotas: failOpen: true... |
useDebugMpId |
Setel flag ini ke true untuk mengaktifkan logging ID MP (pemroses pesan) dalam respons kuota.
Untuk menggunakan fitur ini, Anda harus menetapkan konfigurasi berikut: edgemicro: ... quotas: useDebugMpId: true ...
Jika { "allowed": 20, "used": 3, "exceeded": 0, "available": 17, "expiryTime": 1570748640000, "timestamp": 1570748580323, "debugMpId": "6a12dd72-5c8a-4d39-b51d-2c64f953de6a" } |
useRedis |
Jika disetel ke true , plugin akan menggunakan Redis untuk penyimpanan pendukung kuota.
Untuk mengetahui detailnya, lihat Menggunakan backing store Redis untuk kuota. |
Menggunakan backup store Redis untuk kuota
Untuk menggunakan backing store Redis untuk kuota, gunakan konfigurasi yang sama dengan yang digunakan untuk fitur Sinkronisasi. Berikut adalah konfigurasi dasar yang diperlukan agar dapat menggunakan Redis untuk penyimpanan kuota:
edgemicro: redisHost: localhost redisPort: 6379 redisDb: 2 redisPassword: codemaster quotas: useRedis: trueUntuk mengetahui detail tentang parameter
edgemicro.redis*
, lihat Menggunakan sinkronisasi.
Menguji plugin kuota
Jika kuota terlampaui, status HTTP 403 akan ditampilkan ke klien, bersama dengan pesan berikut:
{"error": "exceeded quota"}
Apa perbedaan antara penangkapan lonjakan dan kuota?
Penting untuk memilih alat yang tepat untuk pekerjaan yang ada. Kebijakan kuota mengonfigurasi jumlah pesan permintaan yang diizinkan untuk dikirim oleh aplikasi klien ke API selama satu jam, hari, minggu, atau bulan. Kebijakan kuota memberlakukan batas konsumsi pada aplikasi klien dengan mempertahankan penghitung terdistribusi yang menghitung permintaan masuk.
Gunakan kebijakan kuota untuk menerapkan kontrak bisnis atau SLA dengan developer dan partner, bukan untuk pengelolaan traffic operasional. Misalnya, kuota dapat digunakan untuk membatasi traffic untuk layanan gratis, sekaligus memungkinkan akses penuh untuk pelanggan yang membayar.
Gunakan penangkapan lonjakan untuk melindungi dari lonjakan tiba-tiba dalam traffic API. Biasanya, penangkapan lonjakan digunakan untuk mencegah kemungkinan DDoS atau serangan berbahaya lainnya.