Inleiding tot Chaos Monkey

1. Inleiding

In deze tutorial gaan we het hebben over Chaos Monkey for Spring Boot.

Deze tool helpt ons introduceren enkele van de principes van chaos-engineering in onze Spring Boot-webapplicaties door latentie toe te voegen aan onze REST-eindpunten, fouten te genereren of zelfs een app te doden.

2. Installatie

Om Chaos Monkey aan onze applicatie toe te voegen, hebben we een enkele Maven-afhankelijkheid nodig in ons project:

 de.codecentric chaos-monkey-spring-boot 2.0.0 

3. Configuratie

Zodra we de afhankelijkheidsinstellingen in ons project hebben, moeten we onze chaos configureren en starten.

We kunnen dit op een aantal manieren doen:

  • Bij het opstarten van de applicatie, met behulp van chaos-aap veerprofiel (aanbevolen)
  • Gebruik makend van chaos.monkey.enabled = waar eigendom

Door de applicatie te starten met chaos-aap veerprofiel we hoeven de applicatie niet te stoppen en te starten als we deze willen in- of uitschakelen terwijl onze app draait:

java -jar uw-app.jar --spring.profiles.active = chaos-aap

Een andere nuttige eigenschap is management.endpoint.chaosmonkey.enabled. Als u deze eigenschap instelt op true, wordt het beheer-eindpunt voor onze Chaos Monkey ingeschakeld:

// localhost: 8080 / chaosmonkey

Vanaf dit eindpunt kunnen we de status van onze bibliotheek zien. Hier is de volledige lijst met eindpunten en hun beschrijving die helpen bij het wijzigen van de configuratie, het in- of uitschakelen van Chaos Monkey en andere meer gedetailleerde besturingselementen.

Door alle beschikbare eigenschappen te gebruiken, kunnen we een meer fijnmazige controle hebben over wat er gebeurt in onze gegenereerde chaos.

4. Hoe werkt het

Chaos Monkey bestaat uit Watchers en Assaults. Een Watcher is een Spring Boot-component. Het maakt gebruik van Spring AOP om te zien wanneer een openbare methode wordt uitgevoerd in klassen die zijn geannoteerd met de volgende Spring-annotaties:

  • Component
  • Controller
  • RestController
  • Onderhoud
  • Opslagplaats

Op basis van de configuratie in ons app-eigenschappenbestand, onze openbare methoden zullen worden aangevallen of niet, door een van de volgende:

  • Latency Assault - voegt willekeurige latentie toe aan het verzoek
  • Exception Assault - gooit willekeurige Runtime Exception
  • AppKiller Assault - eh, de app sterft

Laten we eens kijken hoe we onze watcher en aanvallen kunnen configureren voor een meer gecontroleerde aanval.

5. Waker

Watcher is standaard alleen ingeschakeld voor onze Diensten. Dit betekent dat onze aanvallen alleen worden uitgevoerd voor openbare methoden in onze klassen die zijn geannoteerd met @Onderhoud.

Maar we kunnen dat gemakkelijk veranderen door eigenschappen te configureren:

chaos.monkey.watcher.controller = vals chaos.monkey.watcher.restController = vals chaos.monkey.watcher.service = waar chaos.monkey.watcher.repository = vals chaos.monkey.watcher.component = vals

Houd er rekening mee dat zodra de toepassing is gestart, we kunnen de watcher niet dynamisch wijzigen met behulp van de Chaos Monkey for Spring Boot-beheerpoort waar we het eerder over hadden.

6. Aanval

Aanvallen zijn in feite scenario's die we in onze applicatie willen testen. Laten we elk type aanval bekijken en kijken wat het doet en hoe we het kunnen configureren.

6.1. Latency-aanval

Dit type aanval voegt latentie toe aan onze oproepen. Op deze manier reageert onze applicatie langzamer en kunnen we volgen hoe deze zich gedraagt ​​wanneer bijvoorbeeld de database langzamer reageert.

We kunnen dit type aanval configureren en inschakelen met behulp van het eigenschappenbestand van onze app:

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

Een andere manier om dit type aanval te configureren en in en uit te schakelen, is via het beheer-eindpunt van Chaos Monkey.

Laten we de latentieaanval inschakelen en een latentiebereik tussen twee en vijf seconden toevoegen:

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

6.2. Uitzondering aanval

Dit test hoe goed onze applicatie uitzonderingen aankan. Op basis van de configuratie genereert het een willekeurige Runtime-uitzondering eenmaal ingeschakeld.

We kunnen het inschakelen met behulp van een curl-oproep die lijkt op onze latency-aanval:

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

6.3. AppKiller-aanval

Deze, nou, onze app zal op een willekeurig punt sterven. We kunnen het in- of uitschakelen met een simpele curl-oproep zoals de vorige twee soorten aanvallen:

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

7. Conclusie

In dit artikel, we hadden het over Chaos Monkey for Spring Boot. We hebben gezien dat er enkele principes van chaos-engineering nodig zijn en dat we ze kunnen toepassen op een Spring Boot-applicatie.

Zoals altijd is de volledige code van de voorbeelden te vinden op Github.