O que é engenharia do caos?

A tecnologia está em toda parte. Dependendo do nível de risco de seu setor, a falha de um produto ou sistema de tecnologia pode cair em qualquer lugar entre totalmente insignificante e o fim da vida como você o conhece.

Computadores centrais de hospitais? Meio importante. A resiliência do aplicativo Candy Crush no seu celular? Provavelmente um pouco mais abaixo na lista geral de prioridades.

Em um sistema distribuído de redes, o fracasso é inevitável. A prevenção de catástrofes começa com um design de segurança sólido e estanque. Além disso, o que mais pode ser feito?

O que é Netflix Chaos Engineering?

20 de setembro de 2015.

Tudo quieto no front ocidental, quando, de repente, vários servidores importantes da Amazon Web Services ficam fora do ar sem dizer uma palavra.

Muitas grandes empresas não conseguiram atender seus clientes por várias horas. A Netflix, no entanto, voltou a funcionar em questão de minutos. Como? A cultura interna da empresa Netflix evoluiu para incluir muitas práticas "indutoras de falhas" implementadas em tempo real para preparar sistemas e engenheiros para quando ocorrer um desastre.

A liderança da empresa conduziu propositalmente paralisações de servidor simuladas em partes contidas do sistema para estudar e se preparar para eventos como esses. Isso os ajudou a identificar falhas no sistema e criar redundâncias que permitiram que o serviço continuasse ininterrupto, mesmo no caso de um grande mal funcionamento como o mencionado anteriormente.

Esses exercícios deliberados de "engenharia do caos" deram a seus engenheiros uma vantagem competitiva suficiente para enfrentar o fiasco, em parte graças à infraestrutura preventiva que eles construíram com esse tipo de evento apocalíptico em mente.

Ninguém mais estava pronto quando a grande onda atingiu. O sistema Netflix era forte o suficiente para se defender sozinho. Conclusão? Esses gênios caóticos podem estar descobrindo alguma coisa aqui.

Aniquilar intencionalmente aqueles que te amam

"A Engenharia do Caos é a disciplina de fazer experimentos em um sistema para criar confiança na capacidade do sistema de resistir a condições turbulentas na produção."

Princípios do Manifesto do Caos

Este é o coração da engenharia do caos – em essência, uma "simulação de incêndio" imposta ao sistema durante o horário de trabalho, quando há olhos e mãos disponíveis para enfrentar o desafio apresentado. A capacidade de um determinado sistema de tolerar falhas é posta à prova à medida que qualquer vulnerabilidade é exposta.

Em seu contexto original de 2011, a engenharia do caos preocupava o departamento de TI da Netflix. Sua liderança queria testar o quão resilientes os esforços da equipe eram quando um ou mais de seus computadores eram intencionalmente desativados. Esses contratempos permitiram que a equipe de TI identificasse os principais pontos fracos antes que se tornassem problemas de todo o sistema e pudessem ser explorados externamente.

Falha real? Pode ser muito caro e isso vai além das implicações monetárias . Mesmo os períodos de inatividade, sem nenhum lapso real na segurança, provavelmente resultarão em muitas oportunidades perdidas de geração de receita. Por que esperar por uma emergência para pegar você?

Os macacos por trás da loucura

Algumas empresas adotarão um modelo de "equipe vermelha" que coloca equipes de desenvolvedores contra seus irmãos em todas as linhas departamentais. O exemplo clássico que a Netflix instituiu, no entanto, faz uso de um "Exército Simian". Esses bots fazem o trabalho sujo para eles de forma justa e totalmente aleatória.

Insano? Para o leigo, talvez. Nas palavras do autor de "Chaos Monkeys", Antonio Garcia Martinez:

“Imagine um macaco entrando em um 'data center', esses 'farms' de servidores que hospedam todas as funções críticas de nossas atividades online. O macaco rasga cabos aleatoriamente e destrói dispositivos. O desafio é projetar o sistema de informação pelo qual são responsáveis. que pode funcionar apesar desses macacos, que ninguém sabe quando chegam e o que vão destruir. "

