There is nothing going wrong with PaaS!

I just read the InfoQ article “What is going on with PaaS?“. In a nutshell, it says that PaaS is being adopted in a very slow pace and enumerates the reasons why it  is “failing” or at least losing space to IaaS vendors. The main reasons, according to the author, are: Confusing marketing message, Lack of maturity and Limitations. Although I understand his main points, I have a different point of view and I disagree with some arguments there.

First, I want to state the obvious: PaaS is a platform. Someday, I will write a post entitled “The Platform Dilemma”. Every time I see developers and/or managers dealing with platforms (and I’m not just talking about cloud platforms, but software platforms as well), it’s always the same old story: “it’s limited“, “we bought it to be more productive, but it’s working otherwise“, “it’s not flexible“, “we don’t know how to work with that!“, “it should be helping me but it’s driving me crazy!” etc. That happens when .Net developers start working with Sharepoint, PHP developers with Drupal and also when traditional computer engineers move to PaaS environments, like Google App Engine or Force.com.

The point here is: adopting a platform is always a tradeoff. You give up on some flexibility to get other benefits, most of the time productivity, time-to-market or lower costs. PaaS falls into that dilemma. You should not use it in 100% of your applications. You may even create hybrid architectures taking advantages of both worlds, together with IaaS. That said, in my opinion, PaaS will always have limitations and IaaS will – at least in the next few years – grow in a faster pace than PaaS. And it’s completely normal! It doesn’t mean that there is something wrong with PaaS. Is there anything wrong with Sharepoint or Drupal because we have many more projects using .Net or PHP than the related platforms?

Regard the “confusing marketing message”, I actually agree with that but I don’t blame PaaS for that, but the messy buzzword “cloud computing” in general. And again, I think it’s totally normal that the enterprise world gets a better understanding on what is IaaS (“a regular server in the cloud, if it works here in our datacenter, it’s going to work there”) than what is PaaS. And it also looks less risky jumping to the cloud by just moving from physical servers or traditional data centers to equivalent architectures inside AWS, for example. As I said before, there is nothing going wrong with PaaS, it takes time to shift an enterprise mindset and culture towards a more disruptive approach.

Finally, as a software architect, I see “cloud components” that can be assembled into a great architecture to build amazing things. That includes scalable runtime environments (aka PaaS), managed hadoop clusters, replicated database (SQL or No-SQL), highly scalable data warehouses and so on, everything in the cloud. The menu is open and I want to be free to choose the ingredients better suited to my challenge. It may sounds complex (and it is), but the final decision of which components I should use to tackle both functional and non-functional requirements must be made to deliver business value. Is it IaaS? Is it PaaS? Is it bla-bla-bla-aaS? Doesn’t matter! You know what? It’s probably going to be a best-of-breed of all the above.

Big Data Ganhando Popularidade

Olá,

Vivemos em um mundo que gera cada vez mais dados. Não apenas os dados corporativos nos seus tradicionais bancos de dados mas também logs de aplicações móveis, informações de uso dos sistemas de e-Commerce, AdWords, redes sociais etc. Em resumo, vivemos em uma explosão de dados, crescendo cada vez mais exponencialmente. As empresas, logicamente, continuam na sua luta para extrair significado desses dados, tentando aprender com eles para mudar seus processos de negócios e inovar.

Dentro desse cenário, o mundo corporativo se pergunta se os custos e complexidade tecnológica também irão crescer na mesma proporção dos dados. Até agora, parece que sim… mas novos conceitos, ferramentas e tecnologias começam a ganhar popularidade no mercado para endereçar essas questão e contribuir com o BI tradicional. Começa-se a falar de Big Data com muito mais naturalidade dentro das empresas. Mas o que é isso?

Big Data, em linhas gerais, é um imenso conjunto de dados que podem ser armazenados e analisados posteriormente com alta velocidade. A principal diferença entre Big Data e Data Warehouse (DW) é que este último é projetado para fornecer um conjunto de dados (normalmente chamados de “fatos”) sob alguns pontos de vistas (“dimensões”). O processo de criação de um DW começa com algumas perguntas: quanto vendemos por terrotório geográfico ou por vendedor? Qual o faturamento dos últimos anos por mês ou quarter? Uma vez feitas as perguntas, projeta-se os cubos, o processo de ETL para preenchê-los e como os dados serão analisados depois. As ferramentas para cada uma dessas etapas podem ser bem caras, o processo pode demorar meses e, infelizmente, no final dele pode-se chegar à conclusão que as perguntas feitas inicialmente não foram as melhores.

O Big Data inverte essa dinâmica. Ao invés de pensar nas perguntas e implementar as respostas, ele começa olhando para os dados disponíveis. A idéia é gerar um conjunto de dados brutos imensos que permita que sejam feitas análises completamente ad-hoc (aleatórias) a posteriori, e com bastante velocidade. Isso permite acelerar o processo e torná-lo mais assertivo, pois todo processo de análise já é feito em cima de dados reais. Você pode fazer perguntas que não haviam sido pensadas (“quais são os clientes que compravam mais do que Y unidades do produto X há 3 anos atrás e que nos últimos 2 meses compraram 50% abaixo disso?”), detectar padrões do seu mercado, melhorar a eficiência na análise de churn etc.

Se esse conceito é tão interessante assim, por que ele está entrando no hype apenas agora? A resposta mais simples para isso é que criar essa imensa base de dados que responda a qualquer pergunta de forma muito rápida não é tarefa trivial. Ou melhor, não era. Hoje temos vários produtos associados a cloud computing que permitem fazer isso sem necessidade de configuração de complicados clusters e com baixo investimento inicial. Dois exemplos significativos são o Amazon Elastic Map Reduce (EMR) que oferece uma implementação de Hadoop pronta para ser utilizada em larga escala e o Big Query, que permite criar um conjunto de dados imenso (bilhões de registros) e consultar em poucos segundos graças à utilização do grid computacional da Google.

Em próximos posts eu falarei mais do assunto.

Abraços!
Daniel V.

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!