Escolha a Melhor Nuvem PaaS para Você

Orientação de nível de entrada para selecionar uma plataforma de nuvem dentre diversas opções

Platform as a Service (PaaS) é geralmente considerado um dos três principais modelos de entrega de serviços na computação em nuvem. Esse Modelo facilita o desenvolvimento de aplicativos na nuvem e a alocação simples e elástica de recursos, além de oferecer diversas ferramentas e serviços. No entanto, esse termo esconde a grande diversidade que existe nas plataformas de nuvem. O autor examina algumas das principais plataformas de nuvem e fala sobre os casos de uso com que elas poderiam lidar.

John Rhoton, Cloud Computing Strategist

John Rhoton photoJohn Rhoton é estrategista de tecnologia, especializado em consultoria com clientes corporativos globais, com foco em computação em nuvem pública, privada e híbrida. Ele participa frequentemente de eventos no segmento de mercado de tecnologias emergentes (como mobilidade, redes sociais e virtualização) e é autor de seis livros, incluindo Cloud Computing Explained (2009) e Cloud Computing Architected (2011).



23/Out/2012

Platform as a Service é geralmente considerado um dos três principais modelos de entrega de serviços na computação em nuvem, junto com Infraestrutura como serviço e Software como Serviço. Esse modelo facilita o desenvolvimento de aplicativos em nuvem, oferecendo infraestrutura de hosting, alocação simples e elástica de recursos e diversas ferramentas e serviços para ajudar a obter eficiência em volume de código e desempenho no tempo de execução.

No entanto, o termo esconde a grande diversidade das plataformas de nuvem. À primeira vista, há pouco em comum entre Windows® Azure™ e Google App Engine ou Force.com. Amazon Web Services™ (AWS™) passaram gradualmente de IaaS para PaaS, com uma abordagem totalmente diferente. E plataformas privadas, como as oferecidas pela VMware®, são voltadas para ainda outras necessidades. Este artigo examina algumas das principais plataformas de nuvem e fala sobre os casos de uso com que elas poderiam lidar.

Histórico

PaaS surgiu da confluência de duas tendências:

  • A natureza abaixo do ideal de IaaS para a computação em nuvem.
  • A evolução de aplicativos da web.

O serviço de infraestrutura oferece muitos benefícios aos clientes que querem estender ou passar seus aplicativos para um ambiente baseado em nuvem. No entanto, os serviços de infraestrutura são executados em plataformas que foram projetadas para desktops e para os ambientes tradicionais de cliente/servidor. Podem ter sido virtualizadas, mas ainda não foram otimizadas para a nuvem.

A segunda tendência digna de nota é a evolução de sites de hosting na web. GeoCities e outros ofereciam serviços de hosting de HTML já em meados dos anos 1990. No entanto, houve um grande aumento no número de serviços de hosting da web que oferecem suporte a diversos componentes ativos no lado do servidor, incluindo Microsoft® ASP.NET, tecnologia Java™ e scripts como PHP, Python e Ruby on Rails. Em comparação com serviços de infraestrutura, essas plataformas reduzem os requisitos de armazenamento de cada aplicativo e simplificam a implementação.


Considerações

Quais são as escolhas básicas que um desenvolvedor de aplicativo em nuvem, especialista em migração de nuvem ou administrador que está implementando uma nuvem devem fazer ao selecionar uma nuvem PaaS?

  • Aberto vs. proprietário vs. misturado (e bem misturado)... alguns conceitos em cada um devem ser o suficiente.
  • A estrutura e limitações de hosting: suporte para isso, mas não para aquilo etc.
  • Métodos de alocação de recursos: nível de automação, facilidade de uso, facilidade de desalocação igual à alocação etc.
  • Recursos e métodos de armazenamento de dados: tem persistência automática ou apenas sob solicitação etc.
  • Ferramentas de desenvolvimento suportadas, ferramentas de gerenciamento suportadas.
  • Desempenho vs. tipos e volume de transações.
  • Segurança dos vários componentes da nuvem: como lidam com a segurança?

