Escalando Horizontalmente – AWS Auto Scaling – Parte#1

Finalmente depois de alguns aprendizados e experiências chegou a hora de compartilharmos um pouco sobre Amazon Web Services. Vamos então falar sobre  escalar de forma horizontal utilizando o serviço Auto Scaling da AWS. Para aqueles que não conhecem o AWS Auto Scaling indico fortemente dar uma boa leitura na vasta documentação do serviço que aborda desde conceitos básicos de utilização até mesmo referencias da API.

Outra dica também é assistir a palestra realizada no uMov.Me Labs Summit realizado em Abril 🙂

Para interagirmos com os serviços web services da Amazon relacionados a política de Auto Scaling podemos escolher basicamente entre:

  • SDK – Utilizando a API de desenvolvimento da AWS disponível hoje para as principais linguagens de programação como Java, .Net, Ruby, PHP, Node.JS e também plataformas móveis como Android, iOS. Através da API de desenvolvimento é possível interagir diretamente com os web services da Amazon, manipulando grande parte dos serviços oferecidos via console de gerenciamento.
  • Command Line Tools – Grande amigo dos SysAdmins, o Command Line Tools, veio para facilitar a interação com os principais serviços disponíveis pela AWS, onde sem precisar desenvolver nenhuma linha de código ou instanciar nem objeto é possível gerenciar sua infraestrutura usando apenas o terminal.

Neste primeiro exemplo iremos adotar o Command Line Tools como ferramenta para criarmos uma política de auto scaling. Nesta abordagem iremos fazer com que nossa infraestrutura esteja preparada para escalar de forma horizontal. É possível utilizando o serviço Auto Scaling prever períodos de grande utilização de uma determinada aplicação ou serviço, mas também simplesmente reduzir o número de instancias durante os períodos de inatividade das mesmas, impactando diretamente assim nos custos com infraestrutura.

Através de alguns poucos passos utilizando o Command Line Tools você poderá obter significativa redução no seu bolso ao final do mês. Então chega de bla bla bla e vamos ao que interessa: Setup:

  1. Para iniciar realize o download da ferramenta Command Line Tools de Auto Scaling;
  2. Uma vez descompactado o arquivo, será criada a pasta ‘AutoScaling-xxx’. Iremos seguir os passos descritos na seção “Installation” do arquivo README.TXT situado dentro da pasta descompactada, setando assim todas as variáveis de ambiente necessárias para rodarmos os scripts;
  3. Agora é a vez de obter suas chaves de segurança da AWS para conseguirmos interagir com a API da AWS. Para obter as suas credenciais basta acessar as configurações da sua conta e obter as duas chaves(Chave de acesso, Chave de acesso secreta).
  4. Com as chaves em mãos, basta seguir a seção “Using AWS Keys” do arquivo README.TXT situado dentro da pasta descompactada.
  5. Para ter certeza de que tudo está funcionando corretamente digite no terminal o comando “as-cmd”. Se todos os passos foram seguidos corretamente você verá uma lista com os comando disponíveis da ferramente de auto scaling via Command Line Tools.
  6. Dúvidas?

