9.6

View in English

9.6 Rekayasa chaos dan pengujian ketahanan

Tinjauan dan motivasi

Rekayasa chaos adalah praktik disiplin menjalankan eksperimen pada sistem untuk membangun keyakinan atas kemampuannya menahan kondisi bergejolak di produksi. Namanya terdengar sembrono, dan itulah hal pertama yang harus dilupakan. Rekayasa chaos bukan merusak hal secara acak dan berharap belajar sesuatu. Ia kebalikannya: metode terkendali berbasis hipotesis untuk menyuntikkan kegagalan realistis agar Anda menemukan kelemahan sebelum pengguna Anda. Anda sudah tahu sistem Anda akan menghadapi kegagalan, karena setiap sistem nyata begitu. Satu-satunya pertanyaan adalah apakah Anda menemui kegagalan itu pada sore Selasa dengan rollback siap, atau pukul 3 pagi pada jam tersibuk tanpa tahu apa yang terjadi.

Bagi tim besar, ini penting karena kompleksitas telah melampaui kemampuan siapa pun bernalar tentangnya lewat inspeksi. Layanan modern adalah jaring puluhan atau ratusan komponen, masing-masing dengan timeout, retry, cache, dan mode kegagalannya sendiri, dan interaksi di antaranya menghasilkan perilaku emergen yang tak diprediksi diagram arsitektur mana pun. Anda dapat meninjau kode, menggambar kotak, dan tetap terkejut ketika dependensi lambat memicu badai retry yang menjatuhkan layanan tiga lompatan jauhnya. Rekayasa chaos adalah cara Anda menyelidiki interaksi itu secara empiris, agar ketahanan Anda adalah sesuatu yang telah diverifikasi alih-alih diasumsikan.

Konteks enterprise dan pemerintah menaikkan taruhan dan, makin, mandat. Regulator keuangan kini mengharapkan perusahaan menguji ketahanan operasional terhadap skenario parah-tetapi-masuk-akal dan membuktikan mereka dapat menjaga layanan kritis berjalan melalui gangguan. Badan pemerintah menjalankan latihan kesinambungan operasi agar layanan publik esensial selamat dari pemadaman, bencana, dan serangan siber. Di kedua dunia, “kami kira akan bertahan” bukan jawaban yang dapat diterima bagi auditor atau warga. Rekayasa chaos memberi Anda bukti. Bab ini dibangun di atas site reliability engineering (bab 9.1) dan pola ketahanan di bab 3.5, dan terhubung erat dengan manajemen insiden (bab 9.3) dan pemulihan bencana (bab 9.5).

Prinsip utama

  • Bangun keyakinan, jangan menciptakan chaos. Tujuannya ketahanan terverifikasi, bukan tontonan. Setiap eksperimen menjawab pertanyaan spesifik tentang bagaimana sistem berperilaku di bawah tekanan.
  • Definisikan keadaan mapan lebih dulu. Anda tak dapat mendeteksi masalah tanpa definisi jelas dan terukur tentang seperti apa “sehat.”
  • Bentuk hipotesis. Nyatakan apa yang Anda harapkan terjadi sebelum menyuntikkan kesalahan. Kejutan adalah temuan; ketiadaannya juga temuan.
  • Minimalkan dan batasi radius ledakan. Mulai kecil, lindungi pengguna nyata, dan perluas cakupan hanya seiring keyakinan tumbuh.
  • Pilih produksi, dengan hati-hati. Kegagalan berperilaku berbeda di bawah lalu lintas, data, dan skala nyata. Peroleh hak untuk menguji di sana.
  • Otomatiskan menuju verifikasi berkelanjutan. Kelemahan yang Anda perbaiki sekali dapat regresi. Ketahanan yang diuji terus-menerus tetap benar.
  • Kegagalan adalah guru, bukan vonis. Temuan memperbaiki sistem; mereka tak pernah alasan menyalahkan orang yang menjalankan eksperimen.

Rekomendasi

Tetapkan prasyarat sebelum Anda menyuntikkan satu kesalahan pun

Rekayasa chaos adalah pengali kekuatan untuk sistem matang dan liabilitas untuk yang belum matang. Sebelum memulai, Anda butuh tiga hal di tempat. Pertama, observabilitas, yaitu metrik, log, dan trace yang memungkinkan Anda melihat apa yang dilakukan sistem dari luar, karena eksperimen yang tak dapat Anda amati tak mengajari apa-apa. Kedua, service level objective atau definisi setara tentang kesehatan keadaan mapan (bab 9.1), agar Anda dapat membedakan eksperimen berhasil dari yang merugikan secara real-time. Ketiga, jalur rollback atau pembatalan yang cepat dan tepercaya, agar saat eksperimen mengancam pengguna nyata Anda dapat menghentikannya dan memulihkan layanan normal dalam detik. Jika Anda tak dapat mengukur sistem, mendefinisikan keadaan sehatnya, dan menariknya dari tepi, jangan jalankan eksperimen chaos dulu. Bangun kapabilitas itu lebih dulu. Mereka terbayar sendiri terlepas dari itu.

