Aplikasi layanan akademik, memiliki potensi beban akses yang cukup tinggi. Jumlah pengakses suatu ketika bisa naik sangat drastis hingga mencapai kondisi beban di atas kemampuan infrastruktur server. Bagi mahasiswa,  tentu kalian akan merasakan bagaimana rasanya ketika registrasi ulang dan juga proses KRS yang dirasa seperti melambat. Selagi kalian disibukkan dengan adu kecepatan berebut kelas, eh ternyata servernya down, kyaaaa 😢

By the way, aplikasi layanan akademik juga memiliki beban proses yang tinggi, berbeda dengan portal web biasa yang hanya sekedar menampilkan dan memasukkan data posting.

Demikian juga dengan success story kami pada implementasi Sistem Informasi Manajemen KKN di UIN Sultan Syarif Kasim (UIN SUSKA) Riau. SIM KKN ini dibangun Tim eCampuz pada tahun 2015, yang saat itu masih berada di bawah bendera PT Gamatechno Indonesia. SIM KKN ini memiliki fitur umum antara lain :

  • Pendaftaran KKN terintegrasi dengan SIAKAD
  • Pemilihan lokasi KKN secara mandiri oleh peserta

Telah diketahui bersama, proses pemilihan lokasi KKN secara mandiri oleh peserta merupakan proses yang mendebarkan untuk para calon peserta KKN, karena saat itu harus berebut lokasi KKN. Mahasiswa mengakses aplikasi secara bersamaan. Tahu sendiri kan ya, KKN adalah saat yang penting buat mahasiswa. Tentu saja ingin memilih lokasi yang dekat dengan tempat tinggal, atau kalau bisa memilih satu cinta lokasi dengan siapa? 😌

Demikian juga di sisi sistem, proses ini salah satu hal yang ditakuti oleh para operator dan administrator sistem server (sysadmin) tentunya. Karena proses yang bersamaan (high concurrent) akan memiliki potensi menurunkan kinerja server akibat kelebihan beban (system overload). Saat kinerja menurun, justru nantinya server akan gagal memberikan layanan data pada pengakses.

Kisah Sukses SIM KKN UIN SUSKA : Tips Install Aplikasi di Server Minimalis 1
SIM KKN

Nah, simak kisah sukses kami bekerja sama dengan tim UIN SUSKA Riau, beserta tips dan trik untuk mengelola beban proses pada server.

Kondisi Server Layanan Sistem KKN

SIM KKN merupakan aplikasi yang tidak setiap saat harus diakses. Sistem ini diakses pada saat tertentu saja (peak season). Pada pengalaman kami di UIN SUSKA tahun 2018, tim teknis UIN SUSKA berharap agar Tim eCampuz dapat melakukan implementasi sistem tersebut pada infrastruktur yang terbatas karena satu dan lain hal yang ada di Tim UIN SUSKA.

Spesifikasi server yang disediakan untuk layanan SIM KKN ini adalah :

  • CPU : Intel Xeon 2.10GHz
  • Memory : 2G

Sedangkan kondisi beban akses antara lain :

  • Mahasiswa : ± 4000 orang (berpotensi akan mengakses aplikasi secara bersamaan)
  • Operator : 20 orang

Ternyata pada saat implementasi tidak bisa disiapkan kondisi yang sama dengan beban, sehingga harus disiapkan kondisi cadangan. Dalam monitoring yang dilakukan oleh Tim eCampuz, jumlah akses user dapat mencapai lebih dari 6000 akses, karena ternyata pihak orang tua juga ikut mengakses aplikasi.

Secara demografis, Riau memiliki banyak kabupaten dan wilayahnya sangat luas. Sehingga dapat dipastikan bahwa lokasi KKN akan jauh dari lokasi kampus atau tempat tinggal para mahasiswa. Oleh karena itu, orang tua merasa perlu memastikan lokasi KKN anaknya agar memiliki kesiapan untuk memantau mereka. Hal ini juga yang pada akhirnya meningkatkan jumlah traffic akses ke layanan SIM KKN.

Oke, kondisi luar biasa selanjutnya ada tambahan tantangan lain, bahwa server disiapkan untuk aplikasi sekaligus database. Dengan kondisi infrastruktur yang saat itu harus minim dan dengan beban akses yang cukup besar, maka perlu strategi khusus untuk mengelola server ini. Namun, dengan kerja sama dan support yang baik dari Tim UIN Suska, maka implementasi ini berjalan dengan baik, lancar, dan hampir tanpa komplain yang berarti 😎 Lho kok bisa? Apa resepnya? Berikut ini kami bagikan beberapa tips implementasi aplikasi pada infrastruktur yang minimalis. Ini akan berguna pada kampus lain yang terpaksa menggunakan infrastruktur terbatas, karena sesuatu dan lain hal.

