Java development 2.0: Você também pode comprar o EC2

Flexibilidade e custo baixo combinados para criar uma infraestrutura eficiente e escalável

Nessa parte do Java development 2.0, Andrew Glover apresenta uma prática introdução para desenvolver e implementar em Amazon Elastic Compute Cloud (EC2). Aprenda como o EC2 é diferente do Google App Engine e otimize um plug-in Eclipse e a concisa linguagem Groovy para obter um simples aplicativo de Web funcionando rapidamente no EC2.

Andrew Glover, Author and developer

Andrew Glover는 Stelligent Incorporated의 회장이다. 효과적인 개발자 테스팅 전략과 통합 기술력을 바탕으로 기업이 소프트웨어 품질을 높일 수 있도록 돕고 있다.



02/Nov/2009

Provavelmente você já ouviu falar do Standish Chaos Report, uma análise anual dos sucessos e falhas de projetos de TI no conjunto total. (consulte Resources). Em geral o relatório contém muitas notícias ruins. (Não se chamaria Chaos Report – Relatório do Caos – se tudo fosse flores, certo?) O relatório de 2009 alega que 44 por cento de todos os projetos de TI estavam em más condições por diversos motivos. Um dos motivos citados é que os projetos individuais estavam além do orçamento. É fácil imaginar alguns motivos por que um projeto excederia os custos. Por exemplo, programadores são uma mão de obra custosa. Um outro custo que me ocorre é o de infraestrutura.

Como você sabe desde o primeiro artigo desta série ("Hello Google App Engine") um importante aspecto do desenvolvimento Java™ development 2.0 é que produtores de software possuem agora uma alternativa para manter infraestruturas internas de alto custo. Há alguns anos, algumas poucas empresas inteligentes obtiveram vantagem com a transformação do hardware em mercadoria (e software relacionado) ao construir sistemas feitos com diversas máquinas de preço acessível, sabendo que toda a infraestrutura continuaria a funcionar mesmo após danos nas máquinas individuais em algum momento. Algumas dessas empresas inteligentes — como Google e Amazon (para citar apenas algumas) — dispõe de infraestruturas enormes que podem literalmente serem alugadas por pessoas como eu e você (e manter seus negócios essenciais executando tranquilamente ao mesmo tempo). Consequentemente, a noção de computação em nuvem é uma realidade de nossos dias. Se você se imagina fazendo um orçamento para um projeto de TI, sua obrigação com você mesmo (e com o bolso da sua empresa) é saber se alugar uma infraestrutura do Google ou do Amazon é mais econômico do que adquirir o seu próprio hardware.

Sobre esta série

O panorama de desenvolvimento Java mudou radicalmente desde que a tecnologia Java surgiu pela primeira vez. Graças às estruturas maduras do software livre e infraestruturas confiáveis de implementação para aluguel, já é possível montar, testar, executar e manter aplicativos Java com rapidez e sem gastar muito. Nesta série, Andrew Glover explora a enorme variedade de tecnologias e ferramentas que tornam possível esse novo paradigma de desenvolvimento Java.

A diferença EC2

As infraestruturas emprestadas do Google e do Amazon são claramente diferentes. Conforme acompanhamos no previous article, Google App Engine é mais uma plataforma para desenvolver aplicativos de Web em Java. Não é possível utilizar tudo que está disponível no universo Java, como o Hibernate. Por outro lado, pode haver algum constrangimento em utilizar o Google's Big Table, por exemplo. No entanto, você recebe uma solução hospedada gratuita que escala os seus mais profundos desejos. (Lembre-se que quando o site da Web Google App Engine alcança um determinado limite de largura de banda ou de espaço, o Google cobra em dinheiro.)