Definisikan keadaan mapan dan bentuk hipotesis nyata

Setiap eksperimen dimulai dengan menuliskan seperti apa normal dalam istilah terukur: tingkat keberhasilan permintaan di atas 99,9 persen, latensi checkout di bawah 400 milidetik pada persentil ke-95, kedalaman antrean di bawah ambang. Ini definisi keadaan mapan Anda, dan ia harus mencerminkan kesehatan terlihat pengguna, bukan perpipaan internal. Lalu nyatakan hipotesis dalam bahasa sederhana: “Jika kami menambah 300 milidetik latensi ke layanan rekomendasi, halaman produk masih akan dirender dalam anggaran latensinya karena halaman memperlakukan rekomendasi sebagai opsional dan time out setelah 200 milidetik.” Kini Anda punya klaim yang dapat difalsifikasi. Ketika Anda menjalankan eksperimen, satu dari dua hal baik terjadi. Entah sistem berperilaku seperti diprediksi dan keyakinan Anda diperoleh, atau tidak dan Anda telah menemukan kelemahan nyata dengan murah, dengan syarat Anda, dengan insinyur menonton.

Suntikkan kesalahan realistis, bukan sembarang

Kesalahan yang Anda perkenalkan harus mencerminkan kegagalan yang benar-benar dialami sistem Anda. Injeksi kesalahan, pengenalan galat yang disengaja untuk menguji bagaimana sistem merespons, memberi Anda menu yang ditarik dari insiden produksi nyata. Suntikkan latensi untuk mensimulasikan dependensi lambat atau tautan jaringan jenuh. Suntikkan galat, mengembalikan HTTP 500 atau penolakan koneksi, untuk mensimulasikan layanan hilir yang gagal. Suntikkan kehabisan sumber daya dengan mengonsumsi CPU, memori, disk, atau file descriptor, untuk melihat bagaimana sistem terdegradasi di bawah tekanan. Suntikkan kegagalan dependensi dengan membuat seluruh basis data, cache, antrean, atau API pihak ketiga tak terjangkau. Dalam sistem terdistribusi, di mana komponen berjalan di mesin terpisah dan berkomunikasi lewat jaringan tak andal, inilah kegagalan yang mendominasi pemadaman nyata. Latensi dan kegagalan parsial, bukan crash bersih, yang merusak hal dalam praktik, jadi bobotkan eksperimen Anda menuju tengah yang berantakan.

Verifikasi bahwa mekanisme ketahanan Anda benar-benar berfungsi

Di sinilah rekayasa chaos membayar. Sistem Anda penuh mekanisme yang seharusnya melindungi Anda: timeout yang menghentikan pemanggil menunggu selamanya, retry yang menambal gangguan sementara, circuit breaker yang berhenti menghantam dependensi gagal, dan failover yang beralih ke standby ketika primer mati. Pola ini, dibahas di bab 3.5, adalah beda antara masalah terkandung dan pemadaman berantai. Masalahnya adalah mereka jarang diuji pada kondisi yang menjadi alasan keberadaannya. Timeout yang ditetapkan 30 detik ketika tenggat pemanggil sendiri 2 detik tidak melakukan apa-apa. Retry tanpa backoff mengubah satu layanan yang berjuang menjadi kawanan menyerbu. Circuit breaker yang tak pernah dilatih mungkin salah konfigurasi dan tak pernah trip, atau trip terus-menerus. Eksperimen chaos adalah cara Anda memastikan bahwa masing-masing berperilaku seperti dirancang ketika kesalahan yang dijaganya benar-benar tiba. Asumsikan setiap mekanisme keselamatan tak teruji rusak sampai eksperimen membuktikan sebaliknya.

Mulai dengan game day sebelum Anda mengotomatisasi

Jangan mulai dengan platform otomatis yang menyuntikkan kesalahan terus-menerus. Mulailah dengan game day: latihan terjadwal dan langsung di mana tim berkumpul, memilih skenario, menyuntikkan kesalahan di lingkungan terkendali, dan mengamati bersama. Bahkan sebelum itu, latihan tabletop, di mana Anda membicarakan skenario di papan tulis tanpa menyentuh sistem, memunculkan celah dalam runbook, peringatan, dan kepemilikan dengan risiko hampir nol. Game day adalah jalan masuk Anda. Mereka membangun otot membentuk hipotesis, membatasi radius ledakan, dan membaca sistem di bawah tekanan, dan membangun kepercayaan dengan pimpinan dan tim tetangga yang akan Anda butuhkan sebelum ada yang membiarkan Anda menjalankan eksperimen di produksi. Mereka juga langsung memperkuat respons insiden, karena keterampilannya sama dengan yang dipakai insinyur on-call Anda selama insiden nyata (bab 9.3). Jalankan game day pertama Anda di staging, lalu di produksi pada jam sepi dengan radius ledakan kecil, lalu perluas.