Tips Instal Aplikasi Web pada Server Minimalis

Berikut ini beberapa trik dan tips instal aplikasi web pada server minimalis dengan mengambil pengalaman kami pada implementasi SIM KKN UIN SUSKA. Langkah ini mencakup bahasan teknis yang detil dan juga tidak kalah pentingnya adalah langkah non-teknis dan support dari tim administrator kampus UIN SUSKA. Secara ringkas kami akan coba sajikan pengalaman yang bagi kami sangat berharga ini.

Testing Aplikasi pada Server Development

Testing aplikasi pada server development, antara lain adalah : load testing / stress testing dengan simulasi beban user ribuan. Pararel dengan load testing ini, juga dilakukan monitoring pengaruh load terhadap kinerja server. Pemantauan log, kinerja CPU, Memory dan juga kecepatan akses. Apa saja sih tools load testing dan stress testing yang kita pakai saat itu:

  1. ab (apache benchmark) sebagai load testing halaman statis. Maksimal test adalah 1000 concurrent user bersamaan, tidak support dengan recording.
  2. Selenium, ini sebagai tools scenario testing dan stress testing, berbasis text. Selenium dapat disetting lebih dari 100 concurrent user, dan dapat diberikan skenario urutan akses, dari modul ke modul.
  3. Apache JMeter untuk testing halaman dinamik. Memiliki kemampuan recording cukup bagus, free.
  4. BlazeMeter chrome extension, untuk halaman dinamik, memiliki tools analisa yang baik, maksimal testing versi gratis adalah 50 concurrent user. Support dengan action recording
  5. Memanfaatkan external load tester : app.loadimpact.com.

Tuning Database Server

Aplikasi ini menggunakan database server MySQL. Dibanding database server besar seperti Oracle atau PostgreSQL, MySQL merupakan database server yang disiapkan untuk data tidak terlalu besar dan harus berjalan kencang. Tuning database pada MySQL mempertimbangkan beberapa parameter antara lain :

  1. Maximum Connection
  2. Buffer yang digunakan untuk setiap operasional (Join, Concat, Read, Sort)
  3. Pengaturan thread stack
  4. Pengaturan parameter terkait network
  5. Menyiapkan slow_query_log sebagai bahan analisa log-log yang lambat di kemudian hari.

Tuning web server Apache dan bahasa pemrograman PHP

Tuning dilakukan untuk menyesuaikan kemampuan kinerja web server Apache terhadap beban yang ada. Berikut beberapa tips instal pengaturan Apache web server.

  • Agar Apache dapat menerima request maka Apache seyogyanya berjalan pada mode MPM Worker atau MPM Event. Secara default Apache berjalan pada mode MPM Prefork. MPM Worker/Event memiliki kemampuan menangani jumlah concurrent user yang jauh lebih besar daripada MPM Prefork. MPM Prefork akan sangat lebih efektif berjalan pada beban akses kecil. Kisah tentang prefork, worker dan event, akan dibahas pada postingan lain ya…
  • Tuning Maximum Connection Apache
  • Tuning Keep Alive Apache
  • Tuning Maximum Thread Apache
  • Tuning Maximum Client Apache
  • Memastikan mod_gzip berjalan
  • Mengatur mod_expired
  • Secara default, PHP akan terinstall sebagai mod_php terhadap Apache. Hal ini hanya dapat berjalan pada Apache MPM Prefork saja. Agar Apache dapat berjalan mode MPM Worker, maka PHP dijalankan sebagai PHP-CGI/PHP-FCGI/PHP-FPM. Dengan mode ini, PHP akan berjalan sendiri memproses data, hasilnya akan disetor ke Apache sebagai respon bagi user.
  • Pengaturan memory_limit pada PHP
  • Pengaturan max_execution_time pada PHP
  • Pengaturan max_input_vars pada PHP
  • Pengaturan max_input_time pada PHP

Penggunaan Reverse Proxy sebagai Semi Load Balancer

Di massa kini penggunaan reverse proxy dan atau load balancer semakin marak. Ini karena adanya beberapa benefit dalam penggunaan reverse proxy tersebut. Antara lain : dapat menjadi load balancer antar node, dapat menghemat IP Publik pada multi node server, dapat melakukan caching static content, dan dapat menjadi tambahan firewall bagi aplikasi.

Pada kasus instalasi aplikasi di UIN Suska, digunakan Nginx Reverse Proxy Server sebagai semi load balancer. Nginx diletakkan dalam server yang sama dengan Apache, dengan memisah Listen Address agar tidak berbenturan portnya. Dikatakan sebagai semi load balancer, karena tidak bekerja sebagai load balancer multi node, tapi Nginx berfungsi sebagai caching-engine untuk static content, sedangkan dynamic content tetap diproses oleh Apache. Sekilas memang ada penambahan instalasi server Nginx, namun setelah diinstall, ini sangat akan sangat terasa meringankan beban kerja Apache.

