Participe da Maratona Behind the Code! Prêmios e desafios incríveis te esperam, não perca! Inscreva-se aqui

Computação em Nuvem com Linux

Hoje em dia, você não lê um Web site técnico sem que se mencione a chamada computação em nuvem. Na verdade, a computação em nuvem não é nada mais do que um serviço de provisionamento de recursos de computação (computadores e armazenamento). Com isso, vem a capacidade adicional de escalar dinamicamente o serviço em computadores e efetuar armazenamento de forma simples e transparente. Tudo isso é semelhante às ideias por trás da computação de utilitário, na qual os recursos de computação eram vistos como um serviço fornecido regularmente, como no caso dos serviços tradicionais de utilidade pública (eletricidade ou água). A diferença não é o objetivo por trás dessas ideias, mas as tecnologias existentes que se uniram para realizá-las.

Uma das mais importantes ideias por trás da computação em nuvem é a escalabilidade, e a tecnologia-chave que possibilita isso é a virtualização. A virtualização permite um melhor uso de um servidor, agregando vários sistemas operacionais e aplicativos em um único computador compartilhado. A virtualização também permite a migração on-line de modo que, se um servidor fica sobrecarregado, uma instância de um sistema operacional (e seus aplicativos) pode ser migrada para um servidor novo e com menos cluster.

De uma perspectiva externa, a computação em nuvem é simplesmente a migração da computação e do armazenamento, de fora de uma empresa para dentro da nuvem. O usuário define os requisitos de recurso (como necessidades de computação e rede de longa distância, ou WAN, ou de largura de banda), e o provedor de nuvem monta virtualmente esses componentes dentro de sua infraestrutura, como mostra a Figura 1.

Figura 1. A Computação em Nuvem Migra Recursos na Internet

A Computação em Nuvem Migra Recursos na Internet

Mas por que você abriria mão, voluntariamente, do controle sobre seus recursos, permitindo que eles existissem virtualmente na nuvem? Embora haja muitos motivos, acredito que dois deles sejam mais importantes: custo e escalabilidade. O objetivo da computação em nuvem é tornar esses recursos menos caros do que aquilo que você pode fornecer e gerenciar. Junto desta redução nos custos vêm maiores flexibilidade e escalabilidade. Um provedor de computação em nuvem pode facilmente tornar seu ambiente virtual escalável para ampliar a largura de banda ou os recursos de computação com a infraestrutura virtual do provedor.

A nova vantagem da computação em nuvem é a capacidade de virtualizar e compartilhar recursos entre diferentes aplicativos para uma melhor utilização do servidor. A Figura 2 mostra um exemplo. Aqui, existiam três plataformas independentes para aplicativos diferentes, cada uma executando em seu próprio servidor. Na nuvem, os servidores podem ser compartilhados (virtualizados) para sistemas operacionais e aplicativos para ser mais bem utilizados pelos servidores, resultando em menos servidores. Menos servidores implicam em menos espaço exigido (minimizando área de cobertura do datacenter) e em menos energia para resfriar (minimizando a emissão de carbono).

Figura 2. Uso de Recurso e Virtualização

Uso de Recurso e Virtualização

Contudo, existem trade-offs, e a computação em nuvem não está livre de defeitos. Este artigo explora alguns desses itens posteriormente. Agora, porém, vamos nos aprofundar mais e explorar a computação em nuvem.

Anatomia da Computação em Nuvem

Conforme você vislumbra o interior da nuvem, descobre que, na verdade, ele não é apenas um único serviço, e sim um conjunto de serviços, como mostra a Figura 3. Essas camadas definem o nível do serviço fornecido.

Figura 3. As Camadas da Computação em Nuvem

As Camadas da Computação em Nuvem

Vamos começar pelo nível mais baixo de serviço fornecido, ou seja, a infraestrutura (Infrastructure-as-a-Service, ou IaaS). A IaaS é o leasing de serviço de infraestrutura (recursos de computação e armazenamento). Isto significa que não somente os computadores virtualizados têm energia de processamento garantida, mas largura de banda reservada para armazenamento e acesso à Internet. Essencialmente, é a capacidade de fazer leasing de um computador ou datacenter com limitações específicas quanto à qualidade do serviço que pode executar um sistema operacional arbitrário e um software.

Avançando pela pilha, o nível de serviço seguinte é a plataforma (Platform-as-a-Service, ou PaaS). A PaaS é semelhante à IaaS, mas inclui sistemas operacionais e serviços exigidos que focam em um aplicativo específico. Por exemplo, a PaaS, além de servidores virtualizados e armazenamento, fornece um sistema operacional particular e um conjunto de aplicativos (normalmente, como uma máquina virtual, ou VM, arquivo, como o formato .vmdk de VMware) junto a um acesso a serviços necessários, como um banco de dados MySQL ou outro, especializado em recursos locais. Em outras palavras, a PaaS é uma IaaS com uma pilha de software customizada para o aplicativo em questão.

