Minha IBM Efetue login Inscreva-se

O que é a engenharia do caos?

3 de agosto de 2023

A engenharia do caos consiste na indução intencional e controlada de falhas no ambiente de produção ou pré-produção para entender seu impacto e planejar uma melhor postura de defesa e estratégia de manutenção para incidentes.

A cada dia abre-se uma nova oportunidade para a ocorrência de falhas de uma aplicação ou infraestrutura crítica de uma organização, o que pode ameaçar sua capacidade de prestar serviços aos clientes. As causas das falhas são problemas variados, como violações de segurança, configurações incorretas ou interrupções no serviço. A probabilidade de erros ou interrupções aumenta à medida que mais aplicações e dados são hospedados na nuvem, o que pode levar a mais problemas de segurança.

Uma forma de lidar com interrupções é a engenharia do caos. Não se trata de um processo aleatório em que os engenheiros encerram instâncias ou serviços ou fazem com que os sistemas falhem sem nenhum propósito. Esse processo identifica possíveis problemas futuros, permitindo que as equipes de engenharia resolvam os problemas de forma proativa e os evitem no ambiente real mais adiante.

A engenharia do caos é importante, pois eventuais erros ou interrupções podem desacelerar o impulso de uma organização, que gastará tempo tentando descobrir rapidamente uma solução para minimizar o downtime. A Netflix aprendeu esse conceito em primeira mão quando migrou do local para a nuvem1 - ela sofreu uma falha que levou a uma interrupção de três dias na prestação de serviços em 2008.

Essa falha é anterior à sua transformação em uma operação de streaming de vídeo, o que teria tornado essa interrupção exponencialmente mais cara. Consequentemente, a Netflix decidiu que faria todo o possível para minimizar as interrupções e começou a introduzir a engenharia do caos em seus fluxos de trabalho. Esse processo permite que ela identifique os problemas antes que eles ocorram e minimize os danos se e quando ocorrer uma falha inevitável.

A Netflix criou o Chaos Monkey2, uma ferramenta de código aberto que cria incidentes aleatórios em serviços e infraestrutura de TI com o objetivo de identificar pontos fracos que podem ser corrigidos ou resolvidos por meio de procedimentos de recuperação automática. Ela implementou o Chaos Monkey quando migrou de um data center privado para a Amazon Web Services (AWS) em resposta à falta de confiabilidade da nuvem. Muitas organizações agora usam o Chaos Monkey para executar seus testes de engenharia do caos.

A engenharia do caos é uma defesa importante contra falhas de infraestrutura, interrupções ou componentes ausentes no ambiente de produção de uma organização. Ela ajuda engenheiros de confiabilidade do site (SREs) e outros membros da equipe de DevOps a fornecer entrega contínua de serviços, evitando interrupções significativas em seus serviços. A engenharia do caos os ajuda a entender melhor suas vulnerabilidades e informa como minimizar o impacto caso ocorra uma interrupção.

Até mesmo um pequeno problema no código pode ter um efeito catastrófico no ambiente geral de produção, considerando-se as diferentes dependências dos programas. Por exemplo, um erro no sistema de software de transações de uma empresa de serviços financeiros pode resultar na perda de milhões de dólares3 .

As organizações podem não conseguir evitar todos os incidentes de TI, mas podem minimizar os danos usando o gerenciamento do caos para entender os cenários prováveis e as melhores soluções possíveis.

Projeto 3D de bolas rolando em uma pista

As últimas notícias e insights sobre IA 


Descubra insights selecionadas por especialistas sobre IA, nuvem e outros assuntos no boletim informativo semanal Think. 

Organizações que se beneficiam da engenharia do caos

As organizações com alta resiliência, maturidade digital e alta observabilidade por meio de dashboards e outras ferramentas devem adotar a engenharia de caos, pois podem adotar medidas imediatas em relação aos problemas que ocorrem por meio de experimentos. As organizações que não contam com essa observabilidade4 podem levar tempo demais para resolver os experimentos que elas criam por meio da engenharia do caos.

