BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Artigos Serviços de cloud computing PaaS: um guia para desenvolvedores Java

Serviços de cloud computing PaaS: um guia para desenvolvedores Java

O PaaS, ou Platform as a Service (Plataforma como Serviço), é um tipo de serviço de cloud computing em que o provedor não somente oferece o hardware e o sistema operacional, mas também plataformas de aplicações e soluções pré-configuradas. Para os desenvolvedores, o PaaS reduz drasticamente problemas e despesas adicionais com a configuração do ambiente e a implantação de aplicações. Também torna as aplicações mais fáceis de escalar, por prover recursos sob demanda.

A plataforma Java é perfeitamente ajustável para o PaaS. Isso porque a JVM, o servidor de aplicações e os arquivos de deployment (ex.: WARs e EARs) fornecem um isolamento natural para aplicações Java, permitindo que múltiplos desenvolvedores instalem aplicações na mesma infraestrutura. Contudo, por alguns anos muitos serviços de PaaS ofereciam apenas plataformas como Ruby e Python, e o Google App Engine era o único provedor de PaaS para desenvolvedores Java. Felizmente isso está começando a mudar.

Muitos provedores comerciais entraram, nos últimos doze meses, no mundo de PaaS Java. Isto faz sentido; os 10 milhões de desenvolvedores Java certamente representam uma das maiores comunidades de desenvolvedores no mundo.

Neste artigo, iremos comparar os PaaS Java do ponto de vista dos desenvolvedores. A metodologia de comparação será verificar características de cada alternativa em quatro áreas:

  • Suporte a plataformas tecnológicas;
  • Suporte à produtividade do desenvolvedor e processos de de desenvolvimento;
  • Desempenho e escalabilidade;
  • Preços e outros aspectos relacionados a negócios.

Serão comparadas as seguintes soluções de PaaS Java (citadas em ordem alfabética):

  • O Amazon Elastic Beanstalk é o PaaS Java da Amazon. Provê instâncias de Tomcat gerenciadas rodando sobre o EC2, incluindo balanceadores de carga e recursos para escalabilidade sob demanda. O Beanstalk integra-se com o resto do Amazon Web Services (AWS), provendo acesso aos bancos de dados relacionais gerenciados (RDS), repositórios de Big Data (SimpleDB), filas de mensagens, email e outros serviços.
  • A CloudBees é uma startup baseada em capital de risco, fundada por veteranos da JBoss e da Sun, que recentemente captou 14 milhões de dólares em duas rodadas de financiamento. Embora relativamente novo, o PaaS do CloudBees está crescendo rapidamente neste espaço. Traz várias características únicas na categoria, em particular a integração contínua - um ciclo de gerenciamento completo de desenvolvimento e implantação na nuvem. Além disso, como o Heroku, a empresa oferece um "mercado" para divulgação de serviços e plugins de terceiros.
  • O Cloud Foundry é uma iniciativa open source da VMware, cujos softwares suportam datacenters virtualizados (a base da maioria das ofertas de PaaS). A VMware também hospeda o Spring Framework, uma plataforma popular no universo Java EE. Uma característica única do Cloud Foundry é não oferecer um PaaS hospedado. Caso queira, você pode baixar o código e hospedar um PaaS nos seus servidores. Neste sentido, o Cloud Foundry é ao mesmo tempo uma plataforma de hospedagem e um serviço PaaS.
  • O Google App Engine para Java é talvez o mais antigo (e mais maduro) PaaS no mercado. Tem um objetivo ambicioso de escalabilidade linear, e a equipe do projeto não tem tido receio de fazer mudanças até em APIs básicas do Java.
  • O Heroku para Java é a uma recente oferta de PaaS executado sobre o Heroku, que traz uma herança significativa da comunidade Ruby, com muitos recursos voltados a esse grupo.
  • O Red Hat OpenShift é uma oferta experimental da Red Hat. O JBoss Application Server da Red Hat está entre os mais populares servidores de aplicações Java, e o OpenShift provê suporte abrangente ao JBoss AS.

Suporte a plataformas e tecnológicas

Um dos mais importantes atributos de um provedor PaaS Java é a plataforma tecnológica que suporta. Afinal, a plataforma tecnológica é o que distingue o PaaS Java de outras ofertas PaaS. Como durante a longa evolução da plataforma Java, surgiram e se estabeleceram muitas plataformas tecnológicas concorrentes, para o fornecedor de PaaS Java é importante o suporte ao maior número de tecnologias possíveis.