A oferta EC2 do Amazon é menos que uma plataforma de desenvolvimento propriamente dito e mais um serviço de infraestrutura genérica que hospeda máquinas virtuais (que podem ser baseadas em Linux®, OpenSolaris ou Windows®) e nas quais é possível executar qualquer coisa. O EC2 não é grátis, mas ainda é bem mais flexível do que o Google App Engine. É possível executar qualquer aplicativo Java (incluindo o que utiliza o Hibernate, por exemplo) desde que seja possível criar ou emprestar uma máquina virtual. (O Amazon e sua comunidade possuem catálogos completos de máquinas virtuais pré-configuradas, chamadas imagens.) Assim, com o Google App Engine, escalar um aplicativo para um público global é bastante eficiente, visto que o aplicativo é implementado e a forma como irá escalar está em grande parte sob o controle do Amazon. (O Amazon também permite escolher algumas áreas geográficas para implementação.)

O Amazon fornece plug-ins Eclipse que facilitam a criação de aplicativos que podem se beneficiar da plataforma. Diferentemente do trabalho com o plug-in Google App Engine, a flexibilidade do EC2 pode complicar bastante toda a situação rapidamente. Por exemplo, o plug-in EC2 Eclipse do Amazon torna bem simples o caso de uso da implementação de um aplicativo da Web Apache Tomcat (sem um banco de dados) para uma alavancagem de cluster EC2. Porém, ir além desse caso de uso (digamos, para utilizar uma instância de MySQL implementada em EC2 ou utilizar SimpleDB do Amazon) exige um pouco mais de aperto.

Nesse artigo, mostrarei como é possível criar de maneira fácil e rápida um simples aplicativo que utiliza Groovlets na infraestrutura do Amazon através do Eclipse. Não é necessário nenhum hardware a não ser a sua máquina de desenvolvimento, nem é necessário pagar taxas de licenciamento para qualquer software a ser utilizado. (Mas, sim é necessário pagar uma taxa nominal para a hospedagem do seu código na infraestrutura do Amazon.)

Iniciando com o EC2

O EC2 é barato

O uso de uma "pequena instância" — uma imagem para executar aplicativos simples que não utilizam grande espaço de memória — custa 10 centavos de dólar por hora. Os custos com largura de banda chegam próximos aos 30 centavos de dólar por gigabyte de tráfego de ida e volta. E é possível "alugar" um endereço IP, que custa 1 centavo de dólar por hora (mas pode ser reservado por quase dois dias). Implementar e testar o aplicativo deste artigo me custou cerca de 60 centavos de dólar. Para se ter uma ideia geral, hoje eu gastei cerca de US$3,50 com um café.

Para utilizar o EC2, você deve criar uma conta AWS (Amazon Web Services). É preciso fornecer um número de cartão de crédito, se ainda não for um cliente registrado na Amazon — O EC2 não é gratuito (mas a inscrição sim). Logo ao se inscrever, você recebe um ID de Chave de Acesso e uma Chave de Acesso Secreta, que são necessárias para trabalhar com segurança com o EC2.

Para utilizar o plug-in AWS para Eclipse, o Amazon recomenda utilizar o Eclipse 3.5; ou então, será necessário instalar alguns pre-requisitos que são padrões nessa última versão do Eclipse. Já que você vai criar e implementar um aplicativo da Web, recomendo utilizar o Eclipse IDE para Java EE Developers, que possui uma engenhosa perspectiva Java EE que suporta a construção de aplicativos da Web.

Instalando o conjunto de plug-in AWS

Para instalar o plug-in AWS da Amazon (como qualquer outro plug-in Eclipse), primeiro é preciso configurar o Eclipse para ativar a mais recente versão do plug-in através de Ajuda > Instalar Novo Software. Depois de abrir o diálogo Instalar, digite http://aws.amazon.com/eclipse no Trabalho com caixa de texto. Uma lista de plug-ins disponíveis aparecerá na seção abaixo da caixa de texto, conforme Figura 1. Selecione todo o AWS Toolkit for Eclipse e clique em OK. Após concordar com a licença, o Eclipse instala o plug-in. É bem provável que precise reiniciar também o Eclipse.