A engenharia do caos também é essencial para organizações que usam a nuvem, principalmente a nuvem pública e aplicativos nativos da nuvem. A nuvem pública traz possíveis problemas de interrupção que exigem coordenação com o provedor de nuvem, o que cria uma abordagem diferente em relação ao enfrentamento de problemas no local.

As empresas que usam a nuvem ainda costumam abordar incidentes de TI sem considerar como a nuvem e o software como serviço (SaaS) afetam esses incidentes de forma diferente, de acordo com a Constellation Research5.

Além disso, o crescimento do uso de microsserviços, que aumenta o número de hosts ou contêineres em execução em um sistema, cria desafios exclusivosque podem ser descobertos e resolvidos por meio de experimentos de caos. Ele transfere as complexidades do projeto do código para as operações do sistema, o que não elimina as complexidades, mas permite maior automação.

A engenharia do caos também pode ajudar as organizações a melhorar a velocidade de seus pipelines de integração contínua e entrega contínua (CI/CD). Incorporar a engenharia do caos à CI/CD, como a Netflix fez6, permite que as organizações automatizem experimentos contínuos e, ao mesmo tempo, controlem seu impacto potencial.

Por fim, o fato de as organizações se conectarem cada vez mais com parceiros por meio de APIs significa que um problema em seus sistemas pode ter um impacto indireto em outras organizações. A implementação da engenharia do caos ajuda as organizações a entender os pontos fracos de sua arquitetura e corrigi-los, criando, no final das contas. a capacidade de prever falhas futuras.

Uma engenharia do caos bem-sucedida ajuda as organizações a minimizar falhas técnicas de modo que não haja qualquer impacto significativo sobre o cliente. Permite também a criação de arquiteturas mais fortes e resilientes de sistemas complexos. Quando uma organização decide adotar a engenharia do caos, a próxima etapa é determinar se ela será executada no ambiente de produção ou pré-produção.

AI Academy

A ascensão da IA generativa para negócios

Saiba mais sobre a ascensão histórica da IA generativa e o que isso significa para os negócios.

Tipos de teste de engenharia do caos

As equipes de DevOps contam com várias opções para realizar testes de engenharia do caos e testar diversos processos do sistema.

  • Injeção de latência: de maneira intencional, as equipes de DevOps criam cenários que simulam uma conexão de rede lenta ou com falha. Isso inclui a introdução de atrasos na rede ou tempos de resposta mais lentos.
  • Injeção de falha: envolve a introdução intencional de erros no sistema para determinar como eles afetam outros sistemas dependentes e se eles interrompem os serviços. Exemplos de injeção de falhas incluem induzir falhas em discos, encerrar processos, desligar um host ou introduzir aumentos de energia ou temperatura. As injeções de falhas ajudam as organizações a identificar pontos singulares de falha, que podem provocar uma falha de todo o sistema caso algo aconteça com eles.
  • Geração de carga: relacionado ao estresse intencional do sistema, ao enviar níveis de tráfego significativos muito além das operações normais. Isso ajuda os engenheiros de confiabilidade do site (SREs) a entender quaisquer gargalos no sistema, o que, por sua vez, permite que eles construam sistemas mais escaláveis.
  • Testes de canário: envolve o lançamento de um novo produto ou recurso para um pequeno grupo de usuários. Dessa forma, quaisquer falhas ou bugs afetarão apenas um percentual dos visitantes, deixando o restante da audiência acessar a experiência existente no site.

 

Melhores práticas de engenharia do caos 

