/chaos-engineering-chaostoolkit

Repositório destinado para estudo do curso de DevOps Foundations: Chaos Engineering

Primary LanguagePython

Documentação da Aplicação

Visão Geral

Esta aplicação oferece um único endpoint HTTP que retorna o conteúdo de um arquivo chamado example.dat. O arquivo é atualizado a cada segundo com a data e hora atual.

Funcionamento

  • A aplicação inicia um servidor HTTP na porta 8080.
  • Ao mesmo tempo, uma thread separada é iniciada para atualizar o arquivo example.dat a cada 1 segundo.
  • A cada atualização, o conteúdo do arquivo é sobrescrito com o timestamp atual (em formato ISO).
  • Se o arquivo não existir, ele será criado automaticamente pela thread de atualização.

Endpoint

GET /

Descrição

Lê e retorna o conteúdo do arquivo example.dat.

Respostas possíveis

  • 200 OK: Conteúdo do arquivo retornado com sucesso.
  • 503 Service Unavailable: Ocorre quando o arquivo ainda não existe no momento da leitura (por exemplo, se foi removido e a thread ainda não o recriou).

Comportamento em Falhas

Se o arquivo example.dat for deletado durante a execução da aplicação:

  • A thread de atualização o recriará no próximo ciclo (em até 1 segundo).
  • Se uma requisição for feita antes que a thread o recrie, a aplicação deve retornar HTTP 503 como forma de indicar que o serviço está temporariamente indisponível.

Execução

Para rodar a aplicação:

python3 service.py

Chaos Toolkit

Anatomia do experimento do caos com

  • Título
  • Descrição
  • Hipótese do estado estacionário
  • Método

No meu caso, o experimento ./chaos/experiment.json está fazendo o seguinte:

  1. Verifica se o sistema está disponível e se o arquivo de exemplo existe.
  2. Renomeia o arquivo de exemplo.
  3. Verifica novamente o sistema com base na hipótese do estado estacionário para observar a diferença.

Steady State (ou estado estacionário)

  • Qual o normal da aplicação?
  • Qual é o "ok" da aplicação?
  • Quais são as métricas normais da aplicação?

O estado estacionário da aplicação python presente em ./service.py é:

o arquivo existe, a aplicação lê o arquivo e retorna ele com código 200 OK.

Uso do steady-state-hypothesis

A hipótese de estado estacionário é usada em dois momentos:

  1. No início do experimento
    Para garantir que a aplicação está, de fato, no estado estacionário.

  2. No final do experimento
    Para verificar se a hipótese continua verdadeira e se o sistema se manteve estacionário.

Probe service-is-unavailable

Um probe (ou sonda) é uma verificação ou teste automatizado feito durante um experimento de Chaos Engineering para validar uma hipótese sobre o comportamento do sistema.

O que meu probe está fazendo:

  • Ele faz uma requisição HTTP para verificar a saúde do sistema
  • http://localhost:8080/ é o endpoint que será chamado.
  • Define quais códigos de resposta são considerados aceitáveis (ou seja, dentro do "comportamento esperado")

Método

O método é uma lista de ações que você gostaria de executar na aplicação antes de executar novamente a hipótese do estado estacionário.

Você pode executar métodos contra o sistema, alterar arquivos, simular falhas etc.

No meu caso, estou renomeando o arquivo — a aplicação não conseguirá encontrá-lo.

Execução

Para rodar o experimento do caos:

chaos run experiment.json