Batasi radius ledakan dengan sengaja

Praktik keselamatan tunggal terpenting adalah membatasi potensi kerugian setiap eksperimen. Mulailah dengan cakupan terkecil yang dapat mengajari Anda sesuatu: satu instans, satu persen lalu lintas, satu dependensi non-kritis, satu zona ketersediaan. Definisikan kondisi pembatalan sebelum Anda mulai, sambungkan ke metrik keadaan mapan Anda, dan jadikan menghentikan eksperimen satu tindakan yang dapat dipicu siapa pun yang menonton. Pilih menjalankan pada jam kerja ketika tim waspada dan terstaf, bukan semalam ketika kejutan menjadi insiden tanpa yang mengawasi. Perlebar radius ledakan hanya ketika eksperimen lebih kecil berjalan bersih dan keyakinan Anda benar-benar lebih tinggi. Disiplin pembatasan inilah yang memisahkan rekayasa chaos dari pemadaman yang Anda sebabkan sendiri.

Tumbuh menuju verifikasi ketahanan berkelanjutan dan otomatis

Game day sesekali menemukan kelemahan, tetapi sistem berubah setiap hari, dan perbaikan kuartal lalu dapat diam-diam regresi. Keadaan akhir matang adalah verifikasi berkelanjutan: kumpulan terkurasi eksperimen ketahanan yang berjalan otomatis, dalam pipeline atau sesuai jadwal, sehingga regresi pada timeout, kebijakan retry, atau jalur failover tertangkap dalam hitungan hari alih-alih selama pemadaman nyata berikutnya. Di sinilah perkakas seperti Chaos Monkey milik Netflix, yang secara acak menghentikan instans di produksi untuk memaksa insinyur membangun layanan yang menoleransi hilangnya instans, memperoleh reputasinya. Otomatiskan hanya eksperimen yang sudah Anda pahami dan percayai dari proses manual. Chaos berkelanjutan di atas sistem yang belum matang adalah cara menghasilkan insiden, bukan keyakinan.

Hubungkan eksperimen dengan pemulihan bencana dan pembelajaran insiden

Rekayasa chaos tidak hidup sendiri. Skenario yang lebih besar dan lebih langka, kehilangan seluruh wilayah, failover basis data, memulihkan dari cadangan, termasuk pengujian pemulihan bencana (bab 9.5), dan game day sering kendaraan terbaik untuk melatih rencana itu alih-alih membiarkannya membusuk sebagai dokumen tak teruji. Di sisi lain, setiap eksperimen yang memunculkan kelemahan harus memberi makan loop pembelajaran yang sama seperti insiden nyata (bab 9.3): catatan tanpa menyalahkan, perbaikan terlacak, dan eksperimen tindak lanjut untuk memastikan perbaikan bertahan. Ketika temuan chaos, latihan pemulihan bencana, dan retrospektif insiden semuanya mengalir ke satu backlog kerja ketahanan, Anda mendapat imbal hasil berbunga alih-alih latihan sekali jalan yang tersebar.

Trade-off: kelebihan dan kekurangan

KeputusanKelebihanKekurangan
Menguji di produksiLalu lintas, data, dan skala nyata; temuan benarRisiko bagi pengguna jika pembatasan gagal; butuh kematangan
Menguji hanya di stagingAman, taruhan rendah, mudah dimulaiMelewatkan perilaku dunia nyata; keyakinan palsu
Game day manualMembangun keterampilan dan kepercayaan; biaya perkakas rendahJarang; temuan dapat regresi tanpa disadari
Chaos otomatis berkelanjutanMenangkap regresi cepat; berskalaButuh perkakas dan observabilitas matang lebih dulu
Radius ledakan luasMengungkap kelemahan sistemik besarRisiko tinggi; kesalahan menjadi insiden
Radius ledakan sempitAman dan terkendaliMungkin melewatkan kegagalan emergen lintas layanan

