Halo guys, pada kesempatan kali ini saya akan berbagi terkait dengan Stress Test.
Ketika sebuah server memberikan respon balikan dalam waktu 500s, itu merupakan suatu pertanda sebuah kegagalan terjadi pada arsitektur dari server. Hal tersebut umum terjadi salah satunya jika server dikunjungi oleh banyak user secara simultan dalam satu waktu.
Bagaimana cara mencegahnya?
Kita dapat mencegahnya dengan meningkatkan kemampuan kita untuk memprediksi. Salah satu cara memprediksi kemampuan server kita untuk dapat beradaptasi dari banyaknya serbuan user adalah dengan melakukan stress test.
Salah satu keunggulan dan alasan dari kami untuk menggunakan Kubernetes sebagai orchestrator dari microservice kami adalah, karena Kubernetes sangat scalable dan mudah untuk mereplikasi sehingga dapat menangani kasus stress yang tinggi. Dapat dibayangkan Kubernetes melakukan deployment setiap microservice dalam bentuk sebuah blok-blok, ketika sebuah blok sudah menyentuh limitnya, maka dapat dikonfigurasi untuk blok tersebut agar dapat mereplikasikan dirinya sehingga terdapat dua blok yang menangani hal tersebut secara bersamaan. Namun tentu kita tidak dapat langsung percaya dengan apa yang telah kita buat tanpa kita tes terlebih dahulu bukan?
Locust merupakan load testing tool berbasis python dan merupakan alat yang kami gunakan untuk melakukan stress testing pada backend kami. Secara sintaks cukup mudah (berikut merupakan stress test terhadap homepage):
Kemudian berikut merupakan tampilan Locust dashboard (klik untuk zoom gambar):
Disini Locust dapat mensimulasikan stress test dengan behaviour user yang dapat didefinisikan dengan mudah.
2 field dalam dashboard menunjukkan:
1. Number of user to simulate
Yaitu banyak user maksimal yang akan mempenetrasi secara simultan.
2. Hatch rate
Perkembangan user/detik, jadi penetrasi user tidak langsung, namun perlahan untuk dapat menggambarkan grafik perkembangan.
2 field dalam dashboard menunjukkan:
1. Number of user to simulate
Yaitu banyak user maksimal yang akan mempenetrasi secara simultan.
2. Hatch rate
Perkembangan user/detik, jadi penetrasi user tidak langsung, namun perlahan untuk dapat menggambarkan grafik perkembangan.
Pada Kubernetes kami, penanganan terhadap stress test didefinisikan pada resource limit, yaitu dengan mendefinisikan maksimum dan minimum duplikasi dan resource yang dapat dibuat pada sebuah service dan task secara efisien. Namun, tanpa dilakukan stress test, akan terjadi beberapa permasalahan yaitu:
Underallocation
Container melebihi resource limits, Kubernetes akan membunuh containers secara konstan. Sistem akan melambat, dan berkemungkinan down.
Overallocation
Container tidak mengutilisasi resource secara maksimal. Kubernetes membiarkan container berjalan namun terdapat extra resource yang tidak terpakai. Pada implementasi skala besar, ini akan membuang-buang cost server saja.
Melakukan test hingga menyentuh breaking point:
Garis hijau menunjukkan kenaikan client/second.
Garis biru menunjukkan performa server.
Dapat dilihat, bahwa ketika server menyentuh 24 klien secara konkuren, performa server langsung menurun sehingga menyebabkan response time server yang semakin lambat. Itu adalah breaking point dari server, solusinya adalah melakukan upscale server.
Jika test terlalu mudah / overallocated, tidak akan terjadi perubahan performance pada sistem:
Pada kasus overallocated dapat dilihat bahwa performa server stagnan (garis biru) walaupun user terus meningkat. Ini akan membuang-buang cost server saja.
Ketika limit pada level yang bagus, maka performance akan menurun perlahan setiap kenaikan client:
Penentuan limit yang bagus dipengaruhi dengan perkiraan seberapa banyak client yang mungkin mengakses aplikasi. Tentunya parameter tersebut merupakan dependen terhadap kasus.
Pada kasus Allocateam, diperkirakan bahwa yang mengakses website hanyalah branch manager yang diperkirakan berjumlah ratusan. Kemudian yang menggunakan worker dalam satu waktu hanyalah puluhan.
Karena keterbatasan cost, pada stress test yang dilakukan pada website Allocateam, api dapat dengan stabil diakses oleh 100 orang, namun endpoint yang membutuhkan worker hanya dapat secara simultan diakses oleh 4 orang, sehingga jika lebih dari 4 maka akan diletakkan pada queue dan waktu tentu saja akan bertambah.
Demikian blog kali ini, seru bukan melakukan stress testing?
0 komentar:
Post a Comment