Figura 1. Download do plug-in AWS
Download do plug-in AWS

O plug-in Eclipse permite associar tempos de execução pretendidos para aplicativos da Web. Para este artigo, será utilizado o Tomcat 6, portanto é preciso fazer o download e instalar o Tomcat 6 antes de prosseguir. Mesmo que o seu aplicativo da Web seja implementado no EC2, o qual executará um cluster de servidores Tomcat, ainda é possível realizar testes e execuções localmente, o que é gratuito.


Criando um aplicativo da Web Groovy

Antes de começar a demonstração de como configurar o EC2, vou criar um aplicativo da Web simples com minha linguagem favorita para rápido desenvolvimento: Groovy. Conforme demonstrei em "Hello Google App Engine," Groovy é essencialmente a linguagem Java sem muita sintaxe (consulte Resources). Por exemplo, um típico servlet Hello World é aproximadamente 6 a 10 linhas de código Java (dependendo se serão contadas as importações e assim por diante). Independente de como sejam contadas as linhas de código, posso garantir que o mesmo servlet Hello World escrito em Groovy — um Groovlet — é menor; na verdade, o servlet mais simples que se possa escrever em Groovy consiste de uma linha de código.

Utilizando a perspectiva Java EE Eclipse, clique com o botão direito do mouse em "explorar projeto" e selecione Novo > Projeto Dinâmico da Web. Se você nunca criou um desses antes, não se preocupe — o Eclipse escolhe diferenciar entre projetos da Web estáticos que utilizam páginas HTML e projetos dinâmicos que possuem recursos de servidor como servlets.

Após selecionar a opção Projeto Dinâmico da Web, será exibido um diálogo para configurar as várias facetas do projeto, como o tempo de execução pretendido e a versão Servlet. Certifique-se de selecionar o Tomcat 6. (É preciso dizer ao Eclipse onde foi instalado o Tomcat 6.) Para a opção de configuração, mantenha-a como padrão.

Selecione onde ficarão os arquivos de origem. Em geral esses arquivos são deixados no diretório src. Finalmente, é preciso dizer ao Eclipse o contexto raiz — ou seja, o nome que será utilizado na URI do seu aplicativo da Web. Certifique-se de escolher um nome simples aqui. Também vai ser preciso escolher um nome para a pasta de conteúdo da Web onde ficarão os arquivos estáticos e os Groovlets.

Clique Encerrar, e você está pronto para seguir.

Coloque dependências Groovy

Para utilizar o Groovy, é preciso fazer duas mudanças. Primeiro, adicione o JAR totalmente groovy (no momento em que esse documento foi escrito era 1.6.4) no caminho de classe do seu projeto. É preciso atualizar o arquivo web.xml encontrado no diretório WEB-INF. Esse arquivo basicamente direciona solicitações para Groovlets — você fez isso se acompanhou o artigo anterior. Veja como deve ficar o arquivo web.xml na Listagem 1:

Listagem 1. Um arquivo web.xml que suporta Groovlets
Listing 1. A web.xml file that supports Groovlets

<servlet>
 <servlet-name>GroovyServlet</servlet-name>
 <servlet-class>groovy.servlet.GroovyServlet</servlet-class>
</servlet>
<servlet-mapping>
 <servlet-name>GroovyServlet</servlet-name>
 <url-pattern>*.groovy</url-pattern>
</servlet-mapping>

Você já está pronto para escrever alguma coisa com o Groovy.


Escreva alguma coisa agora mesmo!

