Início topics o que é a engenharia do caos O que é a engenharia do caos?
Explore o IBM Instana
Gráfico representando uma sequência 0 e 1

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 com a hospedagem de mais aplicações e dados na nuvem, o que pode levar a mais problemas de segurança.

Uma forma de lidar com as 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 propósito algum. Esse processo identifica possíveis problemas futuros, permitindo que as equipes de engenharia solucionem proativamente e evitem tais problemas posteriormente no ambiente de produção.

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 tempo de inatividade. A Netflix sentiu isso na pele quando migrou do local para a nuvem(link externo ao site ibm.com); em 2008, a empresa sofreu uma queda que levou a uma interrupção de três dias na prestação do serviço. Isso ocorreu antes de sua conversão em operadora de streaming de vídeo, o que teria tornado a 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 de caos em seus fluxos de trabalho. Com isso, eles conseguem identificar os problemas antes que ocorram e minimizar os danos em caso de uma falha inevitável.

A Netflix criou o Chaos Monkey2(link externo ao site ibm.com), uma ferramenta de código aberto que cria incidentes aleatórios em serviços de TI e infraestrutura. Seu objetivo é identificar fragilidades que possam ser corrigidas ou abordadas com procedimentos de recuperação automática durante a migração de um data center privado para o 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 de caos. 

A engenharia de 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 local (SREs) e outros membros da equipe de DevOps a proporcionar entrega contínua de serviços, evitando interrupções significativas, compreendendo melhor as vulnerabilidades e sabendo como minimizar o impacto em caso de 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 levar à perda de milhões de dólares(link externo ao site ibm.com). Talvez as organizações não possam 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. 

Faça um tour

O IBM Instana Observability oferece a todos em toda a empresa acesso amigável aos dados desejados com o contexto necessário para fornecer prevenção e correção de problemas rapidamente.

Conteúdo relacionado

Assine a newsletter da IBM

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 tomar medidas imediatas em relação aos problemas que ocorrem por meio de testes. As organizações que não contam com essa observabilidade4 (link externo ao site ibm.com) podem levar muito tempo para resolver os testes que eles criam por meio da engenharia do caos.

A engenharia do caos também é essencial para organizações que usam a nuvem, sobretudo 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 locais. 

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 (link externo ao site ibm.com). 

Além disso, o crescimento do uso de microsserviços, que aumenta a quantidade de hosts ou contêineres em execução em um sistema, cria desafios únicos (link externo ao site ibm.com) que podem ser descobertos e resolvidos por meio de testes do caos. Ele transfere as complexidades do design 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 ajuda as organizações a aumentar a velocidade de seus pipelines de integração contínua e entrega contínua (CI/CD). A incorporação da engenharia de caos à CI/CD, tal como foi feito pela Netflix(link externo ao site ibm.com), permite que as organizações automatizem testes contínuos e controlem seu possível impacto. 

Por fim, como as organizações se conectam cada vez mais a parceiros por meio de APIs, um eventual 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 a possibilidade 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.

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. Entre os exemplos de injeção de falhas estão: induzir falhas no disco, encerrar processos, desligar um host ou introduzir aumento 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, enviando níveis de tráfego significativos muito além das operações normais. Isso ajuda os engenheiros de confiabilidade local (SREs) a entender eventuais gargalos no sistema, o que, por sua vez, permite que eles criem sistemas mais escaláveis. 
  • Testes canários: envolve o lançamento de um produto ou recurso novo para um pequeno grupo de usuários. Assim, qualquer falha ou bug afetará apenas uma porcentagem dos visitantes, deixando o restante do público acessar o site já existente.

 

Melhores práticas de engenharia do caos 

