Em poucas palavras, devemos projetar a morte em nossos programas, processos e threads em um nível baixo, para o bem de todo o sistema?
Falhas acontecem. Processos morrem. Planejamos um desastre e, ocasionalmente, nos recuperamos dele. Mas raramente projetamos e implementamos a morte imprevisível do programa. Esperamos que o tempo de atividade de nossos serviços seja o máximo que desejarmos mantê-los funcionando.
Um exemplo macro desse conceito é o Chaos Monkey da Netflix , que encerra aleatoriamente as instâncias da AWS em alguns cenários. Eles afirmam que isso os ajudou a descobrir problemas e criar sistemas mais redundantes.
O que eu estou falando é de nível mais baixo. A idéia é que processos tradicionalmente de longa duração saiam aleatoriamente. Isso deve forçar redundância no design e, finalmente, produzir sistemas mais resilientes.
Esse conceito já tem um nome? Já está sendo usado na indústria?
EDITAR
Com base nos comentários e respostas, receio que não tenha esclarecido minha pergunta. Para maior clareza:
- sim, quero dizer aleatoriamente,
- sim, quero dizer em produção, e
- não, não apenas para testes.
Para explicar, gostaria de fazer uma analogia com organismos multicelulares.
Na natureza, os organismos consistem em muitas células. As células se bifurcam para criar redundância e acabam morrendo. Mas sempre deve haver células suficientes do tipo certo para o organismo funcionar. Este sistema altamente redundante também facilita a cicatrização quando ferido. As células morrem para que o organismo viva.
Incorporar a morte aleatória em um programa forçaria o sistema maior a adotar estratégias de redundância para permanecer viável. Essas mesmas estratégias ajudariam o sistema a permanecer estável diante de outros tipos de falhas imprevisíveis?
E, se alguém já tentou isso, como é chamado? Eu gostaria de ler mais sobre isso, se ele já existir.