Menggunakan plugin

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. Plugin ini juga membahas plugin pembatasan lonjakan dan kuota secara mendetail (keduanya disertakan dengan penginstalan). Jika Anda adalah developer yang ingin mengembangkan plugin baru, lihat Mengembangkan plugin kustom.

Apa yang dimaksud dengan 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 diketahui 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 ada yang disertakan dengan Edge Microgateway

Beberapa plugin yang ada disediakan dengan Edge Microgateway saat penginstalan. Hal ini mencakup:

Plugin Diaktifkan secara default Deskripsi
analytics Ya Mengirim data analisis dari Edge Microgateway ke Apigee Edge.
oauth Ya Menambahkan validasi token OAuth dan 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 penahanan lonjakan.
header-uppercase Tidak Contoh proxy yang diberi komentar, yang dimaksudkan sebagai panduan untuk membantu developer menulis plugin kustom. Lihat Contoh plugin Edge Microgateway.
accumulate-request Tidak Mengumpulkan data permintaan ke dalam satu objek sebelum meneruskan data ke handler berikutnya dalam rantai plugin. Berguna untuk menulis plugin transformasi yang perlu beroperasi pada satu objek konten permintaan yang terakumulasi.
accumulate-response Tidak Mengumpulkan data respons ke dalam satu objek sebelum meneruskan data ke handler berikutnya dalam rangkaian plugin. Berguna untuk menulis plugin transformasi yang perlu beroperasi pada satu objek konten respons yang terakumulasi.
transform-uppercase Tidak Mentransformasi data permintaan atau respons. Plugin ini merepresentasikan praktik terbaik implementasi plugin transformasi. Contoh plugin melakukan transformasi sepele (mengonversi data permintaan atau respons menjadi huruf besar); namun, plugin ini dapat dengan mudah diadaptasi untuk melakukan jenis transformasi lain, seperti XML ke JSON.
json2xml Tidak Mentransformasi data permintaan atau respons berdasarkan header accept atau content-type. Untuk 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, panggil URL /healthcheck di instance Edge Microgateway Anda. Plugin ini dimaksudkan sebagai contoh yang dapat Anda gunakan untuk menerapkan plugin pemeriksaan kondisi Anda sendiri.

Tempat menemukan plugin yang ada

Plugin yang ada dan dibundel 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:

  1. Hentikan Edge Microgateway.
  2. Buka file konfigurasi Edge Microgateway. Untuk mengetahui detailnya, lihat Melakukan perubahan konfigurasi untuk opsi.
  3. 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
  1. Konfigurasi plugin. Beberapa plugin memiliki parameter opsional yang dapat Anda konfigurasi di file konfigurasi. Misalnya, Anda dapat menambahkan stanza berikut untuk mengonfigurasi plugin spike arrest. Lihat Menggunakan plugin penahan lonjakan untuk mengetahui 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
  1. Simpan file.
  2. 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 ini akan menggantikan setelan konfigurasi lainnya.

spikearrest:
   timeUnit: hour   
   allow: 10000   
   buffersize: 0

Menggunakan plugin peredam lonjakan

Plugin penahan lonjakan melindungi dari lonjakan traffic. Kebijakan ini membatasi jumlah permintaan yang diproses oleh instance Edge Microgateway.

Menambahkan plugin penahan lonjakan

Lihat Menambahkan dan mengonfigurasi plugin.

Contoh konfigurasi untuk penahanan 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 penahanan lonjakan

  • timeUnit: Seberapa sering periode eksekusi penahanan 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, spike arrest menyimpan jumlah permintaan ini dalam buffer. Segera setelah "periode" eksekusi berikutnya terjadi, permintaan yang di-buffer akan diproses terlebih dahulu. Lihat juga Menambahkan buffer.

Bagaimana cara kerja penekanan lonjakan?

Anggap saja penahanan lonjakan sebagai cara untuk melindungi secara umum dari lonjakan traffic, bukan sebagai cara untuk membatasi traffic ke sejumlah permintaan tertentu. API dan backend Anda dapat menangani jumlah traffic tertentu, dan kebijakan penahanan lonjakan membantu Anda memperlancar traffic ke jumlah umum yang Anda inginkan.

Perilaku penahanan lonjakan runtime berbeda dari yang mungkin Anda harapkan dari nilai per menit atau per detik literal yang Anda masukkan.

Misalnya, Anda menentukan kapasitas 30 permintaan per menit, seperti ini:

spikearrest:
   timeUnit: minute
   allow: 30

Saat pengujian, Anda mungkin berpikir bahwa Anda dapat mengirim 30 permintaan dalam 1 detik, selama permintaan tersebut masuk dalam satu menit. Namun, kebijakan tidak menerapkan setelan dengan cara tersebut. Jika dipikir-pikir, 30 permintaan dalam periode 1 detik dapat dianggap sebagai lonjakan kecil di beberapa lingkungan.

Lalu, apa yang sebenarnya terjadi? Untuk mencegah perilaku seperti lonjakan, penahanan lonjakan memperlancar traffic yang diizinkan dengan membagi setelan Anda ke dalam interval yang lebih kecil, sebagai berikut:

Tarif per menit

Rasio per menit dihaluskan 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

Rasio per detik dihaluskan 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 yang diizinkan setiap 100 milidetik. Permintaan kedua dalam waktu 100 md akan gagal. Selain itu, permintaan ke-11 dalam satu detik akan gagal.