A criação do processo ideal de engenharia do caos exige vários princípios para garantir que uma organização tenha 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 testes de engenharia do caos devem se aproximar o máximo possível daquilo que pode 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 possíveis ocorrências.
  • 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 de problemas possível. 
  • Usar automação: organizações de todos os portes podem usar a engenharia do caos por meio da automatizaçã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. Formulação do teste, injeção de falha e provisão 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.
    • Execute o teste fora do tráfego de pico: 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. 
    • Execute o teste no ambiente de desenvolvimento: a maneira mais fácil de garantir que não haja interrupção alguma do serviço de experiência do cliente é 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 o problema, seus ambientes de pré-produção e produção devem se assemelhar o máximo possível. 
    • Faça testes em todos os componentes: a experimentação do caos é um processo interminável, pois o sistema de uma organização está sempre mudando. Um dos objetivos deve ser testar "tudo"; examinar todos os componentes, camadas, serviços e suas dependências em 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 de 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. Outra razão é que o ambiente de pré-produção pode não ter exatamente as mesmas configurações do ambiente de produção, o que cria certa variabilidade nos testes.

Por exemplo, um incidente em um ambiente de pré-produção talvez não crie uma resposta realista, pois não tem os mesmos níveis de tráfego que o ambiente de produção. Também pode não ter as mesmas configurações de segurança que aquele 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 escolherão o ambiente a ser usado 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 tempo de inatividade ou impossibilidade de acessar aquilo que eles pagaram pode ter sérios efeitos na satisfação do cliente, levando à perda de receitas e danos à reputação. Com a realização de testes nos sistemas e identificação das soluções, 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 (link externo ao site ibm.com) e 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 tempo de inatividade. A engenharia do caos pode diminuir o tempo de inatividade7 (link externo ao site ibm.com) 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.

Explore os produtos de engenharia do caos
Observabilidade IBM Instana APM

Tenha o contexto necessário para resolver incidentes mais rápido com a solução de observabilidade da IBM.

Explore o IBM Instana

Observabilidade Flexera One with IBM Observability

Otimize o uso e o custo do software

 

Explore o Flexera One with IBM Observability

Recursos de engenharia de caos O que é AIOps?

Saiba como a Inteligência Artificial para Operações de TI (AIOps) utiliza dados e aprendizado de máquina para aprimorar e automatizar a gestão de serviços de TI.

O que é gerenciamento de desempenho de aplicações?

Preveja e evite problemas de desempenho antes que eles afetem seus negócios com o gerenciamento de desempenho de aplicações

O que são operações de TI?

As operações de TI e o AIOps supervisionam e automatizam o gerenciamento, a entrega e o suporte dos serviços de TI em toda a organização

O que é gerenciamento de serviços de TI?

O gerenciamento de serviços de TI é como uma organização garante que seus serviços de TI funcionem da maneira necessária para os usuários e os negócios

O que é engenharia de confiabilidade local?

Automatize tarefas de operações de TI, acelere a entrega de software e minimize os riscos de TI com engenharia de confiabilidade local

O que é automação inteligente?

A automação inteligente combina IA e tecnologias de automação, permitindo a automação de tarefas de nível inferior na sua empresa

Dê o próximo passo

O IBM Instana fornece observabilidade em tempo real que todos e qualquer um podem usar. Ele proporciona um rápido time to value enquanto verifica se sua estratégia de observabilidade pode acompanhar a complexidade dinâmica dos ambientes atuais e futuros. Do celular ao mainframe, o Instana é compatível com mais de 250 tecnologias e está crescendo. 

Explore o IBM Instana Agende uma demonstração em tempo real
Notas de rodapé

1 Engenharia do caos: resiliência do sistema na prática(link externo ao site ibm.com) Casey Rosenthal, Nora Jones, 2020
What is Chaos Monkey? Chaos engineering explained, (link externo ao site ibm.com) InfoWorld, 13 de maio de 2020

Knight Capital Says Trading Glitch Cost It $440 Million, (link externo ao site ibm.com) New York Times, 2012
4 There Is No Resilience without Chaos, The New Stack, (link externo ao site ibm.com) 13 de abril de 2023 
5 Incident Management in the Cloud Era, (link externo ao site ibm.com) Constellation Research, 2023
6 ChAP: Chaos Automation Platform, (link externo ao site ibm.com) Blog da Netflix, 26 de julho de 2017
7 The I&O Leader’s Guide to Chaos Engineering, (link externo ao site ibm.com) Gartner, 28 de outubro de 2021