Uma analogia colorida. No entanto, nem todos os símios são cruéis: o Doutor Macaco monitora o desempenho do sistema, por exemplo. Quando Chaos Kong passa por uma visita, no entanto, todas as apostas estão canceladas; esse personagem derrubará uma zona de disponibilidade AWS inteira.

Relacionado: Como as vulnerabilidades de segurança são avaliadas?

Engenharia do Caos e o Método Científico

A engenharia do caos serve como uma fonte valiosa de percepção sistêmica para aqueles que conduzem os experimentos. Não são apenas os desenvolvedores que estão sendo testados aqui; é o sistema que existe de forma autônoma, também.

Antes de despejar o barril de macacos na mesa, a engenharia do caos requer um pouco de trabalho de base.

  1. Primeiro, você precisa identificar o que considera ser um estado "estável", saudável e funcional para o seu sistema. Este será o “controle” contra o qual você mede quaisquer resultados tangíveis.
  2. Comece a pensar em como esse estado será desequilibrado pela intrusão de uma falha orquestrada. Planeje seu malware de sondagem para afetar apenas uma área contida e controlável de seu sistema.
  3. Apresente o "intruso" e permita que o sistema responda.
  4. Observe e interprete quaisquer diferenças entre o sistema como ele existe agora e como estava se comportando antes, enquanto em homeostase. Aumente o seu "raio de explosão" de impacto até detectar uma vulnerabilidade ou atingir a escala total, o que ocorrer primeiro.

A ideia é que quanto mais difícil for interromper um sistema funcional, mais confiança você pode ter em sua resiliência a mudanças e bombardeios. Esta abordagem mostra como diferentes aspectos do sistema compensarão as falhas uns dos outros no caso de uma interrupção.

"Como nenhum componente pode garantir 100% de tempo de atividade (e mesmo o hardware mais caro eventualmente falha), temos que projetar uma arquitetura em nuvem onde componentes individuais podem falhar sem afetar a disponibilidade de todo o sistema."

O blog da Netflix

Às vezes, brincar com o sistema dessa maneira nem chega perto de impactar a experiência do cliente. Outras vezes, falhas graves de segurança serão reveladas. Agora, especialmente na Netflix, a contingência destinada a mascarar a falha do sistema no nível do usuário é incorporada à base do sistema.

Relacionado: O que é uma exploração de dia zero?

A Engenharia do Caos vale a pena?

Os críticos dirão que nenhum jogo de back-end vale a pena impactar a experiência de um cliente, mesmo que apenas brevemente e por incidente. Aqueles a favor da engenharia do caos, no entanto, contestarão o fato de que essas "interrupções planejadas" devem ser muito menores do que as que a AWS experimentou em 2015. Se um pequeno problema planejado coloca você em posição de evitar um problema muito maior de se apresentar, planejar o incidente inicial pode ser a melhor maneira de se preparar. Menos usuários serão afetados no total. A matemática funciona.

Do lado humano da questão, a mentalidade é que, agora, esses engenheiros que tiveram uma pane no servidor à sua frente e lidaram com ela com competência estarão mais alertas no futuro e também mais intelectualmente equipados para lidar com o que quer que aconteça caminho. O sistema mais forte resultante, em muitos casos, fala por si.

Vale do Silício: onde os sonhos vão para morrer

Eles dizem que, se você quiser se tornar grande, você deve estar disposto a matar seus queridos, ou, neste caso, estar disposto a deixar que outros os matem por você. Quando a segurança está na vanguarda desde o início do desenvolvimento, é muito mais provável que sua equipe termine com algo impenetrável e seguro para os clientes usarem livremente.

Jogar a experiência no local de trabalho torna a perspectiva de sucesso neste domínio empolgante; quando o resultado final é de qualidade, todos sobem de nível. Meu Netflix funciona bem, e só temos os loucos por trás do caos a quem agradecer.

Agora que você tem um domínio sólido sobre engenharia do caos, por que não expandir seu conhecimento com outra metodologia de desenvolvimento de software? Agile é um excelente sistema que você pode incorporar para unificar uma força de trabalho e produzir um código limpo e eficiente.