Pada artikel kali ini kita akan memabas mengenai salah satu fitur dalam krakend API Gateway yaitu Rate Limiter, sebelumnya kita sudah pernah membahas mengenai dasar dan juga JWT Auth pada krakend. Jika kamu ingin mengulasnya maka bisa akses pada link berikut :
Pengenalan Singkat
Krakend memiliki fitur Rate Limiter untuk memberikan batas user yang dapat mengakses backend tertentu, batas ini bisa di deklarasikan berdasarkan jumalah user yang mengakses service atau per user yang mengakses server dalam satu waktu.
Contohnya ketika server membatas jumlah user yang dapat mengakses server (misalkan 2 user per second) maka ketika ada jumlah user yang mengakses pada server tersebut lebih dari limit yang diatur maka backend tidak akan memberikan respond.
Sebagai gambaran, kamu dapat melihat topology berikut :

Pada gambar diatas terlihat ada 3 user yang mencoba mengakses API, akan tetapi dibatasi 2 request/s maka 1 user tidak akan mendapatkan respond dari API tersebut.
Goal
- Melakukan konfigurasi rate limit krakend
- Melakukan pengujian rate limit menggunakan JMeter
Konfigurasi Krakend
Untuk percobaan ini saya menggunakan backend yang sama yang sudah saya paparkan pada pembahasan JWT Auth Krakend yang dapat di akses pada laman git berikut https://github.com/tresnax/backend-appjs.git
Sedangkan untuk deklarasi rate-limit kamu dapat menambahkan konfigurasi berikut :
"extra_config": {
"qos/ratelimit/router": {
"@comment":"1 requests every 2 minutes",
"max_rate": 2,
"every": "1s"
}
Apabila kita koita tempatkan pada krakend.json maka akan menjadi seperti dibawah ini :
{
"version": 3,
"output_encoding": "no-op",
"http_port": 8080,
"endpoints": [
{
"endpoint": "/kursus",
"method": "GET",
"extra_config": {
"qos/ratelimit/router": {
"@comment":"1 requests every 2 minutes",
"max_rate": 2,
"every": "1s"
}
},
"concurrent_calls": 1,
"backend": [
{
"url_pattern": "/courses",
"method": "GET",
"host": ["http://course-service:3000"]
}
]
}
]
}
Simpan dan jalankan krakend, atau buat ulang dengan docker menggunakan perintah berikut :
docker run -d --name krakend \
-v ./krakend/:/etc/krakend \
-p 8000:8000 \
-p 8080:8080 \
--network krakend-net devopsfaith/krakend
Pastikan bahwa container krakend sudah berjalan dan dapat kita lakukan pengujian. Untuk mendapatkan source code dari konfigurasi krakend, kamu dapat mengakses repo github : https://github.com/tresnax/tutorial-krakend.git
Pengujian
Untuk melakukan penujian kita akan menggunakan aplikasi JMeter, apabila kamu belum familiar maka kamu bisa coba cari tutorial dan panduannya pada artikel lain maupun youtube.
Konfigurasinya sudah saya update pada git tutorial krakend, maka selanjutnya kamu bisa open konfigurasi tersebut melalui aplikasi JMeter.
Selanjutnya kita setup bagian Thread Group nya, karena ini bagian yang akan memastikan berapa jumlah user yang akan mengakses sebagai pengujian.

Selanjutnya ubah alamat url dari krakend pada GET User.

Apabila penyesuaian sudah selesai dilakukan maka kita jalankan simulasi dengan melakukan klik start pada tombol hijau diatas, atau klik kanan pada Thread Group lalu klik Start.
Untuk hasilnya dapat kamu lihat pada bagian View Result Tree seperti berikut.

Akan terlihat bahwa dari total 5 request yang diminta dalam 1 detik hanya akan ada 2 request yang Hit dikarenakan konfigurasi yang kita buat sebelumnya adalah 2 req/second.
Selanjutnya untuk pembuktian kamu dapat coba modifikasi konfigurasi krakend tersebut dengan jumlah rate limit yang berbeda, apakah akan ada perubahan ketika melakukan request.
Penutup
Pada artikel ini kita sudah membuktikan konfigurasi rate limit yang berjalan pada krakend, kamu dapat menyesuaian konfigurasi dengan kebutuhan masing-masing. Pada pengaplikasiannya rate-limit dapat membatasi request yang masuk pada server sehingga dapat melayani setiap request dengan baik.