Bagaimana E-ujian.id Memastikan Ujian Online (PAS) Berjalan Lancar

Bagaimana E-ujian.id Memastikan Ujian Online (PAS) Berjalan Lancar – Mendukung proses belajar-mengajar secara online termasuk ujian online adalah salah satu tujuan utama e-ujian.id didirikan. E-ujian.id memberikan layanan yang sangat terjangkau untuk sekolah dalam melaksanakan kegiatan belajar mengajar secara online.

Lonjakan Traffic Saat Ujian Online

Kami menerima lonjakan traffic yang sangat besar secara tiba-tiba dalam kegiatan Penilaian Akhir Semester 2022 (November – Desember). Lonjakan traffic ini tercatat hingga 8 kali lipat dibandingkan saat ujian-ujian biasa lainnya.

Sistem kami mencatat terdapat traffic hingga 100k unique visitors dalam 24 jam seperti pada gambar berikut:

Sistem e-ujian.id menggunakan loadbalancer yang berfungsi membagi traffic yang ada ke dalam beberapa server cloud yang tersedia.

Namun, dalam pantauan tim kami, terdapat beberapa kendala berikut yang menyebabkan traffic tidak bisa dikendalikan dengan baik sehingga menyebabkan downtime saat ujian di pagi hari selama dua hari

Write/Read Database Tidak Merata

E-ujian.id menerapkan sistem replikasi Master Slave dengan mengandalkan satu master database untuk write dan beberapa database slave untuk read. Dalam kondisi normal, hal ini bekerja dengan baik namun server database master menjadi single failure.

Hal ini karena database master harus menerima banyak request untuk melakukan write dari beberapa server sekaligus. Akibatnya proses write menjadi lebih lama dan kemudian menyebabkan banyak antrian di Nginx sehingga menyebabkan baik server database dan Nginx overload.

Overload ini diperparah dengan banyaknya peserta ujian yang panik yang kemudian melakukan reload/refresh halaman secara terus menerus.

Traffic Tidak Merata

Agar peserta ujian tetap mengakses origin server yang ada di pool loadbalance, e-ujian.id menerapkan sistem cookies atau session afinity. Session afinity ini sangat penting untuk memastikan siswa tetap mengakses origin server yang sama agar tidak keluar secara otomatis.

Sayangnya, session afinity juga menyebabkan terjadinya traffic yang tidak merata karena loadbalancer tidak bisa memindahkan perserta ujian ke pool server origin lain yang lebih sedikit load/bebannya karena akan menyebabkan perserta ujian logout secara tiba-tiba.

Hal ini diperparah dengan kondisi beberapa sekolah masih menggunakan integrasi dengan e-ujian.id dengan sistem lama kami sehingga semua siswa mengakses server yang sama.

Downtime Saat Maintenance

Untuk memastikan ujian berjalan dengan lancar, sistem e-ujian.id menerapkan server auto scale baik vertical dan horizontal sesuai dengan estimasi traffic yang akan diterima dengan menghitung total peserta ujian saat tertentu.

Server auto scale ini membutuhkan estimasi downtime maksimal 5 menit dan sayangnya hal ini selalu menyebabkan sekolah dan peserta ujian panik karena tidak memperhatikan waktu kapan maintenance akan dilakukan yang akibatnya peserta ujian melakukan reload halaman berkali-kali yang artinya meng-hit server secara bersamaan secara terus menerus.

Solusi

Berdasarkan data yang kami dapatkan selama ujian tersebut, tim e-ujian.id melakukan analisis dan kemudian melakukan perubahan terhadap arsitektur server dan aplikasi e-ujian.id agar dapat menampung semua traffic yang ada.

Secara arsitektur server, e-ujian.id mengubah arsitektur sebelumnya menjadi seperti berikut:

Tim e-ujian.id mengubah struktur replikasi database yang sebelumnya menjadi single failure penyebab utama downtime dari Master Slave menjadi Master Master.

Dengan sistem master master, aplikasi dapat melakukan write/read di beberapa server database secara bersamaan. Hal ini sangat penting untuk mencegah terjadinya antrian pada server. Hal yang meng-khawatirkan dengan sistem replikasi master master ini adalah konsistensi data, namun dengan memanfaatkan fitur auto-increment-increment dan auto-increment-offset yang tersedia pada database Percona, maka hal ini menjadi mungkin untuk dilakukan.

Selain itu, e-ujian.id juga melakukan improvement logic saat siswa memulai melakukan ujian online agar tidak mengakses database dengan puluhan juta data sehingga akses menjadi sangat cepat sehingga beban IO dan web server menjadi jauh lebih ringan.

Tim juga menerapkan beberapa logic tambahan agar tidak terjadi downtime selama maintenance dengan cara melakukan auto route traffic yang ada ke server cloud yang standby dan kemudian melakukan maintenance beberapa server sekaligus.

Setelah maintenance selesai, maka server akan dikembalikan ke dalam pool loadbalancer sehingga traffic baru bisa kembali masuk ke server tersebut.

Kesimpulan

Dengan perubahan baik dari sisi arsitektur server dan aplikasi, maka permasalahan server yang sempat terkendala selama dua hari di pagi hari tersebut dapat terselesaikan sehingga ujian online kembali lancar.

Namun, kami meyakini bahwa sistem yang sudah kami buat saat ini belum-lah sempurna dan pasti akan diperlukan perubahan-perubahan nantinya guna mendukung kebutuhan yang ada.