O Groovlet mais simples é uma única linha que literalmente imprime o Hello World utilizando um println. Adicione um pouco de entusiasmo e estilo 1999 e "apimente" o prosaico Hello World com algum HTML. O Groovy suporta a noção de Construtores, que são mecanismos lógicos para definir estruturas de dados hierárquicos (consulte Resources). Os Construtores do Groovy permitem imitar linguagem de marcações como XML e HTML, e até mesmo GUIs com estruturas como o Swing. Você pode rapidamente criar uma marcação HTML sem precisar lidar com o próprio HTML (sem colchetes!). O mais simples Groovlet em HTML que você pode criar otimiza o MarkupBuilder do Groovy que no caso de um Groovlet já está presente em forma de variável html. Por exemplo, a Listagem 2 mostra um simples Groovlet Hello World que utiliza HTML:

Listagem 2. Um Groovlet super eficiente
html.html {
  head {
      title("Hello from EC2")
  }
  body {
    p("Hello from EC2!")
  }
}

É isso. Essas poucas linhas de código criam um HTML bem formatado que tem um elemento <head> seguido por um<title> e depois um elemento <body> com um único parágrafo — extremamente simples. Crie um arquivo chamado EC2Groovlet.groovy e coloque nele o código da Listagem 2. Salve este arquivo no seu diretório de conteúdo da Web.

Deseja criar XML? É muito fácil. Não quer misturar sua visualização com seu controlador? Sem problema, utilize um GSP (GroovyServer Page) ou um JSP (JavaServer Page) se preferir. Não importa a direção tomada, espero que você veja que o Groovy pode produzir servlets de autoria facilmente. Veja agora como o EC2 também torna fácil a utilização de servlets.

Como etapa final, crie um simples arquivo index.htm na raíz de contexto do seu projeto. Esse arquivo será útil mais tarde porque quando você ativou o EC2 no Eclipse, a URL que o Eclipse fez aparecer é a raíz do contexto; não sendo encontrado nenhum arquivo index.html, surgirá uma página de erro do Tomcat. Em index.html, crie um link relativo ao seu Groovlet.

Por exemplo, meu index.html se parece com aquele da Listagem 3:

Listagem 3. index.html simples que aponta para meu Groovlet
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>Insert any old title here!</title>
 </head>
 <body>
  <p><a href="EC2Groovlet.groovy">Groovy is slick!</a></p>
 </body>
</html>

O trabalho fácil está feito. Agora é hora de trabalhar com EC2.


Configurar EC2

O EC2 é corretamente direcionado para configurar através do plug-in Eclipse. Primeiro, abra a perspectiva Amazon EC2 e digite suas credenciais. Em seguida, abra Janela > Visualizar > Servidores. É necessário definir pelo menos um servidor, mas você irá definir dois: um localmente, para testes grátis e outro na infraestrutura do Amazon. Assim, clique com a direita e selecione Novo > Servidor.

Digite local na caixa de texto Selecionar o tipo de servidor. Você verá algumas opções (como mostra a Figura 2). Selecione a opção Tomcat v6.0 Server (desde que você já tenha feito o download do Tomcat e já tenha configurado devidamente a configuração de tempo de execução no Eclipse, seguindo as instruções em Getting started with EC2). Clique em Avançar, e surgirá a opção de adicionar importantes recursos (ou seja, projetos) para essa instância. Selecione seu projeto e clique no botão Adicionar. Clique em Encerrar, e você está pronto para seguir. Você agora já pode automaticamente publicar seu projeto da Web para uma instância local do Tomcat.

Figura 2. Definindo um servidor local
Definindo um servidor local

No console Servidores, selecione a instância local Tomcat, clique com a direita e escolha Iniciar. Logo que o Tomcat for iniciado, o Eclipse implementará seu código (ou seja, o seu "atraente" Groovlet). Ative seu navegador favorito para localhost:8080/seu nome de contexto/EC2Groovlet.groovy e você poderá descobrir a maravilha de um Hello World Groovy-Builder-HTMLizado. Se conseguiu, está pronto para tentar isso na infraestrutura do Amazon.


Implementar + testar com AWS

