Olá, mundo! Dos trabalhos da faculdade aos sistemas dos grandes corporações, no sétimo episódio do podcast vamos falar sobre como a cloud computing pode resolver os seus problemas.
  
Luiz Gonçalves, usuário fiel do FTP  
Renan Burda, que defende a Amazon, digo, praticidade  
João Risso, que preza pela segurança e privacidade  
Paulo Telles, que pela Nuvem já sabe se vai choverSe você leu até aqui, você ganhou um CUPOM DE DESCONTO DE 10% em TODOS os livros da Casa do Código! \m/
Cupom: (com os caracteres especiais)
  
O que é a computação em nuvem?O conceito de computação em nuvem (em inglês, cloud computing) refere-se à utilização da memória e da capacidade de armazenamento e processamento de servidores compartilhados e interligados por meio da Internet, seguindo o princípio da computação em grade. O armazenamento de dados é feito em serviços que poderão ser acessados de qualquer lugar do mundo, a qualquer hora, não havendo necessidade de instalação de programas ou de armazenar dados. O acesso a programas, serviços e arquivos é remoto, através da Internet - daí a alusão à nuvem. O uso desse modelo (ambiente) é mais viável do que o uso de unidades físicas. Num sistema operacional disponível na Internet, a partir de qualquer computador e em qualquer lugar, pode-se ter acesso a informações, arquivos e programas num sistema único, independente de plataforma. O requisito mínimo é um computador compatível com os recursos disponíveis na Internet. O PC torna-se apenas um componente ligado à Internet — a “grande nuvem” de computadores — sendo necessários somente os dispositivos de entrada (teclado, mouse) e saída (monitor).
  
O que significa virtualizar infraestrutura?      
Mover a infraestrutura para máquinas virtuais, seja em um provedor remoto (ex. Amazon EC2) ou na própria infraestrutura.      
Motivação: uso eficiente dos recursos de hardware disponíveis; isolamento de diferentes serviços (cada um em uma máquina).    
  
  
Surgimento dos serviços de nuvem      
Ideia: oferecer um pouco do contexto de surgimento da computação em nuvem      
Citar exemplos de serviços:          
DigitalOcean          
Amazon Web Services          
Heroku          
Microsoft Azure          
Google Cloud Platform        
      
    
  
  
Quais a desvatangens de ter uma infraestrutura na nuvem?      
Custo          
Custo alto para grandes organizações        
      
      
Otimização de custos          
Opções diversas de tecnologias e serviços, configurações.          
Exemplo: gama de serviços e configurações oferecidas pela AWS, i.e. instâncias reservadas vs spot vs on-demand.        
      
      
Perda de controle dos dados da organização          
Dados ficam armazenados em uma localidade remota          
Ninguém garante que o provedor de serviços não tenha acesso a máquina [4], uma vez que o provedor tem acesso ao hardware e a máquina host.        
      
      
Aplicação deve ser estruturada para ser escalável horizontalmente          
Exemplo: Em uma arquitetura baseada em serviços, basta subir uma nova instância/processo do serviço e usar balanceamento de carga para aumentar a capacidade de processamento [1].          
Aplicações legadas podem não ser capazes deste tipo de escalabilidade, ex. sistemas ERP e CRM antigos.          
Bancos de dados relacionais não conseguem escalar horizontalmente, devido às garantias ACID e pelo teorema CAP [4, 5]:         
      
    
  
  
Quais as vantagens de ter uma infraestrutura na nuvem?      
Evita manutenção e depreciação de hardware      
Evita manutenção de uma equipe de infraestrutura          
Porém necessário ter uma equipe com conhecimento especializado na plataforma de nuvem escolhida!        
      
      
Alta disponibilidade          
Provedores de nuvem oferecem múltiplas zonas/datacenters          
Disponibilidade oferecida depende do tipo de contrato        
      
      
Tolerância a falhas          
Novamente, devido a múltiplas zonas/datacenters        
      
      
Escalabilidade horizontal, i.e. adicionar mais máquinas aumenta a capacidade de processamento do sistema [1].    
  
  
Como pode ser feito o gerenciamento de configuração?      
Usar diversas máquinas virtuais leva ao problema de manter a configuração das máquinas consistente, principalmente no caso de clusters.      
Automatização de configuração de novas instâncias      
Soluções disponíveis: Ansible          
Ansible é uma ferramenta de gerenciamento de configuração, implantação (deploy) e orquestração [7].              
Diferencial: não necessita de um agente nas máquinas gerenciadas, uma vez que usa um modelo ‘push’, fazendo o gerenciamento via SSH (Linux) ou WinRM (Windows), usando frameworks existentes nessas plataformas. Por não ter agente, nenhum recurso é consumido nas máquinas gerenciadas.              
Gerenciamento de configuração é feito via Playbooks, que são arquivos YAML que definem as tarefas de automação a serem executadas.            
          
        
      
      
Escalabilidade automática de acordo com a demanda          
Caso de uso: usar mais recursos em horários de pico, desligar esses recursos em horários de tráfego menor, para reduzir os custos do negócio sem perder disponibilidade.          
Requer orquestração dos serviços        
      
    
  
  
Como pode ser feita a orquestração de serviços?      
Definição de fluxos de trabalho, políticas e regras          
Provisionamento automático de recursos.          
Balanceamento de carga.          
Escalabilidade sob demanda/dinâmica, de acordo com a necessidade.          
Automação dos fluxos de trabalho: definição programática (i.e. via código, como Dockerfile) dos serviços necessários para subir uma aplicação na infraestrutura em nuvem.          
Definição de regras de escalabilidade, balanceamento de carga, entre outros.        
      
      
Exemplos: Amazon Beanstalk, Google Cloud Composer      
Referências na literatura [2, 3].    
  
Links
[1] Artigo do Martin Fowler sobre microserviços (em inglês) [2] Auto-scaling to minimize cost and meet application deadlines in cloud workflows [3] Scaling and Scheduling to Maximize Application Performance within Budget Constraints in Cloud Workflows [4] Cloud computing is a trap, warns GNU founder Richard Stallman [5] Brewer’s conjecture and the feasibility of consistent, available, partition-tolerant web services [6] Visual Guide to NoSQL Systems [7] Whitepaper - Ansible In-Depth