Google App Engine

Google App Engine é um dos mais conhecidos serviços de plataforma. Além de um ambiente de tempo de execução básico, ele elimina muitos dos desafios de administração de sistema e desenvolvimento envolvidos no desenvolvimento de aplicativos que possam aumentar a escala para milhões de usuários. Inclui recursos para implementar código em um cluster e capacidade de monitoramento, failover, ajuste de escala automático e balanceamento de carga.

Google App Engine originalmente tinha suporte apenas para ambientes de tempo de execução com base em Python. Posteriormente foi incluído suporte para Java Virtual Machines (JVMs), permitindo não apenas aplicativos escritos em Java mas também em outras linguagens de JVM, como Groovy, JRuby, Jython, Scala ou Clojure. O kit de desenvolvimento de software inclui um ambiente de desenvolvimento local completo, que simula o Google App Engine no desktop do desenvolvedor.

Há algumas limitações nas linguagens de programação. Por exemplo, módulos Python devem ser Python puro, porque não há suporte para módulos C e Pyrex. Da mesma forma, os aplicativos Java podem usar apenas um subconjunto (a JRE Class White; consulte Recursos) das classes do Java Runtime Environment (JRE), Standard Edition e não podem criar encadeamentos.

A Listagem 1 mostra um aplicativo "Hello World" simples no Google App Engine.

Listagem 1. "Hello World" no Google App Engine
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
class MainPage(webapp.RequestHandler):
  def get(self):
    self.response.headers['Content-Type'] = 'text/plain'
    self.response.out.write('Hello, World!')
application = webapp.WSGIApplication(
                                     [('/', MainPage)])
def main():
  run_wsgi_app(application)
if __name__ == "__main__":
  main()

O código efetivamente necessário depende, obviamente, do aplicativo. Como mostra o exemplo em Python na Listagem 1, as instruções podem ser simples se houver pouca lógica de aplicativo. É necessário importar alguns módulos incluídos no SDK e definir um manipulador de solicitações chamado MainPage que processa todas as solicitações GET de HTTP na URL raiz. O método pode escrever a resposta HTTP usando o objeto self.response. A função run_wsgi_app() toma uma instância WSGIApplication e executa-a no ambiente Interface Gateway Comum do Google App Engine. Isso é tudo o necessário, para quem tem necessidades modestas.

O armazenamento de dados do Google App Engine tem suporte para consultas, classificação e transações usando controle de simultaneidade otimista. É um banco de dados distribuído, altamente consistente, criado em cima de um sistema de armazenamento de dados BigTable de menor nível, com alguns recursos a mais. A linguagem de consulta do Google App Engine (chamada GQL) é semelhante à Linguagem de Consulta Estruturada (SQL) nas instruções SELECT, mas com algumas limitações significativas. Por exemplo, GQL não tem, intencionalmente, suporte a instruções JOIN e, portanto, pode acomodar apenas consultas de tabela única.

Embora o ambiente tenha algumas limitações, ele também oferece um amplo conjunto de interfaces de programação de aplicativos (APIs). Além da funcionalidade de armazenamento de dados mencionada antes, há um conjunto de funções de biblioteca, como:

  • Autenticação. Os aplicativos podem fazer interface com contas do Google para autenticação do usuário. Podem orientar o usuário a efetuar sign in com uma conta do Google e, em seguida, acessar o endereço de email e nome de exibição após o usuário ter autenticado. Usuários de OpenID também podem criar uma identidade em qualquer provedor de OpenID e usá-la para autenticar em um aplicativo Google App Engine.
  • Memcached. O serviço Memcached oferece aos aplicativos um cache na memória, com valor de chave, que pode ser acessado por mais de uma instância do aplicativo. É útil para dados temporários que não precisam de recursos de persistência e para recursos transacionais, como um cache local do armazenamento de dados para acesso de alta velocidade.
  • Tarefas planejadas. O serviço cron permite ao usuário planejar tarefas que são executadas a intervalos regulares — por exemplo, diariamente ou a cada hora. O aplicativo pode até mesmo executar tarefas que ele mesmo incluiu na fila. Por exemplo, pode enviar uma tarefa em segundo plano enquanto atende uma solicitação.