Por fim, na parte superior da Figura 3. As Camadas da Computação em Nuvem está o serviço mais simples que pode ser fornecido: o aplicativo. Essa camada é chamada de Software-as-a-Service (SaaS), e é o modelo de software de implementação de um sistema centralizado para execução em um computador local (ou remotamente a partir da nuvem). Como um serviço fornecido regularmente, a SaaS permite o leasing de um aplicativo e pagamento somente pelo tempo utilizado.

Essa é a visão mais abrangente da computação em nuvem. Essa perspectiva ignora certos aspectos da nuvem, como data-Storage-as-a-Service (dSaaS), que fornece armazenamento como um serviço fornecido no qual o consumidor é cobrado com base na capacidade utilizada (a quantidade de armazenamento utilizada) e a utilização (requisitos de largura de banda para o armazenamento). Os serviços da nuvem também surgiram, fornecendo mecanismos internos de interoperabilidade, assim como Interfaces de Programação do Aplicativo (APIs) externas, como serviços da Web.

O Panorama da Computação em Nuvem

Nos últimos meses houve uma explosão de investimentos em computação em nuvem e na infraestrutura relacionada. Esse investimento maciço indica que há demanda para a virtualização de recursos dentro da nuvem. No ano passado surgiram novos serviços, alguns dos quais são mostrados na Figura 4.

Figura 4. Camadas da Computação em Nuvem com Ofertas

Camadas da Computação em Nuvem com Ofertas

Esta lista de ofertas não pretende ser definitiva, uma vez que sofre mudanças com bastante frequência. No entanto, ela fornece uma visão geral de algumas dessas ofertas e de suas diferenças.

Linux e Software Livre na Nuvem

Vamos explorar agora como o Linux e a comunidade de software livre contribuem para o mundo da computação em nuvem. Como você deve ter adivinhado, o Linux e as tecnologias de software livre desempenham um papel de destaque.

Software-as-a-Service

SaaS é a capacidade de acessar softwares pela Internet como um serviço. Uma abordagem anterior à SaaS era o Provedor de Serviços de Aplicativos (ASP). Os ASPs fornecem assinaturas ao software que é hospedado ou enviado pela Internet. O ASP envia o software e cobra tarifas com base em seu uso. Dessa maneira, você não adquire o software; simplesmente faz leasing dele, de acordo com suas necessidades.

Outra perspectiva da SaaS é a utilização do software pela Internet que executa remotamente. Esse software pode se apresentar na forma de serviços utilizados por um aplicativo local (definido como serviços da Web) ou um aplicativo remoto observado por um navegador da Web. Um exemplo de serviço de aplicativo remoto é o Google Apps, que fornece vários aplicativos corporativos por meio de um navegador da Web padrão. Aplicativos que executam remotamente em geral contam com um servidor de aplicativos para revelar os serviços necessários. Um servidor de aplicativos é uma estrutura de software que expõe APIs para serviços de software (como gerenciamento de transações ou acesso ao banco de dados). Exemplos incluem o Red Hat JBoss Application Server, Apache Geronimo e o IBM® WebSphere® Application Server. Existem muitos outros servidores de aplicativos.

Outro exemplo recente da SaaS é o navegador Chrome da Google. Esse navegador é um ambiente ideal como um novo desktop, através do qual os aplicativos podem ser entregues (tanto local quanto remotamente) além de fornecer a experiência tradicional de navegação pela Web.

Platform-as-a-Service

A PaaS pode ser descrita como uma plataforma virtualizada que inclui um ou mais servidores (virtualizados pelo conjunto de servidores físicos), sistemas operacionais e aplicativos específicos (como Apache e MySQL para aplicativos baseados na Web). Em alguns casos, essas plataformas podem ser predefinidas e selecionadas; em outros, é possível fornecer uma imagem da VM que contenha todos os aplicativos necessários específicos ao usuário.

Um exemplo interessante de PaaS é o Google App Engine. O App Engine é um serviço que permite implementar aplicativos da Web na arquitetura escalável da Google. O App Engine fornece ao usuário uma sandbox para seu aplicativo Python, que pode ser referida na Internet (e linguagens adicionais terão suporte no futuro). O App Engine fornece às APIs Python armazenamento e gerenciamento de dados persistentes (utilizando a Google Query Language, ou GQL) além de fornecer suporte para autenticação de usuários, manipulação de imagens e envio de e-mails. A sandbox na qual é executado o aplicativo da Web restringe o acesso ao sistema operacional subjacente. Embora o App Engine limite a funcionalidade disponível a seu aplicativo, ele fornece suporte à construção de serviços da Web úteis.