Por enquanto, espero que você esteja mesmo ansioso para ter essa demonstração implementada no EC2. A boa notícia é que isso é tão fácil quanto implementar localmente. Primeiro, vá para o console Servidores, clique com a direita e selecione Novo. Aqui, digite ec2, e surgirá a opção Amazon EC2 Tomcat v6.0 Cluster conforme Figura 3. Selecione essa opção e cliqueAvançar.

Figura 3. Definindo um servidor EC2
Definindo um servidor EC2

No próximo diálogo, mostrado na Figura 4, selecione o número de instâncias que gostaria que seu cluster alavancasse. Por enquanto, fique com 1 — deixe para escalar mais tarde. Escolha uma AMI (Amazon Machine Image) customizada ou utilize a padrão. Por enquanto, utilize a padrão; nunca é demais dizer que selecionar outra AMI permite inúmeras oportunidades de adicionar outros pacotes tais como banco de dados. Para tipo de instância, selecione "Pequeno", — mas pode deixar maior se preferir (apenas lembre-se que isso será cobrado).

Figura 4. Preferências EC2
Preferências EC2

O Amazon mostrou sua seriedade quanto à segurança e as próximas duas opções (também mostradas na Figura 4) são relativas à segurança do cluster Tomcat. Por enquanto, apenas crie aspectos padrão clicando com a direita na área Par de Teclas e selecionando Novo Par de Teclas. É preciso definir um nome e escolher o par de teclas que já deve ter sido instalado no processo de inscrição para EC2.

Depois, na caixa Grupo de Segurança, é possível criar novos grupos. (Você apenas vai criar esses grupos aqui; em outra visualização poderá realmente fazer algo com eles.) Clique com a direita e adicione um novo, nomeando como preferir. As definições padrão permitem que qualquer um acesse a porta 8080, que por enquanto não tem importância.

Por fim, o Amazon permitirá que você configure endereços IP. Isso será bem útil se você encerrar utilizando o EC2, já que o URI padrão para o seu aplicativo da Web será um tanto longo e difícil de lembrar. Por enquanto, fique com o endereço fornecido pelo EC2. Mas não se preocupe — sempre é possível configurar seu nome de domínio customizado para direcionar a um endereço IP fornecido pelo Amazon.

Clique no botão Avançar e associe seu projeto (com o Groovlet) a seu servidor EC2. Você está pronto para implementar!

Do mesmo modo que realizado anteriormente, clique com a direita no seu recém definido servidor Amazon EC2 e o inicie, conforme a Figura 5:

Figura 5. Iniciando e encerrando servidores
Iniciando e encerrando servidores

Iniciar pode levar algum tempo a mais nesse momento porque as situações estão acontecendo remotamente. Com o servidor executando, selecione seu projeto da Web e a opção Executar como > Executar no Servidor. Em seguida, selecione o seu já iniciado cluster Amazon Tomcat e clique em Encerrar. Feito isso, será ativado um navegador integrado no Eclipse que não se apresenta à sua raíz de contexto — onde você definiu aquele arquivo index.html com um link para o seu Groovlet.

Observe a URL na janela de localização do navegador. Veja a minha janela na Figura 6. Sempre é possível direcionar a URL para algo mais lógico. Clique no link para o seu Groovlet e assista mais uma vez a maravilha do Groovy — dessa vez de algum servidor sobre cuja localização você não tem a menor ideia!

Figura 6. EC2 é Groovy!
EC2 é Groovy!

Depois de clicar várias vezes no link e ter ficado satisfeito em descobrir que executar na infraestrutura do Amazon foi quase tão fácil como executar na sua máquina local, certifique-se de encerrar o seu servidor — caso contrário, será cobrado. Logicamente, encerrar é o mesmo que iniciar. Apenas clique com a direita na sua instância no console Servidor e selecione Parar.


O EC2 é o desenvolvimento do Java 2.0

O Java development 2.0 é extremamente influenciado por dois fatores principais:

  • Total capitalização em ferramentas de software livre e estruturas para construção de aplicativos completos
  • Aluguel (ou empréstimo) de infraestruturas de aplicativo necessárias em todos os níveis para gerenciar o ciclo de vida de software, incluindo ao executar os próprios aplicativos.