Windows Azure

O Windows Azure é a oferta de PaaS da Microsoft. Com conceito semelhante ao do Google App Engine, permite que aplicativos com base em tecnologias Microsoft sejam hospedados e executados nos datacenters dessa empresa. Seu Fabric Controller automaticamente gerencia recursos, balanceia cargas, replica para obter resiliência e gerencia o ciclo de vida de aplicativo.

A plataforma Windows Azure é desenvolvida como um serviço distribuído hospedado em datacenters Microsoft em um sistema operacional especial. É implementada como três componentes: cálculo, armazenamento e uma malha para gerenciar a plataforma. As instâncias de cálculo são expostas ao cliente como tipos de função que especificam configurações customizadas para tópicos típicos. As instâncias de função da web geralmente interagem com o usuário e podem hospedar websites e outros códigos de frontend. Por sua vez, as instâncias de função de trabalhador são voltadas a tarefas em segundo plano, semelhante às tarefas cron do Google App Engine.

Embora os tipos de função da web e de trabalhador sejam os mais populares, Windows Azure oferece modelos adicionais para necessidades específicas. Por exemplo, a função da web CGI tem suporte para o protocolo FastCGI e, portanto, permite o uso de outras linguagens de programação, incluindo PHP, Ruby, Python e Java. O serviço Windows Communications Foundation (WCF) é uma função da web que facilita o suporte de serviços WCF. Windows Azure agora também oferece um serviço de infraestrutura (na forma de uma função de VM) que aceita o upload de uma imagem VM Windows Server® 2008 R2.

O armazenamento do Windows Azure oferece serviços que hospedam três tipos de dados:

  • Blobs. Blobs são fluxos de dados não estruturados, ou ao menos opacos. Podem ser uma imagem, um arquivo ou qualquer coisa de que o aplicativo precise.
  • Tabelas. Tabelas são usadas para dados estruturados. Geralmente contêm um conjunto de linhas homogêneas (chamadas entidades) que são definidas por um conjunto de colunas (chamadas propriedades). Apesar da semelhança conceitual, há distinções importantes entre as tabelas de armazenamento e as tabelas relacionais do Windows Azure. Windows Azure não força o uso de um esquema e não tem suporte para SQL como linguagem de consulta.
  • Filas. Filas são um mecanismo para que aplicativos comuniquem-se e trabalhem em conjunto de forma assíncrona.

A "malha" na terminologia do Windows Azure refere-se a um conjunto de máquinas que executam o sistema operacional do Windows Azure e que são gerenciadas coletivamente e estão localizadas na mesma região. O Fabric Controller é a camada de código que fornece todas as instâncias de usuário (funções da web e de trabalhador) e realiza os upgrades necessários. Também monitora os aplicativos, refornecendo e realocando recursos conforme necessário para garantir que todos os serviços continuem em funcionamento.


Force.com

Salesforce.com também entrega um PaaS, chamado Force.com. É diferente das ofertas do Google e da Microsoft nesse espaço. Também oferece serviços de hosting com base na sua tecnologia, com os recursos usuais de redundância, segurança e escalabilidade. Mas Force.com está muito mais orientado a manipular dados que a trabalhar com código.

Acesso programático externo

Force.com expõe todas as configurações específicas do cliente (formulários, relatórios, fluxos de trabalho, privilégios de usuário, customizações, lógica de negócios) como metadados com acesso programático. Uma API de serviços da web (SOAP) dá acesso a todos os dados de aplicativo do Force.com em qualquer ambiente. A plataforma também oferece kits de ferramentas de desenvolvedor para Microsoft .NET, Java, Facebook, Google e AWS, além de conectores pré-empacotados de ERP (SAP R/3 e Oracle Financials), software de desktop (Microsoft Office, IBM® Lotus Notes®) e middleware (Tibco, Pervasive, IBM Cast Iron®). Além do acesso convencional ao banco de dados, Force.com usa um mecanismo de procura externo que oferece indexação total e permite procura por dados não estruturados.

