quinta-feira, 3 de janeiro de 2013

Migre suas aplicações Google App Engine para Openshift.

Há tempos que quando iniciei meu contato com Cloud Computing, sempre fiquei com o pé atrás ao falar de Google App Engine (GAE). Não que ele seja ruim, que não há escalabilidade ou qualquer coisa desse tipo, mas principalmente porque desenvolver com o GAE implica em utilizar apenas duas linguagens (Java e Python) e às vezes ter que se limitar a usar algumas coisas da própria linguagem suportada por esse PaaS(como o Java) e com isso podendo até não permitindo utilizar alguns de seus frameworks.
Um dos princípios que costumo falar ao adotar soluções PaaS é o de sempre verificar se o seu provedor não utiliza soluções fechadas (o famoso Vendor Lock-in) e portanto "prendem" o cliente a ficar em suas soluções sem uma chance de poder migrar as mesmas para um outro provedor. Neste artigo, irei descrever como migrar suas aplicações GAE para o Openshift, e de novo não porque Openshift é melhor e/ou GAE é ruim, mas principalmente por trazer maior liberdade para o cliente final poder avaliar outros provedores.

O Google App Engine(GAE)

O Google App Engine (ou GAE) é um dos pioneiros em se tratando de soluções PaaS(Platform-as-a-Service, ou Plataforma-como-um-serviço). Trata-se de utilizar a infraestrutura dos servidores do Google (a mesma utilizada pelo Google para manter todos os seus serviços no ar) para criar, desenvolver e administrar suas aplicações utilizando como linguagem o Java ou o Python. Não há o que negar sobre a performance dos datacenters do Google e sobre sua capacidade de inovação, o que fez com que o GAE se tornasse um dos principais provedores de soluções de Middleware gratuito para Cloud Computing, e também contém uma interface bem simples para monitorar e administrar suas aplicações.
Tela inicial do GAE
 O GAE oferece duas linguagens para desenvolvimento de aplicações, que são o Java e o Python. Em relação ao Python, o desenvolvimento de aplicações é tranquilo e conta com diversos (e bons) tutoriais na Internet para auxiliar no desenvolvimento. Já não consigo ver uma vantagem tão grande assim quando se fala de desenvolver uma aplicação GAE usando Java, já que há uma série de limitações que a Google impõe à linguagem, criando uma espécie de JRE White List que diz quais são as classes que podem ser usadas para o desenvolvimento de aplicações. Isso pode tornar alguns frameworks não funcionarem direito por conta dessas restrições (veja a página Will it Play) ou até mesmo terem que ser configurados de uma forma que dá um bocado de trabalho.
Interface administrativa do GAE
O GAE também possui um Datastore próprio baseado no conceito de BigTable e que é próprio do Google. Assim como toda a tecnologia provida do GAE, esse datastore é base para diversos serviços do Google, o que torna a confiabilidade no mesmo ainda maior. Entretanto, por ser uma tecnologia específica deles não há muito o que fazer se for o caso de migrar uma aplicação GAE para outras plataformas.
Por fim, e dessa vez quis deixar os serviços que eu digo que são os diferenciais do GAE, ele possui um esquema de versões da aplicação que eu acho muito bom. Ele consiste em implantar diversas versões de uma aplicação e com isso poder testar cada versão isoladamente (adicionando como sufixo o número da versão). Após o teste da última versão (ou da versão que deseja publicar), basta selecioná-lo na lista e pedir para publicar, com o mínimo de downtime em sua aplicação. Outro grande diferencial é o dashboard do GAE (ver figure acima), que fornece diversas métricas para monitoramente de administração da sua aplicação.
Novamente, meu objetivo aqui não é dizer que X é melhor que Y nem tirar os méritos de determinadas tecnologias. Quis aqui apenas expressar alguns dos pontos positivos e negativos e também fornecer alternativas para manter a liberdade de escolha de provedores. Com base nessa breve descrição, quis mostrar que uma aplicação GAE roda exclusivamente no ambiente do Google por motivos que forçam o desenvolvedor a utilizar tecnologias fechadas do Google e que portanto pode tornar a migração dessas aplicações inviável. Pensando nisso, eu quis criar este post para apresentar o projeto CapeDwarf. Explicarei na próxima seção no que consiste este projeto e também mostrarei como utilizá-lo.

O projeto CapeDwarf

