Developer, programmer dan siapapun yang bergerak di bidang IT pasti sudah tidak asing dengan istilah server.
Server adalah komputer khusus yang memiliki software, yang dapat memberikan layanan tertentu sesuai yang dibutuhkan oleh client.
Agar suatu layanan dapat berjalan lancar, tentunya teknisi di bidangnya sudah harus mengkalkulasi kapasitas maksimum request yang dapat diterima oleh server.
Dengan perhitungan tepat, maka server akan terhindar dari overload request client.
Mengapa Menghitung Kapasitas Maksimal Server Penting?
Sedikit disinggung di awal bahwa ada kemungkinan request atau trafik akan melebihi kapasitas server bila tidak ada perhitungan yang tepat.
Jika terjadi, kinerja server tidak akan maksimal dan berisiko terjadi gangguan.
Ini karena server juga memiliki jumlah resource yang terbatas seperti:
CPU Bound
Kalkulasi pada komputer membutuhkan kinerja dari CPU. Proses kalkulasi ini termasuk mengonversi string ke byte dan memproses gambar.
Nah, batasan atau limit dari sebuah CPU adalah power serta jumlah core-nya. Semakin banyak core dari sebuah CPU, semakin banyak pula task yang bisa dikerjakan dan RPSnya.
Untuk menghitung jumlah RPS, Anda bisa menggunakan rumus
RPS = Jumlah Core * (1/durasi task)
Sebagai contoh, server dengan 4 core memiliki durasi task 10ms bisa meng-handle 400 RPS, sedangkan server yang sama dengan durasi task 100ms hanya dapat meng-handle 40 RPS.
Memory Bound
Informasi atau data diperlukan bagi sebuah komputer agar dapat bekerja. Komputer tersebut perlu mengambil data dari database.
Setelah itu membaca filenya atau mendapatkan informasi dari jaringan dengan terhubung ke komputer lain.
Nah, bila tidak ada proses pengambilan data dan membaca file maka CPU juga tidak melakukan proses apapun.
Sementara bagian lain dari komputer mengerjakan tasknya, CPU akan menunggu proses tersebut untuk diproses nantinya.
Selain batasnya ada pada jumlah bagian yang mengerjakan sebuah task, ada pula batasan RAM.
RAM tersebut berguna untuk menyimpan data ke dalam memori sebelum melakukan operasi apa pun.
Bila disimpulkan, semakin banyak memori, semakin banyak pula software dan task yang dapat diproses.
Dengan begitu, banyak task yang dapat diselesaikan dan RPS-nya semakin tinggi.
Cara menghitung RPS dalam sistem memory-bound adalah sebagai berikut:
RPS = (total RAM/Penggunaan memori task) * (1/durasi taks)
Misal, server dengan RAM 16GB menggunakan memori task sebesar 40MB dan durasi task 100ms dapat meng-handle 4000 RPS.
Sedangkan server yang sama dengan durasi 50ms, bisa meng-handle hingga 8000 RPS.
Jadi, untuk meningkatkan RPS, server tersebut harus memiliki kapasitas RAM yang besar dengan penggunaan memori yang kecil disetiap prosesnya dan juga durasi proses yang semakan cepat.
Input/Output Bound
Input/Output bound atau I/O bound adalah sebuah istilah yang terkait dengan program yang memerlukan operasi input/output.
Nah, sebuah komputer dapat berkomunikasi dengan komputer lain. Oleh karena itu, komputer berbasis UNIX, harus ada request yang dibuat dan diterima akan menciptakan file descriptor.
File descriptor pada sebuah komputer jumlahnya tentu terbatas. Batasan tersebut adalah keterbatasan open file.
Open file tersebut memiliki soft limit dan hard limit.
Soft limit adalah keterbatasan yang berefek pada proses. Sedangkan hard limit adalah nilai maksimum soft limit.
Pengguna dapat menaikkan soft limit hingga nilai hard limit.
Limit tersebut tergantung pada OS yang digunakan. Pada dasarnya soft limit adalah 1024 sedangkan hard limit adalah 4096.
Limit open file adalah keadaan limit yang umum dimana RPS tidak dapat naik walau server masih memiliki kapasitas CPU dan memory usage.
Semakin tinggi limit open file, semakin tinggi pula jumlah request yang dapat diterima dan juga RPS-nya.
Jenis lain dari I/O bound adalah bandwidth jaringan.
Ingat bahwa ketika komputer berkomunikasi dengan komputer lain, komputer tersebut pada dasarnya mengirim data dari satu komputer ke komputer lain.
Ketika server intensif memproses data, menerima atau mengirim data berukuran Gb tetapi hanya memiliki bandwidth jaringan berukuran Mb, itu adalah kejadian normal ketika RPS sangat rendah.
Menghitung Load Sistem
Normalnya, server akan memiliki pola nik-turun saat malam di mana keadaan load sedang turun-turunnya, dan saat siang hari akan meningkat ke poin tertentu, bertahan di posisi tersebut dan akhirnya turun kembali.
Untuk menghitung load sistem, Anda harus mengetahui jumlah maksimal request yang diterima tiap detiknya dalam satu periode secara berkelanjutan.
Katakanlah Anda menginginkan 3,6 juta request yang datang dalam waktu satu jam. Ini berarti servernya harus bisa mengendalikan 1000 RPS dengan rumus sebagai berikut,
RPS = (total request/durasi task dalam detik)
Katakanlah sebuah server memerlukan 10ms untuk menyelesaikan tiap request, dan Anda memiliki 4 core server.
Ini artinya server Anda hanya dapat mengendalikan 400 RPS. Dalam kasus ini, maka Anda memerlukan 3 instances dengan formula berikut ini
Jumlah core = (RPS*durasi task dalam detik)
Sekarang Anda tahu bahwa setidaknya memerlukan 3 instances dan tiap instance meng-handle 400 RPS, dan untuk tiap request paling tidak memerlukan memori 3,6GB.
Kesimpulannya, Anda memerlukan server dengan RAm berukuran 4GB dengan formula
Total RAM = RPS*penggunaan memori task * durasi task dalam detik
Jadi, alih-alih main tebak, Anda bisa melakukan perhitungan perencanaan kapasitas server agar sesuai dengan daya tampung requestnya.
Disadur dari: How to Calculate Server Max Requests per Second