Apex

Aplicativos do Force.com são desenvolvidos usando Visualforce, uma estrutura para criação de interfaces gráficas com o usuário, e Apex, uma linguagem de programação proprietária que usa uma sintaxe semelhante a Java mas age mais como procedimentos armazenados de banco de dados (consulte a Listagem 2).

Listagem 2. Atualização de conta do Apex
// This class updates the Hello field on account records that are
// passed to it.
public class MyHelloWorld {
   public static void addHelloWorld(Account[] accs){
      for (Account a:accs){
        if (a.Hello__c != 'World') {
           a.Hello__c = 'World';
        }
      }
   }
}

Force.com distingue entre três tipos de lógica de programa:

  • lógica declarativa (criação de log de auditoria, fluxo de trabalho, aprovações)
  • lógica baseada em fórmula (validação de dados, regras de fluxo de trabalho)
  • lógica processual (acionadores e classes Apex; Listagem 3)
Listagem 3. Acionador Apex
trigger helloWorldAccountTrigger on Account (before insert) {
   Account[] accs = Trigger.new;
   MyHelloWorld.addHelloWorld(accs);
}

Apex pode ser executado como um script independente sob demanda ou como um acionador em um evento de dados, como mostra a Listagem 3. A linguagem permite que desenvolvedores incluam a lógica de negócios em eventos, como cliques de botão ou atualizações de registro e páginas do Visualforce. A lógica de fluxo de trabalho pode acionar tarefas, enviar mensagens eletrônicas, atualizar o banco de dados e fazer interface com aplicativos externos através de mensagens SOAP enviadas para qualquer destino na Internet.


Amazon Web Services

O líder no mercado e padrão de fato para serviços de infraestrutura é a Amazon. A principal distinção entre AWS e um serviço de plataforma típico é que a Amazon não estabelece um ambiente particular de tempo de execução. É possível usar uma das imagens de máquina pré-construídas da Amazon, mas o usuário não está limitado a elas e pode executar quase qualquer plataforma nesse ambiente.

Uma consequência dessa observação é que, embora a Amazon forneça uma maneira de gerenciar e distribuir VMs, ela não oferece diretamente recurso específico para gerenciar aplicativos.

A Figura 1 mostra um exemplo da interface do Amazon Elastic Compute Cluster (Amazon EC2™).

Figura 1. Amazon EC2
Amazon EC2

O componente principal de AWS é o Amazon EC2 e seus serviços de armazenamento complementares. Amazon EC2 oferece ao usuário uma escolha de modelos de VM que podem ser instanciados em um ambiente compartilhado e virtualizado (como mostra a Figura 1). Cada VM é chamada de Amazon Machine Image (AMI). Amazon AMIs não têm armazenamento persistente, mas podem ser usados para logs, resultados e dados temporários enquanto a instância está ativa. Como os discos montados locais de AMIs são perdidos entre instanciações, a Amazon também oferece dois recursos de armazenamento persistente: Amazon Simple Storage Service (Amazon S3) é um armazenamento de valor de chave enquanto o Amazon Elastic Block Store (Amazon EBS) é a base para um sistema de arquivos.

Dados mais estruturados também podem ser armazenados no Amazon SimpleDB para consultas comuns, ou no Amazon Relational Database Service (Amazon RDS), um serviço da web com funções para instalar, operar e ajustar a escala de um banco de dados relacional na nuvem.

Além de cálculo e armazenamento, a Amazon oferece um conjunto de serviços com valor agregado, incluindo entrega de conteúdo, notificação de enfileiramento, balanceamento de carga, ajuste de escala automático, fornecimento e monitoramento.