Jika batas terlampaui

Jika jumlah permintaan melebihi batas dalam interval waktu yang ditentukan, penahanan lonjakan akan menampilkan pesan error ini dengan status HTTP 503:

{"error": "spike arrest policy violated"}

Menambahkan buffer

Anda memiliki opsi untuk menambahkan buffer ke kebijakan. Misalnya, Anda menyetel buffer ke 10. Anda akan melihat bahwa API tidak langsung menampilkan error saat Anda melebihi batas penahanan lonjakan. Sebagai gantinya, permintaan di-buffer (hingga jumlah yang ditentukan), dan permintaan yang di-buffer diproses segera setelah jendela eksekusi yang sesuai berikutnya tersedia. Default bufferSize adalah 0.

Jika Anda menjalankan beberapa proses Edge Micro

Jumlah permintaan yang diizinkan bergantung pada jumlah proses pekerja Edge Micro yang sedang berjalan. Pembatasan 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 pembatasan lonjakan dipicu pada 100 permintaan dalam jangka waktu tertentu, dan jika Anda memulai Edge Microgateway dengan opsi --processes 4, tetapkan allow: 25 dalam konfigurasi pembatasan lonjakan. Singkatnya, aturan umumnya adalah menetapkan parameter konfigurasi allow ke nilai "jumlah penekanan lonjakan yang diinginkan / jumlah proses".

Menggunakan plugin kuota

Kuota menentukan jumlah pesan permintaan yang diizinkan untuk dikirimkan 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 pembatasan 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 yang kompatibel dengan microgateway yang ingin Anda batasi 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.

  1. Login ke akun organisasi Apigee Edge Anda.
  2. Di UI Edge, buka produk yang terkait dengan proxy yang kompatibel dengan microgateway yang ingin Anda terapkan kuotanya.
    1. Di UI, pilih Produk dari menu Publikasikan.
    2. Buka produk yang berisi API yang kuotanya ingin Anda terapkan.
    3. Klik Edit.
    4. Di kolom Kuota, tentukan interval kuota. Misalnya, 100 permintaan setiap satu menit. Atau 50.000 permintaan setiap 2 jam.

  1. Klik Simpan.
  2. Pastikan produk ditambahkan ke aplikasi developer. Anda akan 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 dalam 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 (Integer) Ukuran buffer yang akan ditetapkan untuk interval waktu yang ditentukan. Satuan waktu yang diizinkan mencakup: hour, minute, day, week, month, dan default.
failOpen Jika fitur ini diaktifkan, jika terjadi error pemrosesan kuota atau jika permintaan "penerapan kuota" ke Edge gagal memperbarui penghitung kuota jarak jauh, kuota akan diproses berdasarkan jumlah lokal saja hingga sinkronisasi kuota jarak jauh berikutnya berhasil. Dalam kedua kasus ini, tanda quota-failed-open ditetapkan di objek permintaan.

Untuk mengaktifkan fitur "fail open" kuota, tetapkan konfigurasi berikut:

edgemicro:
  ...
  quotas:
    failOpen: true
...
useDebugMpId Tetapkan tanda ini ke true untuk mengaktifkan logging ID MP (message processor) dalam respons kuota.

Untuk menggunakan fitur ini, Anda harus menyetel konfigurasi berikut:

edgemicro:
  ...
  quotas:
    useDebugMpId: true
  ...

Jika useDebugMpId disetel, respons kuota dari Edge akan berisi ID MP dan akan dicatat oleh Edge Microgateway. Contoh:

{
    "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 penyimpanan pendukung Redis untuk kuota.

Menggunakan penyimpanan pendukung Redis untuk kuota

Untuk menggunakan penyimpanan pendukung Redis untuk kuota, gunakan konfigurasi yang sama dengan yang digunakan untuk fitur Synchronizer. Berikut adalah konfigurasi dasar yang diperlukan untuk menggunakan Redis bagi penyimpanan kuota:

edgemicro:
  redisHost: localhost
  redisPort: 6379
  redisDb: 2
  redisPassword: codemaster

quotas:
  useRedis: true
Untuk mengetahui detail tentang parameter edgemicro.redis*, lihat Menggunakan sinkronisasi.

Menguji plugin kuota

Jika kuota terlampaui, status HTTP 403 akan ditampilkan kepada klien, beserta pesan berikut:

{"error": "exceeded quota"}

Apa perbedaan antara pembatasan lonjakan dan kuota?

Penting untuk memilih alat yang tepat untuk pekerjaan yang sedang dilakukan. Kebijakan kuota mengonfigurasi jumlah pesan permintaan yang diizinkan untuk dikirimkan oleh aplikasi klien ke API selama satu jam, hari, minggu, atau bulan. Kebijakan kuota menerapkan batas penggunaan pada aplikasi klien dengan mempertahankan penghitung terdistribusi yang mencatat permintaan masuk.

Gunakan kebijakan kuota untuk memberlakukan kontrak bisnis atau SLA dengan developer dan partner, bukan untuk pengelolaan traffic operasional. Misalnya, kuota dapat digunakan untuk membatasi traffic layanan gratis, sekaligus mengizinkan akses penuh bagi pelanggan berbayar.

Gunakan penahanan lonjakan untuk melindungi dari lonjakan traffic API yang tiba-tiba. Biasanya, pembatasan lonjakan digunakan untuk mencegah kemungkinan serangan DDoS atau serangan berbahaya lainnya.