Ketegangan sentralnya antara realisme dan keselamatan. Temuan yang paling Anda inginkan datang dari produksi, karena itu satu-satunya tempat sistem Anda menghadapi lalu lintas, data, dan skala nyata, namun produksi persis tempat eksperimen yang salah merugikan pengguna. Resolusinya bukan memilih satu sisi. Melainkan memperoleh jalan Anda menuju produksi secara bertahap: buktikan prasyarat Anda, berlatih di staging, lalu jalankan eksperimen kecil yang terkendali baik di produksi dengan kondisi pembatalan tersambung ke metrik langsung, dan perluas cakupan hanya seiring bukti terkumpul. Ketegangan berulang lain, manual versus otomatis, terselesaikan dengan cara sama seiring waktu. Mulai manual untuk membangun pemahaman dan kepercayaan, lalu otomatiskan eksperimen yang telah Anda andalkan, agar ketahanan yang diverifikasi sekali tetap terverifikasi.

Pertanyaan untuk didiskusikan dengan tim Anda

  1. Apakah kita benar-benar siap menjalankan eksperimen chaos, dan bagaimana kita akan tahu? Menggoda untuk mulai menyuntikkan kesalahan karena terdengar canggih, tetapi rekayasa chaos pada sistem tak teramati tanpa definisi kesehatan jelas dan tanpa rollback cepat hanyalah downtime yang disebabkan sendiri. Bawa bukti jujur ke diskusi ini: dapatkah Anda melihat tingkat keberhasilan permintaan dan latensi secara real-time, apakah Anda punya definisi keadaan mapan yang disepakati, dan dapatkah Anda membatalkan eksperimen dan pulih dalam detik? Bagi tim besar, jawabannya sering berbeda per layanan, jadi keluaran yang berguna adalah batas kesiapan yang harus dilewati layanan sebelum memenuhi syarat untuk eksperimen. Dalam pengaturan teregulasi batas kesiapan itu berfungsi ganda sebagai kontrol yang dapat Anda tunjukkan kepada auditor. Jika jawaban jujurnya Anda belum siap, kerja chaos paling berharga yang dapat Anda lakukan kuartal ini adalah membangun kapabilitas observabilitas dan rollback yang membuat Anda siap.

  2. Apa kebijakan radius ledakan kita, dan siapa yang berwenang menghentikan eksperimen? Setiap eksperimen chaos membawa sedikit risiko bagi pengguna nyata, dan beda antara temuan berharga dan insiden yang Anda sebabkan adalah seberapa ketat Anda membatasinya. Bicarakan batas konkret: pecahan lalu lintas berapa, berapa instans, lingkungan mana, jam berapa, dan ambang metrik apa yang otomatis membatalkan proses. Putuskan di muka siapa yang mengawasi setiap eksperimen dan siapa yang memegang kill switch satu-tindakan, karena eksperimen yang tak dapat dihentikan siapa pun dengan cepat tidak terkendali. Bagi organisasi besar kebijakan ini yang memungkinkan banyak tim bereksperimen tanpa salah satunya tak sengaja menjatuhkan dependensi bersama. Jawabannya harus dituliskan, disepakati dengan tim yang layanannya mungkin Anda pengaruhi, dan diperlakukan sebagai prasyarat untuk menjalankan apa pun di produksi.

  3. Mekanisme ketahanan mana yang kita yakini melindungi kita, dan sudahkah kita benar-benar mengujinya? Sebagian besar sistem penuh timeout, retry, circuit breaker, cache, dan jalur failover yang dikonfigurasi sekali dan tak pernah dilatih di bawah kegagalan yang menjadi alasan keberadaannya. Buat daftar mekanisme yang Anda andalkan, lalu tanyakan, untuk masing-masing, kapan terakhir diverifikasi berfungsi di bawah kesalahan injeksi nyata. Pertimbangan yang bersaing adalah waktu: memverifikasi setiap mekanisme memakan upaya rekayasa, dan selalu ada tenggat fitur. Bawa bukti tandingan terhadap keberatan itu, yaitu biaya pemadaman masa lalu yang akan dikandung oleh circuit breaker yang berfungsi atau timeout yang benar. Jawabannya harus mengubah daftar perlindungan yang diasumsikan secara menenangkan menjadi backlog eksperimen yang diprioritaskan, dimulai dari mekanisme yang kegagalannya akan paling menyakitkan.

  4. Apa yang harus benar sebelum kita menjalankan eksperimen di produksi alih-alih staging, dan layanan mana yang telah memperoleh hak itu hari ini? Temuan yang paling Anda inginkan datang dari produksi, karena itu satu-satunya tempat sistem Anda bertemu lalu lintas, data, dan skala nyata, namun produksi juga satu-satunya tempat eksperimen yang salah merugikan pengguna sebenarnya. Bagi tim besar kenyataan jujurnya adalah layanan berbeda berada pada tingkat kesiapan berbeda, sehingga aturan “tanpa chaos produksi” menyia-nyiakan pembelajaran terbaik Anda sementara “ya” seragam mengundang pemadaman yang disebabkan sendiri. Bawa bukti per layanan: kualitas observabilitasnya, apakah keadaan mapan didefinisikan dan dapat diberi peringatan, seberapa cepat rollback, dan rekam jejak eksperimen staging bersih yang akan membenarkan kenaikannya. Dalam pengaturan enterprise dan pemerintah, kaitkan gerbang produksi dengan kontrol terdokumentasi yang menamai siapa yang menyetujui promosi dan kondisi pembatalan apa yang tersambung ke metrik langsung, agar auditor melihat keputusan sengaja dan berbukti alih-alih tim berimprovisasi dengan pengguna nyata.

  5. Ketika eksperimen chaos memunculkan kelemahan, ke mana temuan itu pergi, dan bagaimana kita mencegahnya membusuk tak tersentuh? Program yang menemukan kelemahan tetapi tak pernah memperbaikinya lebih buruk daripada tanpa program, karena membakar upaya, mengikis kepercayaan, dan mengajari orang bahwa eksperimen adalah teater. Tekanan yang bersaing selalu peta jalan fitur: perbaikan ketahanan jarang terasa semendesak rilis berikutnya sampai pemadaman yang akan dicegahnya benar-benar tiba. Bawa keadaan backlog ketahanan Anda saat ini ke diskusi: berapa temuan chaos terbuka, seberapa tua yang tertua, dan apakah temuan dari eksperimen, latihan pemulihan bencana, dan retrospektif insiden mengalir ke antrean bersama atau tersebar di antara tim. Sepakati siapa yang memiliki setiap perbaikan dan siapa yang menjalankan eksperimen tindak lanjut yang memastikan ia bertahan. Untuk organisasi besar atau teregulasi, namai forum yang meninjau backlog pada irama tetap dan memegang wewenang memprioritaskan perbaikan ketahanan di atas fitur, karena temuan yang tak ada yang akuntabel menutupnya adalah risiko yang hanya Anda dokumentasikan alih-alih Anda hilangkan.

  6. Apakah kita siap mengotomatisasi sebagian eksperimen kita menjadi verifikasi berkelanjutan, dan yang mana secara spesifik? Game day sesekali menemukan kelemahan, tetapi sistem berubah setiap hari dan perbaikan kuartal lalu dapat diam-diam regresi, sehingga keadaan akhir matang adalah kumpulan eksperimen terkurasi yang berjalan otomatis dan menangkap regresi dalam hitungan hari. Bahayanya mengotomatisasi terlalu dini: chaos berkelanjutan yang dilapiskan di atas sistem belum matang dengan observabilitas lemah menghasilkan insiden lebih cepat daripada wawasan. Bawa daftar eksperimen yang telah Anda jalankan manual cukup kali untuk dipercaya sepenuhnya, kontrol radius ledakan dan kondisi pembatalan yang akan mengaturnya tanpa pengawasan, dan pemantauan yang akan menangkap proses otomatis yang berjalan salah pukul 3 pagi ketika tak ada yang menonton. Untuk enterprise besar atau lembaga publik, timbang pengawasan tambahan yang diundang injeksi kesalahan tanpa pengawasan: persetujuan manajemen perubahan, jejak audit yang harus ditinggalkan setiap proses otomatis, dan akuntabilitas jelas untuk eksperimen terjadwal yang bertepatan dengan insiden nyata. Otomatiskan hanya eksperimen yang sudah Anda pahami, dan jaga sisanya manual sampai mereka memperoleh kepercayaan yang sama.

