O uso da nuvem como uma abstração é bem comum para o sistema distribuído que é a Internet, mas nos últimos anos, observamos que essa abstração se expandiu para incorporar infraestruturas altamente virtualizadas e escaláveis que são facilmente fornecidas como um serviço (tanto local quanto remotamente). Este artigo deixa de lado uma definição aprofundada de arquitetura em nuvem e seus benefícios e, ao invés disso, sugere leituras importantes na seção de Recursos.
Anatomia da computação em nuvem
Este artigo começa com uma exploração das abstrações principais das arquiteturas em nuvem (de Infrastructure as a Service [IaaS]) e segue além dos blocos de construção para as soluções mais altamente integradas.
Apesar de não ser um requisito, a virtualização fornece benefícios exclusivos para construir arquiteturas dinamicamente escaláveis. Além da escalabilidade, a virtualização introduz a capacidade de migrar máquinas virtuais (VMs) entre servidores físicos com o objetivo de balanceamento de carga. A Figura 1 mostra que o componente de virtualização é fornecido por uma camada do software chamada hypervisor (algumas vezes chamada de monitor da máquina virtual [VMM]). Essa camada fornece a capacidade de executar sistemas operacionais múltiplos (e seus aplicativos) simultaneamente em uma máquina física única. Há um objeto no hypervisor chamado máquina virtual que encapsula o sistema operacional, os aplicativos e a configuração. Como opção, a emulação do dispositivo pode ser fornecida no hypervisor ou como uma VM. Finalmente, dada a nova natureza dinâmica da virtualização e as novas capacidades que ela fornece, são necessários novos esquemas de gerenciamento. Esse gerenciamento é mais bem feito em camadas, considerando o gerenciamento local no servidor, assim como o gerenciamento de infraestrutura de nível superior, fornecendo uma orquestração geral do ambiente virtual.
Figura 1. Elementos principais de um nó na nuvem

Se pegarmos os nós na Figura 1 e multiplicá-los em uma rede física com armazenamento compartilhado, orquestrando o gerenciamento em toda a infraestrutura e fornecermos o balanceamento de carga front-end de conexões recebidas (em um ambiente privado ou público) com a utilização de cache e filtragem, teremos uma infraestrutura virtual chamada de nuvem. Essa nova construção é mostrada na Figura 2. Máquinas inativas podem ser desligadas até que sejam necessárias para capacidade de computação adicional (fornecendo melhor eficiência de energia), com VMs balanceadas (mesmo dinamicamente) nos nós dependendo de suas cargas individuais.
Figura 2. Infraestrutura da computação em nuvem