Criar um processo ideal de engenharia do caos exige vários princípios para garantir que uma organização possa ter um sistema distribuído em escala.

  • Entender o sistema: envolve um conhecimento abrangente do sistema holístico, suas propriedades e funções emergentes e sua topologia, arquitetura, dependências, comportamento em estado de equilíbrio, resposta de saída e características como disponibilidade, latência e rendimento.
  • Aceitar as falhas: de início, parece paradoxal que os engenheiros de software permitam que um incidente aconteça quando eles estão programados para evitar tais ocorrências. No entanto, interrupções nos serviços de TI sempre acabam acontecendo, então é melhor que isso ocorra em um ambiente controlado. Assim, será possível identificar a solução preventivamente, e não quando a equipe da organização estiver fora do expediente ou se deparar com um problema específico que nunca tinha enfrentado antes.
  • Estabelecer um comportamento em estado de equilíbrio: primeiro, a equipe de engenharia deve definir como o sistema se comporta durante a execução correta, para identificar como os testes afetam esse estado de equilíbrio.
  • Identificar incidentes do mundo real: os experimentos de engenharia do caos devem se aproximar o máximo possível do que poderia acontecer em um dia normal, em vez de criar situações improváveis. Falhas de rede e infraestrutura, código incorreto, problemas de energia e sobrecarga de tráfego são ocorrências possíveis.
  • Criar um dia especial: a engenharia do caos pode estudar o ambiente em um dia especial, onde vários testes ocorrem durante um dia específico para maximizar os recursos, de modo a identificar e resolver o máximo possível de problemas.
  • Usar automação: organizações de todos os portes podem usar a engenharia do caos por meio da automação de testes, que seriam muito trabalhosos se as empresas os realizassem manualmente. Isso reduz a carga das equipes de TI durante o processo de engenharia do caos. A formulação do experimento, a injeção de falha e a provisionamento da infraestrutura são aspectos da experimentação que as organizações podem automatizar.
  • Atentar-se para o alcance dos estragos: um engenheiro do caos deve se esforçar para minimizar o alcance dos estragos para que o dano real aos clientes seja o menor possível. Veja algumas formas de minimizar esse alcance:
    • Visar um subconjunto de serviços: a engenharia do caos, sobretudo em um cenário de produção, não deve interromper fundamentalmente o serviço de uma organização. O direcionamento a um subconjunto específico de serviços pode minimizar o impacto de um incidente, garantindo que ele não derrube todo o sistema.
    • Execute o teste por um tempo finito: ele deve ter um início e um fim. O objetivo do teste é criar um incidente e resolvê-lo, em vez de deixá-lo em execução sem controle por muito tempo.
    • Executar o experimento fora do pico de tráfego: as organizações devem tentar evitar a execução dos testes durante os horários de pico, a menos que queiram avaliar especificamente como a alta capacidade afeta o sistema durante um incidente.
    • Executar o teste no ambiente de desenvolvimento: a maneira mais fácil de garantir que nenhum cliente sofra interrupção do serviço é sua execução no ambiente de pré-produção. No entanto, isso significa que as condições serão diferentes do ambiente de produção, possivelmente dando uma visão falsa do que está acontecendo. Para minimizar isso, certifique-se de que seus ambientes de pré-produção e produção sejam o mais parecidos possível.
    • Fazer experimentos em cada componente: a experimentação do caos é um processo interminável, pois o sistema de uma organização está sempre mudando. Outro objetivo deve ser testar "tudo" (examinar todos os componentes, camadas, serviços) e suas dependências durante todo o processo.

Ambientes de produção versus ambientes de pré-produção

Organizações que utilizam engenharia do caos devem decidir se é melhor usar testes do caos em seus ambientes de produção ou pré-produção. Há várias razões pelas quais a engenharia do caos é mais benéfica em ambientes de produção.

Ambientes de produção fornecem o cenário mais preciso para entender como um incidente afeta a experiência do cliente. Outro motivo é que o ambiente de pré-produção pode não ter as mesmas configurações do ambiente real, introduzindo, portanto, alguma variabilidade nos experimentos.

Por exemplo, um incidente em um ambiente de pré-produção pode não gerar uma resposta realista, pois não tem os mesmos níveis de tráfego que o ambiente de produção. Ele também pode não ter as mesmas configurações de segurança que esse ambiente.

Algumas organizações temem causar problemas intencionalmente em seu local de produção, por isso realizam os testes no local de pré-produção ou desenvolvimento. Isso garante que eventuais problemas não afetem a experiência do cliente no modo de produção . Para mitigar esse problema, algumas organizações começam em ambientes de pré-produção para entender o processo antes de migrar para o ambiente de produção.