Lensa sektor

Startup. Kecepatan dan kelangsungan hidup mendominasi, jadi jangan belanjakan apa pun untuk platform chaos. Jalankan satu game day sembilan puluh menit di staging terhadap satu dependensi yang kegagalannya benar-benar akan membunuh Anda, biasanya pembayaran, autentikasi, atau penyimpanan data primer Anda. Suntikkan kegagalan dengan proksi kasar atau proses yang dihentikan, amati apa yang rusak, perbaiki timeout atau fallback yang hilang, dan lanjutkan. Seluruh maksudnya menangkap pemadaman yang disebabkan sendiri yang jelas secara murah sebelum pelanggan melakukannya, bukan membangun disiplin yang tak dapat Anda isi stafnya.

Bisnis kecil. Tanpa spesialis keandalan dan anggaran ketat, perlakukan pengujian ketahanan sebagai latihan berkala dan sengaja alih-alih program yang Anda isi stafnya. Bersandarlah pada fitur injeksi kegagalan yang sudah disertakan penyedia cloud atau perkakas terkelola Anda alih-alih membeli platform khusus, dan fokuskan eksperimen pada segelintir dependensi yang akan disadari pelanggan. Bingkai sebagai asuransi: satu sore yang dihabiskan memastikan cadangan Anda pulih dan checkout Anda terdegradasi anggun jauh lebih murah daripada pemadaman yang membuktikan keduanya tidak.

