Os principais componentes sobre os quais a computação em nuvem se baseia não são idéias ou conceitos novos, mas sim tendências que já haviam sido previamente estabelecidas. Portanto, com base nesses componentes, a computação em nuvem não é algo novo. Porém, por outro lado, ela é inovadora no sentido de reunir todos esses componentes em uma infraestrutura maior com características singulares [SUN 2009a].
Os principais componentes são apresentados a seguir.
Virtualização
Um dos componentes chave da computação em nuvem é a virtualização. A virtualização diz respeito à criação de ambientes virtuais, conhecidos como máquinas virtuais, a fim de abstrair as características físicas do hardware. As máquinas virtuais, por exemplo, podem ser usadas para emular diversos sistemas operacionais em uma única plataforma computacional. Assim, forma-se uma camada de abstração dos recursos dessa plataforma, alocando-se um hardware virtual para cada sistema.
Na computação em nuvem, os data centers provêem uma rede de serviços que são utilizados à medida que são requeridos. Logo, a distribuição desses serviços entre os usuários pode ser rapidamente alterada, o que exige um suporte para tal dinamismo. A virtualização é o componente responsável pela característica dinâmica dos data centers. Ou seja, ela permite que os ambientes virtuais de cada usuário possam ser ampliados ou reduzidos dinamicamente de maneira a atender aos recursos solicitados. A escalabilidade está diretamente relacionada a essa característica: os recursos são facilmente escaláveis graças a esse dinamismo. É importante verificar que, com a virtualização, as aplicações e os serviços podem ser desenvolvidos e implantados sem que haja a preocupação em relação à camada física dos servidores. As máquinas virtuais são ditas serem as interfaces de mínimo denominador comum entre os prestadores de infraestrutura e os desenvolvedores (prestadores de serviços) [SUN 2009a].
É válido lembrar que a quantidade de data centers presentes na nuvem é muito grande. Logo, a virtualização ajuda a criar uma camada de abstração que engloba todos esses data centers, evitando que eles sejam tratados como sistemas discretos, o que impediria a alocação dinâmica dos recursos.
Em suma, podemos destacar duas principais vantagens da virtualização para a computação em nuvem. A primeira é a escalabilidade, ou seja, a capacidade de aumento e redução da quantidade de recursos utilizados. A segunda é a abstração de toda a infraestrutura para os usuários, característica muito importante para esse novo modelo de computação.
Dois tipos de virtualização devem ser suportados na computação em nuvem [SUN 2009b]: paravirtualização, que permite que um único servidor físico possa ser tratado como diversos servidores virtuais, e clustering, que permite que múltiplos servidores físicos possam ser tratados como um único servidor virtual. A Figura 2 apresenta ambos os tipos de virtualização (os servidores virtuais estão representados através das linhas pontilhadas).
Serviços Baseados na Internet
A questão de como fornecer as aplicações e os recursos para todos os usuários conectados às nuvens é resolvida através da utilização de serviços baseados na Internet (do inglês Internet-based services), ou seja, serviços que ficam disponíveis pela Internet. Muitas organizações empresariais já utilizavam, e ainda utilizam, aplicações com interfaces na Internet direcionadas não só aos seus consumidores, como também aos seus funcionários e sócios, por exemplo. Como esses serviços podem ser acessados de qualquer lugar e a qualquer hora, dependendo somente de uma conexão de boa qualidade com a Internet, eles tornaram-se elementos fundamentais para a computação em nuvem [SUN 2009a].
Os serviços que as empresas utilizam em seu cotidiano, em geral, usam o protocolo criptografado SSL (Secure Socket Layer), em conjunto com uma autenticação forte, a fim de garantir a segurança das comunicações. Entretanto, quando se trata de computação em nuvem, o assunto deve ser analisado com um maior cuidado [SUN 2009a]. Alguns prestadores de serviços, por exemplo, não oferecem a criptografia dos dados. Além disso, quando se usa criptografia, a grande questão é quem fica responsável pelo gerenciamento das chaves. É importante lembrar que a quantidade de usuários conectados em uma nuvem é muito grande, e questões de segurança tornam-se essenciais. A seção Vantagens e Desafios apresenta o tema da segurança em computação em nuvem com maiores detalhes.
Modelo Pay-per-use
A computação em nuvem trabalha sobre o modelo pay-per-use (também conhecido como pay-as-you-go), que remove o comprometimento, por parte do usuário, de reservar por uma quantidade exata de recursos. Como o próprio nome já diz, o usuário paga por aquilo que usa, ou seja, se for necessário, ele tem a possibilidade de aumentar a quantidade de recursos reservados sem grandes esforços e de forma automática. Com isso, uma aplicação pode existir por apenas alguns minutos, como também pode existir por um tempo muito mais longo, provendo serviços aos usuários. A cobrança é baseada no consumo dos recursos, como, por exemplo, a quantidade de horas utilizadas de CPU e o volume de dados armazenados [SUN 2009a].
A virtualização é a principal responsável pela possibilidade de uso desse modelo. Graças a ela, os recursos são facilmente escaláveis – os ambientes virtuais podem ser rapidamente ampliados, reduzidos e copiados –, como já foi explicado anteriormente. Além disso, o custo desses ambientes não é grande devido ao fato de eles poderem coexistir nos mesmos servidores físicos [SUN 2009a].
Uma conseqüência muito importante do modelo pay-per-use é a redução dos riscos de subutilização e de saturação [ARMBRUST et al. 2009]. A subutilização está relacionada ao fato de usar uma quantidade menor de recursos do que a que foi reservada a priori. Isso acaba gerando recursos que não são consumidos e que, portanto, ficam ociosos. A saturação ocorre quando há um excesso de utilização sobre os recursos reservados, o que pode gerar serviços mais lentos e baixas qualidades de serviço, prejudicando os usuários. Como no modelo pay-per-use o usuário só paga por aquilo que consome, reservando, portanto, somente o necessário, esses riscos são evitados.
Software Livre
O software livre (open-source) desempenha um papel muito importante na computação em nuvem [SUN 2009a]. Ele permite que os elementos básicos, como as imagens de máquinas virtuais, sejam criados a partir de ferramentas que são facilmente acessíveis. Dessa forma, o desenvolvimento das aplicações nas nuvens fica mais simples de ser realizado e mais bem difundido. Conseqüentemente, a quantidade de componentes criados tende a aumentar, facilitando o nível sobre o qual os desenvolvedores programam nas nuvens.
Um exemplo claro dessa importância é o Hadoop, uma implementação de código aberto do MapReduce. O MapReduce é um framework desenvolvido pela Google cujo objetivo é permitir a execução de um programa em paralelo. No ambiente da computação em nuvem, havia a necessidade de se implementar um algoritmo similar ao MapReduce, a fim de haver execuções de um conjunto de dados usando paralelismo. Essa necessidade automaticamente impulsionou o desenvolvimento do Hadoop, que hoje está sendo amplamente usado nas nuvens por diversos programadores [SUN 2009a]. Ferramentas como essa ajudam e incentivam o desenvolvimento de novas ferramentas e aplicação nas nuvens.