A Infraestrutura da Cloud
Quando pensamos em cloud computing (termo em inglês), parece um termo simples para uma tecnologia também simples, mas a verdade é que a cloud é uma tecnologia que evoluiu gradualmente, resultado de décadas de avanços na arquitectura de sistemas. Para entender a cloud, precisamos voltar às suas raízes, desde o mainframe, a computação distribuida e a virtualização.
1. Mainframes e Time-Sharing
Como já havia comentado no post anterior, nos anos 1960, os computadores eram caros, grandes e centralizados. As empresas usavam mainfraimes, computadores gigantes que ocupavam salas inteiras e custavam milhões de dólares. Como poucas organizações podiam comprar um, surgiu a ideia do time-sharing, cuja objectivo era possibilitar que vários utilizadores compartilhassem um único mainframe, cada um com um terminal ligado a máquina central.
Este modelo é curioso porque de certa forma, já antecipava a ideia da computação em nuvem, onde os recursos também são centralizados, com a possibilidade de acesso remoto e cobrados conforme o uso. Contudo, havia limitações, a largura de banda era mínima, a computação era limitada e não exisita elasticidade, que é o conceito de aumentar ou reduzir os recursos computacionais de acordo com a demanda.
2. A implementação do modelo Cliente-Servidor
Com a popularização dos microprocessadores nos anos 1980, surgiu o modelo cliente-servidor. Cada empresa começou a ter os seus próprios servidores locais, atendendo às suas aplicações e bases de dados. Era um avanço, mas também trouxe novos problemas:
- Custos elevados para a compra e manutenção de hardware;
- Baixa utilização, muitos servidores era ociosos a maior parte do tempo;
- Escalabilidade limitada, aumentar a capacidade de computação exigia comprar mais máquinas (computadores físicos), o que era um processo caro e demorado.
Esses desafios abriram espaço para a próxima grande revolução tecnológica, a virtualização.
3. Conceito de virtualização
A virtualização introduz uma camada de software entre o hardware e os sistemas operacionais, que é chamada de hypervisor. Ela funciona como um gestor entre o hardware físico e as VMs, permitindo dividir um único servidor físico em múltiplas máquinas virtuais (VMs), cada uma com o seu próprio sistema operativo, isolada das demais, para além disso o hypervisor também aloca dinamicamente CPU, memória e armazenamento para essas máquinas.
Existem dois tipos principais de hypervisor:
- Tipo 1 (bare-metal): este é executado directamente sobre o hardware (ex: VMware ESXi, Microsoft HYper-V e Xen).
- Tipo 2 (hosted): este tipo é executado sobre um sistema operacional (mais usado para testes, ou computadores pessoais, não em produção).
Com a introdução desta tecnologia no mercado, nasceu a possibilidade de consolidar recursos:
- Em vez de 10 servidores físicos, você tinha 1 físico com 10 VMs.
- Redução de custos de operação ou seja menos hardware, menos espaço físico.
- Ganho de elasticidade, porque criar uma nova máquina virtual passou a ser questão de minutos e não semanas.
Este avanço foi fundamental para o surgimento da Infraestrutura como Serviço (IaaS), que era o principal pilar no início da computação em nuvem pública.
4. Surgimento de Containers
Com certeza a virtualização foi uma tecnologia revolucionária. No entanto foram observadas algumas limitações que essa tecnologia não conseguia suprir, dentre elas notou-se que:
- Cada VM precisava de um sistema operativo completo, isso implicava um consumo pesado de recursos.
- O tempo para provisionar ou seja para criar uma máquina ainda não sera instantâneo.
Surge então o conceito de conteinerização. Em vez de virtualizar o hardware, os containers virtualizam o sistema operativo, usando mecanismos como namespaces e cgroups do Linux. Assim:
- Todas as aplicações compartilham o mesmo kernel;
- Cada container é isolado, mas muito mais leve que uma VM;
- É possível executar centenas de containers onde antes caberia algumas VMs.
O ponto de viragem foi o Docker, apresentado em 2013 por Solomon Hykes em uma PyCon, esta tecnologia simplificou a criação e distriuição de containers. Mas containers sozinhos criaram outro desafio, a agora o exercício era, como gerenciar milhares deles?
5. Kubernetes e o Padrão Cloud-Native
O Google enfrentava esse problema há anos e foi então que desenvolveu internamente o Borg. O borg era um sistema interno de orquestração de clusters do Google, responsável por gerenciar e executar tarefas em larga escala na infraestrutura da empresa. Essencialmente, o Borg automatizava o gerenciamento de recursos e a execução de aplicativos, isso permitia que o Google escalasse os seus serviços de forma eficiente, esse projecto inspirou a criação do Kubernetes em 2014, um projecto de código aberto.
Com Kubernetes empresas conseguem, escalar automaticamente aplicações baseadas em containers, garantir alta disponibilidade com réplicas e failover automático, intergrar observabilidade, redes virtuais e armazenamento dinâmico.
Este modelo deu origem ao movimento Cloud-Native, que inclui práticas como:
- Microserviços: que consiste em dividir aplicações em pequenos componentes independentes;
- DevOps: em essência busca a automação do ciclo de vida do desenvolvimento de software, e isso é amplamente realizado através da integração contínua e entrega contínua (CI/CD).
- Infraestructura Imutável: defende a ideia de nunca alterar servidores em produção, ao invés disso sempre substituir por novas versões.
Embora tenha sido desenvolvidas várias tecnologias, com aparentemente a mesma função, no fundo essas tecnologias resolvem problemas diferentes, a título de exemplo, actualmente a virtualização e os containers coexistem. VMs continuam importantes para workloads monolíticos e ambientes legados, enquanto que containers dominam novas aplicações. Além disso, uma nova técnica foi desenvolvida, a chamada serveless computing (funções como serviço), com uma ideia mais sofisticada ainda, nessa técnica o programador não precisa mais de se preocupar com servidores e muito menos em criar containers, ele foca apenas no código.
Comentários