Escalando:

  1. O primeiro passo a ser realizado basicamente irá identificar qual AMI(Amazon Machine Images) servirá de base para criar novas VMs quando necessário. Para isso basta executar o comando abaixo:  
    as-create-launch-config my_config --image-id ami-xxxxxxxx --instance-type m1.micro
  2. Uma vez criada a configuração de inicialização de novas VMs, precisamos informar agora através da criação de um novo grupo de auto scaling em quais zonas estas VMs devem ser criadas. Algumas outras informações importantes são número mínimo e máximo de VMs bem como para qual ELB(Elastic Load Balancer) estas VMs devem ser atribuídas. Crie um novo grupo executando:
    as-create-auto-scaling-group my_as_group --launch-configuration my_config --availability-zones us-east-1a us-east-1b --min-size 2 --max-size 20 --load-balancers MyLB
  3. Para que possamos iniciar uma nova VM e desta forma escalar horizontalmente é necessário a criação de políticas de auto scaling. Desta forma criaremos uma política para adicionar novas VMs respondendo ao load balancer associado. Para isso precisamos executar o comando:
    as-put-scaling-policy scale_up --auto-scaling-group my_as_group --adjustment=1 --type ChangeInCapacity --cooldown 300
  4. Uma vez incrementado o número de VMs e satisfeito o aumento na demanda das aplicações, você também pode ter uma política de auto scaling para desligar VMs uma vez identificado baixo tráfego de requisições através do ELB em questão. Semelhantemente ao passo 3 iremos criar uma nova política, porém agora estaremos subtraindo uma VM de modo a economizar recursos não utilizadas executando o comando:
    as-put-scaling-policy scale_down --auto-scaling-group my_as_group --adjustment=-1 --type ChangeInCapacity  --cooldown 300

    Você ainda pode resolver diminuir o número de VMs após o horário comercial onde o volume de acessos diminui consideravelmente e através do monitoramento de memória ou CPU indicam inatividade de algumas VMs. Mas este é um assunto para o próximo post, AWS Auto Scaling – Parte#2 🙂

  5. Vamos testar? Uma vez que não atrelamos nenhuma rotina de monitoramento onde poderíamos criar e remover instancias automáticamente, podemos criar e remover instancias manualmente através do comando “as-execute-policy“.
  • Baseado na política para criar VMs podemos executa-la assim:
    as-execute-policy --name scale_up --auto-scaling-group my_as_group
  • Baseado na política para remover VMs podemos executa-la assim:
    as-execute-policy --name scale_down --auto-scaling-group my_as_group

Desta forma temos uma primeira política de auto scaling! Em um próximo post estaremos explicando como automatizar a criação e remoção de VMs utilizando o serviço AWS CloudWatch. #ficadica

Publicidade

Continuous Delivery! Sua empresa está preparada?

Ainda depois de mais de 11 anos praticando agilidade, muitas são as equipes de desenvolvimento de software que sonham em realizar um deploy a partir de um simples click. O que geralmente ocorre é que as organizações e seus respectivos times/produtos muitas vezes não estão preparados para este grande passo. 

Para ilustrar e enriquecer este post, acompanhe algumas dicas e aprendizados adquiridos através de experiências e treinamentos como por exemplo com o autor do livro Continuous Delivery, @jezhumble.


O quão ágil é o seu time?

Hoje em dia não raros são os times de desenvolvimento de software que se consideram “ágeis”, ou que buscam nas praticas ágeis a base para seus ciclos de desenvolvimento. @Jezhumble costuma questionar o quão ágil um time de desenvolvimento é. E o mais importante, como chegar a uma métrica para mensurar tal informação. A reposta mais simples possível vem do mesmo @jezhumblee, onde ele sugere mensurar o quão rápido seu time consegue entregar software de qualidade a seus clientes. #ficaadica

Seu time está preparado para entregar software de forma contínua?

Ainda falando em desenvolvimento àgil de software, temos como premissa a entrega de software agregando valor ao negócio do cliente. Desta forma muitas equipes pecam na tentativa de estabelecer uma linha de entrega contínua a seus clientes, onde os motivos vão desde erros operacionais básicos das equipes até mesmo o despreparo por parte do cliente em relação ao modelo de entrega proposto.

Para evitar os pecados mencionados anteriormente, procure criar uma cultura de entrega continua. Faça com que a entrega de versões ou a simples entrega de uma nova funcionalidade faça parte do planejamento de cada equipe e não apenas após finalizado a codificação da mesma. Discuta estratégia de entregas. Discuta, reforce, defina o conceito de “PRONTO” com o seu time e lembre-se, tarefa pronta significa valor entregue ao cliente em produção.

Automação

Novamente parafraseando @jezhumble “… automação é tudo” ou talvez seria para tudo? O fato é que automação é um ponto chave para quem busca realizar entregas consistentes independentemente do tamanho do ciclo de desenvolvimento trabalhado.

Garanta através de “mecanismos de segurança” constantes validações sob a versão ainda em desenvolvimento, gerando feedback constante e garantindo que a linha de produção não pare, ou se caso venha parar que volte a produzir o quanto antes possível. Entre estes mecanismos estão a automação de testes validando a versão a cada commit realizado. Integrar continuamente a versão corrente evitado surpresas ao fechar versões para produção ou então rodar noturnamenta suites de regressões antecipando não conformidades geralmente identificadas apenas na validação de versões pré-produção.

Eliminar processos complexos e consequentemente dificeis de serem executados é um fator muito importante na automação de tarefas. Se uma tarefa é complexa para ser executada, talvez necessite ser executada com mais frequência buscando assim alternativas e soluções mais simples de serem executadas.

