Introdução ao Macaco do Caos

Introdução ao Macaco do Caos

1. Introdução

Neste tutorial, vamos falar sobreChaos Monkey para Spring Boot.

Essa ferramenta nos ajudaintroduce some of the principles of chaos engineering into our Spring Boot web applications adicionando latência aos nossos endpoints REST, lançando erros ou até mesmo encerrando um aplicativo.

2. Configuração

Para adicionar Chaos Monkey ao nosso aplicativo, precisamos de um únicoMaven dependency em nosso projeto:


    de.codecentric
    chaos-monkey-spring-boot
    2.0.0

3. Configuração

Uma vez que tenhamos configurado a dependência em nosso projeto, precisamos configurar e iniciar nosso caos.

Podemos fazer isso de duas maneiras:

  • Na inicialização do aplicativo, usandochaos-monkey perfil sspring (recomendado)

  • Usandochaos.monkey.enabled=true property

Ao iniciar o aplicativo comchaos-monkey spring profilewe don’t have to stop and start the application if we want to enable or disable it enquanto nosso aplicativo está em execução:

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

Outra propriedade útil émanagement.endpoint.chaosmonkey.enabled. Setting esta propriedade true habilitará o endpoint de gerenciamento para nosso Chaos Monkey:

http://localhost:8080/chaosmonkey

Deste ponto de extremidade, podemos ver o status de nossa biblioteca. Aqui está olist of endpoints completo e sua descrição que ajudará a alterar a configuração, habilitar ou desabilitar o Chaos Monkey e outros controles mais granulares.

Usando todos osproperties disponíveis, podemos ter um controle mais refinado sobre o que acontece em nosso caos gerado.

4. Como funciona

O Macaco do Caos consiste em Observadores e Assaltos. Um observador é um componente de inicialização de primavera. Ele faz uso deSpring AOP para ver quando um método público é executado em classes anotadas com as seguintes anotações Spring:

  • Componente

  • Controlador

  • RestController

  • Serviço

  • Repositório

Com base na configuração em nosso arquivo de propriedades do aplicativo,our public methods will be either assaulted or not, por um dos seguintes:

  • Latency Assault - adiciona latência aleatória à solicitação

  • Exception Assault - lança uma exceção de tempo de execução aleatória

  • AppKiller Assault - hum, o aplicativo morre

Vamos dar uma olhada em como podemos configurar nosso observador e ataques para um ataque mais controlado.

5. Observador

Por padrão, o Watcher está habilitado apenas para nossosservices. Isso significa que nossos assaltos serão executados apenas para métodos públicos em nossas classes anotadas com@Service.

Mas podemos facilmente mudar isso configurando propriedades:

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

Lembre-se de que, assim que o aplicativo for iniciado,we cannot dynamically change the watcher using the Chaos Monkey for Spring Boot management port sobre os quais falamos anteriormente.

6. Assaltos

Os assaltos são basicamente cenários que queremos testar em nosso aplicativo. Vamos pegar cada tipo de ataque e ver o que ele faz e como podemos configurá-lo.

6.1. Ataque de latência

Esse tipo de ataque adiciona latência às nossas chamadas. This way our application responds slower and we can monitor how it behaves when for example the database responds slower.

Podemos configurar e ativar ou desse tipo de ataque usando o arquivo de propriedades do nosso aplicativo:

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

Outra maneira de configurar e ativar e desativar esse tipo de ataque é através do terminal de gerenciamento do Chaos Monkey.

Vamos ativar o ataque de latência e adicionar um intervalo de latência entre dois e cinco segundos:

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

6.2. Ataque de exceção

Isso testa o quão bem nosso aplicativo pode lidar com exceções. Based on configuration it will throw a random Runtime Exception uma vez habilitado.

Podemos habilitá-lo usando uma chamada de espiral semelhante ao nosso ataque de latência:

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

6.3. AppKiller Assault

Este, bem, nosso aplicativo morrerá em algum ponto aleatório. Podemos habilitá-lo ou desabilitá-lo com uma chamada simples, como os dois tipos anteriores de ataque:

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

7. Conclusão

Neste artigo,we talked about Chaos Monkey for Spring Boot. Vimos que leva alguns dos princípios dechaos engineeringe nos permite aplicá-los a um aplicativoSpring Boot.

Como sempre, o código completo dos exemplos pode ser encontradoover on Github.