Construindo um Cloud Rodrigo Albani de Campos – [email protected] “Design is not just what it looks like and feels like. Design is how it works.” – Steve Jobs Indice Indice ............................................................................................................................................. 1 Resumo.......................................................................................................................................... 2 Um pouco de história .................................................................................................................... 2 Por que agora? .............................................................................................................................. 3 A tecnologia............................................................................................................................... 3 O mercado ................................................................................................................................. 4 Características da Nuvem .............................................................................................................. 5 Construindo um Cloud .................................................................................................................. 6 A Rede ....................................................................................................................................... 6 Os Dados ................................................................................................................................... 8 A Virtualização......................................................................................................................... 11 Orquestração e Gerência ........................................................................................................ 15 Conclusão e Considerações ......................................................................................................... 15 Construindo um Cloud 1 Resumo O assunto mais comentado no mercado da tecnologia da informação recentemente é o Cloud Computing, ou Computação em Nuvem. Muito se fala sobre o consumo de TI como um serviço nesse novo modelo de negócio, mas o que é de fato a Nuvem e como ela é construída? Esse artigo pretende desmistificar o que existe por trás de um serviço de nuvem, mostrar quais as principais tecnologias utilizadas e ajudar a entender o que precisa ser levado em consideração na contratação de um serviço com o objetivo de garantir a maior aderência possível entre a demanda de negócio e a oferta contratada. Além disso, o artigo sedimenta alguns conceitos sobre Cloud, os diversos modelos de serviço e entrega e principais características. Um pouco de história A ideia básica da computação em nuvem é a habilidade de um ou mais sistemas integrados em oferecer capacidade de computação e armazenamento distribuídos para um conjunto heterogêneo de usuários finais, permitindo assim que a capacidade computacional seja oferecida como um serviço. Conceitualmente, assemelha-se a como consumimos energia elétrica ou água. A possibilidade de um dia a computação ser consumida dessa forma foi proposta originalmente por John McCarthy1 em um discurso realizado em 1961 no MIT, quando os primeiros sistemas de compartilhamento de tempo estavam sendo desenvolvidos naquela universidade. “If computers of the kind I have advocated become the computers of the future, then computing may someday be organized as a public utility just as the telephone system is a public utility... The computer utility could become the basis of a new and important industry.” – John McCarthy Esses sistemas foram base para a evolução da computação como conhecemos hoje, já que permitiam que um único sistema computacional operasse de forma compartilhada, como se fosse capaz de realizar mais de uma operação ao mesmo tempo. Em meados da década de 70, o conceito de distribuição de processamento e armazenamento foi previsto por outros pioneiros da ciência da computação como Grace Hooper2, conforme podemos ler no livro de Russel McGee, “My Adventure with Dwarfs: A Personal History in Mainframe Computers”3. O autor chama a atenção para o fato de Hooper, já naquela época, acreditar que grandes computadores seriam substituídos por diversas máquinas de diferentes tamanhos e 1 http://www-formal.stanford.edu/jmc/ http://en.wikipedia.org/wiki/Grace_Hopper 3 http://www.cbi.umn.edu/hostedpublications/pdf/McGee_Book-4.2.2.pdf 2 Construindo um Cloud 2 capacidades conectadas por uma rede. Qualquer usuário em qualquer “nó” da rede poderia se comunicar com outras máquinas e outros usuários em outros nós, assim como poderia ter acesso a dados em qualquer banco de dados conectado na rede desde que tivesse permissão para isso. Ao longo dos anos o conceito de multitarefa e de compartilhamento de tempo se solidificou e virou comum, porém a tecnologia que permitiu a difusão do conceito de nuvem se não se consolidou até meados dos anos 2000 com o estouro das dot-com. O gráfico a seguir representa o processo evolutivo da computação ao longo dos anos até a atualidade. Figura 1 - Evolução de Sistemas de Computadores Por que agora? O Cloud Computing, assim como acontece com outras tecnologias, desponta agora como resultado de dois fatores: a disponibilidade tecnológica e a demanda do mercado. A tecnologia É a tecnologia que torna esse modelo computacional viável. Em particular, a disponibilidade e ubiquidade de rede de alta velocidade por um custo aceitável permite que serviços computacionais sejam distribuídos em escala global. Construindo um Cloud 3 Andy Grove4, cofundador e CEO da Intel de 1987 até 1998, desenvolveu sobre a disponibilidade de banda de rede em um discurso em 1988: “If you are amazed by the fast drop in the cost of computing power over the last decade, just wait till you see what is happening to the cost of bandwidth.” – Andrew Grove De forma semelhante, em 1994, Bill Gates afirmou em um artigo da PC Magazine que em uma década teríamos banda infinita. O fato é que a rede acaba sendo o amálgama que une os componentes da nuvem. Sem o advento das redes de grande capacidade, estáveis e com um custo aceitável, a nuvem como concebemos hoje não seria possível. Outro avanço fundamental foi o amadurecimento e popularização das tecnologias de virtualização. Apesar de não serem novas, essas tecnologias estavam anteriormente disponíveis apenas em equipamentos de grande porte e complexidade. Apesar de a virtualização não ser um fator preponderante, já que muitas arquiteturas na nuvem são baseadas em componentes multiusuários não necessariamente virtualizados, a habilidade de segmentar a infraestrutura facilita a adoção e o desenvolvimento na nuvem. O mercado Se por um lado a tecnologia que permite a computação em nuvem evoluiu e se tornou amplamente disponível, o mercado apresentou em contrapartida a demanda por um modelo de consumo de computação sem precedentes. Uma teoria que sumariza de forma eficiente essa demanda é a do Redshift5, que posiciona o mercado em duas situações opostas. De um lado estão as empresas cuja demanda computacional é ultrapassada pela tecnologia disponível, ou seja, que potencialmente desperdiçam recursos ou que não tem capacidade de consumir tudo o que lhes é oferecido. Essas empresas, pelo que prega a teoria, estariam em decaimento para o azul, ou em Blueshift. Considerando a alta ociosidade observada em vários Datacenters pode-se assumir que a maioria das empresas se encontra nesse espectro. De outro lado, temos empresas cuja demanda ultrapassa, em alguns casos em várias ordens de magnitude, a capacidade computacional que pode ser entregue em um único equipamento, não importa o quão grande seja o mesmo. Para estas empresas, diz-se que estão em decaimento para o vermelho, ou Redshift. Um exemplo clássico de redshift foi a crise observada pelo eBay em 1999, quando a maior máquina Sun disponível não era capaz de atender a demanda computacional do banco de dados principal do site de leilões. 4 5 http://en.wikipedia.org/wiki/Andrew_Grove http://bit.ly/red-shift Construindo um Cloud 4 “By November 1999, the database servers approached their limits of physical growth” – Randy Shoup and Dan Pritchett – SD Forum 20066 Apesar de atualmente termos máquinas com muito mais capacidade do que em 1999, a realidade é que empresas de escala web não teriam como centralizar o processamento ou o armazenamento de seus dados em um único equipamento, a exemplo do que ocorreu com o eBay em 1999. Curiosamente, as soluções para os problemas de blueshift e redshift são as mesmas, e permeiam quatro fatores fundamentais: 1. 2. 3. 4. Distribuição do tráfego Elasticidade instantânea Escalabilidade de processamento Escalabilidade de armazenamento Não por coincidência, essas são características que encontramos no conjunto de tecnologias que chamamos hoje de Cloud Computing. Características da Nuvem Devido a grande repercussão de mercado da computação em nuvem, o termo acabou sendo pervertido e utilizado de forma até exagerada. Praticamente qualquer recurso computacional oferecido fora das instalações do cliente hoje em dia carrega o termo “nuvem” ou “cloud” em seu nome. O que define então, de forma descomprometida, a computação em nuvem? O National Institute of Standards and Technology (NIST) oferece um conjunto de cinco características que procuram definir o que é um serviço de computação em nuvem7. Apesar de a definição ser considerada incompleta por muitos, é bastante concisa e define uma referência que vem se tornando padrão para o mercado. Essas características são: 6 7 Auto-Serviço Sob Demanda: Um cliente pode de forma unilateral provisionar capacidade computacional, como por exemplo, tempo de processamento de um servidor ou armazenamento de dados na rede, conforme a sua necessidade e sem precisar de interação humana com um ou mais provedores de serviço. Acessibilidade ubíqua pela rede: Os recursos estão disponíveis pela rede e podem ser acessados através de mecanismos padrão que viabilizam o seu uso por plataformas heterogêneas e de portes distintos. Compartilhamento de recursos: Os recursos computacionais do provedor são compartilhados de forma que sirvam a múltiplos clientes usando um modelo multi- http://www.addsimplicity.com/downloads/eBaySDForum2006-11-29.pdf http://csrc.nist.gov/publications/nistpubs/800-145/SP800-145.pdf Construindo um Cloud 5 locatário (multi-tenant), com recursos físicos e virtuais sendo dinamicamente alocados e redistribuídos conforme a demanda do cliente. Existe uma sensação de independência de localidade de tal forma que o cliente geralmente não controla ou desconhece exatamente a posição exata dos recursos provisionados, apesar de poder determinar a localidade em um nível mais abstrato (país, estado ou datacenter). Exemplos de recursos incluem armazenamento de dados, processamento, memória e largura de banda de rede. Elasticidade rápida: A capacidade contratada pode ser provisionada e devolvida de forma elástica, em alguns casos até mesmo automaticamente, para rapidamente escalar para mais ou menos conforme a demanda. Para o cliente, a capacidade disponível é virtualmente ilimitada e pode ser ajustada em qualquer quantidade e em qualquer momento. Serviço mensurável: Sistemas em nuvem automaticamente controlam e otimizam a utilização de recursos através do uso de mecanismos de métricas em um nível de abstração apropriado para o tipo de serviço (exemplos incluem armazenamento, processamento, largura de banda de rede e número de contas ativas). A utilização de recursos pode ser monitorada, controlada e registrada, oferecendo transparência tanto para o provedor quando para o consumidor do recurso utilizado. Construindo um Cloud A construção de uma infraestrutura de nuvem deve ser alinhada com objetivos e requisitos claros. Essas demandas variam de acordo com o cenário que se pretende atacar, porém alguns componentes são onipresentes por se fazerem necessários para que a solução ofereça todas as características de um ambiente de nuvem. A Rede Seja qual for a solução ou stack adotado para a construção da nuvem, um componente básico e essencial para a sua construção é a rede. De fato, devido à natureza compartilhada e heterogênea da nuvem, a rede é um dos fatores críticos de sucesso para garantia da estabilidade e segurança dos serviços que serão hospedados na mesma. Esta ainda é uma área que vem se consolidando e ainda não existe de fato um padrão. Os fatores que devem ser considerados para a escolha da solução ou de um fornecedor são: Capacidade de isolar máquinas virtuais de tal forma que uma não possa “enxergar” o tráfego da outra Capacidade de impedir que uma máquina assuma inadvertidamente o endereçamento de outra, independente de camada Capacidade de proteger componentes de roteamento do sistema de colisões de endereçamento propositais ou não feitas pelos usuários da nuvem Construindo um Cloud 6 Capacidade de criar redes privadas isoladas entre máquinas de um mesmo domínio ou cliente Capacidade de criar redes privadas isoladas mantendo o endereçamento da rede privada do cliente (essencial para a criação de nuvens híbridas) Capacidade de limitar o volume de tráfego da máquina virtual Capacidade de contabilizar o volume de dados trafegado para casos em que a bilhetagem seja feita considerando essa métrica Capacidade de oferecer recursos de firewall e demais proteções contra ataques Escalabilidade para atender ao novo paradigma, onde a quantidade de redes lógicas é muito maior Tecnologias relevantes Recentemente uma série de tecnologias vem sendo apresentadas com o objetivo de resolver os desafios da computação em nuvem. Essa lista não é uma compilação completa das tecnologias que vem despontando no mercado, mas pretende esclarecer alguns termos que tem se tornado comum nas discussões sobre o assunto. VXLAN Uma das maneiras mais tradicionais e difundidas de fazer o isolamento de redes é o IEEE 802.1Q VLAN8. Esse padrão define – entre outras coisas – um método para a rotulagem de segmentos de rede com um identificador de 12 bits, permitindo dessa forma a segmentação lógica de uma rede em 4096 blocos isolados. O problema é que em arquiteturas de nuvem multi-tenant esse limite muitas vezes é ultrapassado, fazendo necessária a criação de um novo padrão. Um grupo de fornecedores incluindo Cisco, VMWare, Citrix e Red Hat propuseram então um novo padrão chamado VXLAN (Virtual eXtensible LAN) que utiliza um identificador de segmento de 24 bits, permitindo assim a criação de mais de 16 milhões de segmentos distintos, um valor muito mais adequado para a nova realidade dos ambientes de nuvem. Além disso, o protocolo propõe um encapsulamento IP utilizando UDP, o que permite que a LAN seja estendida em camada 3. OpenFlow O OpenFlow9 vem sendo apresentado como uma evolução para as arquiteturas tradicionais de redes, propondo um modelo que visa atender a necessidade de oferecer a capacidade de programar uma rede de forma análoga ao que se faz com sistemas operacionais de servidores. De grosso modo, em uma arquitetura de rede tradicional as camadas de controle (control plane) e de tráfego (data plane) ficam no mesmo equipamento, a arquitetura OpenFlow 8 9 http://en.wikipedia.org/wiki/IEEE_802.1Q http://www.openflow.org/documents/openflow-wp-latest.pdf Construindo um Cloud 7 permite a separação dessas camadas de tal forma que as tomadas de decisão sobre roteamento, permissões e controles fiquem em um equipamento diferente daquele por onde o tráfego passa, conforme o diagrama seguinte pretende demonstrar. Figura 2 - Diagrama Simplificado do OpenFlow Os Dados Quando tratamos dos dados na nuvem se faz necessário esclarecer de quais tipos de dados estamos falando, já que o para cada um dos problemas existem uma ou mais soluções distintas. O primeiro ponto que deve ser esclarecido é sob qual modelo de serviço estamos oferecendo esses dados. Uma forma de oferecer dados é no conceito de IaaS (Infraestrutura como serviço), em que a grosso modo estamos falando de virtualização da infraestrutura de storage. Nesse modelo, em geral, estamos falando em oferecer um dispositivo de bloco, como um disco ou uma unidade lógica. Outra forma de oferecer dados é no conceito de PaaS (Plataforma como infraestrutura). Nesse modelo o acesso aos dados é garantido por uma API ou SDK, que permite o desenvolvimento ou integração de componentes de software que acessam uma plataforma que oferece capacidades de armazenamento de dados. Dentro desses dois modelos de serviço, podemos caracterizar os dados como: Dados do usuário o Dados dos usuários que devem ser compartilhados entre várias máquinas ou serviços na nuvem o Dados dos usuários que são privados dentro do contexto da máquina ou do serviço e não devem ser compartilhados Dados do provedor de infraestrutura o Backups mantidos para recuperação de desastre o Dados necessários para aprovisionamento dos serviços (imagens, templates) Construindo um Cloud 8 o o Áreas de transferência e retenção para controle do ciclo de vida dos serviços Dados de monitoramento e orquestração da nuvem Cada uma dessas categorias traz desafios que precisam ser mitigados durante a construção do ambiente. Para os dados do usuário, os principais pontos de atenção são: Isolamento dos recursos de dados de tal forma que seja possível oferecer garantias de desempenho e qualidade de serviço para o acesso aos dados Proteção contra acessos não autorizados aos dados do usuário Havendo necessidade, a capacidade de oferecer criptografia dos dados Desempenho constante e estável no acesso aos dados Capacidade de estender os volumes oferecidos Havendo necessidade, a capacidade de compartilhar os dados entre diversas máquinas virtuais ou serviços mediante permissão concedida pelo usuário Tecnologias relevantes De forma análoga ao que observamos em redes, a área de armazenamento de dados tem se desenvolvido para atender ao novo paradigma. Os modelos tradicionais de SAN não se adaptam a todo o tipo de instalação em nuvem e inclusive na grande maioria dos fornecedores de Cloud público esse modelo sequer é utilizado. Storage Area Networks As Storage Area Networks (SAN) são utilizadas frequentemente em nuvens privadas, onde as cargas de trabalho são conhecidas e geralmente previsíveis, e em ambientes onde a responsabilidade pela alta disponibilidade do sistema não está embarcada no software, dependendo, portanto de uma infraestrutura que permita, por exemplo, a movimentação de cargas de trabalho entre diferentes servidores sem parada na aplicação. Como esse tipo de movimentação exige uma área de troca de dados comum entre diversos servidores da nuvem o modelo de SAN se mostra eficiente. Alguns fabricantes disponibilizam inclusive uma integração entre a camada de gerencia da nuvem e os equipamentos de storage, permitindo assim que operações intensivas de acesso aos dados sejam gerenciadas diretamente pelo subsistema de discos, minimizando a carga de gestão do orquestrador. Um exemplo disso é o VAAI10 da VMWare. Em contrapartida, a utilização de uma SAN e a consolidação das máquinas virtuais em poucos ou em um único equipamento pode ser crítica em cenários com milhares de máquinas virtuais ou serviços, onde uma eventual falha ou até mesmo uma manutenção programada pode fazer com que toda ou grande parte da nuvem fiquem indisponíveis. 10 http://www.vmware.com/products/vstorage-apis-for-array-integration/overview.html Construindo um Cloud 9 Outro ponto relevante ao se considerar uma SAN é o custo, em geral mais alto do que soluções menos sofisticadas para o armazenamento de dados. Esse custo se reflete tanto em equipamento quanto na operação do sistema, que demanda profissionais com um maior nível de expertise. Direct-Attach Storage Os sistemas de disco diretamente conectados (DAS) foram por muitos tempos desconsiderados ou menosprezados em meios corporativos onde eram considerados pouco confiáveis ou menos flexíveis do que as Storage Area Networks ou mesmo os sistemas de Network Attached Storage (NAS). Recentemente, porém, o advento de sistemas distribuídos mais sofisticados e também o avanço nas tecnologias de virtualização fizeram com que as empresas passassem a reconsiderar a utilização de subsistemas de disco diretamente conectados nos servidores, sem a necessidade de uma rede para a interconexão e compartilhamento desses dados. O aumento na confiabilidade dos discos e a disponibilidade ubíqua de controladoras RAID também contribuíram para que o DAS perdesse a reputação de baixa disponibilidade. Além disso, as configurações de nuvem pública fazem com que seja interessante a redução da abrangência do impacto em caso de falhas, com uma distribuição e separação dos pontos únicos de falha entre centenas e até mesmo milhares de servidores. Dessa forma, se assume como aceitável a perda temporária de um conjunto reduzido de máquinas ou serviços virtuais, pois as arquiteturas de sistemas utilizadas na camada de aplicação estariam prontas para automaticamente transferir essa carga para outro servidor. Object Storage Outra classe de dispositivos para o armazenamento de dados que tem se tornado bastante popular são os Dispositivos para Armazenamento de Objetos (OSD). Essa categoria de sistemas e equipamentos se diferencia dos sistemas tradicionais ao oferecer o acesso aos dados de forma mais abstrata, com acesso oferecido geralmente por uma API ou SDK, e oferecendo recursos sofisticados como controle de ciclo de vida, replicação, deduplicação, distribuição geográfica do dado e controles de compartilhamento. Uma característica frequentemente encontrada nos sistemas de Armazenamento de Objetos é a utilização de um subsistema de disco de baixo custo, com mecanismos de replica e proteções implantadas via software. A escalabilidade se dá de forma horizontal, ou seja, com a adição de novos servidores no sistema. O projeto OpenStack11 oferece um típico sistema de Armazenamento de Objetos dentro do seu stack. 11 http://openstack.org/software/openstack-storage/ Construindo um Cloud 10 Deduplicação de dados Os sistemas de armazenamento modernos tem oferecido uma tecnologia chamada de deduplicação, que oferece uma potencial economia no consumo líquido de storage através da não duplicação de dados que são idênticos independentes do proprietário. Um exemplo típico são os arquivos do sistema operacional das máquinas virtuais, que em geral são iguais e permanecem inalterados na maioria das máquinas. O racional é que não faz sentido ocupar mais de um “bloco” de storage para armazenar dados que são comuns entre si. Apesar de a tecnologia ser mais eficiente em ambientes com grandes volumes compartilhados, típicos das SAN e dos Object Storages, o mesmo vem sendo aplicado e aproveitado com ganhos significativos mesmo em instalações relativamente pequenas, características dos sistemas de discos diretamente conectados. As vantagens da deduplicação trazem um pênalti em termos de consumo de processamento e memória, e em alguns casos também existe uma perda de desempenho. Um dos sistemas de arquivos responsáveis pela popularização do uso de deduplicação é o ZFS, que oferece essa capacidade nativa desde Outubro de 200912. A Virtualização Atualmente a virtualização é praticamente onipresente no desenvolvimento de soluções de computação em nuvem, sendo em alguns casos confundida com o próprio conceito de nuvem. Uma maneira mais correta de ver a virtualização é entender ela como um grande facilitador, porém é importante compreender que por si só ela não é capaz de entregar todas as vantagens desse novo paradigma. Alguns outros componentes lógicos são fundamentais, como por exemplo, a automação e orquestração do ambiente. Breve história da virtualização A tecnologia de virtualização teve o começo de seu desenvolvimento muito próximo das tecnologias de multitarefa e compartilhamento de tempo. Esses avanços na ciência da computação foram contemporâneos na década de 1960 e tiveram como precursores sistemas derivados do CP-40, um sistema operacional desenvolvido pela IBM para seus primeiros mainframes. Um dos frutos do CP-40 foi CP-67/CMS, que viabilizava o compartilhamento de tempo em Sistemas IBM 360. 12 http://en.wikipedia.org/wiki/ZFS#Deduplication Construindo um Cloud 11 Figura 3 - IBM S/360 Na década de 1980 a Locus Computing Corporation13 apresentou alguns dos primeiros sistemas de virtualização para plataforma 80286, permitindo a execução de aplicativos MSDOS como guests em um sistema Unix System V. No final da década de 90 a VMWare passou a oferecer uma série de sistemas que permitiam a virtualização em máquinas x86 e em 2003 foi lançado o primeiro sistema de virtualização de código aberto, o Xen14. Tipos de Virtualização A virtualização de sistemas é dividida em três categorias: Virtualização Total Simulação completa da camada de hardware, permitindo que o sistema operacional e os aplicativos sejam utilizados com pouca ou nenhuma modificação. Virtualização Parcial Nem todos os componentes da máquina hospedeira são simulados no ambiente virtualizado, fazendo com que sejam necessárias alterações para a migração de algumas aplicações para esse ambiente. Paravirtualização Não existe uma simulação da camada de hardware, mas sim uma divisão em domínios ou partições lógicas com recursos e capacidade isoladas. Em geral exige que os aplicativos e sistemas sejam desenvolvidos especificamente para o ambiente onde serão 13 http://en.wikipedia.org/wiki/Locus_Computing_Corporation http://www.brianmadden.com/blogs/gabeknuth/archive/2007/08/16/a-brief-history-of-xen-andxensource.aspx 14 Construindo um Cloud 12 executados. Tecnologias Relevantes Como peça fundamental de diversas implantações de nuvem, a camada de virtualização vem evoluindo e oferecendo recursos cada vez mais avançados. Entre esses recursos alguns são extremamente relevantes para a definição de uma arquitetura de nuvem. Isolamento de recursos Mesmo em sistemas que oferecem virtualização total, muitas vezes não existe um isolamento de recursos que garanta aos sistemas uma parcela fixa e predeterminada dos recursos da máquina física. Isso pode fazer com que eventualmente um dos usuários do sistema consuma recursos em excesso, causando impacto no desempenho das outras máquinas hospedadas no mesmo equipamento. Esse comportamento é muitas vezes chamado de neighbouring effect, que em tradução livre expressa o impacto das máquinas “vizinhas” no comportamento de outras máquinas. Tais eventos são especialmente críticos em ambientes de nuvem pública, onde existe pouco ou nenhum controle sobre a utilização de recursos por parte de usuários que compartilham o mesmo equipamento. Atualmente o isolamento de memória e processamento já é algo resolvido na maioria dos hypervisors, porém o controle de acesso aos subsistemas de disco ainda é deficitário na maioria dos ambientes de nuvem compartilhado, principalmente quando o subsistema de discos está conectado através de redes não especializadas, como por exemplo, em NAS ou até mesmo em iSCSI. Frequentemente o que se encontra em ambientes de nuvem é a distribuição de recursos de acesso aos dados por fair share, ou seja, se entende que os recursos serão distribuídos de forma homogênea entre as máquinas virtuais de acordo com a capacidade de cada uma delas de gerar demanda, sem que haja garantia nenhuma da capacidade entregue. O Cloud do UOL Host procura resolver essa questão através de mecanismos de controle que garantem níveis de desempenho alinhados com a capacidade do plano contratado. Overcommit de memória O overcommit é a capacidade do hypervisor de entregar para as máquinas virtuais hospedadas uma quantidade de memória que em sua totalidade excede a própria capacidade da máquina física. A motivação para o uso dessa tecnologia é a capacidade de aumentar a concentração de máquinas virtuais em um mesmo servidor, permitindo assim um melhor aproveitamento do equipamento. Isso é feito através de um conjunto de tecnologias que pode ser transparentes ou não para os sistemas que rodam nas máquinas virtuais: Construindo um Cloud 13 Transparent Page Sharing: O TPS é similar ao conceito de deduplicação de dados, porém se aplica na memória volátil ao invés dos dados em disco. Como algumas páginas de memória de máquinas virtuais distintas podem armazenar conteúdo idêntico, o hypervisor cria uma tabela de referência para essa página de memória indicando que duas ou mais máquinas virtuais tem o mesmo dado e mantém apenas uma página alocada na memória real que é compartilhada entre as máquinas virtuais. O TPS não depende de nenhuma modificação ou driver instalado nas máquinas virtuais, ele atua de forma transparente. Ballooning: O ballooning é uma técnica que permite que o sistema operacional que roda na máquina virtual notifique ao hypervisor a sua demanda real de memória, possibilitando que a memória física seja alocada dinamicamente de acordo com as necessidades do ambiente. Essa técnica depende de um driver específico instalado no sistema operacional da máquina virtual e consequentemente depende de um suporte específico para que possa ser utilizado. Swapping: Da mesma forma que um sistema operacional pode usar uma área de swap para armazenar em disco páginas de memória não utilizadas, o hypervisor pode aplicar a mesma técnica para fazer com que áreas de memória com utilização pouco frequente sejam retiradas da memória física e transportadas para uma área de swap. Essa técnica também é transparente para o sistema operacional da máquina virtualizada, porém pode trazer um pênalti de desempenho quando sua utilização for muito frequente ou em casos em que o overcommit ultrapassar uma taxa de concentração razoável. Thin Provisioning O thin provisioning consiste em um recurso frequentemente oferecido tanto pelos subsistemas de disco quanto pelos hypervisors, e em resumo é a entrega de um volume de dados lógico de um tamanho maior do que o que foi efetivamente alocado no disco físico. Isso faz sentido já que em muitos casos o usuário não utiliza de fato a capacidade total de disco que foi oferecida no plano contratado, porém pode ser um problema critico em ambientes de nuvem pública onde o comportamento do conjunto de usuários é imprevisível e muitas vezes o aumento da capacidade de disco no servidor não é possível. Snapshot Diversos hypervisors oferecem a capacidade de gerar um snapshot (fotografia) da máquina virtual. Essa fotografia persiste o estado atual da máquina virtual, de sua memória volátil e de seus dispositivos de armazenamento de tal forma que é possível recuperar essa condição no futuro. Esse recurso difere de um procedimento tradicional de backup já que na maioria dos casos não é possível fazer uma recuperação pontual de um arquivo ou diretório, sendo necessária a recuperação completa do ambiente para que se extraia um dado específico. Construindo um Cloud 14 Uma utilização típica do recurso de snapshot é para a realização de backups de emergência antes de uma manutenção no ambiente ou alterações no sistema operacional, como a instalação de uma atualização de segurança por exemplo. Orquestração e Gerência Provavelmente o campo mais indefinido dentro do universo da computação em nuvem são as camadas de orquestração e gerência. Uma série de soluções e iniciativas vem sendo apresentadas, porém a maioria delas acaba sendo enviesada para atender um Hypervisor ou um ambiente específico, tornando a solução especializada em, por exemplo, nuvens públicas ou privadas. Muitas vezes é necessário construir a camada de orquestração e gerência do zero, principalmente em ambientes públicos onde frequentemente se encontra uma grande diversidade de componentes e fornecedores de soluções e não existe um orquestrador capaz de contemplar todas as tecnologias envolvidas na construção do ambiente. Entre as funções normalmente encontradas em um orquestrador para ambientes de computação em nuvem, identificamos frequentemente as seguintes características: Controle e gestão do aprovisionamento de máquinas virtuais dentro dos clusters de servidores, incluindo a distribuição para melhor aproveitamento do hardware instalado. Controle e gestão da instalação do sistema operacional e pacotes básicos de software nas máquinas virtuais. API para comunicação da camada de orquestração com as interfaces de controle do sistema para o usuário final API para comunicação da camada de orquestração com ferramentas de gestão do ambiente de nuvem Agendamento e controle de operações para manutenção do ambiente Integração com sistemas heterogêneos e hypervisors distintas Conclusão e Considerações Por mais que hoje existam diversas nuvens “prontas”, qualquer instalação um pouco mais sofisticada provavelmente exigirá a integração de componentes não previstos na concepção original do ambiente. Além disso, compreender os sistemas e tecnologias envolvidos na construção de um ambiente de nuvem pode ajudar na escolha da solução correta e também facilitar o entendimento de comportamentos e situações decorrentes do uso do ambiente em nuvem. Como referência, o diagrama final de um ambiente de nuvem, com todos os sistemas devidamente acoplados seria o seguinte: Construindo um Cloud 15 Figura 4 - Diagrama de uma nuvem Vale frisar que diferentes problemas exigem diferentes soluções e que devido ao ritmo de evolução da tecnologia envolvida com a computação em nuvem é necessária uma atualização constante. O UOL Host mantém seu compromisso de se manter na vanguarda da tecnologia ao oferecer artigos e informações relevantes para o mercado e para os seus clientes. Esse mesmo compromisso é aplicado em seus produtos e serviços. Construindo um Cloud 16