Agile

14 jan, 2013

Desenvolvimento e operações (DevOps) do Agile: descubra o Chaos Monkey

Publicidade

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

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