Enterprise. Masalahnya mengoordinasikan banyak tim terhadap dependensi bersama pada skala besar, jadi bakukan batas kesiapan, kebijakan radius ledakan, dan penyambungan kondisi pembatalan yang harus dilewati setiap tim sebelum berjalan di produksi. Alirkan temuan chaos, latihan pemulihan bencana, dan retrospektif insiden ke satu backlog ketahanan dengan kepemilikan jelas, dan pakai game day kuartalan plus kumpulan terkurasi eksperimen otomatis untuk memenuhi ekspektasi ketahanan operasional dengan bukti. Atur siapa yang boleh memengaruhi layanan bersama agar eksperimen satu tim tak menjatuhkan infrastruktur yang diandalkan yang lain.

Pemerintah. Aturan pengadaan, transparansi, dan akuntabilitas publik membentuk pekerjaan. Mandat kesinambungan operasi sering mewajibkan latihan reguler bagaimanapun, jadi jalankan sebagai game day langsung yang menghasilkan temuan sungguhan alih-alih binder yang tak dibuka siapa pun, dan simpan jejak audit setiap eksperimen, radius ledakannya, dan hasilnya. Di mana perkakas injeksi kesalahan diadakan, tuntut ia sesuai aturan keamanan dan penanganan data, dan sisihkan eksperimen produksi pada layanan menghadap warga untuk jendela yang disetujui dan terbatas ketat. Bukti yang dihasilkan program chaos adalah persis yang diharapkan badan pengawas atau auditor untuk dilihat.

Contoh

Startup. Startup lima belas orang menjalankan aplikasi web pada segelintir layanan dan bergantung pada API pembayaran pihak ketiga. Tak ada yang punya waktu untuk platform chaos, jadi tim menjalankan game day sembilan puluh menit di staging. Mereka membentuk hipotesis: jika API pembayaran mulai mengembalikan galat, checkout harus menampilkan pesan coba ulang yang jelas dan mengantrekan pesanan alih-alih crash. Mereka menyuntikkan respons 500 dengan proksi sederhana, dan menemukan frontend menggantung tanpa batas karena panggilan klien tak punya timeout. Mereka menambah timeout dan fallback ramah, menjalankan ulang eksperimen untuk memastikan perbaikan, dan menulis catatan dua paragraf di dokumen bersama. Total biaya: satu sore dan satu bug sangat nyata tertangkap sebelum pelanggan mengenainya.

Enterprise. Sebuah bank global harus mendemonstrasikan ketahanan operasional kepada regulator terhadap skenario parah-tetapi-masuk-akal. Tim keandalannya menjalankan program game day kuartalan plus sekumpulan eksperimen otomatis di produksi. Satu skenario mem-failover basis data transaksi primer ke standby-nya selama jendela lalu lintas rendah, dengan radius ledakan terbatas ketat dan kondisi pembatalan dikaitkan pada tingkat keberhasilan transaksi. Proses pertama mengungkap bahwa layanan rekonsiliasi hilir punya kebijakan retry tanpa backoff, menghasilkan lonjakan beban yang menunda pemulihan jauh melampaui recovery-time objective dalam rencana pemulihan bencana (bab 9.5). Temuan masuk ke backlog yang sama seperti retrospektif insiden, kebijakan retry diperbaiki dengan backoff eksponensial, dan eksperimen tindak lanjut memastikan failover kini selesai dalam target. Seluruh latihan menjadi bukti bagi regulator.

Pemerintah. Sebuah lembaga nasional yang mengoperasikan portal tunjangan menghadap warga wajib memelihara kesinambungan operasi melalui gangguan. Alih-alih memperlakukan rencana kesinambungannya sebagai binder yang tak dibuka siapa pun, lembaga menjalankan latihan kesinambungan tahunan sebagai game day langsung. Tim mensimulasikan hilangnya pusat data primer dan menelusuri failover ke situs sekunder, sementara secara terpisah menyuntikkan latensi ke dependensi verifikasi identitas untuk melihat apakah portal terdegradasi anggun. Mereka belajar bahwa celah pemantauan yang tak teruji membuat tim on-call buta terhadap layanan identitas yang melambat, sehingga peringatan menyala terlambat. Lembaga menutup celah observabilitas, memperbarui runbook, dan menjadwalkan latihan yang sama tahun depan, mengubah persyaratan kepatuhan menjadi ketahanan sungguhan dan teruji untuk layanan publik kritis.

Kasus bisnis: motivasi, ROI, dan TCO

