Pengantar Chaos Monkey

1. Perkenalan

Dalam tutorial ini, kita akan berbicara tentang Chaos Monkey for Spring Boot.

Alat ini membantu kami memperkenalkan beberapa prinsip rekayasa chaos ke dalam aplikasi web Spring Boot kami dengan menambahkan latensi ke titik akhir REST kami, melakukan kesalahan, atau bahkan mematikan aplikasi.

2. Penyiapan

Untuk menambahkan Chaos Monkey ke aplikasi kita, kita membutuhkan satu dependensi Maven dalam proyek kita:

 de.codecentric chaos-monkey-spring-boot 2.0.0 

3. Konfigurasi

Setelah kami memiliki pengaturan ketergantungan dalam proyek kami, kami perlu mengkonfigurasi dan memulai kekacauan kami.

Kami dapat melakukan ini dengan beberapa cara:

  • Saat memulai aplikasi, menggunakan profil chaos-monkey spring (disarankan)
  • Menggunakan chaos.monkey.enabled = properti true

Dengan memulai aplikasi dengan profil musim semi chaos-monkey, kita tidak perlu berhenti dan memulai aplikasi jika kita ingin mengaktifkan atau menonaktifkannya saat aplikasi kita sedang berjalan:

java -jar your-app.jar --spring.profiles.active=chaos-monkey

Properti berguna lainnya adalah management.endpoint.chaosmonkey.enabled. Menyetel properti ini ke true akan mengaktifkan titik akhir pengelolaan untuk Chaos Monkey kami:

//localhost:8080/chaosmonkey

Dari titik akhir ini, kita dapat melihat status perpustakaan kita. Berikut adalah daftar lengkap titik akhir dan deskripsinya yang akan membantu mengubah konfigurasi, mengaktifkan atau menonaktifkan Chaos Monkey dan kontrol lain yang lebih terperinci.

Dengan menggunakan semua properti yang tersedia, kita dapat memiliki kontrol yang lebih cermat atas apa yang terjadi dalam kekacauan yang kita hasilkan.

4. Bagaimana Cara Kerjanya

Chaos Monkey terdiri dari Watchers dan Assaults. A Watcher adalah komponen Spring Boot. Itu menggunakan Spring AOP untuk melihat kapan metode publik dieksekusi di kelas yang dianotasi dengan anotasi Spring berikut:

  • Komponen
  • Kontroler
  • RestController
  • Layanan
  • Gudang

Berdasarkan konfigurasi di file properti aplikasi kita, metode publik kita akan diserang atau tidak , oleh salah satu dari berikut ini:

  • Latency Assault - menambahkan latensi acak ke permintaan
  • Exception Assault - melempar Pengecualian Waktu Proses secara acak
  • AppKiller Assault - um, aplikasi mati

Mari kita lihat bagaimana kita dapat mengkonfigurasi pengamat dan penyerangan kita untuk serangan yang lebih terkontrol.

5. Pengamat

Secara default, Pengamat hanya diaktifkan untuk layanan kami . Ini berarti bahwa serangan kami hanya akan dieksekusi untuk metode publik di kelas kami yang dianotasi dengan @Service.

Tetapi kita dapat dengan mudah mengubahnya dengan mengkonfigurasi properti:

chaos.monkey.watcher.controller=false chaos.monkey.watcher.restController=false chaos.monkey.watcher.service=true chaos.monkey.watcher.repository=false chaos.monkey.watcher.component=false

Perlu diingat bahwa setelah aplikasi dimulai, kami tidak dapat mengubah pengamat secara dinamis menggunakan port manajemen Chaos Monkey for Spring Boot yang telah kita bicarakan sebelumnya.

6. Serangan

Serangan pada dasarnya adalah skenario yang ingin kami uji dalam aplikasi kami. Mari kita ambil setiap jenis serangan dan lihat apa yang dilakukannya dan bagaimana kita dapat mengkonfigurasinya.

6.1. Latency Assault

Jenis serangan ini menambahkan latensi ke panggilan kami. Dengan cara ini aplikasi kita merespon lebih lambat dan kita dapat memantau bagaimana perilakunya ketika misalnya database merespon lebih lambat.

We can configure and turn on or of this type of attack using the properties file of our app:

chaos.monkey.assaults.latencyActive=true chaos.monkey.assaults.latencyRangeStart=3000 chaos.monkey.assaults.latencyRangeEnd=15000

Another way to configure and switch on and off this type of attack is through the management endpoint of Chaos Monkey.

Let's turn on the latency attack and add a range of latency between two and five seconds:

curl -X POST //localhost:8080/chaosmonkey/assaults \ -H 'Content-Type: application/json' \ -d \ ' { "latencyRangeStart": 2000, "latencyRangeEnd": 5000, "latencyActive": true, "exceptionsActive": false, "killApplicationActive": false }'

6.2. Exception Assault

This tests how well our application can handle exceptions. Based on configuration it will throw a random Runtime Exception once enabled.

We can enable it using a curl call similar to our latency assault:

curl -X POST //localhost:8080/chaosmonkey/assaults \ -H 'Content-Type: application/json' \ -d \ ' { "latencyActive": false, "exceptionsActive": true, "killApplicationActive": false }'

6.3. AppKiller Assault

This one, well, our app will die at some random point. We can enable or disable it with a simple curl call like the previous two types of assault:

curl -X POST //localhost:8080/chaosmonkey/assaults \ -H 'Content-Type: application/json' \ -d \ ' { "latencyActive": false, "exceptionsActive": false, "killApplicationActive": true }'

7. Conclusion

Pada artikel ini, kami membahas tentang Chaos Monkey for Spring Boot . Kami telah melihat bahwa dibutuhkan beberapa prinsip chaos engineering dan memungkinkan kami menerapkannya pada aplikasi Spring Boot.

Seperti biasa, kode lengkap dari contoh dapat ditemukan di Github.