Pendahuluan

Ketika kita menggunakan sebuah sistem aplikasi, baik menggunakan server sendiri, cloud, arsitektur monolitik atau microservice, maka mungkin akan terjadi apa yang namanya kegagalan sebagian sistem.

Maksudnya ?

Maksudnya ada bagian dari sistem aplikasi kita yang mati, atau tidak stabil, atau mati sekali tapi kemudian hidup lagi (seperti mati lampu ditengah malam, kemudian hidup lagi, tapi efeknya bisa banyak bagi peralatan listrik kita).

Walaupun kejadian ini bisa terjadi di tipe arsitektur apapun, akan tetapi biasanya akan lebih banyak terjadi di sistem yang terdistribusi.

Sistem terdistribusi maksudnya adalah sistem cloud atau sistem yang terkait dengan banyak komponen terpisah yang dihubungkan dengan jaringan.

Sistem terdistribusi ini biasanya juga kita dapatkan di sistem berarsitektur microservice, atau terkait dengan sistem yang melibatkan API dengan pihak ketiga.

Apa saja bagian dari sistem yang mungkin akan gagal beroperasi ?

Banyak sekali bagian dari sebuah sistem aplikasi, diantaranya bisa dikelompokkan sebagai :

  • Komponen fisik, seperti harddisk, I/O device, memory, CPU, kabel.
  • Komponen software, seperti program, dan service.
  • Komponen jaringan, seperti bandwith, latency.
  • Komponen konfigurasi, seperti konfigurasi internal, atau konfigurasi pihak ketiga.

Semua hal diatas bisa mengalami kerusakan/kegagalan/ketidakstabilan/ketidaksesuain data.

Hal yang wajar sebenarnya. Misalnya terjadi kegagalan sistem untuk :

  • Komponen fisik, bisa saja harddisk nya rusak, I/O device nya copot, kabel nya tergigit tikus, memori tidak dikenali, dll
  • Komponen software, bisa saja programnya ngehang, mendapatkan data yang salah, dll.
  • Komponen jaringan, bisa saja bandwidth nya mengecil, latency atau response dari servernya lambat, dll.
  • Komponen konfigurasi, bisa terkait dengan koneksi API ke pihak ketiga, konfigurasi internal, dll.

Kesemua itu disebut dengan Fault.

Fault dalam hal ini adalah kerusakan fisik, kerusakan software, jaringan, ketidak stabilan, ketidak sesuaian data

Fault ini berpotensi menyebabkan Error, atau “sesuatu yang salah” di dalam sistem.

Dan Error ini akan berpotensi menyebabkan Failure atau kegagalan sistem, yang efeknya ke pengguna, bisnis, kalkulasi, dll.

Jadi secara konsep , Fault ini adalah kerusakan fisik, kerusakan software, jaringan, ketidak stabilan, kesalahan data yang terjadi di sebagian sistem aplikasi kita.

Kalau kita lihat proses yang terjadi ketika sebuah failure terjadi, sbb :

flowchart LR Fault-->Error-->Failure

Jadi Fault ini memang merupakan biang utama terjadinya sebuah failure/kegagalan dalam sistem.

Pembahasan mengenai Fault, Error, dan Failure kita kulik di artikel terpisah.

Apa Efeknya ?

Tentu saja ketika Fault ini terjadi, maka banyak efeknya, misalnya :

  • Sistem secara keseluruhan akan tidak berfungsi, karena saling ketergantungan antara sistem yang ada.
  • Terjadi kesalahan data di level aplikasi, bisnis, yang bisa menyangkut reputasi, finansial, dan bisa jadi menyangkut hukum.
  • Data yang corrupt, dan tidak lengkap, atau terhenti di tengah jalan, akan mempengaruhi proses selanjutnya, atau sistem lain yang tergantung dari aplikasi kita.
  • dll.

Bagaimana menanganinya ?

Tentu saja menanganinya dengan apa yang kita sebut sebagai Fault Tolerance

Fault Tolerance adalah kemampuan dari sebuah sistem agar tetap beroperasi normal walaupun mengalami kegagalan sebagian dari sistemnya.

Woow, kedengaran kereen sekali ya ?

Ya tentu saja mesti kedengaran keren.. :), untuk sebuah sistem aplikasi yang kita tergantung terhadapnya.

Bisa lebih detail lagi ?

Fault Tolerance adalah ketika terjadi kegagalan sebagian sistem, maka sistem kita secara keseluruhan tetap berjalan normal, dan tidak mengakibatkan aplikasi kita tidak bisa diakses, atau tidak membuat data kita tidak bisa diproses.

Kalau kita contohkan di dunia nyata, maka sistem Fault Tolerance ini mirip dengan sistem Genset listrik yang otomatis menyala ketika suplai listrik tiba-tiba mati/putus. Sehingga kita tidak mengalami mati lampu sama sekali walaupun sesaat. Bagaimanapun caranya.

Karena kalau listrik di rumah kita mati sesaat saja, maka peralatan listrik kita seperti komputer, AC, kulkas, dll akan mengalami kerusakan baik kecil ataupun besar.

Atau bisa saja data yang sedang kita proses di komputer kita, pada saat mati listrik, maka akan hilang atau corrupt.

Kalau sudah seperti itu, maka disebut Failure., yang dicegah oleh Fault Tolerant ini.

Kalau kita kembali ke alur sbb :

flowchart LR Fault-->Error-->Failure

Maka sistem yang Fault Tolerance, adalah sistem yang tidak pernah menyentuh level Failure.

Artinya bisa saja sebagian sistemnya mengalami Fault dan Error, akan tetapi tidak pernah sampai mengakibatkan sistem gagal secara keseluruhan, dan selalu ada cara untuk melakukan recovery, baik terhadap proses atau terhadap datanya.


Caranya bagaimana agar tetap berjalan normal ?

Banyak cara agar ketika sebagian sistem aplikasi kita gagal, dan keseluruhan aplikasi tetap berjalan.

Misalnya dengan cara :

  • Penggantian komponen yang rusak atau gagal secara otomatis. Misalnya yang banyak kita lihat banyak dipakai di teknik Redundancy, Replication.
  • Melakukan isolasi terhadap komponen yang rusak, agar tidak menyebar ke seluruh sistem. Misalnya kita lihat di kasus Circuit Breaker.
  • Pengalihan komponen atau Rekonfigurasi komponen yang rusak/tidak berfungsi/kelebihan load, misalnya dengan teknik LoadBalancing, AutoScaling.

Apakah ada efek sampingnya ?

Tentu saja ada efek samping yang tidak bisa kita hindarkan ketika terjadi kegagalan sebagian sistem kita, misalnya :

  • Sistem kita tetap berjalan, tetapi dengan sumber daya terbatas.
  • Sistem kita tetap berjalan, tetapi dengan fungsi yang terbatas.
  • Sistem kita tetap berjalan, tetapi dengan pemrosesan yang tertunda.

Pembahasan lebih lanjut, bisa kita kulik di artikel selanjutnya.