Úvod do hry Chaos Monkey

1. Úvod

V tomto výučbe si povieme niečo o Chaos Monkey pre Spring Boot.

Tento nástroj nám pomáha zaviesť niektoré z princípov inžinierstva chaosu do našich webových aplikácií Spring Boot pridaním latencie k našim koncovým bodom REST, hádzaním chýb alebo dokonca zabitím aplikácie.

2. Inštalácia

Ak chcete do našej aplikácie pridať Chaos Monkey, potrebujeme v našom projekte jednu závislosť Maven:

 de.codecentric chaos-monkey-spring-boot 2.0.0 

3. Konfigurácia

Keď máme v našom projekte nastavenie závislostí, musíme nakonfigurovať a spustiť náš chaos.

Môžeme to urobiť niekoľkými spôsobmi:

  • Pri štarte aplikácie pomocou chaos-opice pružinový profil (odporúčané)
  • Použitím chaos.monkey.enabled = pravda nehnuteľnosť

Spustením aplikácie s chaos-opice pružinový profil nemusíme aplikáciu zastavovať a spúšťať, ak ju chceme povoliť alebo zakázať keď je naša aplikácia spustená:

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

Ďalšou užitočnou vlastnosťou je management.endpoint.chaosmonkey.enabled. Nastavením tejto vlastnosti na hodnotu true povolíte koncový bod správy pre našu Chaos Monkey:

// localhost: 8080 / chaosmonkey

Z tohto koncového bodu vidíme stav našej knižnice. Tu je úplný zoznam koncových bodov a ich popis, ktorý pomôže zmeniť konfiguráciu, povoliť alebo zakázať Chaos Monkey a ďalšie podrobnejšie ovládacie prvky.

Pomocou všetkých dostupných vlastností môžeme mať jemnejšiu kontrolu nad tým, čo sa stane v našom generovanom chaose.

4. Ako to funguje

Chaos Monkey sa skladá z pozorovateľov a útokov. Watcher je súčasť Spring Boot. Využíva Spring AOP na zistenie, kedy sa verejná metóda vykonáva v triedach anotovaných nasledujúcimi jarnými anotáciami:

  • Komponent
  • Kontrolór
  • RestController
  • Služby
  • Úložisko

Na základe konfigurácie v našom súbore vlastností aplikácie naše verejné metódy budú alebo budú napadnuté, jedným z nasledujúcich spôsobov:

  • Latency Assault - pridá k žiadosti náhodnú latenciu
  • Exception Assault - hodí náhodnú Runtime výnimku
  • AppKiller Assault - hm, aplikácia zomrie

Poďme sa pozrieť na to, ako môžeme nakonfigurovať náš sledovač a útoky na kontrolovanejšie útoky.

5. Strážca

V predvolenom nastavení je Watcher povolený iba pre naše služby. To znamená, že naše útoky sa vykonajú iba pre verejné metódy v našich triedach s poznámkami @Služba.

To však môžeme ľahko zmeniť konfiguráciou vlastností:

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

Nezabudnite, že po spustení aplikácie nemôžeme dynamicky meniť pozorovateľa pomocou portu pre správu Chaos Monkey pre Spring Boot o ktorých sme hovorili skôr.

6. Útoky

Útoky sú v podstate scenáre, ktoré chceme v našej aplikácii vyskúšať. Zoberme si každý typ útoku a pozrime sa, čo robí a ako ho môžeme nakonfigurovať.

6.1. Latency Assault

Tento typ útoku zvyšuje latenciu našich hovorov. Takto naša aplikácia reaguje pomalšie a my môžeme sledovať, ako sa správa, keď napríklad databáza reaguje pomalšie.

Tento typ útoku môžeme nakonfigurovať a zapnúť pomocou súboru vlastností našej aplikácie:

chaos.monkey.assaults.latencyActive = skutočný chaos.monkey.assaults.latencyRangeStart = 3000 chaos.monkey.assaults.latencyRangeEnd = 15000

Ďalším spôsobom, ako nakonfigurovať a zapnúť a vypnúť tento typ útoku, je koncový bod správy Chaos Monkey.

Zapnime útok latencie a pridajme rozsah latencie medzi dvoma a piatimi sekundami:

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. Výnimka Assault

Toto testuje, ako dobre dokáže naša aplikácia zvládnuť výnimky. Na základe konfigurácie vyvolá náhodnú Runtime výnimku po povolení.

Môžeme to povoliť pomocou curl hovoru podobného nášmu latentnému útoku:

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

6.3. AppKiller Assault

Táto, naša aplikácia, v určitom náhodnom okamihu zomrie. Môžeme ho povoliť alebo zakázať jednoduchým zvlneným volaním, ako sú predchádzajúce dva typy útoku:

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

7. Záver

V tomto článku hovorili sme o Chaos Monkey pre Spring Boot. Videli sme, že to vyžaduje niektoré princípy chaosového inžinierstva a umožňuje nám ich aplikovať na aplikáciu Spring Boot.

Celý kód príkladov nájdete ako vždy na serveri Github.