Conforme mencionado no artigo introdutório desta série, o CTO da Amazon.com, Werner Vogels, segue um princípio simples: “Tudo falha, o tempo todo”. Geralmente, afirmo que, quando se trata de softwares, nunca se deve pressupor nada. Se você se prepara continuamente para a falha em todos os seus recursos gerenciados — seja ele o seu hardware ou software — é mais provável que tenha êxito. Este paradoxo é a ideia principal das várias ferramentas que desativam ou finalizam os recursos de produção de forma aleatória para testar e assegurar que os mecanismos automáticos de recuperação façam parte da sua infraestrutura.
A ferramenta mais notável é o Chaos Monkey (consulte Recursos para esta e outras ferramentas), desenvolvido pela equipe técnica da Netflix e originado de forma aberta no início deste ano. Neste artigo, apresentei os princípios e as etapas para a incorporação do Chaos Monkey à sua infraestrutura a fim de assegurar que ele possa lidar com as falhas inevitáveis que ocorrerão.
Ferramentas como o Chaos Monkey são o resultado de uma evolução na direção de ambientes efêmeros causada pela comoditização da infraestrutura, virtualização e computação em nuvem. Uma infraestrutura — com suas máquinas físicas, comutações de rede, firewall, balanceadores de carga, servidores de software e outros recursos — costumava ser algo que uma equipe de engenheiros configurava manualmente uma só vez. Em seguida, eles monitoravam seu uso, continuamente executando ajustes manuais para modificar a configuração, melhorar o desempenho e executar outras atividades. Isso não é mais considerado uma boa prática e é simplesmente impossível fazê-lo para qualquer infraestrutura de escala não trivial. Ferramentas como o Chaos Monkey aplicam monitoramento, diagnósticos, randomização e interrupção à infraestrutura para assegurar que os engenheiros apliquem automação para limitar o impacto enfrentado pelos usuários quando grandes problemas ocorrem.
Buscar e destruir
Uma lista de etapas de alto nível que compõe o processo de criação de um ambiente para o teste contínuo de uma infraestrutura inclui:
- A ativação de instâncias: Inicialize algumas instâncias de cálculo;
- A criação de uma infraestrutura autônoma: Configure uma infraestrutura que ative novas instâncias (com base no mesmo modelo) quando ela identificar instâncias em não funcionamento (consulte o portal da IBM sobre computação autônoma em Recursos);
- A aplicação de testes automáticos para assegurar a recuperação automática: Execute os testes durante algumas horas quando os engenheiros estiverem prontos para reagir e corrigir;
- O aprendizado e a prevenção: Quando as falhas ocorrerem, reaja e evite que elas ocorram novamente.
A base para uma infraestrutura continuamente testada e de autocura é a convicção de que:
- Uma infraestrutura falhará;
- É preciso testar essas falhas na produção, quando os engenheiros estiverem disponíveis;
- Quando a falha ocorrer novamente, sua infraestrutura deve se recuperar automaticamente dela, sem que os usuários sequer a notem.
De várias formas, é a implementação técnica de uma organização realmente comprometida com a melhoria contínua ou kaizen (consulte Recursos).
Em resumo, essa nova geração de ferramentas de resiliência e infraestrutura de acompanhamento possui os seguintes recursos:
- Monitoramento: Os processos daemon são continuamente executados para diagnosticar erros;
- Diagnóstico: As ferramentas de diagnóstico são executadas como parte do monitoramento do sistema;
- Interrupção: A infraestrutura é intencionalmente interrompida ao encerrar as instâncias e outras atividades de interrupção;
- Randomização: Para evitar resultados e comportamento esperados, a interrupção é aleatoriamente aplicada à infraestrutura;
- Infraestrutura de autocura: Embora não faça parte da ferramenta de resiliência, o comportamento resultante esperado é que as equipes continuem a aplicar e melhorar a infraestrutura autônoma capaz de se recuperar de interrupções de serviço sem os usuários sequer notarem.
O Chaos Monkey
A Netflix utiliza bastante uma infraestrutura em nuvem para transmitir filmes aos usuários, juntamente com outra funcionalidade. Em julho de 2012, foi relatado que os usuários da Netflix transmitiram mais de 1 bilhão de horas em junho de 2012. Em outras palavras, a Netflix não é um usuário trivial da nuvem; ela utiliza-a em grande escala.
Um Guia de Iniciação Rápida do GitHub criado pela equipe de tecnologia da Netflix (consulte o “Guia de Iniciação Rápida do Chaos Monkey” em Recursos) descreve as etapas a serem seguidas para colocar o Chaos Monkey em funcionamento. A lista a seguir oferece mais algumas informações sobre as ferramentas utilizadas pelo Chaos Monkey. Certifique-se de executar os comandos descritos no guia para remover qualquer recurso não utilizado, caso contrário, haverá cobrança contínua pelo uso.
- Ajuste de Escala Automático: O Ajuste de Escala Automático é um recurso específico dos Serviços da Web da Amazon que possibilita o dimensionamento da capacidade de cálculo para cima e para baixo com base na demanda — por meio de regras definidas por você. Embora ele seja um recurso específico do AWS, é possível criar esse tipo de ambiente escalável com sua infraestrutura em nuvem— pública ou privada— . O Ajuste de Escala Automático possui dois componentes importantes: uma configuração de ativação e um Grupo de Ajuste de Escala Automático. Uma configuração de ativação define como uma instância é ativada em um Grupo de Ajuste de Escala Automática. Um Grupo de Ajuste de Escala Automática é uma coleção de instâncias às quais aplicar uma configuração de ativação particular;
- SimpleDB: O SimpleDB é um banco de dados da NoSQL que pode ser utilizado para persistir dados. É preciso definir um domínio do SimpleDB. Ele é utilizado pelo Chaos Monkey para armazenar o estado;
- Gradle: O Gradle é uma ferramenta de desenvolvimento. Ela é utilizada para desenvolver o Chaos Monkey e iniciar o contêiner do aplicativo Jetty;
- Arquivo de propriedades: É preciso modificar um arquivo simianarmy.properties com credenciais e outras informações configuráveis;
- Jetty: O servidor na memória do Jetty executa o Chaos Monkey para interromper sua infraestrutura de forma aleatória.
Um Simian Army
O Chaos Monkey é a primeira entrada do Simian Army da equipe técnica da Netflix. Na Tabela 1, há uma lista de outras ferramentas propostas pela Netflix para constituir o Simian Army (consulte Recursos):
| Nome | Descrição |
|---|---|
| Chaos Gorilla | Simula indisponibilidade de toda uma zona de disponibilidade |
| Conformity Monkey | Encerra instâncias que não aderem às melhores práticas |
| Doctor Monkey | Executa verificações de funcionamento (como CPU) |
| Janitor Monkey | Procura por recursos não utilizados e os exclui |
| Latency Monkey | Cria atrasos artificiais na comunicação entre o cliente e o servidor |
| Security Monkey | Encontra vulnerabilidades de segurança, como grupos de segurança não configurados de forma adequada |
Estas são apenas algumas ideias. As possibilidades para outras formas de aplicar uma combinação de monitoramento, diagnósticos, testes e destruição intencional em ambientes de produção baseados na nuvem são infinitas.
Liberte a fúria
Neste artigo, mostramos como é possível realmente começar a criar uma infraestrutura autônoma capaz de se autocurar com a ajuda de ferramentas, como o Chaos Monkey, e de um ambiente de nuvem.
No próximo artigo, falaremos sobre a infraestrutura orientada a testes. Nela, mostraremos como aplicar técnicas de desenvolvimento orientadas a testes — comumente utilizadas por desenvolvedores para o código do aplicativo — para a sua infraestrutura, utilizando ferramentas como o Cucumber.
Recursos
Aprender
- “Automation for the people: Continuous testing” (Paul Duvall, developerWorks, março de 2007): Este artigo discute a execução de testes automatizados com cada mudança para um código base.
- “Failure as a Service” (Haryadi S. Gunawi et al., University of California at Berkeley Technical Report, julho 2011): Este artigo discute a execução rotineira de drills de falha em grande escala em implementações reais.
- “Netflix streaming tops 1 billion hours in month for first time” (Rachel King, CNET, julho de 2012): O serviço de transmissão digital da Netflix alcançou um marco importante recentemente: visualização de mais de 1 bilhão de horas em um mês.
- Guia de Iniciação Rápida do Chaos Monkey: Um guia para a execução do Chaos Monkey em seu ambiente.
- Computação Autônoma: O portal da IBM para computação autônoma.
- Kaizen: A Wikipédia descreve essa abordagem originada no Japão para a melhoria contínua dos processos.
- “Chaos Monkey Released Into The Wild” (Cory Bennett e Ariel Tseitlin, Netflix, julho de 2012): Comunicado do lançamento oficial do software livre Chaos Monkey no GitHub.
- Fique por dentro dos eventos técnicos e webcasts do developerWorks com ênfase em uma variedade de produtos IBM e assuntos do segmento de mercado de TI.
- Participe de um briefing ao vivo e gratuito do developerWorks Live! para se atualizar rapidamente sobre os produtos e as ferramentas IBM e as tendências do segmento de mercado de TI.
- Siga o developerWorks no Twitter.
- Acompanhe as demos on demand do developerWorks que abrangem desde demos de instalação e configuração de produtos para iniciantes até funcionalidades avançadas para desenvolvedores experientes.
Obter produtos e tecnologias
- Simian Army: O software livre da Netflix. O Chaos Monkey é uma entrada do que será um conjunto de ferramentas de software livre.
- Bees with machine guns: Um utilitário para o armamento (criação) de vários bees (microinstâncias de EC2) para atacar (teste de carga) alvos (aplicativos da web).
- IBM Tivoli Provisioning Manager: O Tivoli Provisioning Manager possibilita uma infraestrutura dinâmica automatizando o gerenciamento de servidores físicos, servidores virtuais, softwares, armazenamento e redes.
- IBM Tivoli System Automation for Multiplatforms: O Tivoli System Automation for Multiplatforms oferece alta disponibilidade e automação para aplicativos corporativos e serviços de TI.
- Avalie os produtos IBM da maneira que for melhor para você: faça download da versão de teste de um produto, avalie um produto online, use-o em um ambiente de nuvem ou passe algumas horas na Sandbox da SOA aprendendo a implementar Arquitetura Orientada a Serviços de modo eficiente.
Discutir
- Participe da comunidade do developerWorks. Entre em contato com outros usuários do developerWorks, enquanto explora os blogs, fóruns, grupos e wikis orientados ao desenvolvedor.
- A comunidade de transformação do Agile oferece novidades, discussões e treinamento para ajudar você e a sua organização a desenvolverem uma base de princípios de desenvolvimento do agile.
***
Sobre o autor: Paul Duvall é CTO da Stelligent. Palestrante de destaque em várias conferências líderes de softwares, ele trabalhou em praticamente todas as funções em projetos de software: desenvolvedor, gerente de projeto, arquiteto e testador. É o principal autor de Continuous Integration: Improving Software Quality and Reducing Risk (Addison-Wesley, 2007) e ganhador do Jolt Award de 2008. Também é autor de Startup@Cloud e DevOps in the Cloud LiveLessons (Pearson Education, junho de 2012). Além disso, contribuiu para vários outros livros. Paul criou a série Automation for the people , de 20 artigos, no developerWorks. É apaixonado por oferecer softwares de alta qualidade aos usuários de forma cada vez mais rápida e quase sempre por meio de entrega contínua e da nuvem. Leia seu blog em
***
Artigo original disponível em: http://www.ibm.com/developerworks/br/library/a-devops4/index.html



