PaaS ou IaaS?

Olá,

Não sei se é claro para todos a diferença entre IaaS (Infrastructure as a Service) e PaaS (Platform as a Service) e quando cada um deve ser utilizado. Acho que uma boa maneira de ilustrar os conceitos é utilizar dois dos principais representantes de cada serviço como exemplo: AWS – Amazon Web Services (IaaS) e Google App Engine (PaaS).

O AWS oferece uma série de serviços na nuvem, sendo um dos mais básicos dele o EC2. Esse serviço nada mais é do que a disponibilização de um servidor na nuvem. Escolhe-se o sistema operacional (Windows ou Linux, por exemplo), o tamanho da máquina (Small, Large etc) e pronto… em poucos minutos o servidor está disponível para ser acessado (terminal services, ssh, …) e utilizado. Cabe a você decidir o que irá colocar lá dentro (Sharepoint, Drupal, Tomcat, WebLogic etc), não existem restrições. O RDS, outro serviço deles, é um servidor mas que já vem com um banco de dados relacional instalado (MySQL ou Oracle). Temos ainda o S3 (storage na nuvem), o ELB (balanceador de carga), VPC (criação de uma VPN da sua empresa com a Amazon) etc. Os pontos-chaves aqui são: flexibilidade e controle.

É um serviço essencialmente de data center, com as vantagens da nuvem: escalabilidade infinita e automática, agilidade (servidores em poucos minutos) e com pagamento proporcional ao uso. Se você deseja utilizar uma arquitetura muito própria para sua aplicação, com produtos de terceiros, usando a linguagem de programação que você preferir, quer ter total visibilidade e controle do banco de dados, essa é linha a ser seguida. E a desvantagem? É necessário ainda tomar uma série de decisões de arquitetura e planejamento para de fato conseguir uma alta disponibilidade, escalabilidade e achar o melhor modelo de custos. Precisa decidir sistema operacional, tamanho de máquina, configurar balanceador de carga, projetar estratégias de redundância para cada nó da arquitetura etc. Ou seja, existe um esforço para projetar tudo que será utilizado. Além disso, ele não oferece nada pronto para você utilizar e construir sua aplicação, apenas a infraestrutura.

A Plataforma como Serviço (PaaS) é uma camada de middleware ou aplicação criada em cima da infraestrutura de cloud (ou seja, todos os benefícios da infraestrutura continuam valendo) para dar produtividade e abstração ao processo de desenvolvimento. Esqueça sistema operacional, máquinas físicas e balanceadores de carga. Esqueça até o banco de dados e a modelagem física de tabelas. Nada disso é acessado diretamente. O Google App Engine, por exemplo, permite que você desenvolva uma aplicação de missão crítica, que demande altíssimos volumes de acesso, sem se preocupar com absolutamente nada relacionado à infraestrutura. O sistema é desenvolvido normalmente e com um clique na IDE ele é implantado na nuvem da Google. A partir daí, toda a parte de replicação e alta disponibilidade fica a cargo da própria Google, feito de maneira nativa na plataforma. Além disso, a plataforma oferece uma série de componentes prontos para uso como cache, URL Fetch, XMPP, channel, tasks queues, crons etc. Fora as APIs Premium que foram lançadas recentemente como a Prediction API e a Big Query. Qual o lado negativo? Ao utilizar uma plataforma como serviço você é obrigado a adotar os padrões da plataforma. No caso do Google App Engine, a linguagem deve ser Java, Phyton ou Go!, não é possível instalar nenhum produto pronto dentro da Google (Sharepoint, Magento etc) e sua aplicação fica presa aos padrões da plataforma (lock-in).

Enfim, é preciso colocar na balança o que funciona melhor para sua empresa. Flexibilide e controle vs. Produtividade e abstração. Eu imagino que em breve os benefícios da plataforma superem de longe as restrições. Acho que o grande ganho do cloud computing está justamente em deixar 100% do desenvolvimento enfocado no negócio, e são as plataformas quem oferecem isso.

Abraços!