podTag

Tag #07 - Cloud computing, virtualização e infraestrutura


Listen Later

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.

Participantes:

  • 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 chover
  • Se 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

                                            ...more
                                            View all episodesView all episodes
                                            Download on the App Store

                                            podTagBy podTag Team