Não elimine a intervenção das pessoas no processo de entrega, pessoas são ótimas em heuristica.

“… se é demorado é porque é dificil, se é dificil é porque é manual, se é manual precisa ser automatizado”

 Continuous Deployment e Continuous Delivery

Os termos Continuous Deployment e Continuous Delivery podem nos gerar confusão. Pois bem vamos exemplificar o conceito de cadas um deles abaixo:

  • Continuous Deployment: É caracterizado pelo fechamento de builds de software funcionais.

Ex.: Realizar o fechamento de versão e realizar o deploy no ambiente de homologação a cada nova funcionalidade uma vez validada pelos testes. Note não estamos entregando software em produção. 

  • Continuous Delivery: Pode ser considerado o passo de simplesmente agregar valor ao negócio propriamente dito. Conforme o ambiente, baterias de validações podem fazer parte deste processo intermediado diretamente pelo pessoal de negócio, ou simplesmente em ambientes automatizados este mesmo time decide qual o melhor entregável deve ser promovido para produção clicando no botão “release”. http://goo.gl/QkaO 

Cultura DevOps 

Leve para dentro de seu time a cultura DevOps, fazendo o time de desenvolvimento sentir as dores atuais para realizar a liberação de uma nova versão. Fazer do time de operações uma extensão do time de desenvolvimento ou vice-versa.

Esta maior integração propicia ao desenvolvedor uma maior responsabilidade dentro do processo de liberação de novas versões. A prática de code refactoring não pode ser vista como ato de heroísmo e sim de responsabilidade e respeito para com o time. Um desenvolvedor deve garantir que após realizar uma refatoração em uma parte do sistema, tudo deve continuar funcionando conforme anteriormente.

Realize eventos para apresentar grandes mudanças no software, evitando assim também grandes surpresas e processos de rollbacks/fallbacks traumáticos. Mas esteja sempre preparado para executá-los da melhor forma possível.

Estude melhores práticas e formas de modo a facilitar o bom andamento do ciclo de desenvolvimento de seu time tais como:

  • Feature Toogles;
  • Feature Branching; 
  • Blue-Green Deployment;
  • Virtualização etc …

Pratique Chaos Monkey! Aprenda com suas falhas e a melhor forma de fazer isso é falhar frequentemete. Certifique-se de que sua infraestrutura pode ser recriada através do seu controle de versão, incluindo scripts de toda e qualquer espécie.

      Eventos Junho, Julho e Agosto … Confiram!

      Ttlabspodcast

      Enfim nosso terceiro episódio!!!

      Para esta edição fizemos um compacto sobre alguns eventos realizados no mês de junho e alguns outros eventos a serem realizados nos próximos meses.

      Falamos sobre o Agile Game Night, evento realizado pelo GUMA-RS e também sobre o Coderwall.

      Para finalizar aproveitando o espaço de merchandising gratuito 🙂 falamos sobre o Agile Brazil 2012 que será realizado neste ano em São Paulo e também sobre o evento do GUTS-RS bem como da palestra “Permissão para mudar” que será realizado na Escola livre.

       

       

      #FicaADica:

      Nokia Developer Day

      A @ttecnologia acompanhou de perto em São Paulo o evento Nokia Developer Day que ocorreu na última sexta-feira, dia 23/03 em São Paulo.

      Publiquei em meu blog um resumo com todos os principais momentos do evento e novidades apresentadas pela Nokia, principais palestras ilustrando a utilização das tecnologias e ferramentas utilizadas no desenvolvimento de aplicativos Windows Phone 7.

      Confira estas e outras novidades que o ecossistema criado pela parceria entre Nokia e Microsoft trouxeram para as empresas e desenvolvedores no Brasil.

       

      Como tornar seu tempo um pouco mais eficiente e sua vida um pouco mais fácil

      Nos dias de hoje, tanto profissionalmente quanto pessoalmente, nos deparamos constantemente em situações onde as meras 24horas de um dia são simplesmente insuficientes.

      Insuficientes? Sim, nem que o dia tivesse 48 horas conseguiríamos a realizar todas as tarefas URGENTES que TEMOS que realizar HOJE SEM FALTA.

      Quase sempre vivemos iludidos por uma rotina “escrava”, onde cada vez mais tentamos abraçar o mundo a nossa volta. E não fique admirado, pois todas as semelhança percebidas até agora não são meras coincidências ou privilégios seus.

      Anormal ou feliz é aquele que ainda não passou por uma situação semelhante.

      Pois bem em decorrência da inevitável frustração de improdutividade, tanto pessoal quanto profissional, fui apresentado ao método Getting Things Done ou então simplesmente GTD de David Allen.

      Palestra realizado no evento TTLabs Submit Q2/2011 – slides

       

      Poderoso método de produtividade pessoal

      MANTENHA SUA MENTE DESPREOCUPADA: Uma necessidade básica do ser humano é dormir, certo? Então mantenha-se despreocupado. Possua “sistemas de ajuda”, como uma simples agenda para armazenar suas preocupações em forma de tarefas/lembretes. Com suas preocupações devidamente “documentadas” os pesadelos tendem a diminuir 🙂

      Ainda falando de sistemas de ajuda, use por exemplo um personal kanban para ir priorizando suas próximas tarefas pendentes, conseguindo desta forma manter a concentração e foco na tarefa atual. Isso ajuda evitar que você não fique pensando no que você precisa fazer ao término da tarefa atual ou então repriorizando-as mentalmente a cada momento que lembrar daquela tarefa importantissíma que tinha esquecido.

      b) REALIZE TAREFAS SIMPLES: Eficiência e Simplicidade. Estas duas palavras deveriam ser sinônimos! OK, muitas vezes o ser humano consegue torná-las antônimas em muitas situações.

      Sejá eficiente, execute as coisas simples sempre que possível. Envie agora mesmo aquele e-mail que só depende de você. Não deixe para depois aquela tarefa que dura menos de dois minutos para ser executada, assim você elimina a necessidade de gerenciá-la. Dois minutos é um bom termomêtro, acredite!!

      Alternativa aos complicados e conhecidos mas pouco eficazes métodos de gerenciamento de tempo

      Tenho certeza, se você está lendo este post é porque se preocupa com o seu tempo, ou então procura meios de gerencia-lo de uma forma melhor. Assim livros da saga, como administrar seu tempo, priorizando suas tarefas, tornando as 24 horas do dia mais eficientes possuem 1/3 do volume de seu acervo de livros.

      O fato é que em comparação os com modelos de administração do tempo popularmente conhecidos e ilustrados no paragráfo anterior, Getting Thinks Done possibilita que uma pessoa que nunca tenha ouvido falar sobre o método, obtenha bons resultados após uma simples leitura do que é GTD e quais são suas principais práticas.

      Detalhe! A leitura mencionada no 5° parágrafo deve durar em torno de 5, 10 minutos … afinal de contas o tempo é algo valioso não é mesmo 🙂 ?

       

      Curte podcasts? Gosta de tecnologia? Chegou o TTLabs Podcast!

      Ttlabspodcast

      Senhoras e senhores é com imensa satisfação que anunciamos o primeiro episódio do TTLabs Podcast 🙂

      E para a estréia escolhemos a dedo o assunto, Mobilidade!

      Quer saber mais sobre o assunto e com quem trabalha há tempos no mercado de mobilidade?

      Não, mobilidade não se resume apenas a Android e iPhone. Confira as principais plataformas existentes hoje no mercado, particularidades entre elas, curisiodades, dicas, eventos e muito mais.

      Ouça o primeiro epsódio através do blog ou pelo iTunes.

      #FicaDica:

      • DFJUG – Grupo de usuários Java do Distrito Federal;
      • JEDI – Site da iniciativa de aprendizado Java pelo DFJUG;
      • JEDI – Página oficial da iniciativa;
        • Aqui estão os módulos de Android (AndroidRybená) e também o de Java ME (Desenvolvimento de Aplicações Móveis).
      • Nokia RDA – Acesso Remoto à dispositivos móveis;
      • Device Anywhere – Plataforma de teste para aplicações mobile;
      • W3School – Referência sobre HTML5;
      • JQueryMobile – Framework web para dispositivos móveis;
      • Create4Millions – Concurso da Nokia de aplicativos mobile (prazo até 01 de novembro de 2011);

      Ah, se você curtiu a trilha de abertura (e de fechamento), procure pela banda Amendoa! A música se chama Desperdício.