O OpenShift e o CloudBees suportam uma ampla variedade de tecnologias, de um simples container de servlets (normalmente o Tomcat) até um completo servidor Java EE 6 (JBoss AS 7).

O pioneiro do PaaS Java, o Google App Engine, está agora ficando para trás dos novos competidores em termos de padrões suportados. O App Engine não suporta toda a plataforma Java SE, e oferece um suporte restrito para muitos dos frameworks populares. Além disso, requer que o usuário use uma API própria de rede e persistência, indo na direção oposta dos padrões abertos e resultando em aplicações difíceis de portar. De modo similar, o Heroku para Java requer que a aplicação inclua sua própria instância do Jetty, o que quebra o tradicional modelo de implantação do Java EE.

O Cloud Foundry suporta o Tomcat, mas o desenvolvimento de aplicações e o deployment são altamente otimizados para o Spring Framework, criando dependências. A plataforma suporta serviços de mensageria usando RabbitMQ e se baseia no padrão AMQP, mas seu suporte a outros frameworks Java é limitado.

A tabela a seguir resume o suporte a várias plataformas tecnológicas nas opções de PaaS Java analisadas.

 

Amazon Beanstalk

CloudBees

Cloud Foundry

Google App Engine

Heroku for Java

OpenShift

Tomcat Sim Sim Sim Não Não Sim
Java SE Sim Sim Sim Não Sim Sim
Java EE Não Sim Não Não Não Sim
Suporte a bibliotecas Java padrão Sim Sim Sim Não Sim Sim
Acesso ao sistema de arquivos Sim Sim Sim Não Sim Sim
Acesso a threads Sim Sim Sim Não Sim Sim
Conexões a redes externas Sim Sim Sim Limitado Sim Sim
MySQL RDS Sim Sim Plano pago Sim Sim
Bancos de dados relacionais comerciais RDS Externo Externo Não Externo Externo
Suporte a Big Data SimpleDB Externo Externo BigTable Externo Externo
Deploy sem frameworks especiais Sim Sim Não Não Sim Sim
Amigável para migração de aplicações existentes Sim Sim Não Não No Sim
Portabilidade de aplicativos Alta Alta Moderada Baixa Baixa Alta
Pronto para produção? Sim Sim Beta Sim Beta Beta

Suporte à produtividade do desenvolvedor e a processos de desenvolvimento

Um das principais vantagens do modelo PaaS é simplificar a vida dos desenvolvedores, removendo o trabalho de gerenciamento de recursos. Assim, o suporte ao desenvolvedor e a integração de ferramentas são fatores importantes para se levar em consideração ao avaliar um PaaS.

Neste quesito, o CloudBees se destaca. Além de ser um ambiente de execução PaaS, é um ambiente integrado de builds e testes. Desenvolvedores podem usar o serviço Jenkins para o CloudBees automaticamente e continuamente baixar, compilar, testar e submeter códigos no repositório. Este processo de integração tem sido adotado por grandes equipes como um elemento fundamental do processo de desenvolvimento. Contudo, o gerenciamento do servidor de builds é geralmente um processo que toma tempo e cria dificuldades para o time de garantia de qualidade. O CloudBees simplifica esse processo, tornando-o muito mais transparente aos desenvolvedores. Recentemente, o OpenShift da Red Hat evoluiu e alcançou o CloudBees nessa área, trazendo suporte à integração com Maven e Jenkins.

O Amazon Beanstalk, o OpenShift, e o App Engine trazem ferramentas de desenvolvimento, SDKs e plugins de IDEs, que são consistentes com outras ferramentas baseadas em Java no mercado.

O Cloud Foundry e o Heroku para Java, fornecem ferramentas mais voltadas a desenvolvedores Ruby que desenvolvedores Java. Ao usar essas ferramentas, suspeito que muitos desenvolvedores Java vão demorar algum tempo para se acostumar com suas convenções e terminologias. Além disso, atualmente o Cloud Foundry conta com pouca documentação, boa parte sendo em forma de tutoriais em vídeo.

Tutoriais em vídeo são ótimos para desenvolvedores iniciantes, mas não têm a profundidade necessária para suportar a implantação de aplicações mais complexas; ou para apoiar desenvolvedores que querem ir além dos cenários básicos e usar scripts. Os guias para iniciantes datam de 2007, embora mudanças importantes na plataforma tenham ocorrido desde então. Existe documentação mais recente (aqui por exemplo), mas não é tão fácil de encontrá-la.