Com a arquitetura básica de uma nuvem definida, vamos explorar onde o software livre está sendo usado para construir uma infraestrutura em nuvem dinâmica.
Principais tecnologias de software livre
A paisagem do Linux está presenciando uma onda de desenvolvimentos focados na infraestruturas virtualizadas para virtualização, gerenciamento e integração em larga escala de pacotes de software em nuvem. Comecemos com uma visão de software livre no nível do nó individual, então passaremos para a infraestrutura para ver o que está acontecendo.
A base de uma nuvem no nível do nó é o hypervisor. Apesar de a virtualização não ser um requisito, ela fornece capacidades indisputadas para arquiteturas escaláveis e eficientes no uso de energia. Há um número de solução de virtualização de software livre, mas duas soluções chave são as que transformam o sistema operacional Linux em um hypervisor: a Máquina Virtual do Kernel Linux (KVM) e a Lguest. a KVM é uma solução de hypervisor oficial, sendo implementada em ambientes de produção. A Lguest é uma solução focada em Linux que executa somente VMs Linux, mas está integrada ao kernel e encontrando usos mais amplos.
Além da conversão do Linux em um hypervisor, há outras soluções que possuem uma abordagem focada em uma VM convidada. User-Mode Linux (UML) é uma outra abordagem que modifica um kernel Linux convidado para ser executado em um outro sistema operacional Linux (sem extensões de hypervisor). Devido ao fato de a maioria dos usuários quererem executar um kernel não modificado, as soluções de virtualização (como a KVM) são preferidas.
Essa abordagem UML também é popular, mas necessita de hardware virtualizado (como um console, disco virtual e rede).
O hypervisor fornece o meio de compartilhar a CPU com sistemas operacionais múltiplos (virtualização da CPU), mas para fornecer a virtualização completa, todo o ambiente deve estar virtualizado para as VMs. A emulação da máquina — ou plataforma— pode ser executada de várias maneiras, mas um pacote popular de software livre que suporta vários hypervisors é chamado QEMU. O QEMU é um emulador e hypervisor completo. Mas a KVM usa o QEMU para a emulação do dispositivo como um processo separado no espaço do usuário (consulte a Figura 1). Um recurso interessante do QEMU é que, como ele fornece emulação de disco (através do formato QCOW), o QEMU fornece recursos avançados como capturas instantâneas e migração de VM ativa.
A KVM, a partir do kernel 2.6.25, usa a virtio como um meio de otimização do desempenho de virtualização de E/S. Ela faz isso introduzindo drivers paravirtualizados no hypervisor com ganchos do convidado para elevar o desempenho a níveis quase nativos. Isso funciona somente quando o sistema operacional puder ser modificado com este objetivo, mas pode ser usado no convidado Linux em cenários de hypervisor do Linux.
Hoje em dia, a virtio e o QEMU trabalham em conjunto para que transações de dispositivos emulados possam ser otimizadas entre o convidado Linux e o emulador QEMU no espaço do usuário.
Quando as VMs se consolidam em servidores físicos, as necessidades de plataforma da rede se intensificam. Mas, ao invés de forçar toda a rede da VM para a camada física da plataforma, a própria comunicação local poderia ser virtualizada. Para otimizar a comunicação de rede entre VMs, há a introdução do comutador virtual. O vSwitch se comporta como um comutador físico, mas é virtualizado na plataforma (veja a Figura 3). Nessa figura, as interfaces virtualizadas (VIFs) associadas às VMs se comunicam através do comutador virtual com as interfaces físicas (PIFs).
Figura 3. Visualização de alto nível do Open vSwitch com interfaces virtuais e físicas

