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:
- Usuário Final
- SaaS - Aplicações já prontas
- PaaS - Plataformas para desenvolver e hospedar software
- IaaS - Máquinas virtuais, redes e armazenamento
- 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.
.png)
Comentários