As organizações escolhem qual ambiente usar com base em sua tolerância ao risco. Em última análise, a engenharia do caos visa testar problemas reais em grande escala. É por isso que os ambientes de produção fornecem a imagem mais precisa do que está acontecendo e do que precisa ser corrigido.

Benefícios da engenharia do caos

A engenharia do caos traz vários benefícios importantes às organizações.

Melhor serviço ao cliente

Os clientes têm grandes expectativas sobre a disponibilidade dos serviços que contratam das empresas. Qualquer downtime ou impossibilidade de acessar aquilo pelo que eles pagaram pode ter um efeito sério na satisfação do cliente, levando à perda de receita e danos à reputação. Realizar testes em sistemas e identificar soluções significa que há menos risco de que um sistema fique fora do ar por um tempo significativo.

Segurança de dados aprimorada

As interrupções podem ser decorrentes de código incorreto, problemas nos servidores ou ameaças externas. Estas últimas podem ocorrer mesmo quando há excelentes práticas de segurança. A engenharia do caos ajuda a identificar problemas que podem ser explorados, para que as organizações possam introduzir patches e correções de bugs para manter seus serviços seguros.

Tempo de inatividade minimizado

A engenharia do caos permite que as organizações criem um blueprint mais fundamentado sobre como lidar com problemas que ocorrerão no futuro. Organizações que adotam a engenharia de caos têm estratégias específicas para muitos incidentes, permitindo reparo mais rápido e menos downtime. A engenharia do caos pode diminuir o tempo de inatividade7 em até 20%.

Maior escalabilidade

Os testes de engenharia do caos identificam como um sistema aloca recursos. A introdução dos testes demonstra como o sistema lida com cargas, mostrando onde os gargalos estão ou provavelmente ocorrerão.

Embasamento para o desenvolvimento futuro de software

A engenharia do caos ajuda as equipes a criar maior resiliência e flexibilidade do sistema em seus softwares. Assim, as organizações podem abordar a codificação de novos softwares e soluções de forma mais inteligente, pois sabem como o sistema atual lida com os problemas.

Soluções relacionadas

Soluções relacionadas

Serviços de consultoria para empresas

Reinvente a forma como o trabalho é realizado cruzando a transformação de negócios e a tecnologia para liberar a agilidade empresarial.

    Explore os serviços de consultoria de negócios
    Consultoria de RH e transformação de talentos

    Reimagine e modernize o RH com IA no centro para obter melhores resultados empresariais e liberar todo o potencial dos funcionários.

    Explore os serviços de transformação de RH
    Serviços de consultoria financeira

    Libere o desempenho financeiro e agregue mais valor comercial com serviços completos que integram análise de dados, IA e automação em todos os processos principais.

      Explore as soluções financeiras
      Dê o próximo passo

      Faça sua empresa crescer e se transformar remodelando sua estratégia corporativa e sua maneira de trabalhar

      Explore serviços de estratégia empresarial Explore os serviços de inteligência artificial
      Notas de rodapé

      1 Chaos Engineering: System Resiliency in Practice (link externo a ibm.com), Casey Rosenthal, Nora Jones, 2020.
      What is Chaos Monkey? Chaos engineering explained (link externo a ibm.com), InfoWorld, 13 de maio de 2020.
      3 Knight Capital Says Trading Glitch Cost It USD 440 Million (link externo a ibm.com), New York Times, 2012.
      4 There Is No Resilience without Chaos (link externo a ibm.com), The New Stack, 13 de abril de 2023.
      5 Incident Management in the Cloud Era (link externo a ibm.com), Constellation Research, 2023.
      6 ChAP: Chaos Automation Platform (link externo a ibm.com), Blog da Netflix, 26 de julho de 2017.
      7 The I&O Leader’s Guide to Chaos Engineering (link externo a ibm.com), Gartner, 28 de outubro de 2021.