Nota: implementar aplicativos no App Engine é grátis, dentro de determinadas restrições de largura de banda e armazenamento. Para criar Web sites com App Engine, são cobradas taxas de utilização.

Outro exemplo de PaaS é o 10gen, que é ao mesmo tempo uma plataforma de nuvem e um pacote de software livre que pode ser transferido por download para a criação de suas próprias nuvens privadas. Sendo uma pilha de software semelhante ao App Engine, o 10gen fornece uma funcionalidade semelhante ao App Enginee — com algumas diferenças. Com o 10gen, é possível desenvolver aplicativos no Python, assim como linguagens de programação JavaScript e Ruby. A plataforma também utiliza o conceito de sandbox para isolar aplicativos e fornecer um ambiente confiável para um vasto número de computadores (construídos, logicamente, no Linux) utilizando seu próprio servidor de aplicativos.

Infrastructure-as-a-Service

A IaaS é um serviço de entrega da infraestrutura de um computador. Esta camada difere da PaaS no sentido de que o hardware virtual é fornecido sem uma pilha de software. Em vez disso, o consumidor fornece uma imagem de VM que é chamada em um ou mais servidores virtualizados. A IaaS é a forma mais bruta de serviço de computação (fora do acesso à infraestrutura física). O provedor comercial IaaS mais conhecido é o Amazon Elastic Compute Cloud (EC2). No EC2, é possível especificar uma VM específica (sistema operacional e conjunto de aplicativos) e, em seguida, implementar seus aplicativos nela ou fornecer sua própria imagem de VM para executar nos servidores. Em seguida, você é cobrado simplesmente pelo tempo de computação, armazenamento e largura de banda da rede.

O projeto Eucalyptus (Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems) é uma implementação de software livre do Amazon EC2 compatível com a interface do serviço comercial. Como o EC2, o Eucalyptus conta com o Linux com Xen para a virtualização do sistema operacional. O Eucalyptus foi desenvolvido na Universidade da Califórnia, em Santa Bárbara, para pesquisas de computação em nuvem. É possível fazer seu download no Web site da universidade, ou pode testá-lo por meio do Eucalyptus Public Cloud com algumas restrições.

Outro estilo EC2 da IaaS é a plataforma Enomalism de computação em nuvem. O Enomalism é um projeto de software livre que fornece uma estrutura de computação em nuvem com funcionalidade semelhante ao EC2. O Enomalism é baseado no Linux, com suporte para Xen e Kernel Virtual Machine (KVM). Mas ao contrário das outras soluções IaaS puras, o Enomalism fornece uma pilha de software baseada na estrutura de aplicativo da Web TurboGears e Python.

Outros Desenvolvimento de Nuvem

Além dos desenvolvimentos já discutidos, vários outros pacotes de software livre baseados no Linux são úteis em ambientes de nuvem. O Hadoop é uma estrutura de software livre Java™ semelhante à PaaS, mas com foco na manipulação de grandes conjuntos de dados ao longo de um conjunto de servidores em rede (inspirado no Google MapReduce, que permite um processamento paralelo de grandes conjuntos de dados). Como tal, é utilizado em pesquisas na Web e em aplicativos de publicidades — particularmente, no Yahoo! O Hadoop também fornece vários subprojetos que imitam aplicativos Google. Por exemplo, HBase fornece funcionalidade semelhante a bancos de dados do Google BigTable, e o Hadoop Distributed File System (HDFS) fornece funcionalidade semelhante ao Google File System (GFS).

Problemas e Desafios

Os problemas da computação em nuvem são nítidos — sendo privacidade e segurança dois dos mais importantes. A privacidade pode ser combatida com criptografia, mas por diligência, ela é exigida ao selecionar um serviço de computação em nuvem. Mesmo o comércio eletrônico foi visto com ceticismo quando a Internet começou a crescer. No mundo todo, ocorrem pela Internet transações comerciais na casa dos trilhões de dólares anualmente. Assim, a computação em nuvem colherá benefícios de todas as tecnologias (como Secure Sockets Layer, ou SSL) que tornam segura a Web de hoje.

Indo Além

A corrida à computação em nuvem está só começando e o mesmo acontece com o desenvolvimento de software livre no Linux, que o conduzirá. Levando em conta o investimento maciço em computação em nuvem, fica claro que está ocorrendo uma mudança, um retorno aos centros de dados centralizados. Será interessante ver as novas tecnologias e arquiteturas prestes a surgir.