O projeto CapeDwarf é um projeto da JBoss que visa criar um ambiente semelhando ao do GAE utilizando todo o ecossistema de middleware da própria JBoss. O criador do projeto, Aleš Justin, descreve o CapeDwarf como "uma implementação do Google App Engine, que permite que aplicações sejam implantados em servidores JBoss AS sem modificação". Mas como assim sem modificação? Está me dizendo que eu posso migrar uma aplicação GAE para o CapeDwarf sem mexer em sequer uma linha de código?
A resposta mais clara para a pergunta acima é: Sim! Você pode migrar aplicações GAE para o CapeDwarf sem alterar 1 LoC (medida da Engenharia de Software que indica Linha de código (ou Line of Code). A idéia é simplesmente criar uma série de subsistemas em cima do servidor de aplicações JBoss para que uma aplicação GAE possa viver fora do ambiente, utilizando jGroups, Infinispan e outros projetos da JBoss.org.
Você pode encontrar maiores informações no site do projeto.

Executando no Openshift

O passo a passo descrito nesta seção parte da premissa que o leitor leu o primeiro post a respeito dos primeiros passos para utilização do Openshift, portanto irei direto ao assunto.
Na tela de gerenciamento do Openshift, você verá a listagem de todas as aplicações criadas na sua conta (lembrando uma coisa importante: caso já tenha 3 aplicações criadas, sugiro criar uma nova conta ou remover uma das aplicações pois o Openshift limita uma conta free a criar até 3 aplicações sem habilitar Scaling) ou se não tiver nenhuma ele irá direto para a tela de criação de uma aplicação.
Tela de gerenciamento do Openshift
Na tela de criação da aplicação, procure por CapeDwarf. Basicamente, se trata de um servidor JBoss AS contendo toda a camada que o CapeDwarf implementa para "simular" os serviços do GAE.
Criação da nova aplicação
Depois de selecionado o tipo de aplicação, defina o nome da sua nova aplicação. Note que o Openshift irá pegar todo o código necessário para configurar o ambiente do github. Caso queira ver outras opções de aplicação, poderá verificar diretamente no site.
Configuração da nova aplicação
Por fim, clique no botão "Create Application"
Finalização da criação da aplicação
Feito isso, o Openshift irá realizar os processos iniciais (propagar o novo endereço em seus servidores DNS, clonar o código do Openshift, fazer o build, etc.) e depois mostrará a tela de conclusão com a URL da sua nova aplicação. Se você chegou até aqui, então estamos no caminho certo. =D
Tela de informações sobre a nova aplicação criada
Copie e cole o endereço criado para sua nova aplicação e acesse em seu navegador favorito(não se preocupe se a URL retornar HTTP 500 ou HTTP 404, isso só indica que a URL ainda não propagada nos servidores DNS). Você terá a tela abaixo:
Tela inicial da nova aplicação
Essa é a tela de apresentação do CapeDwarf rodando no Openshift. Veja que há também um endereço git configurado para sua aplicação, portanto faça o clone de seu repositório para poder copiar o código. Como uma alternativa caso você tenha apenas o arquivo .war gerado da sua aplicação, copie no diretório <app_dir>/deployments, e não se esqueça de gerar um arquivo vazio dentro de <app_dir>/.openshift/markers/skip_maven_build para dizer ao Openshift não gerar mais builds. Esse procedimento não sobreescreverá a tela inicial da aplicação, devendo ser acessada como http://gaeapp-meudominio.rhcloud.com/minhaappgae.
Você leitor deve se perguntar agora: mas o GAE permite monitorar minha aplicação através de uma interface administrativa, por acaso migrando minha aplicação para o CapeDwarf/Openshift eu vou perder essa funcionalidade? A resposta é não. Se você observar rolando a página um pouco mais pra baixo, há uma seção chamada Admin Console, onde ele fornece um usuário e senha que você pode acessar a interface administrativa de sua aplicação
Senha gerada para acesso ao admin console
Com esse usuário e senha em mãos, basta acessar a URL http://gaeapp-meudominio.rhcloud.com/_ah/admin (não se esqueça que se sua aplicação estiver empacotada como um .war em <app_dir>/deployments, você deve acrescentar o nome da aplicação) e após o login você terá acesso ao console administrativo de sua aplicação. Note que ela é semelhante ao console do GAE propositalmente para que não haja nenhuma dificuldade em utilizar o ambiente.
Console Administrativo da aplicação GAE no CapeDwarf
Muito legal, não? Pois bem, a má notícia é que o CapeDwarf ainda está em sua versão Beta1 (nos próximos dias a JBoss irá lançar o Beta2) e portanto algumas das funcionalidades dessa interface ainda não estão prontos, bem como alguns dos serviços que o GAE oferece ainda não foram implementados (são bem poucos, mas isso depende de quão dependente desses serviços estão com o GAE).
Fico por aqui e caso tenham dúvidas/sugestões/reclamações a respeito do CapeDwarf ou do Openshift, podem postar comentários que eu responderei com maior prazer. Ou se preferir, pode ir no fórum do CapeDwarf e perguntar diretamente aos desenvolvedores do projeto.

2 comentários:

  1. Oi, Ricardo! Muito boa sua iniciativa de escrever sobre Cloud, parabéns! Você aceita contribuições? Gostaria de dar uns 'pitacos' sobre AWS ;)

    Abraço

    ResponderExcluir
  2. Olá Alexandre,

    Primeiramente, gostaria de pedir desculpas por não ter respondido em pouco tempo. Aceitaria sim contribuições sobre outras plataformas de Cloud, assim poderemos aprender ainda mais sobre outras plataformas e como fazer com que clouds diferentes possam coexistir.

    ResponderExcluir