PPL 2020 — Document Builder: Mengukur Performa dengan ApacheBench

Firman Hadi
pepeel
Published in
4 min readApr 27, 2020

Dalam mengembangkan aplikasi yang banyak digunakan orang, tentu kita harus memperhatikan performa dari aplikasi tersebut. Performa menjadi hal yang sangat penting demi kenyamanan pengguna dalam menggunakan aplikasi kita. Salah satu cara untuk mengukur performa aplikasi web adalah menghitung berapa banyak request yang bisa ditanganinya dalam satu detik atau requests per second (RPS).

Sekarang, bagaimana cara kita menghitung banyaknya request per detik tersebut? Apakah membuka ratusan web browser yang membuka situs yang sama? Tentu tidak mungkin. Salah satu cara adalah menggunakan aplikasi khusus yang bisa mengirim request sebanyak apapun yang kita mau, salah satunya adalah ab (ApacheBench).

ApacheBench

ApacheBench merupakan aplikasi khusus yang dibuat untuk melakukan benchmarking sebuah server HTTP. ApacheBench bekerja dengan mengirimkan beberapa request sekaligus dengan concurrency yang disesuaikan kemudian akan ditampilkan hasil analisisnya berupa connection time maupun besaran bytes yang ditransfer. Apache Benchmark biasanya sudah sepaket dalam package bernama apache2-utils. Anda dapat mencari di internet tentang cara install Apache Benchmark di sistem operasi Anda.

Perhatian: Berhati-hatilah dalam menggunakan aplikasi tersebut, melakukan request terlalu banyak terhadap server dapat menyebabkan denial of service dan hanya gunakan untuk server yang Anda miliki!

ApacheBench dapat digunakan dalam CLI (command line interface). Banyak sekali parameter yang bisa Anda manfaatkan, namun yang biasa digunakan adalah -n untuk banyaknya request yang akan dilakukan dan -c untuk banyaknya concurrency, sebagai contoh:

ab -n 100 -c 50 http://127.0.0.1:5000/api

Perintah tersebut berarti mengirim 100 request HTTP GET ke endpoint /api dengan concurrency 50 yang artinya dalam 100 request tersebut, hanya boleh dijalankan sebanyak 50 request sebanyak satu waktu. Analoginya seperti Anda ingin mengeluarkan air sebanyak 100 liter dengan membuka sebanyak 50 keran. Anda bisa melihat penjelasan tentang concurrency di StackOverflow.

Hasil ApacheBench akan berbentuk seperti berikut:

Maka, terlihat bahwa server tersebut dapat menangani sekitar 322 request dalam satu detik untuk kondisi yang diberikan.

Mengukur Performa Document Builder di Localhost

Sekarang, akan diberikan contoh penggunaan ApacheBench untuk mengukur performa aplikasi Document Builder di localhost. Untuk mempermudah, kita akan menggunakan endpoint yang kita gunakan untuk mendapatkan daftar template yang bisa kita gunakan, yaitu GET: /api/templates. Sebelum itu, kita coba melakukan request sekali dengan verbosity level 2 agar lebih jelas hasilnya:

ab -n 1 -v 2 \
http://127.0.0.1:5000/api/templates\?limit=5\&offset=10

Akan terlihat hasil berikut:

Hasil 1 request.

Ternyata gagal! Hal ini disebabkan oleh pemanggilan request tanpa autentikasi. Kita harus melakukan login terlebih dahulu untuk mengakses endpoint tersebut.

Melakukan Request dengan Autentikasi

Perlu diketahui, Document Builder memanfaatkan sistem session ID yang disimpan pada cookies untuk menyimpan suatu sesi pengguna. Kita bisa melihat cookie tersebut pada browser kita:

Cookie session yang digunakan Document Builder

Logikanya, apabila kita bisa menggunakan session ID yang sudah terautentikasi dan melakukan benchmark dengan cookie session ID tersebut, maka kita bisa mendapatkan hasil yang benar. Untungnya, ApacheBench mempunyai parameter khusus untuk menambahkan sebuah cookie dalam request yang akan kita coba, yaitu -C cookie-name=value. Parameter tersebut akan kita coba seperti berikut (dipotong menggunakan backslash agar lebih mudah dibaca) :

ab -n 1 -v 2 \
-C connect.sid=s%3ACtLV80t9DvPKTrjOt\
0J0UVUEW_kXCrwa.%2BLNPaKei0QOdITb7pRO\
ffhcuEWFRRP2n%2B%2FUftPrXCEw \
http://127.0.0.1:5000/api/templates\?limit=5\&offset=0

Maka, akan keluar hasil berikut:

Hasil 1 request dengan autentikasi.

Yay! Hasilnya sekarang sudah sesuai yang diinginkan.

Mencoba Benchmark yang Sebenarnya

Setelah mencoba satu request sudah berhasil, maka kita bisa melanjutkan untuk benchmark dengan jumlah request yang banyak. Untuk contoh ini, akan dilakukan sebanyak 500 request dengan concurrency sebanyak 10.

ab -n 500 -c 10 \
-C connect.sid=s%3ACtLV80t9DvPKTrjOt\
0J0UVUEW_kXCrwa.%2BLNPaKei0QOdITb7pRO\
ffhcuEWFRRP2n%2B%2FUftPrXCEw \
http://127.0.0.1:5000/api/templates\?limit\=5\&offset\=0

Berikut adalah hasilnya:

Hasil 500 request dengan concurrency 10.

Terlihat bahwa aplikasi kita mampu menangani request sekitar 90 request per detiknya untuk kondisi yang telah diberikan.

Yang Perlu Diperhatikan

Ketahui juga bahwa angka tersebut tidak selalu menunjukkan keadaan sebenarnya dari performa aplikasi kita. Angka-angka tersebut bisa bergantung juga terhadap keadaan database yang kita miliki (apakah besar atau tidak, tanda dari operasi query yang menjadi bottleneck), atau bahkan kualitas koneksi kita ke server. Pemilihan endpoint juga menjadi penting untuk mendapatkan hasil yang mewakili keadaan sebenarnya (carilah endpoint yang cukup berat dan sering diakses pengguna). Maka dari itu, perlu analisis lebih lanjut untuk mengukur performa sebuah aplikasi.

Kesimpulan

Kita telah membahas tentang ApacheBench dan penggunaannya dalam mengukur performa suatu server. Telah dilakukan juga percobaan untuk mengukur performa aplikasi Document Builder yang dipasang di localhost. Pada kasus tersebut, dibutuhkan pemasangan cookie untuk melakukan request dengan session yang telah terautentikasi. Walaupun demikian, pengukuran request per second menggunakan ApacheBench belumlah cukup untuk mendapatkan pengukuran yang mewakili keseluruhan dari performa aplikasi kita.

Sekian penjelasan saya tentang ApacheBench dan kegunaannya untuk mengukur performa. Tautan di bawah merupakan artikel yang membahas lebih lanjut tentang stress testing pada suatu aplikasi, dan artikel saya tentang pentingnya pemilihan algoritma untuk performa sebuah aplikasi web. Jangan lupa untuk membaca artikel dari anggota tim lain.

--

--