Outro ponto importante: o Cloud Foundry permite que desenvolvedores configurem seus próprios ambientes em nuvem, mas instalar o Micro Cloud é mais trabalhoso que apenas instalar um SDK.Isso torna o Cloud Foundry relativamente difícil para muitos desenvolvedores.

 

Amazon Beanstalk CloudBees Cloud Foundry Google App Engine Heroku for Java OpenShift
Ferramentas de IDE Sim Sim Sim Sim Não Sim
Ferramentas de linhas de comando Sim Sim Sim Sim Sim Sim
Console baseado na web Sim Sim Não Sim Não Sim
Testes na máquina do desenvolvedor Fácil Fácil Difícil Difícil Fácil Fácil
Build sem dependências fora do padrão Java Sim Sim Não Não Não Sim
Integração com sist. de controle de versões Não Sim Sim Não Não Parcialmente
Builds integrados Não Sim Não Não Não Sim
Testes integrados Não Sim Não Não Não Não
Acesso aos logs via web Não Sim Sim Sim Sim Sim
Aplicação de terceiros/ Serviços de testes Não Sim Não Não Não Não
Acesso a API Sim Sim Não Não Sim Não
Documentação Boa Boa Fraca Boa Boa Boa

Desempenho e escalabilidade

Uma característica importante do PaaS é a habilidade da plataforma se autodimensionar, ou seja, aumentar e diminuir a capacidade utilizada ou o número de servidores, com base na demanda de tráfego, em tempo real. Isso requer o balanceamento de carga de requisições entre vários de servidores, a monitoração da carga em cada servidor e a inicialização de novos servidores se necessário.

Todos os provedores de PaaS, até certo ponto, autodimensionam os seus recursos. Mas isso é mais difícil do que parece. Para começar, uma aplicação Java EE deve ser configurada para acessar um banco de dados centralizado externo, diferentemente de um servidor de banco de dados hospedado na mesma máquina. O paradigma de programação e as ferramentas de todos os provedores de PaaS forçam o desenvolvedor a fazer isso.

Um problema ainda maior são as sessões HTTP. Nos servidores de aplicações Java, os estados das sessões são gerenciados na memória, por padrão. Para construir aplicações que possam ser balanceadas entre diferentes servidores, os desenvolvedores devem realizar um dos seguintes procedimentos:

  • Configurar o balanceador de carga para suportar "sticky sessions" (sessões persistentes). O balanceador verifica todos os IDs das sessões nas requisições e sempre redireciona à mesma instância onde a sessão foi iniciada. Esta é uma abordagem simples, mas traz problemas: o balanceador tem mais trabalho; a distribuição de carga pode ficar desbalanceada por certo tempo; e é difícil reduzir a alocação de recursos quando há uma redução de carga, pois as sessões estarão em diversos servidores. Por conta desses problemas, poucos provedores PaaS usam essa estratégia.
  • Configurar um cache compartilhado para sessões HTTP em memória. Dessa forma, todos os servidores têm acesso às sessões em memória. Mas replicar sessões na memória em um cluster é computacionalmente intensivo e consome muita banda de rede. Também requer trabalho do lado do desenvolvedor, para definir estratégias para manter o cache compartilhado e para a replicação.
  • Configurar as aplicacações para persistir todas as sessões HTTP dentro em um banco de dados externo.

De todas as soluções avaliadas, o Google App Engine é a que melhor lida com essa questão. O App Engine é arquitetado para abstrair o conceito de servidores individuais; automaticamente cria repositórios de dados em servidores separados e salva as sessões HTTP dentro desses repositórios, por padrão. O processo é completamente transparente para os desenvolvedores. O problema é que o desempenho é fraco. É comum uma requisição web levar de 1 a 3 segundos para completar o percurso de ida e volta do bancos de dados.

O Heroku para Java também oferece compartilhamento automático de sessões entre servidores: cada uma das suas instâncias é encapsulada em uma instância customizada do Jetty. Porém, o Heroku não provê autodimensionamento. Deve-se acompanhar um painel de controle e adicionar recursos às aplicações quando necessário.