O maior passo que a Amazon tomou na direção de suporte PaaS total foi o release do AWS Elastic Beanstalk, um serviço voltado para desenvolvedores Java e desenvolvido na pilha de software Apache Tomcat. O cliente pode fazer upload do archive de qualquer aplicativo da web Java padrão para o AWS Elastic Beanstalk usando o AWS Management Console, o AWS Toolkit para Eclipse, as APIs de serviço da web ou as ferramentas da linha de comando.


VMware

A escolha de hospedar os aplicativos em um datacenter privado dá o maior controle e flexibilidade. Após você instalar o Apache ou Microsoft Internet Information Services (IIS) no hardware da sua escolha com as estruturas da web necessárias, é necessário fazer upload de aplicativos desenvolvidos no seu próprio ambiente. É possível escolher a linguagem de programação e ter liberdade completa para implementar as interfaces necessárias para conectar a sistemas legados ou parceiros. Basta instalar PHP, Python/Django, Ruby/Rails ou um conjunto completo de ferramentas Java. A maior desvantagem é que o usuário não recebe automaticamente os benefícios relacionados à computação em nuvem. É possível replicar muitas das vantagens internamente, mas isso exige um esforço significativo, além de um nível de investimento que pode ser realista apenas para grandes empresas.

Para quem optar por implementar uma nuvem privada, algumas ferramentas, produtos e serviços podem ser essenciais para obter benefícios de desempenho, utilização e automação. O forte portfólio de tecnologias de virtualização da VMware pode ajudar a lidar com esses requisitos.

A atividade orientada para a nuvem da VMware dá-se principalmente sobre sua iniciativa VMware vCloud. vCloud representa um conjunto de tecnologias de ativação, incluindo VMware vSphere, a API vCloud e o ecossistema de provedor de serviços vCloud. A plataforma vSphere, o principal produto da VMware, é uma estrutura de virtualização capaz de gerenciar grandes conjuntos de infraestrutura, incluindo software e hardware de redes interna e externa. A API vCloud é uma Representational State Transfer API (RESTful) para fornecer e consumir recursos virtuais na nuvem. Permite implementação e gerenciamento de cargas de trabalho virtualizadas em nuvens privadas, públicas e híbridas. A API permite o upload, download, instanciação, implementação e operação de dispositivos virtuais (vApps), redes e "datacenters virtuais". Os dois principais componentes da API vCloud são a API User, focada em fornecimento de vApp, e a API Admin, focada em administração de plataforma/proprietário.

O ecossistema de provedores de serviço vCloud é um conjunto comum de serviços de computação em nuvem para empresas e provedores de serviço, com suporte a qualquer aplicativo ou sistema operacional e a capacidade de escolher onde os aplicativos residem, no local ou fora. É entregue por provedores de serviço como Terremark e Hosting.com e inclui um conjunto de aplicativos disponíveis como dispositivos virtuais.

Além dessas ofertas orientadas à infraestrutura, o VMware vFabric oferece um serviço de plataforma privado viável que combina a estrutura de desenvolvimento Spring Java com um conjunto de serviços integrados, incluindo um servidor de aplicativos, gerenciamento de dados, mensagens prontas para a nuvem, balanceamento de carga e gerenciamento de desempenho.


IBM SmartCloud Application Services

Para os clientes que querem aproveitar os benefícios de uma nuvem pública, mas também têm requisitos corporativos de segurança, customização e integração com aplicativos no local, a IBM oferece IaaS (IBM SmartCloud Enterprise) e PaaS (IBM SmartCloud Application Services). Os dois estão intimamente conectados, pois o IBM SmartCloud Application Services implementa automaticamente recursos virtuais no IBM SmartCloud Enterprise. Juntos, eles entregam um ambiente baseado em nuvem seguro e colaborativo, que apoia todo o ciclo de vida do desenvolvimento, implementação e entrega acelerados de aplicativos. A Figura 2 mostra um exemplo da interface do IBM SmartCloud Application Services.

Figura 2. IBM SmartCloud Application Services
IBM SmartCloud Application Services

