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.
- 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.
GET /
Lê e retorna o conteúdo do arquivo example.dat
.
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).
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.
Para rodar a aplicação:
python3 service.py
- Título
- Descrição
- Hipótese do estado estacionário
- Método
No meu caso, o experimento ./chaos/experiment.json
está fazendo o seguinte:
- Verifica se o sistema está disponível e se o arquivo de exemplo existe.
- Renomeia o arquivo de exemplo.
- Verifica novamente o sistema com base na hipótese do estado estacionário para observar a diferença.
- 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
.
A hipótese de estado estacionário é usada em dois momentos:
-
No início do experimento
Para garantir que a aplicação está, de fato, no estado estacionário. -
No final do experimento
Para verificar se a hipótese continua verdadeira e se o sistema se manteve estacionário.
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")
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.
Para rodar o experimento do caos:
chaos run experiment.json