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