Imbal hasil rekayasa chaos datang dari pemadaman yang tak pernah terjadi. Satu pemadaman besar untuk layanan besar dapat berbiaya puluhan ribu hingga jutaan dalam pendapatan hilang, penalti regulasi, tenaga kerja remediasi, dan kerusakan reputasi yang bertahan lama setelah layanan dipulihkan. Eksperimen chaos mengubah kejutan tak terprediksi dan mahal itu menjadi temuan murah dan terjadwal yang Anda perbaiki sesuai garis waktu Anda dengan insinyur menonton dan rollback siap. Menemukan timeout rusak selama game day terkendali berbiaya satu sore. Menemukannya selama insiden nyata berbiaya pemadaman, kerepotan semua tangan, dan kepercayaan pengguna Anda. Aritmetika mendukung game day dengan selisih lebar.

Total biaya kepemilikan sederhana begitu prasyarat ada, karena rekayasa chaos memakai ulang investasi observabilitas, peringatan, dan rollback yang Anda butuhkan bagaimanapun. Biaya jujurnya adalah waktu rekayasa menjalankan eksperimen, sedikit perkakas untuk menyuntikkan kesalahan dan membatasi radius ledakan, dan kerja budaya membuat pimpinan nyaman dengan sengaja memperkenalkan kegagalan. Yang terakhir itu hambatan sesungguhnya, dan jalan melaluinya adalah mulai di staging, tunjukkan temuan yang terpetakan ke uang atau risiko, dan biarkan beberapa eksperimen produksi terkendali membangun kepercayaan. Untuk mengajukan kasus kepada pimpinan, bingkai rekayasa chaos sebagai asuransi yang dapat diukur: sajikan biaya insiden terbaru, tunjukkan mana yang akan tertangkap eksperimen ketahanan, dan usulkan program yang mulai kecil dan meluas hanya seiring membuktikan dirinya. Dalam pengaturan teregulasi dan sektor publik, tambahkan sudut kepatuhan, karena pengujian ketahanan operasional dan latihan kesinambungan makin diharapkan, dan program chaos adalah cara Anda memenuhi ekspektasi itu dengan bukti alih-alih kertas.

Anti-pola dan jebakan

  • Chaos tanpa observabilitas. Menyuntikkan kesalahan ke sistem yang tak dapat Anda lihat adalah menebak dengan langkah tambahan; Anda akan merugikan dan tak belajar apa-apa.
  • Tanpa definisi keadaan mapan. Tanpa ukuran kesehatan yang disepakati, Anda tak dapat mengatakan apakah eksperimen mengungkap masalah atau menyebabkannya.
  • Tanpa hipotesis. Merusak hal secara acak bukan rekayasa chaos; ia vandalisme dengan nama mewah dan tanpa temuan.
  • Radius ledakan tak terkendali. Melewatkan eksperimen kecil yang aman dan langsung ke kegagalan seluruh produksi mengubah uji menjadi pemadaman yang disebabkan sendiri.
  • Tanpa jalur pembatalan. Eksperimen yang tak dapat Anda hentikan seketika bukan eksperimen; ia insiden yang menunggu pemicu.
  • Mengotomatisasi terlalu dini. Chaos berkelanjutan di atas sistem belum matang menghasilkan insiden lebih cepat daripada wawasan.
  • Temuan yang tak ke mana-mana. Menemukan kelemahan dan tak pernah memperbaikinya menyia-nyiakan latihan dan mengikis kepercayaan pada seluruh program.
  • Menyalahkan setelah eksperimen buruk. Menghukum insinyur yang menjalankan eksperimen yang memunculkan cacat nyata menjamin tak ada yang menjalankan berikutnya.

