- Di lingkungan microservices dan cloud, gangguan tidak dapat dihindari, sehingga ketahanan sistem perlu diperkuat lebih dulu melalui Chaos Engineering
- Chaos Toolkit dan Chaos Monkey masing-masing dimanfaatkan sebagai alat pengujian gangguan yang kuat untuk lingkungan serbaguna dan lingkungan khusus Java (Spring Boot)
- Melalui eksperimen berbasis Kubernetes dan Istio, berbagai skenario gangguan realistis seperti latensi jaringan, penghentian layanan, dan gangguan region dapat disimulasikan
- Dengan mengintegrasikan Chaos Engineering ke dalam pipeline CI/CD, kemampuan respons terhadap gangguan dapat diverifikasi secara otomatis sebelum produksi
- Intinya bukanlah "merusak", melainkan "membangun kepercayaan", dan strategi memulai dari kecil lalu secara bertahap meningkatkan tingkat kekacauan direkomendasikan
Chaos Engineering untuk Microservices
Apa itu Chaos Engineering?
- Chaos Engineering adalah metodologi untuk mensimulasikan gangguan nyata agar kerentanan sistem dapat ditemukan dan diperbaiki lebih awal
- Contoh simulasi utama:
- Gangguan region atau data center
- Latensi jaringan antar-layanan
- Beban CPU berlebih dan gangguan I/O
- Ketidaktersediaan layanan dependensi
- Kesalahan file system
- Tujuan: memperpendek waktu pemulihan, meningkatkan ketersediaan, dan meminimalkan dampak pada pengguna sebelum gangguan terjadi
Siklus hidup eksperimen Chaos Engineering
- Melalui prosedur eksperimen yang terstruktur, diterapkan proses siklik perencanaan → pelaksanaan → observasi → perbaikan
- Operasional berbasis eksperimen yang berkelanjutan untuk meningkatkan keandalan secara sistematis
Chaos Toolkit vs. Chaos Monkey
-
Kegunaan
- Chaos Toolkit : framework eksperimen Chaos serbaguna yang dapat digunakan di berbagai platform dan lingkungan
- Chaos Monkey (khusus Spring Boot) : alat simulasi gangguan khusus untuk aplikasi Java Spring Boot
-
Cara konfigurasi
- Chaos Toolkit : mendefinisikan eksperimen dengan metode konfigurasi deklaratif berbasis JSON/YAML
- Chaos Monkey : dikonfigurasi melalui file
application.yml dan integrasi dengan Spring Boot Actuator
-
Bahasa dan lingkungan yang didukung
- Chaos Toolkit : mendukung lingkungan multi-bahasa dan multi-platform (Node.js, Java, Kubernetes, dll.)
- Chaos Monkey : dioptimalkan untuk aplikasi berbasis Java (Spring Boot)
-
Jenis gangguan yang didukung
- Chaos Toolkit : mendukung eksperimen gangguan yang luas seperti gangguan jaringan, penghentian Pod, stress CPU/memori, dan kegagalan kustom
- Chaos Monkey : penyisipan gangguan yang berfokus pada lapisan aplikasi seperti latensi (Latency), pengecualian (Exceptions), dan penghentian layanan (KillApp)
-
Sistem yang dapat diintegrasikan
- Chaos Toolkit : dapat terintegrasi dengan Kubernetes, Istio, Azure, Prometheus dan lainnya
- Chaos Monkey : terintegrasi langsung dengan Spring Boot Actuator API untuk komponen internal Spring
Situasi penggunaan yang direkomendasikan
- Chaos Toolkit
- Lingkungan deployment berbasis Kubernetes
- Layanan multi-cloud atau multi-bahasa
- Saat menyusun skenario gangguan yang kompleks
- Chaos Monkey
- Aplikasi Spring Boot berbasis Java
- Pengujian exception/latensi pada level metode
- Saat lebih menyukai pendekatan yang sederhana dan bawaan
Contoh praktik Chaos Toolkit (Java/Node.js/Kubernetes)
Eksperimen di lingkungan Kubernetes
- Eksperimen penghentian Pod: memverifikasi ketahanan dengan
pod-kill
- Eksperimen latensi region: menyuntikkan latensi jaringan ke layanan virtual Istio
- Eksperimen kehabisan sumber daya: konsumsi CPU/memori secara paksa
- Simulasi penghentian DB: menguji respons terhadap gangguan layanan dependensi
- Network partitioning: eksperimen pemutusan komunikasi antar-layanan
- Gangguan berbasis waktu: menyisipkan gangguan saat jam puncak trafik
Penyisipan latensi berbasis Istio
- Menyisipkan latensi jaringan pada lapisan service mesh
- Mengontrol latensi/tingkat error melalui konfigurasi Istio
Pembuatan dan analisis laporan
- Merangkum hasil eksperimen dengan perintah
chaos report
- Interpretasi hasil:
- Status normal tetap terjaga → ketahanan telah diamankan
- Anomali terdeteksi → perlu analisis log dan monitoring
- Terjadi gangguan berantai → pertimbangkan penerapan circuit breaker dan refactoring
Chaos Monkey di Spring Boot
- Target pemantauan:
@Controller, @Service, @Repository, @RestController
- Gangguan yang dapat disisipkan:
- Latency Assault: latensi buatan
- Exception Assault: memunculkan exception
- KillApp Assault: menghentikan seluruh aplikasi
Cara menjalankan
- Aktifkan profil
chaos-monkey di application.yml
- Kontrol dinamis melalui Spring Boot Actuator API
Chaos Engineering di Node.js
Pemanfaatan Chaos Monkey untuk Node.js
- Instal library Chaos Monkey pihak ketiga
- Fitur:
- Penyisipan latensi
- Memunculkan exception
- Simulasi gangguan jaringan
Contoh penggunaan Chaos Toolkit
- Menyusun eksperimen dalam format JSON
- Contoh: menyisipkan latensi 200ms pada API Node.js tertentu
Integrasi Chaos ke pipeline CI/CD
Tujuan integrasi
- Verifikasi otomatis ketahanan sebelum deployment
- Mengidentifikasi bottleneck performa
- Meningkatkan MTTR (Mean Time to Recovery)
- Otomatisasi rollback tanpa intervensi manual
Contoh integrasi GitHub Actions
- Menjalankan eksperimen secara otomatis saat kode di-commit
- Menjalankan eksperimen setelah menginstal Chaos Toolkit
- Menghentikan deployment jika health check gagal
Best practice saat melakukan eksperimen Chaos Engineering
- 1. Menyusun hipotesis kondisi normal: definisikan dengan jelas standar kondisi normal sistem
- 2. Mulai dari eksperimen berintensitas rendah: latensi 100ms → ditingkatkan secara bertahap
- 3. Integrasi monitoring wajib: observasi real-time dengan Prometheus, Grafana, dll.
- 4. Siapkan rollback otomatis: bangun mekanisme pemulihan cepat saat gagal
- 5. Perluas cakupan secara bertahap: dari tingkat layanan → ke tingkat cluster
Kesimpulan
- Chaos Engineering bukan untuk merusak sistem, melainkan strategi untuk membangun kepercayaan
- Di Java, Node.js, Kubernetes, maupun Istio, pendekatan ini dapat diperluas secara bertahap dengan memulai dari eksperimen kecil
- Dengan memanfaatkan alat seperti Chaos Toolkit dan Chaos Monkey, situasi gangguan nyata dapat disimulasikan dengan aman
- Dengan mengintegrasikan dan mengotomatiskan eksperimen ke CI/CD, fondasi operasional yang stabil dapat dipastikan lebih awal
Referensi
1 komentar
Begitu mendengar istilah chaos engineering, saya sempat mengira ini sedang membahas backend perusahaan kami yang saya buat sendiri;