Tips sukses besar : mengatur antrian akses user

Mengatur antrian user ini melibatkan andilnya kegiatan non-teknis. Misalnya, pengumuman himbauan agar akses dilakukan di jam-jam tertentu. Sedangkan kegiatan teknisnya adalah :

  1. membatasi jumlah maksimal koneksi user. Tim developer telah memiliki perhitungan sendiri terkait beban akses tiap user. Maka akan disetting jumlah koneksi user yang bebannya tidak akan melebihi kemampuan sumberdaya server.
  2. bagaimanapun user diatur agar tidak mencapai maksimal beban server. Misal, oleh server disiapkan 1000 concurrent user, bagaimana nasib user ke 1001 dan seterusnya yang mengakses? Caranya adalah dengan memberikan pengumuman dengan interaktif yang baik

Coba bandingkan kedua halaman error di bawah ini :

Kisah Sukses SIM KKN UIN SUSKA : Tips Install Aplikasi di Server Minimalis 2
HTTP Response Code 429
Kisah Sukses SIM KKN UIN SUSKA : Tips Install Aplikasi di Server Minimalis 3
HTTP Response Code 429 UI

Keduanya sama-sama merupakan halaman pemberitahuan untuk mewakili HTTP 429 (Too Many Request). Namun dengan sentuhan grafis, user jelas akan merasa berbeda penerimaannya.

Testing pada Kondisi Live

Setelah proses instalasi dilakukan pada server live atau production, maka perlu dilakukan testing ulang. Pada beberapa kasus luar, biasanya aplikasi akan diletakkan pada server staging lebih dulu, yaitu server yang didesain sama persis dengan server live/production. Dengan demikian, akan mendapatkan pendekatan yang sama dengan server live. Segala masalah yang dapat diatasi di staging server, dapat dijuga diatasi di live server. Untuk SIM KKN UIN Suska ini, langsung dari server development, dicobakan pada server live pada direktori dummy lebih dulu. Setelah itu barulah ditesting, meliputi load testing dan security testing (VA dan Pentest)

Proses load testing menggunakan program berikut :

  • Selenium
  • app.loadimpact.com
  • Blaze Meter (dengan berbagai mode)
  • Apache Benchmarking

Berikut beberapa hasil yang dapat dilihat, pada LoadImpact :

Kisah Sukses SIM KKN UIN SUSKA : Tips Install Aplikasi di Server Minimalis 4
Testing dengan situs Load Impact

BlazeMeter saat itu dipilih Tim eCampuz, karena kemudahan penggunaannya terhadap browser. Blazemeter dapat berjalan sebagai extension Chrome. Di samping itu hasil reportingnya cukup bagus.

Kisah Sukses SIM KKN UIN SUSKA : Tips Install Aplikasi di Server Minimalis 5
BlazeMeter Chrome extension
Kisah Sukses SIM KKN UIN SUSKA : Tips Install Aplikasi di Server Minimalis 6
Hasil report blazemeter untuk 50 Concurrent

Di samping itu Tim eCampuz juga masih menggunakan Selenium dan JMeter untuk testing aplikasi ini.

Evaluasi Jalannya Aplikasi

Dalam implementasi dan jalannya aplikasi, Tim eCampuz bekerja sama dengan Tim UIN SUSKA secara penuh memantau kondisi aplikasi dan server selama masa pendaftaran KKN. Pada kenyataannya concurrent user saat siang hari dapat mencapai lebih dari 6000 koneksi. Sementara Maximum Client pada webserver disetting pada angka 4000. Maka diperkirakan 2000 user yang mengakses akan mendapatkan pesan “halaman sibuk” dan diminta untuk mengulang beberapa saat setelah proses berjalan.

Trik “Halaman sibuk” ini juga dilakukan oleh situs-situs besar seperti Twitter, Facebook, Whatsapp, hingga Tokopedia dan Bukalapak.

Kisah Sukses SIM KKN UIN SUSKA : Tips Install Aplikasi di Server Minimalis 7
Contoh halaman website yang over kapasitas

Belajar dari pengalaman ini, maka sebenarnya instalasi dan implementasi tidak hanya melibatkan urusan teknis, namun strategi pengaturan terhadap user juga diperlukan. Terlebih pada server-server layanan akademik, yang di masa kini akan banyak menggunakan layanan daring/online. Belum lagi pada masa wabah saat ini, kebutuhan akan layanan online dan daring akan meningkat. Bukan tidak mungkin KKN besok juga dilakukan seperti WFH bukan? 😀