O software livre também está tratando desse problema, como uma solução interessante chamada Open vSwitch. Além de fornecer um comutador virtual para ambientes virtuais, o vSwitch também pode ser integrado em plataformas físicas e fornecer recursos de nível corporativo como redes locais virtuais (VLANs), Qualidade de Serviço (QoS) baseada na prioridade, entroncamento e suporte a aceleração de hardware (como adaptadores de rede de virtualização de E/S [IOV] de raiz única). O Open vSwtich está atualmente disponível para kernels 2.6.15 e suporta a variedade de soluções de virtualização baseadas em Linux (Xen, KVM, VirtualBox) e padrões de gerenciamento (Remote Switched Port Analyzer [RSPAN], NetFlow, etc.).
Como as VMs são agregações do sistema operacional, sistemas de arquivos raiz e configurações, o espaço é perfeito para o desenvolvimento de ferramentas. Mas para perceber o potencial total das VMs e ferramentas, deve haver uma maneira móvel de montá-las. A abordagem atual, chamada de Open Virtualization Format (OVF) é uma construção VM flexível, eficiente e móvel. O OVF envolve uma imagem de disco virtual em um wrapper XML que define a configuração da VM, incluindo a configuração de rede, requisitos de processador e memória e uma variedade de metadados extensíveis para definir mais a imagem e suas necessidades de plataforma. A capacidade chave fornecida pelo OVF é a portabilidade para distribuir VMs em de uma maneira agnóstica do hypervisor.
Há um número de utilitários para gerenciar imagens VM (VMIs) e também para convertê-las em vários outros formatos. A ovftool do VMware é uma ferramenta útil que pode ser usada para a conversão de VMI (por exemplo, para converter do formato VMware Virtual Disk Development Kit [VMDK] para OVF). Essa ferramenta e outras são úteis quando se possui uma VMI, mas e caso você possua um servidor físico que gostaria de converter para uma VMI? Pode-se implementar uma ferramenta útil chamada Clonezilla para este objetivo. Apesar de ter sido originalmente desenvolvida como uma ferramenta de clonagem de disco para uma recuperação de desastre, pode-se usá-la para converter uma instância de servidor físico para uma VM para uma implementação fácil em uma infraestrutura virtualizada. Várias outras ferramentas existem (como utilitários construídos em libvirt) ou estão em desenvolvimento para a conversão e gerenciamento enquanto o formato OVF ganha adeptos.
Este artigo explora o gerenciamento a partir de duas perspectivas. Esta seção discute o gerenciamento da plataforma; uma seção mais adiante expande o gerenciamento da infraestrutura a um nível mais elevado.
A Red Hat introduziu a biblioteca libvirt como uma API para o gerenciamento de virtualização de plataformas (hypervisors e VMs). O que faz da libvirt tão interessante é que ela suporta uma variedade de soluções hypervisor (KVM e Xen são algumas delas) e fornece ligações de API para uma variedade de linguagens (como C, Python e Ruby). Ela fornece a "última milha" de gerenciamento, sendo a interface direta com o hypervisor da plataforma e estendendo APIs para soluções de gerenciamento de infraestrutura maiores. Com a libvirt, é fácil iniciar e interromper VMs e ela fornece APIs para operações mais avançadas, como a migração de VMs entre plataformas. O uso da libvirt também torna possível o uso de seu shell (construído na libvirt), chamado virsh.
Tecnologias de software livre de infraestrutura
Agora que vimos algumas das soluções de software livre no nível do nó virtualizado, vejamos alguns outros aplicativos de software livre que suportam essa infraestrutura. Este artigo explora três categorias. As duas primeiras são tecnologias de nível de infraestrutura que complementam as soluções previamente discutidas. A segunda categoria consiste em soluções integradas que juntam todas as partes para uma implementação mais simples.
A construção de uma arquitetura da Web escalável e balanceada depende da capacidade de balancear o tráfego da Web nos servidores que implementam a funcionalidade de backend. Há uma variedade de soluções de balanceamento de carga, mas, recentemente, o Yahoo! lançou uma solução de software livre chamada Traffic Server. Traffic Server é interessante, pois encapsula um grande número de recursos em um pacote para infraestruturas em nuvem, incluindo gerenciamento de sessão, autenticação, filtragem, balanceamento de carga e roteamento. O Yahoo! adquiriu esse produto da Inktomi, mas agora estendeu e introduziu esse produto para o software livre.
Gerenciamento da infraestrutura
O gerenciamento de infraestrutura em larga escala (o gerenciamento de muitos hypervisors e ainda mais VMs) pode ser conseguido de várias maneiras. As soluções mais comuns são construídas a partir da mesma plataforma (libvirt). O pacote oVirt é uma ferramenta de gerenciamento de VM aberta que aumenta de um pequeno número de VMs para milhares de VMs sendo executadas em centenas de hosts. O pacote oVirt, desenvolvido pela Red Hat, é um console de gerenciamento baseado na Web que, além do gerenciamento tradicional, suporta a automação do gerenciamento em cluster e do balanceamento de carga. A ferramenta oVirt foi composta na linguagem Python. O VirtManager, também baseado na libvirt e desenvolvido pela Red Hat, é um aplicativo com uma GTK+ UI (ao invés de ser baseado na Web como o oVirt). O VirtManager apresenta um monitor com gráficos muito melhores (para o desempenho ao vivo e utilização de recursos) e inclui um visualizador de cliente VNC para um console gráfico completo para VMs remotas.
E o Puppet é um outro pacote de software livre projetado para infraestrutura de datacenter (uma nuvem). Apesar de não ter sido projetado somente para infraestruturas virtualizadas, ele simplifica o gerenciamento de grandes infraestruturas, separando os detalhes do sistema operacional peer. Ele faz isso usando a linguagem Puppet. O Puppet é ideal para a automatização de tarefas administrativas em um grande número de servidores e é amplamente usado hoje em dia.
Os pacotes de software livre a seguir possuem uma abordagem mais holística integrando todas as funcionalidades necessárias em um único pacote (incluindo virtualização, gerenciamento, interfaces e segurança). Quando adicionados a uma rede de servidores e armazenamento, esses pacotes produzem computação em nuvem e infraestruturas de armazenamento (IaaS) flexíveis. Para detalhes sobre essas plataformas, consulte a seção de Recursos.
Um dos pacotes de software livre mais populares para a construção de infraestruturas de computação em nuvem é o Eucalyptus (que vem de Elastic Utility Computing Architecture for Linking Your Programs to Useful Systems). O que faz dele único é que sua interface é compatível com a Amazon Elastic Compute Cloud (Amazon EC2 — a interface de computação em nuvem da Amazon). Além disso, o Eucalyptus inclui o Walrus, que é um aplicativo de armazenamento em nuvem compatível com o Amazon Simple Storage Service (Amazon S3 — a interface de armazenamento em nuvem da Amazon).
O Eucalyptus suporta KVM/Linux e Xen para hypervisors e inclui a distribuição de cluster Rocks para o gerenciamento de cluster.
O OpenNebula é um outro aplicativo de software livre interessante (sob licença da Apache) desenvolvido na Universidad Complutense de Madrid. Além de dar suporte a construção em nuvem privada, o OpenNebula apoia a ideia de nuvens híbridas. Uma nuvem híbrida permite combinar uma infraestrutura em nuvem privada com uma infraestrutura em nuvem pública (como a Amazon) para permitir graus ainda maiores de escalada.
O OpenNebula suporta Xen, KVM/Linux e VMware e é amparado por elementos como libvirt para o gerenciamento e introspecção.
O Nimbus é uma outra solução IaaS focada na computação científica. Com o Nimbus, pode-se arrendar recursos remotos (como os fornecidos pela Amazon EC2) e gerenciá-los localmente (configurar, implementar VMs, monitorar, etc.). O Nimbus se originou do projeto Workspace Service (parte do Globus.org). Por depender da Amazon EC2, o Nimbus suporta Xen e KVM/Linux.
A Citrix integrou a Xen em uma plataforma IaaS, usando a Xen como um hypervisor ao incorporar outros recursos de software livre como o Open vSwitch. Uma vantagem interessante da solução Xen é o foco no gerenciamento baseado em padrões (incluindo OVF, Distributed Management Task Force [DTMF], o Common Information Model [CIM], e a Virtualization Management Initiative [VMAN]) do projeto Kensho. A pilha de gerenciamento Xen suporta garantias SLA em conjunto com métricas detalhadas para estorno.
Por último, mas não menos importante, a OpenQRM, que é caracterizada como uma plataforma de gerenciamento de datacenter. A OpenQRM fornece um console único para gerenciar um datacenter virtualizado completo que é plugável, de maneira arquitetônica, para permitir a integração de ferramentas de terceiros. A OpenQRM integra suporte para alta disponibilidade (através de redundância) e suporta uma variedade de hypervisors, incluindo KVM/Linux, Xen, VMware e Linux VServer.
Pode-se escrever volumes sobre o papel de liderança que o software livre está exercendo no domínio das nuvens e da virtualização, mas este artigo forneceu uma breve introdução de algumas das soluções populares e visíveis disponíveis atualmente. O software livre lhe será útil caso queira construir uma nuvem com base em seus próprios requisitos a partir de partes individuais ou simplesmente queira uma solução coesa que funcione sem configurações adicionais. Consulte a seção de Recursos para mais detalhes sobre as soluções discutidas aqui e outras.
Aprender
-
Michael Galpin fornece uma ótima introdução à computação em nuvem, seus benefícios e desafios e uma revisão de algumas plataformas básicas e especializadas disponíveis em "Realities of open source cloud computing, Part 1: Not all clouds are equal".
-
Saiba mais sobre o Linux como um hypervisor em "Anatomy of a Linux hypervisor" e saiba mais sobre dispositivos virtuais e o uso de OVF em "Virtual appliances and the Open Virtualization Format".
-
Máquina Virtual Kernel foi o primeiro hypervisor baseado em Linux; leia mais a respeito de sua arquitetura em "Discover the Linux Kernel Virtual Machine". Lguest entrou para o kernel um pouco depois e adotou uma abordagem mais leve (5.000 linhas de código de origem adicionais). Linux no modo de usuário foi discutido como uma alternativa, que em vez de um hypervisor, há um convidado modificado sendo executado em um kernel padrão. E Xen é um hypervisor popular usado em algumas das maiores infraestruturas em nuvem (Elastic Compute Cloud da Amazon, por exemplo); ele suporta a virtualização completa e a paravirtualização.
-
Leia mais sobre o QEMU em "System emulation with QEMU". Recursos adicionais para a emulação de dispositivo e E/S virtual incluem "Linux virtualization and PCI passthrough" e "Virtio: An I/O virtualization framework for Linux".
-
O Open vSwitch pode ser usado por todos os hypervisors principais (KVM, Xen, VirtualBox); aprenda mais sobre seu design e motivação nos Tópicos Recentes no artigo do Networks "Extending Networking into the Virtualization Layer (PDF)".
-
Yahoo! tornou o seu software Traffic Server em um software livre sob a Apache Software Foundation. O Yahoo! usa esse software internamente e ele fornece o front-end para as infraestruturas de computação em nuvem. O Traffic Server agrega balanceamento de carga, gerenciamento de sessão, autenticação, gerenciamento de configuração e roteamento para infraestruturas da Web 2.0 de larga escala. Leia mais sobre o anúncio da empresa no wiki do Traffic Server.
-
Para instruções detalhadas sobre a criação de uma VM baseada em KVM, confira "Create a KVM-based virtual server".
-
As ferramentas VM estão crescendo, mas um bom começo está disponível atualmente. "Migrate to a virtual Linux environment with Clonezilla" explora a Clonezilla, que pode ser usada para construir uma VM a partir de uma instância física. Há também a ovftool do VMware, que útil para a conversão VM.
-
Este artigo explorou alguns aplicativos de gerenciamento de infraestruturas virtuais, dois dos quais foram construídos na API de virtualização libvirt. Leia mais sobre a libvirt em "Anatomy of the libvirt virtualization library". Para saber mais sobre as soluções de gerenciamento de nível mais alto, confira oVirt, Virtual Machine Manager (virt-manager) e Puppet.
-
Para ouvir entrevistas e discussões interessantes para desenvolvedores de software, consulte os podcasts do developerWorks.
-
Mantenha-se atualizado com os eventos e webcasts técnicos do developerWorks.
-
Siga o developerWorks no Twitter.
-
Consulte as próximas conferências, feiras, webcasts e outros Eventos em todo o mundo que sejam de interesse dos desenvolvedores IBM de software livre.
-
Visite a Zona de software livre do developerWorks para obter informações abrangentes sobre procedimentos, ferramentas e atualizações de projetos que simplificam o desenvolvimento de tecnologias de software livre e a utilização destas com produtos IBM; e não deixe de passar pelos nossos artigos e tutoriais mais populares.
-
A comunidade My developerWorks é um exemplo de comunidade geral de sucesso que abrange uma ampla gama de tópicos.
-
Assista e aprenda sobre a IBM e as tecnologias e funções de produtos de software livre com as demos on-demand do developerWorks grátis.
Obter produtos e tecnologias
- O desenvolvimento de software livre IaaS está explodindo hoje em dia com um grande número de coleções úteis. Os exemplos incluem Eucalyptus, OpenNebula, Nimbus, Xen Cloud Platform (com Project Kensho) e openQRM.
-
Inove em seu próximo projeto de desenvolvimento de software livre com o software de avaliação da IBM, disponível para download ou em DVD.
- Faça download das versões de avaliação de produtos IBM ou explore as avaliações on-line no IBM SOA Sandbox e utilize as ferramentas de desenvolvimento de aplicativos e produtos de middleware do DB2®, Lotus®, Rational®, Tivoli® e WebSphere®.
Discutir
-
Participe dos blogs developerWorks e envolva-se na comunidade do developerWorks.

M. Tim Jones é arquiteto de firmware integrado e autor das obras Artificial Intelligence: A Systems Approach, GNU/Linux Application Programming (agora, na segunda edição), AI Application Programming (na segunda edição) e BSD Sockets Programming from a Multilanguage Perspective. Sua experiência em engenharia vai desde o desenvolvimento de kernels para espaçonaves geossíncronas até a arquitetura de sistemas integrados e o desenvolvimento de protocolos de rede. Tim é engenheiro consultor da Emulex Corp. em Longmont, Colorado.