IBM SmartCloud Application Workload Services inclui tecnologia padrão avançada apresentada originalmente no IBM Workload Deployer. Essa avançada tecnologia de padrão permite criar, implementar e gerenciar facilmente padrões de conhecimento. Padrões de conhecimento incorporam recursos de implementação, configuração, gerenciamento e monitoramento baseados em boas práticas, para soluções de software específicas, com base em anos de experiência. Esses padrões são fornecidos pela IBM e por fornecedores de software independentes, em um catálogo online. Padrões de conhecimento são simplificados para oferecer valor rapidamente e, ao mesmo tempo, garantir resultados consistentes e previsíveis. Os clientes também podem criar padrões customizados de conhecimento usando conjunto de ferramentas integrado incluído com o IBM SmartCloud Application Workload Services e compartilhá-los em toda a organização.

Essa tecnologia avançada de padrões também é incluída na nova família PureSystems da IBM:

  • IBM PureApplication™ System: um sistema de plataforma projetado e ajustado especificamente para aplicativos transacionais da web e de banco de dados, com conhecimento de carga de trabalho.
  • IBM PureFlex™ System: uma plataforma que inclui padrões para ajudar a gerenciar armazenamento, rede, RAS, instalação e tarefas de segurança.

Normatização e portabilidade

Cada plataforma descrita tem suas vantagens e desvantagens. O maior desafio para os desenvolvedores é que a plataformas são muito diferentes. Aplicativos desenvolvidos em uma plataforma não funcionam facilmente em outra.

Para proteger o investimento dos clientes e reduzir o risco de dependência, há uma demanda forte e crescente por convergência, e muitos órgãos de normatização já trataram da computação em nuvem de suas perspectivas. As iniciativas mais conhecidas foram voltadas para IaaS, mas estão aos poucos incluindo funcionalidade que se qualifica como PaaS. Em um alto nível, adotaram duas abordagens diferentes:

  • Eucalyptus e CloudStack oferecem compatibilidade com AWS e, portanto, facilitam nuvens híbridas na Amazon. A escolha da Amazon tem o benefício de que as interfaces são bem conhecidas, e AWS tem grande capacidade de absorver picos temporários nos requisitos de recursos. No entanto, o fato de que a Amazon é dona das APIs e pode optar por desenvolvê-las na direção que queiram significa que não completamente livres.
  • OpenStack é uma coleção de projetos de tecnologia de software livre cofinanciados por um amplo consórcio de líderes do segmento de mercado (incluindo a IBM), que fornece uma plataforma operacional para orquestrar nuvens em escala massiva. Funciona com qualquer hypervisor e inclui software para fornecer VMs em hardware padrão. Além do conjunto de cálculo, fornece um armazenamento de objetos distribuído, um planejador, controlador de rede e gerenciador de autenticação.

Conclusão

À medida que essas iniciativas padrão amadurecem, é possível esperar a concretização de uma noção de padrão do segmento de mercado, substituindo muitas das idiossincrasias descritas neste artigo. Por enquanto, é necessário usar diversas plataformas e pilhas.

Como cada uma tem suas vantagens e desvantagens, os clientes devem examinar de perto seus requisitos em termos de linguagens de programação, ferramentas de desenvolvimento e dependências de infraestrutura relacionadas a conectividade, escalabilidade e segurança. A boa notícia é que há muitas opções, o que aumenta a probabilidade de encontrar uma solução adequada. No entanto, a má notícia é que o cliente deve fazer uma escolha, e não é sempre uma escolha fácil.

Recursos

Aprender

Obter produtos e tecnologias

  • Avalie produtos IBM da maneira que for melhor para você: faça download da versão de teste de um produto, avalie um produto online, use-o em um ambiente de nuvem ou passe algumas horas na Sandbox SOA para saber como implementar arquitetura orientada a serviço de maneira eficiente.

Discutir

  • Participe da comunidade do developerWorks. Entre em contato com outros usuários do developerWorks e explore os blogs, fóruns, grupos e wikis voltados para desenvolvedores.

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=Cloud computing
ArticleID=841966
ArticleTitle=Escolha a Melhor Nuvem PaaS para Você
publish-date=10232012