.png)
Sumber: ChatGPT
Sistem Jatuh karena Berusaha Melayani Semuanya
Ketika permintaan yang masuk melampaui kapasitas sistem, ada dua kemungkinan perilaku. Sistem bisa berusaha menerima semuanya, atau sistem bisa menolak sebagian secara tertib.
Pilihan pertama terdengar lebih ramah, tetapi hasilnya justru paling merugikan. Permintaan menumpuk di antrean, memori terpakai untuk menahan koneksi yang belum terlayani, dan pada akhirnya seluruh sistem berhenti melayani siapa pun. Semua pengguna gagal, termasuk yang sebenarnya masih bisa dilayani.
Pilihan kedua terlihat lebih keras, tetapi jauh lebih baik. Sebagian permintaan ditolak dengan jawaban yang jelas, sementara sisanya tetap dilayani dengan baik. Inilah yang membedakan sistem yang dirancang untuk beban nyata dari sistem yang hanya dirancang untuk kondisi normal.
Efek Berantai yang Membuat Satu Masalah Menjadi Menyeluruh
Pada sistem yang layanannya saling bergantung, kegagalan jarang berhenti di satu tempat. Satu layanan yang melambat membuat layanan pemanggilnya ikut menunggu. Selama menunggu, layanan itu tetap memakai sumber daya, sehingga kapasitasnya untuk melayani permintaan lain berkurang.
Dalam hitungan menit, layanan yang sebenarnya sehat ikut kehabisan kapasitas hanya karena menunggu layanan lain yang bermasalah. Pengguna melihatnya sebagai kegagalan menyeluruh, padahal penyebab awalnya hanya satu komponen.
Dua mekanisme berikut bekerja bersama untuk memutus rantai ini, satu di sisi masuk dan satu di sisi keluar.
Mengatur Aliran Masuk
Pembatasan laju permintaan sering disalahpahami sekadar sebagai pembatasan akses. Fungsinya sebenarnya lebih penting, yaitu memastikan kapasitas yang ada dialokasikan pada permintaan yang paling perlu dilayani.
Beberapa pendekatan dipakai sesuai karakteristik trafiknya. Pendekatan berbasis kuota yang terisi ulang secara berkala mampu menoleransi lonjakan singkat tanpa mengorbankan rata-rata jangka panjang, sehingga cocok untuk kampanye atau periode ramai yang terjadwal.
Untuk penggunaan oleh pihak ketiga, pendekatan berbasis jendela bergeser memberi perhitungan yang lebih akurat dibanding jendela tetap, karena mencegah penumpukan permintaan tepat di batas pergantian periode.
Pada sistem yang berjalan di banyak instance, pembatasan pada satu instance saja tidak cukup. Perhitungan kuota perlu disimpan terpusat agar batasnya konsisten di seluruh sistem, dan ini biasanya memakai penyimpanan dalam memori yang cepat diakses.
Yang sama pentingnya, permintaan yang ditolak harus mendapat jawaban yang jelas beserta informasi kapan bisa mencoba lagi, agar sistem pemanggil bisa menyesuaikan diri alih-alih terus mencoba.
Membatasi Ketergantungan Keluar
Mekanisme kedua bekerja pada arah sebaliknya, yaitu ketika sistem Anda memanggil layanan lain yang sedang bermasalah.
Prinsipnya menyerupai sekring listrik. Setelah sejumlah kegagalan berturut-turut terhadap satu layanan, pemanggilan berikutnya langsung digagalkan tanpa perlu menunggu waktu habis. Ini mencegah penumpukan permintaan yang tidak akan berhasil.
Setelah jeda tertentu, sistem mencoba beberapa permintaan untuk menguji apakah layanan tujuan sudah pulih. Bila berhasil, aliran dibuka kembali secara bertahap. Bila masih gagal, jeda diperpanjang.
Selama pemutusan berlangsung, sistem sebaiknya menyediakan perilaku cadangan. Menampilkan data terakhir yang tersimpan atau memberi pesan yang jelas jauh lebih baik daripada membiarkan pengguna menunggu tanpa kepastian.
Menempatkan Pertahanan di Lapisan yang Tepat
Pertahanan yang efektif ditempatkan berlapis, bukan hanya di satu titik.
Di lapisan gerbang, pembatasan dasar menyaring permintaan berlebihan sebelum menyentuh aplikasi inti. Ini paling murah karena permintaan ditolak sebelum menghabiskan sumber daya pemrosesan.
Di lapisan aplikasi, pembatasan yang lebih memahami konteks bisnis bisa diterapkan, misalnya membedakan antara permintaan yang menghasilkan transaksi dan permintaan yang hanya membaca data.
Di lapisan pemantauan, jumlah permintaan yang ditolak perlu dipantau sebagai indikator. Kenaikan mendadak bisa menandakan lonjakan wajar, tetapi bisa juga menandakan penyalahgunaan yang perlu ditangani secara berbeda.
Kapan Sistem Anda Membutuhkan Pertahanan Ini
Kebutuhan ini biasanya baru disadari setelah terjadi satu kejadian yang membuat layanan tidak dapat diakses.
Sinyal bahwa sistem Anda belum siap menghadapi lonjakan: Sistem pernah tidak dapat diakses sama sekali saat trafik memuncak. Kegagalan pada satu layanan sering menjatuhkan layanan lain yang tidak terkait. Tidak ada batas jumlah permintaan yang bisa diterima per pengguna atau per mitra. Permintaan yang gagal terus diulang tanpa jeda sehingga memperberat keadaan. Tidak ada perilaku cadangan ketika layanan pendukung tidak tersedia. Jumlah permintaan yang ditolak tidak dipantau sebagai indikator. Perusahaan akan menghadapi kampanye atau periode ramai yang terjadwal. Langkah Memulai Bersama Sagara Sagara memulai dari pengukuran terhadap pola beban yang sebenarnya, bukan dari penerapan konfigurasi standar. Konsultasi discovery untuk memahami pola trafik dan titik yang paling rentan. Audit arsitektur untuk menilai perilaku sistem pada kondisi beban tinggi. Implementasi bertahap dengan pemantauan disiapkan lebih dulu, agar setiap batas yang ditetapkan bisa disesuaikan berdasarkan data. Kesimpulan Sistem yang berusaha melayani semua permintaan pada saat kapasitasnya terlampaui akan berakhir tidak melayani siapa pun. Sebagai vendor outsourcing IT berbasis cloud di Indonesia, Sagara merancang sistem yang tahu kapan harus menolak dengan tertib dan kapan harus memutus ketergantungan yang bermasalah. Karena ketahanan sebuah layanan tidak diukur dari kondisi normal, melainkan dari perilakunya ketika beban melampaui perkiraan.