Como você pode ver neste artigo, utilizar o EC2 traz à tona os dois aspectos do Java development 2.0. Você pode alavancar completamente qualquer pacote de software que quiser (lembre-se, as máquinas virtuais do Amazon podem executar qualquer coisa que você executar) em uma infraestrutura emprestada que custa bem menos do que adquirir recursos de hardware. E mais, o EC2 é bastante eficiente para configuração e pode escalar bem mais do que você consegue fazer sozinho, pelo mesmo custo.

A próxima parte do Java development 2.0 analisará mais a fundo o EC2 ao provisionar uma máquina virtual (ou AMI) que suporta executar o Tomcat tão bem quanto o MySQL. E você aprenderá como implementar um aplicativo da Web em Java que suporta tanto Spring como Hibernate, — comprovadamente as duas mais populares estruturas de software livre que existem por aí atualmente — além disso, mais uma vez você verá as facetas fundamentais do Java development 2.0 em ação.

Recursos

Aprender

  • Amazon EC2 (a página reside fora da ibm.com): Visite o escritório central para o EC2 do Amazon.
  • Standish Group Chaos Report (a página reside fora da ibm.com): O Standish Chaos Report de 2009 foi publicado em abril e está disponível para compra.
  • Google App Engine (a página reside fora da ibm.com): Conheça a infraestrutura de aplicativo da Web do Google.
  • "Java development 2.0: Hello Google App Engine" (Andrew Glover, developerWorks, agosto de 2009): Entenda o Java development 2.0 e como é possível fazer render esses conceitos rapidamente com o Google's App Engine para Java.
  • "Storage made easy with S3" (Andrew Glover, developerWorks, abril de 2009): Aprenda como usar a biblioteca JetS3t de software livre para otimizar o serviço em nuvem do S3 do Amazon para armazenamento e recuperação de dados.
  • "Fluently Groovy" (Andrew Glover, developerWorks, março de 2008): Esse tutorial permite aos desenvolvedores de Java com pouco conhecimento de Groovy, uma introdução rápida e fácil aos seus fundamentos.
  • "Practically Groovy: Mark it up with Groovy Builders" (Andrew Glover and Scott Davis, developerWorks, abril de 2005): Conheça as últimas novidades sobre o Groovy Builders.
  • "Leveraging Amazon Web Services for enterprise application integration" (Brian J. Stewart, developerWorks, junho de 2009): Descubra como otimizar o XML e o Amazon Web Services para integrar aplicativos corporativos, e para construir recursos de integração de aplicativo de multiplataforma utilizando as plataformas Microsoft .NET e Java.
  • "Cloud computing with Amazon Web Services, Part 3: Servers on demand with EC2" (Prabhakar Chaganti, developerWorks, outubro de 2008): Esse artigo apresenta os servidores virtuais fornecidos pelo Amazon EC2. Saiba como o EC2 pode ajudar a configurar requisitos computacionais dos seus aplicativos no mesmo instante e a ajustar a capacidade baseada sob demanda.
  • "Cloud computing versus grid computing" (Judith Myerson, developerWorks, março de 2009): Aprenda como usar Infraestrutura como um Serviço para obter uma completa infraestrutura computacional utilizando o EC2 da Amazon e conheça as semelhanças, diferenças e problemas para considerar a computação em grade e em nuvem.
  • Cloud Computing: Visite a IBM Cloud Computing Central para os mais variados recursos de nuvem.
  • Navegue no technology bookstore e procure livros sobre esses e outros assuntos técnicos.
  • developerWorks Java technology zone: Encontre centenas de artigos sobre cada aspecto de programação Java.

Obter produtos e tecnologias

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Tecnologia Java, Cloud computing
ArticleID=442652
ArticleTitle=Java development 2.0: Você também pode comprar o EC2
publish-date=11022009