PaaS ou IaaS: Prefira ambientes híbridos

Estou super empolgado. O Google acabou de anunciar, dia 25 de março, as “Managed VMs” (http://goo.gl/yv1w6F), confirmando o que eu acredito e já digo há algum tempo: a PaaS não morreu e deve ser uma peça importante da sua estratégia de arquitetura. A consideração crucial deve ser que a plataforma *não* vai atender a todas as suas necessidades, mas em vez de descartá-la por causa disso, você tem que planejar uma solução híbrida na nuvem, usando tanto PaaS quanto IaaS.

Veja bem: não há nada de errado com PaaS

As diretrizes gerais para essa abordagem são:

1) Use PaaS o máximo que puder. Idealmente, ela deve controlar todos os HTTP requests dos usuários finais, mantendo o uso do IaaS para tarefas de backend. Lembre-se: você definitivamente deve tirar vantagem da escalabilidade facilitada pela plataforma.

2) Se possível, tente criar um MVP (mínimo produto viável) que possa ser entregue usando apenas os recursos disponibilizados pela plataforma. Fazendo isso, você terá um melhor time-to-market, diminuindo os riscos e custos.

3) Tenha em mente que você precisará usar a flexibilidade da infraestrutura em algum momento. Tudo bem! Projete um mecanismo que permita com que todos os seus servidores se comuniquem com a plataforma. Recomendo o uso de filas para isso (exemplo: Task Queues). Falando nisso, obrigado, Google, por resolver este problema para nós!

4) Comunique-se de maneira assíncrona sempre que possível.

5) Só mais uma coisa: quando precisar de algo que a plataforma não oferece, antes de correr para IaaS para resolver o problema, certifique-se de que não há outras companhias oferecendo esse recurso como um serviço / APIs. Por exemplo: você não tem que desenvolver um recurso de decodificação de vídeo em cima da sua distribuição do Linux só porque a plataforma não fornece esse serviço. Há ótimos serviços de codificação de vídeo disponíveis para uso.

Estou ansioso para testar essas Managed VMs, bem empolgado. Vida longa aos ambientes PaaS, IaaS e ambientes híbridos!

Não há nada de errado com PaaS!

Acabo de ler o artigo da InfoQ “What is going on with PaaS?“. Em resumo, ele comenta que PaaS está sendo adotada em um ritmo bastante lento e disserta sobre as possíveis razões pelas quais esse tipo de serviço está falhando e perdendo espaço para IaaS. Segundo o autor, as razões principais são: mensagem de marketing confusa, falta de maturidade e limitações das plataformas. Embora eu entenda os pontos mencionados, eu enxergo de maneira diferente e discordo de alguns argumentos listados.

Vamos lá… deixa eu comentar o óbvio aqui: PaaS é uma plataforma. Juro que algum dia eu vou escrever um artigo denominado “O Dilema das Plataformas”. Toda vez que eu vejo um desenvolvedor e/ou gerente lidando com plataformas (e não falo apenas de plataformas cloud, mas plataformas de software de maneira geral), é sempre a mesma velha história: “é limitado”, “nós compramos essa plataforma para sermos mais produtivos, está acontecendo o contrário”, “não é flexível”, “nós não sabemos como trabalhar com essa plataforma”, “deveria estar me ajudando mas está me deixando louco!” etc. Isso acontece quando desenvolvedores .Net começam a trabalhar com Sharepoint, ou desenvolvedores PHP com Drupal… e logicamente quando engenheiros de computação mudam de abordagens tradicionais de servidores para plataformas como o Google App Engine ou Force.com.

A questão aqui é: adotar uma plataforma é sempre balancear prós e contras. Abre-se mão de flexibilidade para ter outros benefícios, na maioria das vezes produtividade, time-to-market ou menor custo. Não saber lidar com os contras da plataforma vai sempre levar para soluções mais caras, lentas e custosas. Pronto: temos o dilema montado! Desista de utilizar apenas PaaS em 100% das suas aplicações. Via de regra, vai ser necessário usar IaaS em algum ponto, criando uma arquitetura híbrida. Dito isso, em minha opinião, PaaS vai sempre ter limitações e IaaS vai – pelo menos nos próximos anos – crescer numa velocidade superior. E isso é completamente normal! Não significa que tem algo errado com PaaS. Existe algo errado com Sharepoint ou Drupal porque temos muito mais projetos usando .Net ou PHP do que as respectivas plataformas?

Sobre “mensagem de marketing confusa”, eu devo concordar com o autor, mas acrescento que a expressão “cloud computing” é vaporosa (desculpem o trocadilho) para dizer o mínimo. De novo, perfeitamente normal o mundo corporativo entender IaaS (“se funciona no seu servidor, vai funcionar na nuvem”) do que PaaS. E é menos arriscado adotar computação nas nuvens começando por aí, apenas movendo servidores físicos para arquiteturas equivalentes na AWS, por exemplo. Como eu disse antes, nada de errado com PaaS aqui, demora um tempo para termos uma mudança de paradigma e cultura incorporado pelas empresas, algo mais disruptivo.

Finalmente, como desenvolver e arquiteto de software, eu vejo apenas “componentes cloud” que podem e devem ser projetados da melhor maneira possível para criar coisas incríveis com tecnologia. Isso inclui ambientes de execução super escaláveis como PaaS, clusters Hadoop gerenciados, bancos de dados replicados (SQL ou No-SQL), streams para processamentos de eventos em realtime e por aí vai, tudo na nuvem. O menu está disponível e acredito que devemos utilizar o que há de melhor para construir a nossa aplicação, com foco em atender requisitos funcionais e não-funcionais. É IaaS? É PaaS? É blablabla-as-a-service? Não importa! Quer saber? Continuo achando que arquiteturas híbridas vão imperar no curto / médio prazo.