As demais alternativas direcionam bem o desenvolvedor a criar tabelas de banco de dados em um servidor de banco de dados separado e centralizado, como parte do processo de implantação. Para sessões HTTP, o Cloud Foundry usa sessões persistentes no seu balanceador de carga, mas traz problemas sérios de escalabilidade. As demais soluções de PaaS deixam o gerenciamento de sessões na mão dos desenvolvedores, embora isto não seja deixado claro em suas documentações.

 

Amazon Beanstalk CloudBees Cloud Foundry Google App Engine Heroku for Java OpenShift
Balanceador de carga integrado Sim Sim Sim Sim Sim Sim
Domínio personalizado para balanceamento de carga Sim Sim Não Google Apps Sim Sim
Autodimensionamento do servidor de aplicações Sim Sim Planejado Sim Não Sim
Autodimensionamento do banco de dados Não Não Não Sim Não Não
Critérios de desempenho definidos pelo usuário Sim Sim Planejado Não Não Sim
Painel de monitoramento na web Sim Sim Planned Sim Sim Sim
Sessão HTTP clusterizada Manual Manual Manual Auto Auto Manual

Preços e outros aspectos ligados a negócios

O custo das ofertas de PaaS, claro, é um importante item a ser considerado pelos desenvolvedores. A maioria oferece níveis de serviços gratuitos, e para pequenas aplicações Java esses níveis são excelentes escolhas. Entretanto, como se viu com o polêmico aumento de preços do Google App Engine, o custo para aplicações de alto volume pode ser bem alto com provedores de PaaS.

Outro fator importante a se considerar é a disponibilidade de opções de suporte. Tanto o Google App Engine como o Amazon Web Services têm um histórico fraco em suporte técnico. Os desenvolvedores são deixados à sua própria sorte para acharem respostas nos fóruns.

Os provedores menores, especialistas em Java, tendem a oferecer melhor suporte técnico, mesmo em fóruns públicos. Na minha opinião, o CloudBees provê a melhor combinação entre suporte pago baseado em chamados e conhecimento específico em Java da equipe de suporte.

 

Amazon Beanstalk CloudBees Cloud Foundry Google App Engine Heroku for Java OpenShift
Serviço básico gratuito Sim Sim (Não se aplica) Sim Sim Sim
Custo para aplicações web com baixo tráfego Alto Zero Zero Zero Zero Zero
Suporte a múltiplos ambientes de nuvem Não Não Planejado Não Não Planejado
Nuvem privada Não Beta (OpenStack ou vSphere) Sim Não Não Planejado
Suporte Fórum Email e Telefone Fórum / Chamados via web Fórum Email e Telefone Fórum
Qualidade do suporte Fraca Boa Boa Fraca Razoável Boa

E depois?

Neste artigo, avaliamos seis fornecedores de PaaS para Java bem conhecidos. Existem, é claro, muitos outros provedores:

  • Jelastic, que suporta uma grande gama de combinações de servidores de aplicações e bancos de dados, incluindo variações em banco de dados MySQL e NoSQL;
  • WSO2 StratosLive, uma solução de PaaS construída sobre o servidor de aplicações WSO2, compatível com a especificação Java EE;
  • CumuLogic: fornece uma aplicação PaaS Java que funciona em vários ambientes de nuvem públicos e privados, incluindo CloudStack, OpenStack e Eucalyptus.

Iremos continuar acompanhando esses provedores, que podem facilmente passar a desafiar os grandes.

As opções de PaaS para Java evoluíram muito nos últimos doze meses, e a oferta de produtos continua crescendo. Essa é uma ótima notícia para desenvolvedores Java procurando baixos custos, escalabilidade e soluções de hospedagem gratuitas.

Para desenvolvedores Java EE, acredito que o CloudBees e o Open Shift são os melhores neste momento. E com o OpenShift ainda em beta, o CloudBees seria o vencedor da comparação. Se você está disposto a se aventurar fora da zona de conforto do Java EE, o Heroku para Java e o Cloud Foundry são opções dignas de fazer frente ao venerável Google App Engine.


Sobre o autor

Michael Yuan é empreendedor, autor e entusiasta da tecnologia Java. Publicou cinco livros e mais de 40 artigos sobre engenharia de software, além de ter contribuído código para projetos open source importantes (incluindo os do JBoss e Mozilla). Sua mais recente startup, Ringful Health, tem seus servidores Java implantados no Google App Engine, Amazon EC2 e CloudBees.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT