Mentoring:Atualmente é um fato que a Cloud Computing representa o presente e o futuro dos ambientes de execução de software, porém, para explorar todos os seus diferenciais, precisamos rever alguns conceitos relacionados à forma como implementamos nossas aplicações e assim aumentar a eficiência das mesmas nesse ambiente. Com base nisso, neste artigo apresentaremos uma aplicação corporativa que não foi planejada nem desenvolvida para a nuvem e ensinaremos como migrar o serviço JMS dessa aplicação para a nuvem pública da Amazon, a AWS (Amazon Web Services), quando aprenderemos, também, a utilizar o serviço de mensageria SQS (Simple Queue Service).

Definitivamente, Cloud Computing deixou de ser apenas uma tendência e tornou-se um padrão de uso de recursos computacionais de escala mundial. Diretamente relacionado ao crescimento exponencial dessa tecnologia, temos o crescimento das startups nos últimos anos, o que seria mais difícil de alcançar sem as facilidades e o baixo custo da computação em nuvem, que reduz consideravelmente o “time-to-market” de um software e permite que empresas com poucos recursos escalem suas aplicações conforme a demanda por elas aumente.

No entanto, para desenvolver um software que seja escalável e eficiente para esse ambiente, precisamos atentar para a forma como a nuvem opera, os serviços que ela oferece, o custo dos mesmos e nos livrar de paradigmas antigos de desenvolvimento, que nos serviram muito bem até agora, mas que precisam ser deixados de lado para que nossas aplicações sejam realmente competitivas em um ambiente cloud.

Para quem iniciou no desenvolvimento de software recentemente, já entrou no mercado na “era” cloud. Consequentemente, já adota (ou deve adotar), naturalmente, práticas que são mais adequadas ao deploy na nuvem, algumas vezes até mesmo sem saber disso, pois apenas são direcionados ou condicionados pelo serviço de nuvem que estão utilizando. Porém, desenvolvedores que fizeram carreira nas empresas criando aplicações corporativas devem se atentar a esse novo modelo, principalmente porque estamos vivendo um momento no qual as empresas estão iniciando sua jornada (termo utilizado para migração) para a nuvem. Dentro desse contexto de mudanças de paradigma, aplicações legadas são um grande desafio para a cloud, pois são menos eficientes do que aplicações que foram criadas para ela, já que essas últimas se aproveitam dos benefícios ofertados pelos provedores de computação na nuvem.

Neste artigo iremos falar sobre computação em nuvem, seus benefícios e como construir aplicações mais aderentes ao seu modelo, principalmente nos concentrando no mundo das aplicações Java Enterprise Edition. Como exemplo, iremos implementar uma aplicação que utiliza um serviço de fila local de um container Java EE, demonstrar como substituí-lo por um serviço de fila de um provedor de nuvem e abordar os ganhos que temos ao realizar essa atualização.

Antes disso, no entanto, vamos nos aprofundar sobre os modelos de deploy e as diferenças entre eles, iniciando com uma breve introdução sobre computação em nuvem.

Computação em Nuvem

O Gartner define computação em nuvem como um estilo de computação onde a TI escalável e elástica é entregue como serviço usando tecnologias da internet. Em outras palavras, computação em nuvem pode ser definida como um conjunto de serviços de tecnologia, inclusive computação propriamente dita, ofertado de uma forma que você paga pelo que usar, quando usar e se usar. Fazendo uma analogia com nosso cotidiano, podemos comparar a oferta de computação em nuvem com a energia elétrica. Não precisamos ter em nossas casas ou empresas uma usina de geração de energia elétrica. Basta conectar os aparelhos na tomada e consumir a energia no período que desejarmos. A computação em nuvem é similar. Ao invés de manter um parque de máquinas e pessoas qualificadas para manter esse parque em nossas casas ou empresas, basta conectarmos nossas máquinas à internet e aos serviços de nuvem e utilizar a computação, rede, banco de dados, filas, caches e tantos outros serviços que os diversos provedores oferecem, pagando apenas por aquilo que utilizarmos. Como esperado, isso reduz consideravelmente o custo de infraestrutura de software e em alguns casos até mesmo possibilita o que antes era inviável financeiramente.

Provedores de computação em nuvem

A AWS (Amazon Web Services) é a pioneira nos serviços de computação em nuvem. Em consequência disso, é a mais madura e com maior quantidade de serviços ofertados. No entanto, nos últimos anos diversas empresas investiram pesado nesse segmento e estão abraçando uma boa fatia do mercado. O Google, por exemplo, vem ganhando bastante força, assim como a IBM, Microsoft, Rackspace, entre outras. Isso sem contar os diversos fornecedores que utilizam esses provedores como base e oferecem uma abstração de alto nível (PaaS), como veremos a seguir.

Tipos de oferta — IaaS, PaaS, SaaS

Termos comuns dentro do mundo da computação em nuvem, IaaS (Infrastructure as a Service), PaaS (Platform as a Service) e SaaS (Software as a Service) referem-se aos tipos de oferta que estão relacionados ao quanto de autonomia você terá sobre os recursos contratados da nuvem.

Quando usamos um serviço de IaaS estamos consumindo o nível mais baixo de serviço da nuvem, que é a computação propriamente dita. Isto é, estamos pagando para utilizar uma máquina que nos é fornecida pela internet, com os diversos recursos contidos na mesma, como CPU, memória, rede, etc. Nesse modelo, somos responsáveis por praticamente toda a gestão da máquina, como:

  • Instalação e manutenção do sistema operacional e tudo que for relacionado a ele, como patches de segurança, updates, etc.;
  • Instalação e configuração do ambiente necessário para executar nossa aplicação, como JVM, servidor de aplicação, etc.;
  • Instalação e configuração da própria aplicação.

O IaaS é o modelo mais próximo do modelo tradicional, sendo que se difere por não termos que cuidar fisicamente da máquina, pois alguém (o provedor de serviço na nuvem) está fazendo isso por nós, mantendo a máquina ligada, resfriada e funcionando. Além disso, quando desligamos a máquina não pagamos por ela, apenas pelo espaço que a sua imagem ocupa no datacenter do provedor.

Por sua vez, quando falamos de PaaS, nossas responsabilidades diminuem e as do provedor aumentam. Nessa opção, a máquina, sistema operacional e muitas vezes até o servidor de aplicação nos são abstraídos. Assim, devemos nos preocupar exclusivamente com a nossa aplicação. Nesse tipo de oferta a quantidade de fornecedores aumenta consideravelmente e podemos citar players consolidados, como Heroku, CloudBees, Jelastic, além dos serviços de PaaS disponibilizados por grandes empresas, como IBM Bluemix, AWS Elastic Beanstalk, entre outros.

O PaaS, como esperado, é mais interessante para desenvolvedores, pois toda a operação fica por conta da nuvem. Desse modo, em muitos casos basta uma atualização no repositório de código fonte e a nova versão da aplicação já estará em produção, após um ciclo automático e integrado de build. Por outro lado, como consequência de toda essa facilidade, abre-se mão de controle, pois qualquer configuração específica de SO, de servidor de aplicação, ou mesmo de JVM, muitas vezes não é permitida. Nos casos em que precisamos disso, ir para o IaaS pode ser o melhor caminho.

A Figura 1 apresenta as responsabilidades que temos em relação ao provedor da nuvem nos diversos modelos.

Da esquerda para a direita, do modelo tradicional de infraestrutura até
o mais alto nível de oferta de computação em nuvem (SaaS)

Figura 1. Da esquerda para a direita, do modelo tradicional de infraestrutura até o mais alto nível de oferta de computação em nuvem (SaaS) — Fonte: Technet.

No modelo SaaS, que é a oferta de mais alto nível de tecnologia na nuvem, utilizamos um software sem saber como ele foi implementado, em qual máquina, sob qual sistema operacional ...

Quer ler esse conteúdo completo? Tenha acesso completo