Arquitectura Lógica e Modelos de Serviços

 Depois de analisar sobre a infrasestrutura por trás da computação em nuvem, me refiro às tecnologias como virtualização, containers e orquestração, quero agora explorar como esses serviços são consumidos e como tudo é organizado logicamente. Não é suficiente que tenhamos servidores virtualizados, é preciso criar formas de entregar isso como um serviço, a mesma analogia que a conta de água ou energia no final do mês.

O conceito de "Tudo como Serviço"

Antes da computação em nuvem, as empresas compravam servidores, instalavam sistemas operativos, configuravam redes e implementavam aplicações. Isso significava um grande investimento, o tal de CAPEX(Capital Expendicure) o que implicava pouca flexibilidade na provisão de um determinado serviço. Entretanto, com o desenvolvimento da computação em nuvem, como forma de resolver esse problema foi implementado uma nova lógica, o modelo as-a-service.

A ideia era simples, em vez de comprar infraestructura (computadores físicos), você consume serviços sob demanda (ou seja quando você precisa deles), e paga apenas pelo tempo de uso. Assim surgiram os seguintes modelos de serviço:
  • IaaS (Infrastructure as a Service)
  • PaaS (Platform as a Service)
  • SaaS (Software as a Service)
  • FaaS (Functions as a Service)
  • E mais algumas siglas

Arquitectura Lógica

Para melhor compressão, podemos imaginar a organização da computação em nuvem como camadas de abstrações, por exemplo:
  1. Usuário Final
  2. SaaS - Aplicações já prontas
  3. PaaS - Plataformas para desenvolver e hospedar software
  4. IaaS - Máquinas virtuais, redes e  armazenamento
  5. Infraestrutura Física - Data Centers, servidores e cabos
Cada uma dessas camadas esconde a complexidade que existe na camada abaixo dela, por exemplo:
Se você estiver a usar Microsoft 365 estaria a usar um SaaS, e não estaria preocupado com servidores e nem com updates.
Se você usa um banco de dados gerenciado(RDS da AWS por exemplo), estaria a usar um PaaS, não estaria preocupado em gerir máquinas virtuais (VMs).
E se você cria uma instância(um servidor virtual) EC2 na AWS, estaria a usar um IaaS.

O Conceito de Nuvem Pública (IaaS)

O IaaS foi a primeira camada a ser comercializada de forma massiva. Apartir de 2006 com a AWS sendo a primeira a oferecer o EC2 (Elastic Compute Cloud), empresas como Google Cloud e Microsoft Azure, introduziram serviços como:
  • Compute: VMs on-demand, escaláveis
  • Storage: Blocos (EBS), objectos (S3), arquivos (EFS).
  • Rede virtualizada: VPCs, sub-redes, roteadores virtuais.
O Iaas é por sua vez, a porta de entrada para empresas que precisam de migrar os seus workloads legados para a nuvem, porque oferece flexibidade ou seja você escolhe o Sistema Operativo, middleware e configuração desejada. Todavia isso implica que você tenha maior responsabilidade operacional, feats como patching, alta disponibilidade e backups são por tua conta.

Foco no Código e Não no Servidor (PaaS)

O PaaS surgiu como solução para desenvolvedores que querem criar aplicações sem se preocupar com a infraestrutura por trás. Exemplos:
  • Elastic Beanstalk
  • Heroku
  • Azure App Service
Neste modelo você faz o deploy do código e o provedor é responsável por:
  • Escalabilidade automática
  • Balanceamento de carga
  • Patching do sistema operativo
Esses factores são cruciais para a velocidade no desenvolvimento, no entanto você tem menos controlo e dependência de stack específica do provedor.

O Modelo que Democratizou a Nuvem (SaaS)

Esse é com certeza um dos modelos mais usados, e com certeza você também usa ele. Só para ter ideia alguns dos exemplos de SaaS são Gmail, Google Drive, Microsoft 365, etc. Neste modelo o provedor disponibiliza a aplicação através da internet. Algumas das suas vantagens incluem: 
  • Zero manutenção para o cliente; 
  • Actualizações automáticas;
  • Acesso apartir de qualquer lugar. 
Para empresas, o SaaS elimina custos de instalação local e facilita modelo de subscrição.

Outros Modelos além dos Tradicionais (FaaS, BaaS e Containers Geridos)

Os modelos mais populares são o trio IaaS, PaaS e SaaS. Com o passar do tempo, surgiram novas necessidades foi aí então que novos modelos foram introduzidos. 

FaaS (Functions as a Service) - também conhecido como modelo serveless, neste modelo você escreve uma função e o provedor executa sob-demanda(quando necessário). Os exemplos desse modelo são: AWS Lambda, Azure Functions e Google Cloud Functions. Para este modelo cobra-se por execuçào do código, mesmo que o servidor esteja a funcionar 24h por dia, o valor não conta. É um modelo ideal para eventos, APIs leves e automação.

BaaS (Backend as a Service) - são serviços prontos para autenticação, push notifications e bancos de dados NoSQL. Por exemplo: Firebase (Google e AWS Amplify.

Containers Geridos ( ou Managed Containers): são um modelo de serviço em que você executa containers (como os criados com Docker) sem precisar gerenciar directamente a infraestructura por trás, como clusters Kubernetes, orquestradores, nòs de rede e escalonamento manual.
Tradicioalmente para executar containers em produção, você precisava de:
  • Criar um cluster Kubernetes (ou outro orquestrador)
  • Configurar balanceamento de carga, rede, storage persistente;
  • Actualizar nós, corrigir falhas e cuidar de escalabilidade
O que é muito complexo e trabalhoso, por isso mesmo surgiram os containers geridos.

Os provedores de nuvem, perceberam que muitas empresas querem usar containers sem se preocupar com o gerenciamento de clusters. Então, eles criaram serviços que:
  • Recebem sua imagem de container (Docker ou OCI)
  • Executam sob demanda
  • Escalam automaticamente conforme o tráfego
Cobram pelo uso real do serviço e não por uma VM fixa que esteja a ser executada. Com isso aqui você não cria cluster kubernetes manualmente, o provedor é que cuida disso. Alguns dos exemplos são, AWS Fargate, Google Cloud Run e Azure Container Instances.

Redes Virtuais e SDN

Quando você cria uma instância (VM) na nuvem, ela parece isolada, mas na prática ela está num data center onde tem vários clientes. De que forma podemos assegurar isolamento e conectividade? A resposta para essa pergunta é SDN (Software Defined Networking).
O SDN é responsável por separar o plano de controle (quem define regras de rede) do plano de dados (quem encaminha pacotes). Assim, os provedores conseguem:
  • Criar VPCs (Virtual Private Clouds) para cada cliente;
  • Permitir sub-redes privadas, VPNs, NAT e firewalls virtuais;
  • Escalar redes dinamicamente sem mudar hardware físico.
Com VPC, você tem sua própria "nuvem privada" dentro da nuvem pública, com controle de IPs, roteamento e ACLs.

Comentários