Model kematangan

  • Tingkat 1, Memulai: Ketahanan diasumsikan, bukan diuji. Kegagalan ditemukan di produksi selama insiden nyata. Tak ada game day, injeksi kesalahan, dan sering tak ada definisi jelas seperti apa sehat. Tim mempelajari kelemahannya dengan cara sulit, satu pemadaman demi satu.
  • Tingkat 2, Mengembangkan: Tim menjalankan game day sesekali, biasanya di staging, dengan skenario terdefinisi dan hipotesis. Keadaan mapan didefinisikan untuk beberapa layanan kunci dan observabilitas dasar ada. Temuan ditangkap dan sebagian diperbaiki, tetapi praktik tidak konsisten lintas tim dan bergantung pada juara individu alih-alih metode mapan.
  • Tingkat 3, Membakukan: Eksperimen chaos adalah praktik terdokumentasi seluruh organisasi dengan kebijakan radius ledakan, kondisi pembatalan, dan kriteria kesiapan yang ditegakkan yang harus dilewati layanan sebelum bereksperimen di produksi. Eksperimen berjalan di produksi di bawah kondisi terkendali, temuan mengalir ke backlog ketahanan bersama di samping retrospektif insiden dan latihan pemulihan bencana, dan mekanisme ketahanan diverifikasi alih-alih diasumsikan. Setiap tim mengikuti playbook yang sama.
  • Tingkat 4, Mengelola: Program diukur dan dikendalikan dengan data terhadap garis dasar. Anda melacak cakupan ketahanan (layanan kritis dan mekanisme mana, seperti timeout, retry, circuit breaker, dan failover, yang telah diverifikasi di bawah kesalahan injeksi nyata dan seberapa baru), laju eksperimen memunculkan temuan, mean time untuk menutup temuan ketahanan, dan seberapa sering mekanisme yang sebelumnya terverifikasi regresi. Metrik ini ditinjau pada irama tetap, promosi produksi digerbangi bukti alih-alih opini, dan eksperimen diprioritaskan menurut risiko terukur dari mekanisme yang masih belum diverifikasi.
  • Tingkat 5, Mengorkestrasi: Kumpulan terkurasi eksperimen berjalan terus-menerus dan otomatis, menangkap regresi dalam hitungan hari, dan program beradaptasi seiring sistem dan gambaran risikonya berubah. Rekayasa chaos terintegrasi di seluruh organisasi dengan pipeline pengiriman, pembelajaran insiden, dan pengujian pemulihan bencana, sehingga layanan baru mewarisi verifikasi ketahanan secara bawaan. Ketahanan adalah properti sistem yang diverifikasi terus-menerus, dan pimpinan memperlakukan program sebagai manajemen risiko standar yang diperhalus atas bukti alih-alih inisiatif khusus.

Gagasan untuk didiskusikan

  1. Bagaimana Anda memutuskan layanan mana di organisasi Anda yang memperoleh hak menjalankan eksperimen chaos di produksi lebih dulu, dan apa yang harus benar sebelum itu?
  2. Ketika eksperimen chaos memunculkan kelemahan serius, siapa yang memiliki perbaikan, dan bagaimana Anda mencegah temuan itu terpendam tak tersentuh di backlog?
  3. Di mana garis antara eksperimen chaos, latihan pemulihan bencana, dan game day dalam konteks Anda, dan apakah perbedaan itu bahkan penting bagi cara Anda merencanakannya?
  4. Bagaimana Anda akan meyakinkan eksekutif skeptis bahwa sengaja menyuntikkan kegagalan ke produksi lebih aman daripada status quo menunggu pemadaman nyata?
  5. Apa eksperimen pertama terkecil dan paling berharga yang dapat dijalankan tim Anda bulan depan, dan apa yang akan menghentikan Anda menjalankannya?
  6. Bagaimana pengujian ketahanan harus berbeda antara layanan publik menghadap warga dengan mandat kesinambungan dan perkakas enterprise internal dengan basis pengguna kecil?

Poin-poin utama

  • Rekayasa chaos adalah eksperimen disiplin berbasis hipotesis untuk membangun keyakinan atas ketahanan, bukan perusakan acak.
  • Tetapkan observabilitas, definisi keadaan mapan, dan rollback cepat sebelum Anda menyuntikkan satu kesalahan pun.
  • Suntikkan kesalahan realistis (latensi, galat, kehabisan sumber daya, kegagalan dependensi) dan pakai untuk memverifikasi bahwa timeout, retry, circuit breaker, dan failover benar-benar berfungsi.
  • Mulai dengan latihan tabletop dan game day, batasi radius ledakan dengan sengaja, dan peroleh jalan Anda menuju produksi dan otomasi.
  • Hubungkan eksperimen dengan pengujian pemulihan bencana (bab 9.5) dan pembelajaran insiden (bab 9.3) agar temuan berbunga menjadi satu backlog ketahanan.
  • Perlakukan temuan tanpa menyalahkan dan perbaiki; eksperimen yang pelajarannya tak ditangani lebih buruk daripada tanpa eksperimen sama sekali.

Referensi dan bacaan lanjutan

  • Casey Rosenthal, Nora Jones, Chaos Engineering: System Resiliency in Practice
  • Russ Miles, Learning Chaos Engineering: Discovering and Overcoming System Weaknesses Through Experimentation
  • Mikolaj Pawlikowski, Chaos Engineering: Crash Test Your Applications
  • Ali Basiri et al., Chaos Engineering (IEEE Software, 2016)
  • Betsy Beyer, Chris Jones, Jennifer Petoff, Niall Richard Murphy, Site Reliability Engineering: How Google Runs Production Systems
  • Michael T. Nygard, Release It! Design and Deploy Production-Ready Software
  • Principles of Chaos Engineering, principlesofchaos.org