UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR CURSO DE CIÊNCIA DA COMPUTAÇÃO ENSAIO DE INFRAESTRUTURA DE COMPUTAÇÃO EM NUVEM PARA HOSPEDAGEM DE SERVIÇOS MANTIDOS PELO LABORATÓRIO DE REDES DE COMPUTADORES DA UNIVALI – CAMPUS ITAJAÍ por Samuel Chaves Euzébio Itajaí (SC), Junho de 2014 UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR CURSO DE CIÊNCIA DA COMPUTAÇÃO ENSAIO DE INFRAESTRUTURA DE COMPUTAÇÃO EM NUVEM PARA HOSPEDAGEM DE SERVIÇOS MANTIDOS PELO LABORATÓRIO DE REDES DE COMPUTADORES DA UNIVALI – CAMPUS ITAJAÍ Área de Redes de Computadores por Samuel Chaves Euzébio Relatório apresentado à Banca Examinadora do Trabalho Técnico-científico de Conclusão do Curso de Ciência da Computação para análise e aprovação. Orientador: Fabricio Bortoluzzi, M. Sc. Itajaí (SC), Junho de 2014. RESUMO EUZÉBIO, Samuel Chaves. Ensaio de Infraestrutura de Computação em Nuvem para hospedagem de serviços mantidos pelo Laboratório de Redes de Computadores da UNIVALI – Campus Itajaí. Itajaí, 2012. No54. Trabalho Técnico-científico de Conclusão de Curso (Graduação em Ciência da Computação) – Centro de Ciências Tecnológicas da Terra e do Mar, Universidade do Vale do Itajaí, Itajaí, 2012. O Laboratório de Redes de Computadores da UNIVALI – Campus Itajaí hospeda e gerencia servidores físicos para diversas finalidades de pesquisa. Cada computador é preparado individualmente e as aplicações hospedadas neles estão confinadas nas limitações do hardware. Este TTC é sobre a criação de uma infraestrutura de nuvem para o Laboratório de Redes de Computadores da UNIVALI – Campus Itajaí, de modo que as atuais e futuras aplicações sejam hospedadas em um ambiente adequadamente escalável. Palavras-chave: Computação em nuvem. Nuvem Privada. Infraestrutura como Serviço (IaaS). ABSTRACT Currently the Laboratory of Computer Networks UNIVALI - Itajaí College hosts and manages physical servers for various research purposes. Each computer is prepared individually and applications hosted on them are confined within its hardware limitations. This paper is about create a cloud infrastructure for the Laboratory of Computer Networks UNIVALI - College Itajaí, so that current and future applications to be hosted in a scalable environment properly. Keywords: Cloud Computing. Private cloud. Infrastructure-as-a-Service (IaaS). LISTA DE FIGURAS Figura 1 Ambiente Físico e ambiente virtualizado................................................................... 20 Figura 2 Virtualização Completa. ............................................................................................. 21 Figura 3 Virtualização de Sistema Operacional. ...................................................................... 22 Figura 4 Virtualização KVM. ................................................................................................... 24 Figura 5 Virtualização VMware ESX Server. .......................................................................... 26 Figura 6 Virtualização Xen....................................................................................................... 27 Figura 7 Virtualização KVM. ................................................................................................... 28 Figura 8 Visão do usuário sobre o cluster. ............................................................................... 30 Figura 9 Arquitetura computação em grid. .............................................................................. 34 Figura 10 Pesquisa Cisco .......................................................................................................... 36 Figura 11 Arquitetura computação em nuvem. ........................................................................ 39 Figura 12 Organização da Infraestrutura em nuvem proposta. ................................................ 52 Figura 13 Tela de Login da Nuvem Openstack. ....................................................................... 56 Figura 14 Administração dos Projetos de Nuvem. ................................................................... 57 Figura 15 Membros Projetos Nuvem. ...................................................................................... 57 Figura 16 Templates de Imagens de Sistemas Operacionais. ................................................... 58 Figura 17 Criação de Volumes. ................................................................................................ 61 Figura 18 Volumes Disponíveis. .............................................................................................. 61 Figura 19 Template Flavors (Sabores) Disponíveis. ................................................................ 62 Figura 20 Topologia da rede da nuvem implementada. ........................................................... 65 Figura 21 Redes disponíveis na nuvem. ................................................................................... 66 Figura 22 Acesso à nuvem via smartphone. ............................................................................. 67 Figura 23Visão Global dos recursos computacionais da nuvem. ............................................. 68 LISTA DE ABREVIATURAS E SIGLAS API EC2 IAAS KVM LBaaS NIST PV QOS SAAS TTC UNIVALI VM VMM Application programming interface Elastic Compute Cloud(Amazon) Infraestrutura como serviço Kernel Virtual Machine (Load Balance-as-a-Service) Balanceador de carga como serviço. National Institute of Standards and Technology, Instituto Nacional dos Estados Unidos de Padrões e Tecnologias. Paravirtualização Quality of Service Software como serviço Trabalho Técnico-científico de Conclusão de Curso Universidade do Vale do Itajaí Virtual Machine Virtual Machine Monitor SUMÁRIO 1 INTRODUÇÃO ............................................................................................................... 15 1.1 PROBLEMATIZAÇÃO ............................................................................. 15 1.1.1 Formulação do Problema ....................................................................... 15 1.1.2 Solução Proposta ..................................................................................... 16 1.2 OBJETIVOS ................................................................................................ 16 1.2.1 Objetivo Geral ......................................................................................... 16 1.2.2 Objetivos Específicos .............................................................................. 17 1.3 METODOLOGIA........................................................................................ 17 1.4 ESTRUTURA DO TRABALHO ............................................................... 18 2 FUNDAMENTAÇÃO TEÓRICA ...................................................................................... 19 2.1 VIRTUALIZAÇÃO ..................................................................................... 19 2.1.1 Virtualização Completa .......................................................................... 21 2.1.2 Virtualização de Sistema Operacional .................................................. 22 2.1.3 Paravirtualização .................................................................................... 23 2.1.4 Características e Vantagens da Virtualização ..................................... 25 2.1.5 VMware ESX Server .............................................................................. 26 2.1.6 Xen ............................................................................................................ 27 2.1.7 KVM ......................................................................................................... 28 2.2 CLUSTER ..................................................................................................... 29 2.2.1 Características e vantagens de um cluster............................................ 30 2.3 COMPUTAÇÃO EM GRID ....................................................................... 31 2.3.1 Características da computação em grid ................................................ 32 2.3.2 Tipos de computação em grid ................................................................ 33 2.3.3 Arquitetura da computação em grid ..................................................... 34 2.4 COMPUTAÇÃO EM NUVEM .................................................................. 35 2.4.1 Definição .................................................................................................. 36 2.4.2 Serviço Sob demanda ou Auto-Serviço (On-demand or self–service). 37 2.4.3 Acesso amplo à rede (Broad network Access) ....................................... 37 2.4.4 Agrupamento de Recursos (Resource pooling) .................................... 38 2.4.5 Elasticidade rápida ou Escalabilidade (Rapid elasticity) ..................... 38 2.4.6 Mensurabilidade (Measured Service) .................................................... 39 2.4.7 Software-as-a-Service (SaaS) .................................................................. 40 2.4.8 Platform-as-a-Service (PaaS) .................................................................. 43 2.4.9 Infrastructure-as-a-Service (IaaS) .......................................................... 44 2.4.10 Private Cloud ........................................................................................... 46 2.4.11 Community Cloud ................................................................................... 47 2.4.12 Public Cloud ............................................................................................ 47 2.4.13 Hybrid Cloud ........................................................................................... 48 3 DESENVOLVIMENTO ...................................................................................................... 49 3.1 SERVIÇO SOB DEMANDA OU AUTO-SERVIÇO NA INFRAESTRUTURA DE NUVEM APLICADA .......................................... 55 3.2 ACESSO AMPLO À REDE NA INFRAESTRUTURA DE NUVEM APLICADA ........................................................................................................ 66 3.3 AGRUPAMENTO DE RECURSOS NA INFRAESTRUTURA DE NUVEM APLICADA ........................................................................................ 67 3.4 ELASTICIDADE RÁPIDA OU ESCALABILIDADE NA INFRAESTRUTURA DE NUVEM APLICADA .......................................... 68 3.5 MENSURABILIDADE NA INFRAESTRUTURA DE NUVEM APLICADA ........................................................................................................ 71 4 CONCLUSÕES ............................................................................................................... 75 15 1 INTRODUÇÃO Atualmente o Laboratório de Redes de Computadores da UNIVALI – Campus Itajaí hospeda e gerencia servidores físicos para diversas finalidades de pesquisa. Cada computador é preparado individualmente e as aplicações hospedadas neles estão confinadas nas limitações do hardware fornecido pelo cliente interno proprietário do servidor. O desprendimento das características de hardware de cada servidor seria mais vantajoso para acomodar cada sistema dentro de suas reais necessidades, independentemente do hardware hospedeiro. Ao invés de individualismo entre os servidores, tanto de disposições de hardware quanto processamento individual específico, a nuvem pode fornecer um hardware abstrato, sobre medida para cada necessidade de hospedagem de sistemas. Uma vez que este desejo por manutenabilidade e escalabilidade é mais bem alcançado por meio do conceito de nuvem este TTC analisa a criação de uma infraestrutura de nuvem para o Laboratório de Redes de Computadores da UNIVALI – Campus Itajaí, de modo que as atuais e futuras aplicações sejam hospedadas em um ambiente adequadamente escalável. Espera-se maior facilidade de manutenção uma vez que não se está mais preso a características de hardware individualizado e nem software ou sistema operacional e com maior capacidade e aproveitamento do pequeno poder computacional disponível. 1.1 PROBLEMATIZAÇÃO 1.1.1 Formulação do Problema O Laboratório de Redes de Computadores da UNIVALI – Campus Itajaí possui hoje uma infraestrutura que foi projetada sem a preocupação de ser um ambiente escalável. O gerenciamento da infraestrutura como um todo, é descentralizado, demandando maior tempo para alocação dos recursos computacionais. A infraestrutura atual está atrelada a servidores físicos. Quando necessárias modificações ou configurações novas tem-se pouca flexibilidade, pois cada computador é preparado individualmente, e suas aplicações hospedadas estão dependentes da configuração de sistemas operacionais com o hardware físico. 16 1.1.2 Solução Proposta A proposta deste TTC é a criação de uma infraestrutura de nuvem para o Laboratório de Redes de Computadores da UNIVALI – Campus Itajaí, de modo que as atuais e futuras aplicações sejam hospedadas em um ambiente adequadamente escalável. Formando um ambiente mais flexível, uma vez que os servidores não estariam mais presos a características de hardware individualizado e nem software ou sistema operacional. Com o desprendimento das características de hardware, fica mais viável acomodar cada sistema dentro de suas reais necessidades, independentemente do hardware hospedeiro. Ao invés de individualismo entre os servidores, tanto de disposições de hardware quanto processamento individual específico, a nuvem fornece um hardware abstrato, sob medida para a necessidade de cada sistema de pesquisa. Espera-se que a manutenção dos servidores fique mais gerenciável e flexível. Haverá a possibilidade de instanciação de novas infraestruturas virtualizadas em tempo imediato e sob demanda sempre que alguma oportunidade de pesquisa surgir, sem a necessidade de algum tipo de espera relacionada com a compra ou preparo de novos servidores como etapa de prérequisito durante o desenvolvimento destes projetos. 1.2 OBJETIVOS Este trabalho está dividido em um objetivo geral e cinco objetivos específicos. 1.2.1 Objetivo Geral O objetivo deste TTC é implantar o modelo de nuvem privada na infraestrutura de hospedagem de servidores do Laboratório de Redes de Computadores da UNIVALI – Campus Itajaí. 17 1.2.2 Objetivos Específicos 1. Revisar a bibliografia em busca das metodologias disponíveis para a criação de infraestruturas de computação em nuvem. 2. Projetar uma infraestrutura de nuvem adequada para as necessidades de hospedagem do Laboratório de Redes de Computadores da UNIVALI – Campus Itajaí. 3. Implantar o modelo de nuvem projetado. 4. Aferir a aderência da nuvem implementada em comparação as propriedades de autosserviço, acesso amplo à rede, agrupamento de recursos, elasticidade e mensuração dos recursos alocados. Estas propriedades são descritas na documentação de Definição de Computação em Nuvem do NIST. 5. Documentar e divulgar este TTC. 1.3 Metodologia Para que os objetivos deste projeto fossem alcançados, Decidiu-se pela realização de um levantamento bibliográfico sobre os conceitos de virtualização, que serviu para identificar a base de uma infraestrutura de computação em nuvem. Também se fez necessário um estudo sobre cluster e computação em grid, que estão entre as tecnologias básicas para se entender o comportamento de um ambiente em computação em nuvem. Um estudo sobre o cenário atual da computação em nuvem, suas definições juntamente alinhados aos modelos de serviço, evidenciou a necessidade de atualização para um novo modelo de infraestrutura. O estudo realizado sobre como adequar os recursos computacionais em formandos serviços, alinhados juntamente com os modelos de infraestrutura de nuvem, teve papel fundamental para que fosse desenvolvido o projeto da infraestrutura de nuvem. 18 1.4 Estrutura do trabalho Esta pesquisa foi dividida em três partes: Introdução, Fundamentação Teórica e Desenvolvimento. Na Introdução foram abordados brevemente os conceitos de computação em nuvem, para elucidação das características vantajosas em manter uma infraestrutura de computação em nuvem. A Fundamentação Teórica brevemente conceitua três tecnologias, virtualização, cluster, computação em grid. Essas são tecnologias bases para computação em nuvem. Em seguida, são expostas características essenciais para compor uma nuvem e seus modelos de serviço. Os tipos de ambientes de computação em nuvem, juntamente amostrados com algumas das ferramentas existentes para implementar um ambiente de computação em nuvem. O capitulo final, refere-se ao desenvolvimento, onde é demonstrada a plataforma de nuvem escolhida levando em consideração os conceitos abordados e revisados nos capítulos anteriores. É feito o relato sobre a funcionalidade da virtualização, que fornece e compõe a base para infraestrutura de nuvem. Também é abordada a disposição da nuvem, a organização e o modelo de serviços e quais serviços foram utilizados para compor a nuvem, uma vez que a tecnologia da plataforma de nuvem escolhida é disposta em módulos. Estes módulos são configuráveis separadamente para que o usuário final possa servir-se de recursos computacionais sob demanda. e ainda são responsa abstraem o detalhamento da configuração da nuvem . A partir do ambiente de nuvem implementados foi feita sua aferição de aderência, comparando a infraestrutura de nuvem com as propriedades de autosserviço, acesso amplo à rede, agrupamento de recursos, elasticidade e mensuração dos recursos alocados, definidos na documentação The NIST Definition of Cloud Computing (NIST Special Publication 800-145). 19 2 FUNDAMENTAÇÃO TEÓRICA 2.1 Virtualização A virtualização tornou-se comum a área de T.I e imperceptível aos usuários finais ao longo dos anos (DEDLEY, H., 2009). Com o avanço das estruturas de hardwares, servidores, com mais capacidade de processamento, armazenamento, surgiu a necessidade de uma melhor administração para o melhor aproveitamento. A tecnologia de virtualização avançou trazendo maiores recursos e benefícios para área de T.I, capacitando melhor administrar e distribuir os recursos avançados da computação. Ela permite que em um mesmo computador físico, possa tornar-se dinâmico virtualmente hospedando outros computadores virtuais. A virtualização consiste em uma camada virtual, que faz a abstração entre o hardware e sistemas operacionais heterogêneos, para que os sistemas operacionais possam ser executados isoladamente, em uma mesma máquina física. Dado um determinado conjunto de hardwares cria-se uma camada de software, a qual é chamada de hipervisor, ou também conhecido como Virtual Machine Monitor (VMM), que possibilita gerenciar e criar máquinas virtuais (VM). Cada VM, criada pode ter seu sistema operacional independente, alocando dinamicamente recursos, como memória, processador e espaço em disco. Esta VM fica restrita somente pela capacidade pelo hardware abstraído pelo hipervisor (SINGHT, Amit, 2004). 20 Figura 1 Ambiente Físico e ambiente virtualizado. Fonte: THOLETI, Bhanu P, 2011. Conforme demonstrado na Figura 1, o cenário (a), não está virtualizado, portanto para hospedar dois sistemas operacionais distintos, são necessários dois computadores distintos. O cenário (b) demonstra a aplicação da virtualização, que torna possível a aplicação de dois sistemas operacionais distintos em um mesmo computador (THOLETI, Bhanu P, 2011). Há diversas formas de virtualização, entre elas: Virtualização completa; Virtualização de Sistema Operacional; Paravirtualização. 21 2.1.1 Virtualização Completa Segundo King, Samuel T. et al 2003, a virtualização completa ocorre quando o hipervisor é implementado diretamente sobre o hardware. A partir deste, obtém-se hardware virtualizado para um ou mais sistemas operacionais que irão ser executados. A separação dos sistemas operacionais heterogêneos acontece através da criação de máquinas virtuais sobre este hipervisor. O principal benefício da virtualização completa é que o sistema operacional da máquina virtualizada não sofre qualquer tipo de alteração. Em compensação, o sistema virtualizado executa mais lentamente e hipervisor precisa implementar alternativas para que as operações privilegiadas possam ser executadas em processadores que não suportem a virtualização nativamente. Além destas alternativas, cabe ao hipervisor realizar a tradução, por exemplo, do endereçamento de memória virtual para memória do hardware físico (THOLETI, Bhanu P, 2011). Figura 2 Virtualização Completa. Fonte:THOLETI, Bhanu P, 2011. Conforme ilustrado na Figura 2, a primeira camada de baixo para cima é a camada de hardware. Esta camada fornece os recursos computacionais como, processador, memória e espaço em disco, que vão ser virtualizados pela camada do hipervisor. A camada do hipervisor, o hospedeiro, vai administrar e alocar os recursos entre as máquinas virtuais 22 hospedeiras. O que torna possível que cada máquina virtual (VM) seja capaz de executar individualmente seu sistema operacional e aplicações específicas. 2.1.2 Virtualização de Sistema Operacional Semelhante a virtualização completa, porem com o diferencial de que o hipervisor ser aplicado sobre um sistema operacional que já consolidou os recursos de hardware. (THOLETI, Bhanu P, 2011). Figura 3 Virtualização de Sistema Operacional. Fonte:THOLETI, Bhanu P, 2011. Conforme demonstrado na Figura 3, semelhante ao modelo anterior, a camada de hardware fornece os recursos computacionais que serão consolidados pela camada do Sistema Operacional base. A camada do hipervisor, o hospedeiro, vai administrar e alocar os recursos disponibilizados pelo sistema operacional base, entre as máquinas virtuais hospedeiras. O que torna possível que cada máquina virtual hospede esteja apta a executar individualmente seu sistema operacional e aplicações especificas. 23 2.1.3 Paravirtualização Paravirtualização (PV) é uma técnica de virtualização que apresenta uma interface de software para as máquinas virtuais. É semelhante ao primeiro modelo, de virtualização completa, porém na paravirtualização, o sistema a ser virtualizado (sistema convidado) sofre modificações para que a interação com hipervisor seja mais eficiente (THOLETI, Bhanu P, 2011). Esta técnica foi proposta a fim de melhorar o tempo que o sistema operacional convidado gasta na execução de operações que são mais difíceis de executar em um ambiente virtual em relação a um ambiente não virtualizado (THOLETI, Bhanu P, 2011). Embora exija que o sistema a ser virtualizado precise ser modificado, é está alteração que permite que o sistema convidado consiga acessar recursos do hardware diretamente, evitando desgaste da tradução que ocorre, por exemplo, no modelo de virtualização completa. Porem está alteração diminui a portabilidade de todo sistema virtualizado. O acesso é monitorado pelo hipervisor, que fornece ao sistema convidado todos os “limites” do sistema, tais como endereços de memória que podem ser utilizados (LAUREANO, Mauro, 2006). A paravirtualização reduz a complexidade do desenvolvimento das máquinas virtuais, já que, historicamente, os processadores não suportam a virtualização nativa. O desempenho obtido é a principal razão para utilizar a paravirtualização, o que compensa as modificações que serão implementadas nos sistemas convidados (LAUREANO, Mauro, 2006). Arquitetonicamente, a PV funciona através da abertura de canais adicionais de comunicação entre o hipervisor e o sistema operacional das máquinas virtuais hospedes (COELHO, Fabio et al, 2008). 24 Figura 4 Virtualização KVM. Fonte:COELHO Fabio et al, 2008. Conforme demonstrado na Figura 4, é importante salientar que os domínios são as máquinas virtuais criadas a partir do hipervisor. Estas podem ser de dois tipos, privilegiadas (domínio 0) e não privilegiadas (domínio U). O hipervisor é o responsável por controlar os recursos de comunicação, de memória e de processamento das máquinas virtuais, mas não possui os drivers para manipular os dispositivos diretamente (COELHO, Fabio et al, 2008). Quando a máquina virtual hospedada é iniciada, esta pertencente ao domínio U, uma máquina virtual do domínio 0, é criada. O que está presente no domínio 0, acessa uma interface de controle. As máquinas virtuais dos domínios U só podem ser criadas, iniciadas e desligadas através do domínio 0. Na máquina virtual do domínio 0 é executado um sistema operacional com núcleo modificado, que pode acessar os recursos da máquina física, ou seja privilégios de acesso. Permite também a comunicação com as máquinas virtuais do domínio U (COELHO, Fabio et al, 2008). O sistema operacional do domínio 0 tem que ser modificado para possuir os drivers de dispositivo da máquina física(hardware) e que tratam, por exemplo,das requisições de acessos à rede, espaço de disco, que são realizadas pelas máquinas virtuais do domínio U (COELHO, Fabio et al, 2008). 25 2.1.4 Características e Vantagens da Virtualização A virtualização é formalizada de acordo com as seguintes características: (RUEST, N., RUEST, D., 2009) e (SINGHT, Amit, 2004). Diminuir a quantidade de servidores físicos, ou seja, ter um servidor físico com uma boa estrutura de hardware. A partir deste, utilizar a virtualização para melhor aproveitar o uso do hardware, através da criação de máquinas virtuais. Isso reduz principalmente custos de energia com refrigeração e administração da infraestrutura. A capacidade de heterogeneidade de sistemas operacionais em um mesmo servidor, não sendo mais necessária a aquisição de um novo computador físico para executar diferentes sistemas operacionais. A separação dos sistemas operacionais heterogêneos ocorre criando máquinas virtuais para cada um deles. Melhora na manutenção da infraestrutura, proporcionando maior mobilidade e migração, já que pode ser feito via software, sem interferência de hardware e sem preocupação de configuração no novo hardware. Outro atributo ligado a esta característica é a viabilidade do balanceamento de carga, onde é possível mover uma máquina virtual que está em um hardware físico sobrecarregado para um novo ocioso. Essa capacidade é conhecida como live migration. Isso repercute também em backup e restauração com maior facilidade e gerenciamento. Como cada máquina virtual é uma entidade independente das demais, a administração das diversas instancias é simplificada e centralizada. Compatibilidade do software: A máquina virtual fornece uma abstração compatível, de modo que todo o software escrito para ela funcione. Por exemplo, em uma máquina virtual com um sistema operacional de alto nível funcionarão os programas escritos na linguagem de alto nível. A abstração da máquina virtual frequentemente pode mascarar diferenças nas camadas do hardware e do software abaixo da máquina virtual (LAUREANO, Mauro, 2006). Inspeção, o hipervisor tem acesso e controle sobre todas as informações do estado da máquina virtual, como estado da CPU, conteúdo de memória, eventos entre outros. (LAUREANO, Mauro, 2006) A virtualização fornece benefícios exclusivos para construir arquiteturas dinamicamente escaláveis. A nova natureza dinâmica da virtualização e as novas capacidades que ela fornece, são necessários novos esquemas de gerenciamento, em um nível superior, 26 fornecendo uma orquestração geral do ambiente virtual, em outras palavras, principio de um ambiente de computação em nuvem. Hypervisors possuem várias implementações com diferentes características e formas de virtualização, três deles são (THOLETI, Bhanu P, 2011): VMware ESX Server; Xen; KVM. 2.1.5 VMware ESX Server O VMware ESX Server adota a primeira forma de virtualização conhecida como completa, uma plataforma corporativa. A arquitetura dele é demonstrada conforme Figura 5. Figura 5 Virtualização VMware ESX Server. Fonte: THOLETI, Bhanu P, 2011. Conforme Figura 5, a primeira camada na parte inferior, que representa o hardware, os recursos computacionais que podem ser virtualizados. Em seguida na camada superior tem-se a camada do hipervisor. Fazendo uma das conexões com a camada das máquinas virtuais implementadas com o hipervisor ESX, existe o serviço de console que controla a instalação, 27 configuração, administração, solução de problemas e manutenção do ESX Server. O console de serviço reside na sua própria máquina virtual (THOLETI, Bhanu P, 2011). 2.1.6 Xen O Xen, outro modelo de hipervisor que segue a forma de virtualização completa e também em algumas de suas distribuições, segue a forma de paravirtualização. Xen é uma ferramenta de código aberto e está licenciado sob a GNU General Public License (GPL2). A arquitetura do Xen é moldada conforme Figura 6. Figura 6 Virtualização Xen. Fonte: THOLETI, Bhanu P, 2011. Conforme demonstrado na Figura 6, a primeira camada base refere-se aos recursos computacionais, que são extraídos do hardware. Em seguida vem a camada do hipervisor Xen, que abstrai e administra os recursos, servindo como base para as máquinas virtuais. A fim de continuar servindo suporte a paravirtualização, mas agora oferecer também virtualização completa, o Xen dividiu os domínios U entre para-virtualizados (domínios UPV) e virtualizados (domínios U-HVM). Os domínios U-PV sabem que não tem acesso direto ao hardware e por isso precisam de drivers específicos para acesso à rede e ao disco (COELHO, Fabio et al, 2008). 28 Os domínios U-HVM (HVM, hardwarer virtual machine), por não serem modificados, iniciam tentando executar a BIOS. O Xen virtual firmware é um componente que simula uma BIOS com todos os procedimentos normais de um boot. Depois, um Qemu (Emulador de Processador) associado a uma U-HVM emula o hardware para que a máquina virtual possa usar o disco e a rede (COELHO, Fabio et al, 2008). 2.1.7 KVM O Kernel virtual machine (KVM), utiliza o modelo de drivers paravirtualizados. Na Figura 7 é demonstrada a arquitetura KVM. Figura 7 Virtualização KVM. Fonte:THOLETI, Bhanu P, 2011. Conforme demonstrado na Figura 7, a primeira a camada é a de hardware base, em seguida na camada superior encontra-se o hipervisor KVM. Na arquitetura KVM a máquina virtual é implementada como um sistema operacional Linux com seu escalonamento padrão. Isso permite se beneficiar de todas as funcionalidades do kernel do Linux, que também serve para manter a conexão com as demais máquinas virtuais (THOLETI, Bhanu P, 2011). 29 O modelo KVM herda recursos de gerenciamento de memória do Linux, como por exemplo, suporte a NUMA (Non-Uniform Memory Access, memória para multiprocessadores) permitindo que as máquinas virtuais possam acessar eficientemente grandes quantidades de memória (THOLETI, Bhanu P, 2011). Compartilhamento de página de memória é suportado através de um recurso chamado Kernel SamePage Merging (KSM). O KSM analisa a disposição de memória nas máquinas virtuais classificando-as por páginas de memória idênticas. Quando encontrada a igualdade, o KSM agrupa o endereçamento em uma única página, compartilhada entre as máquinas virtuais. Possibilitando armazenar apenas uma única cópia da pagina memória. Se um cliente tenta mudar esta página compartilhada, será dada a sua própria cópia privada. (THOLETI, Bhanu P, 2011) A abordagem que a KVM tem é a de tornar um kernel Linux um hipervisor, simplesmente carregando um módulo do kernel. Este módulo exporta um dispositivo chamado /dev/kvm. Com este dispositivo, uma VM tem seu próprio espaço de endereço separado do espaço do kernel ou de qualquer outra VM em execução. Dispositivos na árvore (/dev) são comuns a todos os processos de espaço do usuário, porém o dispositivo KVM é diferente pelo fato de que cada processo que o utiliza, acessa um mapa diferente (para oferecer suporte ao isolamento das VMs). Com o kernel atuando como um hipervisor é possível então iniciar outros sistemas operacionais, como outro kernel Linux ou Windows (TIM JONES, M., 2007). 2.2 Cluster Cluster surge como uma tecnologia decorrente a necessidade de alto processamento de dados para diversas áreas do ramo cientifico, pesquisas dentre tantas outras. Um cluster é o trabalho mutuo entre dois, ou mais computadores interconectados (nós escravos) via rede, resultando para o usuário como se fosse um único computador, que atendem suas requisições. Clusters são formados pelo nó controlador, onde seu sistema operacional é replicado aos nós escravos formando assim conceitualmente um único computador com sistema operacional homogêneo e expansível (PITANGA, Marcos, 2003). 30 Figura 8 Visão do usuário sobre o cluster. Fonte: O Autor(2012). A Figura 8 demonstra a visão do usuário final sobre o a tecnologia de cluster. O usuário acessa um único computador que abstrai os demais nós do cluster. Segundo PITANGA, Marcos (2003), pesquisadores, organizações e empresas estão utilizando os clusters porque necessitam incrementar a sua escalabilidade, gerenciamento de recursos, disponibilidade ou processamento a nível supercomputacional a um preço disponível. 2.2.1 Características e vantagens de um cluster Clusters têm como vantagem aumento rápido da carga de poder computacional. O aumento é feito com a adição de um nó escravo ao cluster, sendo assim, consegue-se a baixo custo manter um nível supercomputacional (BACELLAR, Hilário ,2010). São conhecidos como sistemas tolerantes a falhas (failover), por proporcionar uma alta disponibilidade. Por exemplo, um dos nós escravo falhando não prejudicará o cluster inteiro, pois a solução será somente trocar aquele nó escravo. Essa troca é feita sem indisponibilizar o cluster. A viabilidade desta troca ocorre devido ao software de monitoramento, conhecido como heart-beat. (BACELLAR, Hilário, 2010). 31 Outro modelo de cluster conhecido como de alto desempenho ou balanceamento de carga, permite que tarefas que exigem uma maior capacidade de processamento sejam realizadas distintamente em nós escravos de maior capacidade ou ociosos (BACELLAR, Hilário, 2010). É necessário que para tratar este balanceamento de carga, o sistema tenha rotinas preparadas para paralelização distribuídas, geralmente no modelo de threads. Em servidores web, por exemplo, este controle permite que nós escravos administrem requisições e caso ocorra uma falha em um nó, os demais ativos são reorganizados para que atendam as tarefas (PITANGA, Marcos, 2003). 2.3 Computação em Grid O termo computação em grid foi criado por Ian Foster e Carl Kesselmans em 1990. Era uma metáfora para encaminhar a solução de um problema grave na época: o acesso múltiplo e simultâneo a diferentes recursos de processamento, de armazenamento e de programas. (GANDOUR, Fábio L, 2010) Computação em grid é um modelo de infraestrutura computacional, que organiza computadores em uma grade de rede, aumentando assim sua capacidade de processamento, dividindo as tarefas entre os computadores que compõe o grid. Esta rede pode ser local ou uma rede de longa distância. Os grids removem as conexões que atrelam aplicações, servidores, bases de dados, máquinas, armazenamento, entre outros, tratando tudo como um serviço virtualizado. Assim, os recursos computacionais podem estar em um mesmo ambiente ou alocados em diferentes locais, geograficamente distantes. (FOSTER, Ian et al,2001) Com a interface de usuário autenticado, acessar o sistema de computação em grid não seria diferente de acessar os recursos de uma máquina local. Qualquer computador autorizado tem acesso a um enorme poder de processamento e capacidade de armazenamento. Uma vez dentro do grid computacional, o poder de processamento, a memória e armazenamento de dados, são recursos distribuídos que usuários autorizados podem explora-los para execução de tarefas. Para o usuário individual, é como se o seu computador tivesse se transformado em um supercomputador. (STRICKLAND, Jonathan, 2009) Dentre as diferenças entre as tecnologias de cluster e grid, pode-se citar que o cluster possui um controlador central, onde é possível utilizar todo o processamento do cluster. Os 32 nós de um cluster encontram-se geograficamente na mesma rede local. Os grids por sua vez são uma arquitetura mais democrática onde embora possa existir um controle centralizado, existe também ambientes onde empresas, universidades e grupos de usuários, compartilham os ciclos ociosos de processamento em seus sistemas em troca da utilização da parte do tempo de processamento do grid. Por exemplo, duas empresas sediadas em países com fusos-horário diferentes formam um grid, de modo que uma possa utilizar os ciclos de processamento ociosos da outra em seus horários de pico. Com o fuso horário diferente, os picos de acessos aos servidores de cada empresa ocorrerão em horários diferentes. (PITANGA, Marcos, 2003) 2.3.1 Características da computação em grid As características da computação em grid segundo Heinz Stockinger(2007) são: Colaboração: compartilhamento de recursos entre os computadores pertencentes a rede distribuída que compõe o grid. Agregação: oferece aos usuários, ou computador pertencente ao grid, a capacidade de processamento virtual somada, através de todos os individualmente compartilhados. Virtualização: apresentação dos serviços grid via uma interface simples, abstraído os detalhes e regras complexas da sua arquitetura. Heterogeneidade: composição por recursos computacionais heterogêneos, tais como hardware, sistemas operacionais e software diferente, possuindo desempenho diferente. Controle descentralizado: um único usuário, ou computador pertencente ao grid, não proprietário de todo o sistema. Mas cada nó pode solicitar a todo sistema o compartilhamento de processamento ao quebrar uma tarefa recebida. Interoperabilidade: é necessário um padrão entre sistemas para construção do grid, para que haja comunicação entre os nós e processamento mutuo. Segurança: um único usuário, ou computador pertencente ao grid, já autorizado tem um limitado tipo de operações que pode correr nos serviços da Grid. O aproveitamento de protocolos e normas é essencial para que os sistemas em 33 grid possam realizar funções fundamentais como autenticação, autorização, descobrimento de recursos compartilhados. 2.3.2 Tipos de computação em grid Segundo Heinz Stockinger (2007), alguns tipos de grids são diferenciados conforme sua organização: Enterprise Grids: são formados dentro de um ambiente corporativo, entre sua própria rede. A limitação com grids externos e acessos externos é feito através de um firewall, assim os recursos ficam protegidos e compartilhados dentro da organização corporativa. Fisicamente descentralizado, mas virtualmente centralizado, uma vez que todos dentro da corporação vão ter acesso a toda informação. Enterprise grids são conhecidos também como Intragrid. Partner Grids: são grids interligados entre organizações de áreas de interesse e pesquisa em comum. Por exemplo, empresas no ramo químico de farmácias, compartilham meios para atingir um objetivo em comum. Partner grids são também chamados de Extragrid. Service Grids: são sistemas abertos que possibilitam acesso independentemente de qual grids eles pertencem. A partir desse sistema em comum, usuários podem aproveitar os recursos computacionais sem saber onde estão localizados, ou a que empresa pertencem, apenas pagam conforme uso. Conceito de Sofware-as-a-Service(SaaS) aplicado na computação em nuvem. 34 2.3.3 Arquitetura da computação em grid A organização de um modelo de grid é explicada na Figura 9 através de camadas. Figura 9 Arquitetura computação em grid. Fonte: Dantas, M.A.R, 2004. Na camada base, tem-se a camada de redes, onde ocorre a conectividade para os recursos do grid. Assim, podemos imaginar os switches, roteadores e a infraestrutura das redes de comunicação (Dantas, M.A.R, 2004). Em seguida a camada de recursos, desta camada fazem parte servidores primários e dispositivos de armazenamento. Exemplos de configurações que representam ao nível de recursos são os clusters, os serviços de armazenamento e computadores especiais tais como os supercomputadores (Dantas, M.A.R, 2004). A próxima camada é o middleware que fornece protocolos, e bibliotecas, permitindo que múltiplos elementos heterogêneos (servidores, ambientes de armazenamento, redes e outros elementos), participem de um ambiente de grid unificado. Para que a dos elementos heterogêneos ocorra eles são padronizados em software e domínio com base no middleware comunição Exemplos de heterogeneidade são os diferentes sistemas operacionais, sistemas de arquivos e protocolos de comunicação entre redes (Dantas, M.A.R, 2004). Por fim a camada de aplicação e serviços, que é onde ficam os conjuntos de ferramentas de desenvolvimento. Milhares de aplicações diferentes compõem este nível. A porção de serviço deve prover diversas funções de gerenciamento, métricas utilizáveis, todos os parâmetros para o uso virtual dos recursos compartilhados entre diferentes usuários ou computadores participantes do grid (Dantas, M.A.R, 2004). 35 2.4 Computação em Nuvem A computação em nuvem emergiu como o sucessor natural de diferentes vertentes de sistemas distribuídos, virtualização, cluster e computação em Grid. Agregando características e benefícios destas tecnologias antes exploradas separadamente. Como uma plataforma inovadora, a computação em nuvem está fazendo com que governos e grandes empresas e corporações adotarem, cederem aos benefícios de sistemas distribuídos com renovado interesse (UDDOH, Emmanuel, 2011). Em termos evolutivos, a computação em nuvem anuncia a terceira onda de Tecnologia da Informação. Esta frente da computação em nuvem faz com que recursos computacionais tais como plataforma (PaaS), infraestrutura (IaaS), software (SaaS) sejam fornecidos como um serviço através da rede local, ou internet. Os usuários são cobrados com base no seu uso de recursos computacionais, como por exemplo, pelo serviço de armazenamento de dados. Com este novo modelo de adoção de tecnologia em informação, o governo dos EUA registrou um forte interesse no desenvolvimento da tecnologia de computação em nuvem para a melhoria da economia. Com um plano estratégico já desenvolvido chamado de Federal Cloud Computing Strategy (2011) pretende fazer a alteração da sua infraestrutura tradicional para uma nova alocada em computação em nuvem (UDDOH, Emmanuel, 2011). A computação em nuvem proporciona infraestrutura de serviços para empresas, corporações, instituições de ensino, pesquisas e órgãos governamentais. Um dos fatores que proporcionou este crescimento foi o anuncio de grandes empresas de tecnologia adotarem o modelo de cloud computing, entre elas o Google e IBM (Vouk, M. A., 2008). Em recente pesquisa da Cisco (2010), 27% das companhias no Brasil já utilizam aplicações baseadas em cloud computing, enquanto que a média mundial é de 18%. A pesquisa foi realizada em 13 países, entre eles Brasil, EUA, México, Reino Unido, Alemanha, Índia, China e Japão. A pesquisa também resultou que um em cada três profissionais de TI migrarão mais da metade de seus dados e aplicativos para nuvens privadas nos próximos três anos. A previsão da adoção de computação em nuvem é mais alta no México (71%), quanto que no Brasil (53%) e EUA (46%) (Cisco, 2010). 36 Figura 10 Pesquisa Cisco Fonte:Cisco (2010). Conforme Figura10, em pesquisa da Cisco (2010), as respostas de “Sim,vão implementar” e “Sim, já está em planejamento” ocupam 58% da pesquisa. Isso demonstra que a TI está migrando do modelo tradicional de infraestrutura e partindo para um ambiente de computação em nuvem. 2.4.1 Definição Computação em nuvem é segundo Weiss, (2007) é a agregação de poderosos serviços, aplicativos, recursos computacionais sendo integrados e disponibilizados na internet. Para o MELL, Peter; GRANCE, Timothy (2011), computação nas nuvens é um novo modelo computacional que permite a onipresença ao usuário, decorrente de acesso sob demanda a recursos computacionais configuráveis, tais como, redes de computadores, servidores, armazenamento, aplicativos e demais recursos que possam ser entregues como serviço. Estes serviços são liberados e fornecidos com o mínimo esforço para gerenciamento, ou interação de quem está comprando com quem está prestando o serviço. 37 Segundo Gandour, Fábio L. (2008) Cloud Computing é uma abordagem emergente na infraestrutura de TI compartilhada, na qual os recursos de sistemas estarão conectados para prestar serviços. A computação em nuvem resume-se em um serviço de provisionamento de recursos de computação, como por exemplo, processamento e armazenamento. Com base em um serviço, entrega-se capacidade adicional, para que seja possível escalar dinamicamente o serviço em computadores e efetuar armazenamento de forma simples e transparente (Jones, M. Tim,2008). Para implementar uma nuvem e usufruir dos seus benefícios é necessário contemplar algumas características. Conforme definição do MELL, Peter; GRANCE, Timothy (2011), dentre as características essenciais, ou imprescindíveis para computação em nuvem estão classificadas cinco: serviço sob demanda, acesso à rede ampla, agrupamento (do inglês, pool) de recursos, escalabilidade e serviço medido. 2.4.2 Serviço Sob demanda ou Auto-Serviço (On-demand or self–service) Como serviço sob demanda o consumidor pode provisionar recursos computacionais, armazenamento em rede. Automatizadamente conforme necessário sem intervenção humana com o prestador do serviço (MELL, Peter; GRANCE, Timothy, 2011). Ao invés de despejar capital para manter uma infraestrutura em alto nível para atender a alta carga de processamento computacional que ocorre esporadicamente, utiliza-se recursos sob demanda (on-demand). Recursos sob demanda são alocados conforme solicitado e necessário (FURHT, Borko, 2010). 2.4.3 Acesso amplo à rede (Broad network Access) Recursos estão disponíveis através da rede, são acessados através de mecanismos padrões, meio padrão, que permite o uso de plataformas heterogêneas como, por exemplo, telefones celulares, tablets, notebooks e estações de trabalho (MELL, Peter; GRANCE, Timothy, 2011). O acesso ao serviço contratado da nuvem não fica preso a uma linguagem de programação, ou ao sistema operacional especifico. O recurso computacional fica 38 transparente para o usuário final, tornando-o independente do uso de uma plataforma especifica. (MELL, Peter; GRANCE, Timothy, 2011). 2.4.4 Agrupamento de Recursos (Resource pooling) Os recursos de computacionais são organizados em pool (agrupados) para atender vários consumidores usando um modelo multi-tenant. Este modelo por sua vez permite que os mais diversos recursos computacionais, sejam compartilhados entre os consumidores, com diferentes recursos físicos e virtuais dinamicamente atribuídos de acordo com a demanda do consumidor. Há um senso de localização independente, centralizado, unificado, cujo cliente geralmente não tem controle ou conhecimento sobre a exata localização dos recursos oferecidos, mas pode ser capaz de especificar localização a um nível superior de abstração. Exemplos de recursos incluem o armazenamento, processamento, memória e largura de banda de rede. (MELL, Peter; GRANCE, Timothy, 2011) 2.4.5 Elasticidade rápida ou Escalabilidade (Rapid elasticity) Elasticidade rápida ou Escalabilidade. Capacidade de controle de recursos computacionais pode ser elasticamente provisionada, ou seja, aumentada ou reduzida, rapidamente conforme necessidade, a liberação de mais recursos ocorre de maneira transparente. Em alguns casos isso ocorre automaticamente, para escalar rapidamente proporcional exterior e interior com a demanda. Para o consumidor final, as capacidades disponíveis para provisionamento parecem ser ilimitadas, podem ser adequadas em qualquer quantidade a qualquer momento (MELL, Peter; GRANCE, Timothy, 2011) A tecnologia chave que possibilita esta escalabilidade é a virtualização. Permite 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 que é sobrecarregado, pode ser migrado para um servidor novo, já que ambos são de disposição virtual, não estão mais atrelados a uma disposição física especifica. (JONES, Tim M, 2008) A escalabilidade permite que a sobrecarga de um servidor, ou um sistema possa ser tratado na camada de infraestrutura, a IaaS. Por exemplo, tem-se um servidor que está sobrecarregado. É possível então formar uma instancia deste servidor, tornando-o uma 39 imagem virtual. Com a imagem definida, é possível criar novas máquinas, novas instancias do servidor sobrecarregado dentro da nuvem, duplicando-a. Então executar o processamento paralelamente. Durante o processamento, é possível incluir e remover recursos de forma manual ou automática, tornando-se assim um modelo baseado em cluster (Orlando,Dan 2011). 2.4.6 Mensurabilidade (Measured Service) Conforme os recursos computacionais (por exemplo, processamento, armazenamento, largura de banda e contas de usuários ativos) são provisionados como serviço, e conforme são tratados separadamente é possível ter um controle e medição sobre cada um, o que acaba sendo uma base para alavanca-los assim que necessário. Contudo controle do uso de recursos pode ser monitorado e relatado, proporcionando transparência para o provedor e consumidor do serviço utilizado (MELL, Peter; GRANCE, Timothy, 2011). Uma nuvem não possui somente um serviço, mas um conjunto deles. A divisão em três camadas proporciona uma melhor organização, onde cada camada torna-se um serviço disponibilizado em nuvem. A Figura 11, demostra a organização em camadas. Figura 11 Arquitetura computação em nuvem. Fonte: AMRHEIN, Dustin; SCOTT, Quint, 2009. 40 2.4.7 Software-as-a-Service (SaaS) Software-as-a-Service (SaaS) é a camada que fica na parte superior a camada final que aproveita-se dos recursos das camadas inferiores,Paas e Iaas, para manter-se.Coforme MELL; GRANCE, (2011),Saas é capacidade fornecida ao consumidor, de ter aplicativos em execução em uma infraestrutura de nuvem.Com as aplicações estando na nuvem, ficam acessíveis a partir de vários dispositivos de cliente. Podendo ser acessados por de interface de programas smartclients, ou pelo próprio navegador de internet, e-mail baseado no conceito web, ou softwares específicos que tenham a especialização de conexão com a nuvem. O consumidor não precisa administrar ou controlar a infraestrutura de nuvem, incluindo rede, servidores, sistemas operacionais, armazenamento ou mesmo capacidades individuais de aplicação. Abstratamente o consumidor somente se conectará ao seu aplicativo, software que está na nuvem. O consumidor estará restrito somente à pré-configuração de limitação da nuvem, como por exemplo, espaço de disco que será pré-definido, mas conforme a necessidade apareça pode ser aumentado. Também pode relacionar a SaaS ao 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 controle e medição de um aplicativo e pagamento somente pelo tempo utilizado. Os aplicativos fornecidos através do modelo SaaS beneficiam consumidores aliviandoos da instalação e manutenção de software e podem ser usados através de modelos de licenciamento que suportam pagamento para conceitos de uso (AMRHEIN, Dustin; SCOTT, Quint, 2009). SaaS é a capacidade de acessar softwares como um serviço. Uma abordagem anterior à SaaS era o Provedor de Serviços de Aplicativos,Active Server Pages (ASP). Os ASPs fornecem assinaturas ao software que são hospedados ou enviados pela Internet. Dessa maneira, você não adquire o software, simplesmente faz uso de acordo com suas necessidades. Todo acesso que acontece é controlado, como por exemplo, o tempo de utilização, conforme o tempo de uso terá uma cobraça relativa sobre, definida pelo provedor do serviço (JONES, Tim M, 2008). Outra perspectiva da SaaS é a utilização do software pela Internet que é executado remotamente. Esse software na forma de serviço é utilizado por um aplicativo local (definido 41 como serviços da Web) ou um aplicativo remoto observado por um navegador da Web (JONES, Tim M, 2008). 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 (Google Apps, 2012). Como por exemplo: editor de texto, editor de planilha, editor de apresentações, entre outros. 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(JONES, Tim M, 2008). Outro exemplo recente da SaaS é o navegador de internet Chrome da Google. Esse navegador é um ambiente ideal, 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. Na pagina oficial do fabricante (Google Chrome, 2012) ele descreve que os aplicativos da web são websites interativos e avançados. Eles podem oferecer uma ampla variedade de recursos ou ter o foco em uma única tarefa, como edição de fotos ou compras. Você pode acessar facilmente os aplicativos da web na Chrome Web Store (JONES, Tim M, 2008). Na camada de software (SaaS) é possível desenvolver a característica de Pool de Recursos, especificamente tratando-se do modelo multi-tentant. Uma aplicação que atende a múltiplos clientes, chamados de tenants ou inquilinos. Esta arquitetura permite que múltiplos inquilinos (empresas ou clientes) compartilhem os mesmos recursos físicos como, por exemplo, um aplicativo ERP, mas permanecendo logicamente isolados. Dentro do modelo multi-tenant existem quatro tipos de inquilinos segundo (TAURION, Cezar, 2010). Inquilino isolado: Neste modelo, cada inquilino tem seu próprio escalonamento de recursos computacionais, sendo assim não há compartilhamento de recursos. Apesar de que a aplicação é oferecida a múltiplos clientes a partir do mesmo servidor, este modelo não é multi-inquilino. É similar ao modelo tradicional de hospedagem, onde cada usuário tem seu próprio conjunto de recursos computacionais e sua própria instancia da aplicação. Para a uma oferta 42 SaaS, este modelo carece de agilidade e elasticidade, porque adicionar um novo inquilino requer o provisionamento de sua própria instancia de hardware e software. Também não permite economia de escala. Embora não seja verdadeiramente Computação em Nuvem, é um passo nesta direção, oferecendo como atrativo a facilidade de uma rápida oferta para SaaS (TAURION, Cezar, 2010). Multi-inquilino via hardware compartilhado (virtualização): Neste modelo, cada inquilino tem seu próprio escalonamento de recursos computacionais, porem a alocação é dinâmica a partir de um pool de recursos, via mecanismos de virtualização. Bastante similar ao modelo anterior, mas permitindo elasticidade na camada do hardware. Entretanto, apresenta limitações, pois a unidade de alocação e liberação de recursos é a máquina virtual, onde a aplicação vai operar (TAURION, Cezar, 2010). Multi-inquilino via container: Vários inquilinos são executados na mesma instancia de um container de aplicação (um servidor de aplicações), mas cada inquilino está associado a uma instancia separada do software de banco de dados. O ambiente de execução é compartilhado entre vários inquilinos, mas a plataforma de dados é a mesma. A premissa do modelo é que o isolamento do banco de dados garante a integridade dos dados dos inquilinos, ao mesmo tempo em que o container de execução, por ser compartilhado, oferece as vantagens de elasticidade e customização. Para garantir o isolamento dos inquilinos dentro de uma única instancia do container ou servidor de aplicações, este deve ser desenhado com funcionalidade para gerenciar a alocação de recursos aos seus inquilinos (TAURION, Cezar, 2010). Multi-inquilino com pilha de software compartilhada: É uma evolução do modelo anterior, além do container da aplicação, também uma única instancia do banco de dados que é compartilhada por todos os inquilinos (TAURION, Cezar, 2010). 43 2.4.8 Platform-as-a-Service (PaaS) Platform-as-a-Service, ou PaaS, provê a base para a SaaS, para o desenvolvimento e suporte dessa camada. É capacidade oferecida ao consumidor de implantar para a infraestrutura nuvem aplicativos adquiridos, criados usando linguagens de programação, bibliotecas, serviços e ferramentas de suporte do provedor. O consumidor não vai administrar ou controlar a infraestrutura da nuvem, incluindo rede, servidores, sistemas operacionais, ou armazenamento, mas vai ter nesta camada o controle sobre os aplicativos implementados e configurações do ambiente do aplicativo de hospedagem (MELL, Peter; GRANCE, Timothy, 2011). A PaaS é semelhante à IaaS, mas inclui sistemas operacionais e serviços exigidos que focam em um aplicativo específico. Por exemplo, a PaaS, fornece um sistema operacional particular e um conjunto de aplicativos, como um banco de dados(JONES, Tim M, 2008). Um exemplo interessante de PaaS é o Google App Engine. Segundo site oficial (Google App Engine) da plataforma, o App Engine é um conjunto completo de desenvolvimento que utiliza tecnologias familiares para construir e hospedar aplicativos da web. Depois que o aplicativo é enviado para o Google, ele é hospedado e recebe a escabilidade da plataforma do Google. Ele estando nesta plataforma não é necessário produzir instancias novas do aplicativo, nem particionar o banco de dados ou comprar máquinas. O App Engine fornece às APIs para armazenamento e gerenciamento de dados persistentes (utilizando a Google Query Language, ou GQL), dentre demais tecnologias escalonáveis como, por exemplo, BigTable e GFS. A sandbox na qual é executado o aplicativo da Web restringe o acesso ao sistema operacional subjacente. 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. 10gen é uma pilha de software semelhante ao App Engine. 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 utilizando seu próprio servidor de aplicativos (JONES, Tim M, 2008). 44 2.4.9 Infrastructure-as-a-Service (IaaS) Camada base para a computação em nuvem, fornece a sustentabilidade das camadas de SaaS e PaaS. Tratando infraestrutura como serviço na nuvem, para o consumidor é a capacidade de prestação processamento, armazenamento e redes como serviço. O cliente é capaz de implantar e executar o software arbitrário, que pode incluir sistemas operacionais e aplicações. O consumidor não vai administrar ou controlar a infraestrutura exatamente, mas tem controle sobre sistemas operacionais, armazenamento e aplicativos implantados. Alem de um controle limitado aos recursos computacionais, tais como componentes de rede selecionados (por exemplo, firewalls do host) (MELL, Peter; GRANCE, Timothy, 2011). Essencialmente, é a capacidade de fazer arrendamento de um computador, ou uma servidor, com limitações específicas quanto à qualidade do serviço em executar um sistema operacional arbitrário e um software. 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 uma máquina virtual que é chamada em um ou mais servidores virtualizados (AMRHEIN, Dustin; SCOTT, Quint, 2009). Os serviços de infraestrutura abordam o problema de equipar de forma apropriada os datacenters, assegurando o poder de computação quando necessário. Além disso, devido ao fato das técnicas de virtualização serem comumente empregados nessa camada, economias de custos decorrentes da utilização mais eficiente de recursos podem ser percebidas (AMRHEIN, Dustin; SCOTT, Quint, 2009). A IaaS é a forma mais bruta de serviço de computação (fora do acesso à infraestrutura física). Quando se fala em infraestrutura de nuvem comercialmente, o Amazon Elastic Compute Cloud (EC2) é usado como referencia. No EC2 da Amazon, é possível especificar uma máquina virtual definindo seu sistema operacional e conjunto de aplicativos. Após a definição básica citada anteriormente, é possível implementar seus aplicativos nela ou fornecer sua própria imagem de máquina virtual para executar nos servidores. Em seguida, você é cobrado pelo tempo de processamento, quantidade informação armazenada e largura de banda da rede utilizada (JONES, Tim M, 2008). O projeto Eucalyptus (Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems) é uma implementação de software livre semelhante ao EC2 da Amazon compatível com a interface do serviço comercial. O Eucalyptus conta com o Linux e 45 o 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. O Eucalyptus é organizado em uma estrutura hierárquica, através de componentes principais de alto nível tais como Gerente de Instancia (Instance Manager) e o Gerente de Nuvem (Cloud Manager). Essa organização facilita a utilização de recursos que estão alocados em redes separadas (JONES, Tim M, 2008). Outra plataforma estilo EC2 na 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 (JONES, Tim M, 2008). Dentro da IaaS a virtualização tem papel importante, o software IaaS que tem código de baixo nível que é executado de maneira independente do sistema operacional, chamado de hipervisor. O hipervisor é responsável por classificar os recursos de hardware e alocar tais recursos baseado na demanda. Esse processo de agrupamento de recursos pelo hipervisor torna possível a virtualização. A partir da virtualização é possível um computador físico, ser vários computadores, ao invés de máquinas físicas tornam-se máquinas virtuais alocadas dentro de um mesmo computador físico. Além de serem alocadas em um único computador físico, as máquinas virtuais também podem ser alocados em uma infraestrutura compartilhada, que tem como base várias organizações, ou computadores. Quando estão alocadas em organizações, estas possuem interesses similares em relação a requisitos de segurança e considerações de conformidade, tratando-se da nuvem como um todo. (Orlando, Dan 2011). Conforme MELL; GRANCE (2011), há quatro modelos de implementação de nuvem: Private Cloud Community Cloud Public Cloud Hybrid Cloud 46 2.4.10 Private Cloud A Private cloud é a infraestrutura provisionada para uso exclusivo de uma única organização compreendendo vários consumidores (por exemplo, unidades de negócios). Pode ser uma infraestrutura proprietária, gerenciada e operada pela própria organização. Pode ser também um produto de terceiros, mas de acesso exclusivo. Podendo existir dentro ou fora das instalações da organização. (MELL, Peter; GRANCE, Timothy, 2011) Nuvens privadas existem dentro rede coorporativa, protegidas pelo firewall da empresa e são gerenciadas pela organização. São serviços de nuvem que o cliente cria e controla dentro de seu empreendimento. Nuvens privadas oferecem vários benefícios semelhantes das nuvens públicas. A diferença, é que a organização do cliente é responsável por configurar e manter a nuvem (AMRHEIN, Dustin; SCOTT, Quint, 2009). As justificativas para adoção de uma nuvem privada são econômicas (redução de custos) e qualidade dos serviços, com maior agilidade no atendimento às demandas dos usuários por recursos computacionais (TAURION, Cezar, 2011). A redução de custos é provocada pela padronização e automação dos serviços de TI. Com padronização e automação, reduzem-se os custos operacionais, liberando-se o tempo perdido em funções banais e agregando-o para atividades de maior valor. Além disso, com automação, obtêm-se maior utilização dos ativos computacionais, aproveitando-se melhor o parque computacional já instalado. Um subproduto da padronização e automação é a possibilidade de mudar-se a relação entre TI e os seus usuários, criando-se políticas mais visíveis e adequadas (TAURION, Cezar, 2011). Com uma nuvem privada abre-se oportunidade de TI criar catálogos de serviços e seus respectivos níveis de serviço medidos. A automação também reduz os erros causados por intervenções manuais e libera os colaboradores de TI para atuarem focados no atendimento aos usuários, que nas atividades de pouco ou nenhum valor agregado, como alocar espaço em disco ou reservar horas em servidores (TAURION, Cezar, 2011). Outro benefício palpável é a agilidade que a nuvem oferece à organização. A nuvem privada abstrai os recursos computacionais aos usuários, que em uma visão como serviço, não se preocupam mais onde e como as aplicações serão executadas. A TI, por sua vez, abre 47 espaço para os usuários serem mais inovadores e arriscarem mais em novos produtos e serviços (TAURION, Cezar, 2011). 2.4.11 Community Cloud Na community cloud, a infraestrutura de nuvem é provisionada para uso exclusivo de uma comunidade de consumidores, ou organizações que têm preocupações comuns (por exemplo, a missão, requisitos de segurança, política e considerações de adesão). O gerenciamento pode ser feito pela comunidade proprietária e operada por uma ou mais das organizações na comunidade. Podendo existir dentro ou fora das instalações da organização (MELL, Peter; GRANCE, Timothy, 2011). 2.4.12 Public Cloud A infraestrutura de nuvem é provisionada para uso aberto ao público em geral. Pode ser uma infraestrutura proprietária, gerenciada e operada pela própria organização, ou acadêmico, ou organização governamental, ou alguma combinação dentre os grupos envolvidos. Ela existe nas instalações do fornecedor de cloud (MELL, Peter; GRANCE, Timothy, 2011). Uma nuvem pública é o que se considera uma nuvem no sentido usual, ou seja, recursos fornecidos dinamicamente pela Internet usando aplicativos da Web de um provedor terceirizado fora do local. Este fornecedor compartilha os recursos e fatura pelas métricas de uso impostas ao consumidor. Nuvens públicas existem além do firewall da empresa e são completamente hospedadas e gerenciadas pelo provedor da nuvem (AMRHEIN, Dustin; SCOTT, Quint, 2009). As nuvens públicas tentam a fornecer aos consumidores elementos de TI sem problemas. Seja software, infraestrutura de aplicativo ou infraestrutura física, o provedor de nuvem assume as responsabilidades de instalação, gerenciamento fornecimento e manutenção. Os clientes são cobrados somente pelos recursos usados, portanto, a subutilização é eliminada (AMRHEIN, Dustin; SCOTT, Quint, 2009). Esses serviços, provisionados através de uma nuvem publica são oferecidos com convenção sobre configuração. O que significa que são fornecidos com a ideia de acomodar os casos de uso mais comuns. As opções de configuração são geralmente um subconjunto 48 menor do que seriam se o recurso fosse controlado diretamente pelo consumidor. Nesse caso, os consumidores têm pouco controle sobre a infraestrutura, os processos que requerem forte segurança e conformidade, não sao boas opções para irem à nuvens públicas (AMRHEIN, Dustin; SCOTT, Quint, 2009). 2.4.13 Hybrid Cloud Na infraestrutura de nuvem, é uma composição de duas ou mais nuvens distintas (community cloud, private cloud ou public cloud) que permanecem entidades únicas, que são unidas pela tecnologia padronizada ou proprietária, que permite que dados e aplicações operem de maneira portável, tanto em um modelo, quanto no outro (por exemplo, uma nuvem fazer balanceamento de carga entre as nuvens) (MELL, Peter; GRANCE, Timothy, 2011). Nuvens híbridas são uma combinação de nuvem pública e privada usando serviços que estão nos espaços públicos e privados. As responsabilidades de gerenciamento são divididas entre o provedor da nuvem pública e a empresa em si. Usando uma nuvem híbrida, as organizações podem determinar os objetivos e requisitos dos serviços a serem criados e obtêlos baseados na alternativa mais adequada (AMRHEIN, Dustin; SCOTT, Quint, 2009). 49 3 DESENVOLVIMENTO A Fundamentação Teórica sobre os conceitos da computação em nuvem proporcionou a identificação das características essenciais, os modelos de nuvem e como uma infraestrutura de computação em nuvem deve comportar-se. Nesta etapa da pesquisa, foi definido o roteiro para implantar o modelo de nuvem privada na infraestrutura de hospedagem de servidores do Laboratório de Redes de Computadores da UNIVALI – Campus Itajaí. Ao término foi avaliada a infraestrutura de computação em nuvem implementada, aferindo sua aderência conforme as propriedades de nuvem definidas na documentação de MELL, Peter; GRANCE, Timothy (2011), The NIST Definition of Cloud Computing (NIST Special Publication 800145). Esta documentação foi elaborada para planejamento de sistemas, gerentes de programas, técnicos entre outros que pretendem adotar a computação em nuvem como consumidores ou como fornecedores de serviços em nuvem. O NIST também determina os aspectos importantes da nuvem, servindo esta documentação como um meio para comparação de serviços. Fornece uma linha de base de conhecimento para a discussão do que é a computação em nuvem e qual a melhor forma de uso da nuvem (MELL, Peter; GRANCE, Timothy, 2011). As propriedades comparadas para aferir a aderência da nuvem são o autosserviço ou serviço sob demanda, acesso amplo à rede, agrupamento de recursos, elasticidade e mensuração dos recursos alocados, tanto nos aspectos de como os serviços devem se comportar e também sobre como devem ser entregues. NIST é Instituto Nacional de Padrões e Tecnologia dos Estados Unidos, que promove métodos de métricas, padrões de tecnologia em diversas áreas. Este sempre com o objetivo de equipar a indústria e comércio dos Estados Unidos com as ferramentas e informações necessárias relativas à normalização. O que capacita estes a competir com maior eficácia no mercado global. Os Laboratórios do NIST realizam pesquisas de classe mundial, buscando que os avanços da tecnologia e infraestrutura do país ajudem as empresas norte-americanas melhorar continuamente produtos e serviços além de padronizá-los. O NIST também desenvolve testes, métodos de ensaio e de referência, prova de implementações de conceito e análise técnica para promover o desenvolvimento e uso produtivo da tecnologia da informação(NIST, 2014). A partir das análises feitas sobre as características de computação em nuvem, Infrastructure-as-a-Service e Private Cloud a plataforma mais adequada para o cenário do 50 Laboratório Redes da UNIVALI - Campus Itajaí, é o Openstack. O Openstack é uma plataforma open source que gerencia agrupamento de recursos como: rede, armazenamento e processamento, servindo-os ao usuário final como serviços sob demanda. Dentre as características especificas da ferramenta que motivaram a escolha, estão: Produto open source. Boa documentação, com grande e crescente comunidade de usuários. Licença Apache 2.0. Grandes empresas e instituições incentivam o projeto Openstack. Entre elas: NASA, Rackspace, DELL, HP, Intel, AMD, Microsoft, Redhat, Ubuntu e Cisco. Serviços propostos para nuvem como: armazenamento, rede, processamento, identidade de autorização a acesso aos serviços controle, todos divididos em módulos configuráveis separadamente. O Openstack não é um sistema monolítico, empacotado. A proposta do Openstack é ser multi-tarefa através da divisão em serviços, que são configurados separadamente e por fim integrados e gerenciados pelo próprio Openstack. Permite a administradores e usuários o acesso a provisão de recursos através de um portal web de autosserviço. Suporte a demais serviços de outras nuvens como API EC2 da Amazon. Múltiplos modelos de rede: VLAN, FlatDHCP, Flat. Sistema de armazenamento de dados. Software pra criação de data storages redundantes e escaláveis usando clusters, com funcionalidade similar ao Amazon Simple Storage Service (Amazon S3). Escalabilidade multidimensional. Grupos de segurança: segurança por usuário, regras e projeto. Gerenciamento online de máquinas virtuais: permite o gerenciamento de imagens de discos virtuais. 51 Hipervisor suporte para o Microsoft Hyper-V, Citrix XenServer, Xen, KVM, VMWware ESX, LXC e QEMU. Suporte a diferentes formatos de máquinas virtuais como: Raw, Machine (kernel/ramdisk outside of image), VHD (Hyper-V), VDI (VirtualBox), qcow2 (Qemu/KVM),VMDK (VMWare), OVF (VMWare, entre outros). A Revisão Bibliográfica sobre as formas de virtualização capacitou a escolha pelo modelo de hipervisor, que é baseado na arquitetura KVM. Como sistema operacional base, foi utilizada a distribuição Ubuntu 12.04, que suporta o modelo de virtualização KVM. O Ubuntu 12.04 também foi desenvolvido e preparado para integração com o Openstack. (Ubuntu, 2010). A disposição física do ambiente em que a nuvem foi implementada está composta por três servidores do Laboratório de Redes da UNIVALI – Campus Itajaí, organizados em: Nó Controlador da Nuvem: com hardware HP Proliant ML 350, possui um processador com quatro núcleos de 1.86GHz de frequência. Memória RAM 4GB. Espaço em Disco 200GB. Nó Controlador da Rede da Nuvem: com hardware HP Proliant ML 350, possui um processador com quatro núcleos de 1.86GHz de frequência. Memória RAM 4GB. Espaço em Disco 70GB. Nó da Nuvem: com hardware HP Proliant ML 350, possui um processador com quatro núcleos de 1.86GHz de frequência. Memória RAM 4GB. Espaço em Disco 500GB. 52 Figura 12 Organização da Infraestrutura em nuvem proposta. Fonte: O autor (2012). Conforme demonstrado na Figura 12 Infraestrutura em nuvem proposta, um dos computadores terá o papel de Nó Controlador da Nuvem, fornecendo toda a funcionalidade da nuvem exceto a hospedagem de máquinas virtuais e o controle geral dos serviços de rede. Este servidor irá hospedar os módulos de serviços: O Nova Services(2013), responsável por processar a nuvem, o motor que executa as atividades solicitadas pelos demais serviços da nuvem ou mesmo pelo usuário via Dashboard. Neste computador não tem todo o conjunto de serviços do Nova. Conforme configuração não é instalado o serviço NovaCompute que realiza a virtualização dos recursos computacionais tornando-os máquinas virtuais via integração com o hipervisor, no caso o KVM. Este serviço foi instalado no computador que é o nó da nuvem. Apesar de o NovaCompute não estar presente no nó controlador, é o nó controlador da nuvem que está configurado o Nova Schedule que vai determinar a fila de processamento a ser executada pelo nova-compute. O Dashboard Horizon: é uma interface web de painel de controle de fácil acesso, que serve ao usuário para: administração da nuvem, configurações de usuário, máquina virtuais redes virtuais. Enfim o agrupamento de recursos 53 geral da nuvem disponibilizados na infraestrutura do Openstack (Horizon Dashboard, 2014). Serviço Keystone:gerencia e controla os acessos de usuários, serviços e hóspedes da nuvem. Serviço Glance: classifica e administra as bibliotecas de imagens de máquinas virtuais da nuvem (Opensatck Glance, 2014). Serviço Cinder: responsável por integrar os recursos de armazenamento, controlando os volumes lógicos. Estes são criados a partir do espaço disponível dos discos rígidos, formando os blocos de armazenamento. Utiliza-se das integrações e suporte das tecnologias iSCSI e LVM para realizar o serviço de armazenamento. Serviço Ceilometer: Responsável pela coleta de dados referentes medição, em termos de processamento e uso de recursos para possível cálculo de custos. Estes custos referem-se ao preço pela utilização dos recursos da nuvem. Todos os três servidores estão interligados pelo Nó Controlador da Rede da Nuvem que administra a maior parte dos serviços de rede, como servidor de DHCP, roteamento da rede dos nós da nuvem com a internet com sub-redes, roteamento dos programas e aplicações da nuvem, controle de IPs flutuantes e conectividade de metadados. (Opensatck Grizzly, 2014). Para realizar estas atividades, o Controlador da Rede da Nuvem detém os serviços: O Quantum DHCP Agent é o serviço que faz a atribuição de endereços IP para máquinas virtuais na nuvem. Openvswitch-switch é o serviço que funciona como um switch só que virtual, interliga as redes e sub-redes. Aproveita-se da capacidade das máquinas virtuais para criarem suas próprias redes virtuais dentro do projeto (tenant) no qual estão inseridas. Interfaces virtuais de diferentes projetos podem se conectar de diversas maneiras, gerando diversas possibilidades de utilização (OpenVswitch, 2014). Quantum L3 Agent é o serviço que controla as pontes de rede. Realiza a separação e a interligação das redes virtuais internas da nuvem, como por 54 exemplo, a comunicação de uma rede interna da nuvem com a internet, ou entre as redes de uma mesma nuvem ou nuvens separadas, protegendo a integridade de cada rede distinta. O terceiro e último computador que compõe o modelo organizacional demonstrado na Figura 12 é o Nó da Nuvem, este é o processador da nuvem, também o agente de serviço baseado nas integrações com o controlador da nuvem e com o controlador de rede, que fornecem o suporte para o seu desempenho. Perante a organização estabelecida é neste nó que é realizada a configuração do hipervisor. Este é responsável por realizar a hospedagem das máquinas virtuais da nuvem. Para execução destas funcionalidades o Nó da nuvem detém os serviços: Libvirt-bin é o kit de ferramentas e bibliotecas que torna possível a comunicação da nuvem Openstack com os hypervisors, entre eles o KVM. As solicitações para as máquinas virtuais são feitas via libvirt para o hipervisor, como iniciar, parar, pausar, salvar, restaurar e migrar uma máquina virtual (Libvirt, 2014). KVM foi o hipervisor escolhido, ele fornece o suporte para a criação das máquinas virtuais, como gerenciamento de memória, armazenamento, driver de interface para dispositivos de entrada e saída. Nova-compute é processador das máquinas virtuais o serviço dentro do Openstack que cria e finaliza as instancias de máquinas virtuais por meio de APIs de hipervisor, neste caso API libvirt. Após a definição e organização do ambiente de nuvem instalado, foi verificada sua aderência perante as propriedades de nuvem definidas na documentação de MELL, Peter; GRANCE, Timothy (2011), The NIST Definition of Cloud Computing (NIST Special Publication 800-145). Dentre as propriedades comparadas está o autosserviço ou serviço sob demanda, acesso amplo à rede, agrupamento de recursos, elasticidade e mensuração dos recursos alocados. Para cada uma destas propriedades foi definido um subcapítulos a partir dos 3.1 ao 3.5. Em cada um destes subcapítulos foi feito o detalhamento dos serviços entregues pela nuvem e enquadrando-os com a sua propriedade corespondente, como, por 55 exemplo, o portal web funcionando como painel de controle para o usuário utilizar-se dos serviços da nuvem, está relacionado com a propriedade de autosserviço. 3.1 Serviço Sob demanda ou Autosserviço na Infraestrutura de nuvem Aplicada O Serviço Sob Demanda ou Autosserviço, segue o princípio de que a nuvem deve servir ao usuário sem que este tenha de se preocupar com configuração, instalação, organização da estrutura computacional que deseja utilizar. O usuário solicita o serviço de processamento computacional, como por exemplo, armazenamento, sem a preocupação onde fisicamente estarão gravados os dados pelo serviço de armazenamento. Portanto, o usuário recebe uma visão abstrata do serviço. Esta visão está fundamentada no conceito de que computação em nuvem deve ser entregue ao usuário final assim como é entregue o serviço de energia elétrica, comparando-os no sentido de que não importa origem nem pelo meio que são entregues, ou ainda onde exatamente estão armazenados, desde que a entrega do serviço seja de forma padronizada, sendo possível utilizá-lo em qualquer lugar desde que disponível, e caso contratado, deve-se pagar pelo o que foi efetivamente foi utilizado. O recurso energia elétrica, equivale-se com computação em nuvem aos recursos computacionais de armazenamento, processamento e rede serem provisionados padronizadamente para que o usuário possa usufruí-los sem preocupações (Vecchiola et al, 2009). O atendimento das requisições solicitadas pelo usuário é realizado por meio de uma API (Advanced Programming Interface – Interface Avançada de Programação) juntamente com os serviços de provisionamento. A interface padrão, Dashboard Horizon, permite ao usuário acessar e gerenciar toda a nuvem de modo simples e fácil. O detalhamento referente ao funcionamento do Dashboard Horizon é mais bem exposto no subcapítulo seguinte, 3.2, que o compara com a propriedade de acesso amplo à rede. A Figura 13 – Tela de Login da Nuvem Openstack, demonstra a tela de acesso principal de login para acesso à nuvem. 56 Figura 13 Tela de Login da Nuvem Openstack. Fonte: O autor (2014). A plataforma de nuvem Openstack é dividida em projetos, como pode ser visualizado na Figura 14. Cada projeto tem suas regras de permissões, controle de usuários e membros como pode ser visualizado na Figura 15 – Membros Projetos Nuvem. Cada serviço também precisa de ajustes de permissão para executar atividades que possam interferir na área de outros serviços e não ocorram conflitos de acesso. O usuário com acesso adequado configura o projeto conforme suas necessidades dentro dos limites do agrupamento de recursos computacionais liberados. O usuário consegue instanciar uma ou mais máquinas virtuais por meio do Dashboard Horizon. Define para cada instância o poder de processamento computacional selecionável, desde o tamanho de volume de dados até a organização da rede que a máquina virtual instanciada pertence. 57 Figura 14 Administração dos Projetos de Nuvem. Fonte: O autor (2014). Figura 15 Membros Projetos Nuvem. Fonte: O autor (2014). A possibilidade de criar templates pré-configurados para máquinas virtuais, faz com que não seja necessário ao usuário conhecimentos avançados referentes ao detalhamento infraestrutura da nuvem e de como aplicá-los. Com os templates prontos e disponíveis cabe ao usuário servir-se conforme suas preferências. Na plataforma de nuvem Openstack existem dois tipos de templates, um para imagens de sistemas operacionais, e outro para faixa de recursos computacionais. 58 Os templates de imagens são preparados a partir de imagens de sistemas operacionais pré-carregadas para a nuvem. Estas possibilitam sua associação com a máquina virtual. São demonstradas na Figura 16 - Templates de Imagens de Máquinas Virtuais, duas imagens de sistemas operacionais que já foram pré-carregadas e estão prontas para uso. Uma das imagens refere-se ao sistema operacional Ubuntu e outra ao sistema operacional CirrOS. Com o template pronto o usuário define qual atende melhor sua necessidade e solicita o seu provisionamento no momento da criação da máquina virtual. Portanto a máquina virtual já é instanciada com a pré-instalação do sistema operacional escolhido. Figura 16 Templates de Imagens de Sistemas Operacionais. Fonte: O autor (2014). A liberação destes templates só é possível com a configuração do serviço de registro e catálogo de imagens, o Glance. Para criar o catálogo de imagens, são carregadas as imagens para dentro da nuvem, para que estas futuramente possam ser utilizadas pelo usuário para criar a sua máquina virtual. Ao carregar a imagem para nuvem é considerada sua configuração tanto para o formato de disco, quanto para o formato do contêiner. O formato de disco de uma imagem de máquina virtual é o formato que o hipervisor interpreta para que seja possível sua comunicação entre o disco virtualizado com o disco físico. A partir desta interpretação torna-se possível a virtualização. Os hipervisores e os discos virtuais têm diferentes formatos de disco. Para realizar a virtualização, a nuvem que foi criada com base no Openstack, consegue atender os seguintes formatos: RAW. Um formato de imagem de disco não estruturado. Formato comum, padrão de disco rígido. Arquivos sem uma extensão acatam este formato. 59 VHD. O formato de disco Virtual Disk Format, é comumente usado por hipervisores como: VMware, Xen e VirtualBox entre outros. VMDK. Formato de disco desenvolvido e utilizado por hipervisor VMware . VDI. Formato de disco desenvolvido e utilizado pelos hipervisores VirtualBox, e também aceito pelo emulador virtualizador QEMU. QCOW2. Formato de disco utilizado por hipervisor KVM, compatível com o emulador QEMU que pode se expandir de forma dinâmica. AKI, ARI, AMI. Formatos de discos desenvolvidos para utilização na plataforma proprietária de nuvem da Amazon. O formato de contêiner trata de encapsular os dados virtualizados. Indica se a imagem de máquina virtual está em um formato de arquivo que também contém metadados sobre a máquina virtual real. Dentre os formatos de containers estão: Bare, OVF, AKI, ARI e AMI Bare, formato atende a virtualização completa, onde não é necessário que a imagem possua a proteção específica em relação à virtualização. OVF, Open Virtualization Format, é formato padrão para realizar a distribuição de dispositivos computacionais físicos em virtuais. AKI, ARI, AMI. Formatos de imagens que já incorporam o formato de contêiner por padrão são desenvolvidos e utilizados pela plataforma proprietária de nuvem da Amazon. Na Figura 16, pode ser visualizado que ambas as imagens já carregadas tanto a do sistema operacional Ubuntu quanto a do sistema operacional Cirros, foram criadas com formato de disco QCOW2 e formato contêiner Bare. O usuário ao provisionar uma máquina virtual com suas preferências através da solicitação via Dashboard Horizon, esta máquina tem a definição do seu volume de disco rígido virtualizado. Para que o usuário sirva-se do serviço de armazenamento de dados foi implementado o serviço Cinder da nuvem Openstack. 60 O Cinder é responsável por armazenar os dados das instancias das máquinas virtuais em blocos de dados físicos, a partir de volumes lógicos. Em outras palavras é o serviço Cinder que virtualiza o agrupamento de recursos de dispositivos de armazenamento em blocos, fornecendo ao usuário final uma API de autosserviço para solicitar e consumir esses recursos. Inibindo assim a preocupação e conhecimento de onde realmente implantado, ou em que tipo de dispositivo está o seu armazenamento. Para realizar está conversão de dados e armazenálos o Cinder utiliza-se de alguns serviços base como o Open-iSCSI e LVM (RHOTON, 2013). O Open-iSCSI (Internet Small Computer System Interface), possibilita a execução de comandos de disco rígido SCSI encapsulados sobre protocolo IP, o que remove o vínculo da gravação de dados com o computador local. Possibilita que todos os dados, inclusive relacionados ao sistema operacional não estejam necessariamente sendo gravados na máquina física, a qual está sendo virtualizada. O acesso à unidade de armazenamento ocorre em nível de bloco de dados. O funcionamento ocorre com uma solicitação de leitura ou escrita de dados a partir de computador origem. Então este comando de leitura e escrita SCSI é encapsulado em um pacote de rede via protocolo IP. Após isso é endereçado ao computador de destino que recebe pacote IP com o comando SCSI e o processa. O processamento vai recuperar ou gravar a informação para o computador que originou a solicitação.. O serviço base LVM (Logical Volume Management), agrupa e padroniza partições de um disco rígido em volumes lógicos de dados que podem ser facilmente redimensionados. Com o LVM, um disco rígido ou conjunto de discos rígidos é alocado em um ou mais volumes físicos. Os volumes físicos são combinados em grupos de volumes lógicos. Quando um novo disco rígido é adicionado ao grupo de volume lógico, suas partições podem ser expandidas (LEWIS, 2006). Com a integração destes dois serviços base, Open-iSCSI e LVM com o serviço Cinder da nuvem Openstack, é possível provisionar armazenamento de dados como serviço sob demanda ao usuário final. Além de permitir que usuário sirva-se da possibilidade de escalonar a quantidade de espaço de disco, tanto quanto quantidade de discos (chamado de volumes perante a nuvem Openstack) a utilizar em seu projeto de nuvem. Porem a escalabilidade estará confinada dentro dos limites de espaço de disco disponível para nuvem. A Figura 17 - Criação de Volumes demonstra a criação do volume via Dashboard Horizon, bem como espaço total disponível para ser alocado em um volume ou distribuído em vários. 61 Figura 17 Criação de Volumes. Fonte: O autor (2014). A Figura 18 Volumes Disponíveis ilustra os volumes já criados, que estão disponíveis para serem associados a máquinas virtuais e seus tamanhos. Figura 18 Volumes Disponíveis. Fonte: O autor (2014). As definições referentes a quantidade de processadores e memória RAM para a máquina virtual a ser instanciada na nuvem, também são realizadas via templates. Cada template define uma escala de processamento. As escalas estão definidas de mais leve com 512mb de memória RAM e um processador virtual, até a capacidade que os computadores 62 físicos que compõem a nuvem puderem oferecer sendo virtualizados. A definição deste template de processamento para a nuvem Openstack é Flavors (Sabores). Na Figura 19 Template Flavors (Sabores) Disponíveis, é possivel verificar os flavores para seleção do usuário ao instanciar sua máquina virtual na nuvem. Figura 19 Template Flavors (Sabores) Disponíveis. Fonte: O autor (2014). A criação dos templates flavors tem dependência direta com o hipervisor, no caso da nuvem Openstack implementada neste trabalho, o KVM é o hipervisor. Além do hipervisor, o driver de virtualização para hipervisor, o Libvirt também é tão essencial quanto, pois este auxilia o hipervisor na entrega ao usuário as funcionalidades de virtualização por meio de APIs. O Libvirt é o driver de virtualização para hipervisor que fornece um meio padrão para que seja possível gerenciar as máquinas virtuais executando sistemas operacionais de modo convidado, sobre o hipervisor de um computador. Como resultado, o Libvirt fornece APIs necessárias para realizar as atividades como: provisionar, criar, modificar e controlar as máquinas virtuais dentro dos limites hipervisor para essas operações. O Libvirt comunica-se com um hipervisor para executar as solicitações da API. O modelo de interface via APIs torna possível solicitar e processar as requisições remotamente. A API não trata políticas de virtualização de alto nível ou recursos de gerenciamento de múltiplos nós de máquinas virtuais, como balanceamento de carga, mas a API consegue servir recursos para que estas funcionalidades sejam implementadas sobre o Libvirt, ou mesmo no hipervisor. O Libvirt 63 consegue isolar aplicativos das frequentes mudanças, que podem ocorrer no nível mais baixo da estrutura de virtualização (LIBVIRT, 2014). O Libvirt é um conjunto de ferramentas de gerenciamento para aplicações com foco em virtualização baseado em APIs, assim como a plataforma de nuvem Openstack, que é baseado em APIs RESTful (Representational state transfer - Transferência do Estado Representativo ).As APIs do Openstack utilizam-se das funcionalidades as APIs do Libvirt, onde estas fazem o intermédio das requisições referente a virtualização com o hipervisor . O Libvirt é o principal responsável em possibilitar abstração por meio de APIs comuns com funcionalidades comuns, e a interação destas APIs entre si, tornam o ambiente de nuvem escalável. O KVM foi hipervisor escolhido para implantação da nuvem Openstack, por ser o hipervisor mais testado com integração ao Openstack e mais estável, sendo considerado o padrão para implantação. Conforme já abordado na sessão 2.1.7 KVM, no Capitulo 2 Fundamentação Teórica, o KVM faz a virtualização através do kernel do Linux, tendo grande responsabilidade no controle da paginação de memória e virtualização dos dispositivos do computador físico que foi virtualizado. O hipervisor KVM suporta os seguintes formatos de imagem de máquina virtual: RAW. QEMU Copy-on-write (qcow2). Disk QED Qemu aprimorada. VMDK, formato de disco da máquina virtual, referente a proprietário VMWare. O serviço Nova-Compute permite o controle do modelo de processador do computador físico via hipervisor KVM. Este controle inclui a capacidade maximizar o desempenho de máquinas virtuais, através da exposição de novos recursos de processador do computador físico para a máquina virtual, e também garante um padrão de processador consistente em todas as máquinas, removendo possíveis variáveis de incompatibilidade entre os processadores diferentes. O KVM é quem fornece as possibilidades de funcionalidades virtualizadas ao Libvirt, que por sequencia as organiza e distribui em forma de APIs. 64 Para proporcionar ao usuário final o serviço de rede além da virtualização realizada dos dispositivos de rede dos computadores físicos, foram implementados os serviços base Openvswitch, Quantum L3 Agent e Vlan bridge-utils. Openswitch como já abordado anteriormente tem o mesmo papel de um switch físico, porém virtualizado. Os Hipervisores precisam da capacidade de direcionar e controlar o tráfego entre as máquinas virtuais com as redes da nuvem. O Openvswitch possibilita que a rede seja identificada entre as máquinas virtuais para que estas possam facilmente comunicarse. Também garante que a rede não vai ser afetada se a máquina virtual for migrada para outro computador físico. O que torna possível isso é o princípio de soft state Este mantém o estado da camada de Enlance de rede IP, em uma tabela e encaminha para a camada de Rede, os estados dos dados roteáveis, a política de QoS, e configuração de monitoramento. Este direcionamento via camada de Rede é apoiada pelo serviço Quantum L3 Agent. Juntamente com o hipervisor o Openvswitch compõe o serviço Quantum, é responsável pela criação de redes privadas virtuais internas na nuvem para comunicação entre as máquinas virtuais desta rede. Também permite a criação de sub-redes e roteadores para essas redes.O que possibilita inclusive a saída da rede da máquina virtual para a rede de computadores físicos. Para gestão da rede da nuvem Openstack é feita a subdivisão em três redes de centros de dados físicos básicos distintos, que são: Rede de gerenciamento: rede de troca de dados interna entre os serviços e componentes da nuvem Openstack. Os endereços de IP são somente acessados dentro do centro de dados. Rede de dados: rede de comunicação de dados entre as máquinas virtuais da nuvem. Rede externa: rede de saída da nuvem com acesso a internet, as máquinas virtuais da nuvem conseguem acesso a internet, ou a rede física de computadores por meio desta rede. Na nuvem Openstack implementada é pré-definido e configurado o cenário de rede que é mais bem demonstrado pela Figura 20 - Topologia da rede da nuvem implementada. O tipo de rede de dados está endereçada com a faixa de IP 50.50.1.0/24. A comunicação das máquinas virtuais da rede de dados é feita através do router_univali. Este roteador virtual é responsável por direcionar o acesso à rede externa, resultando no acesso com a internet. Este 65 também é responsável pelo auxilio na composição de IPs (Internet Protocol – Protocolo de Internet) externos para nuvem na rede com faixa de IP 192.168.1.120/24. Figura 20 Topologia da rede da nuvem implementada. Fonte: O autor (2014). A nuvem implementada tem disponível para o usuário final sirva-se do serviço de rede alocando as máquinas virtuais, a rede ext_net, que fornece acesso à rede externa, e a rede net_univali que é a rede privada interna para comunicação entre as máquinas virtuais, conforme pode ser visto na Figura 20 Redes disponíveis na nuvem. Já na Figura 21, podem ser visualizadas as redes que estão disponíveis bem como seus estados de funcionamento. 66 Figura 21 Redes disponíveis na nuvem. Fonte: O autor (2014). 3.2 Acesso amplo à rede na Infraestrutura de nuvem Aplicada Assim como no Autosserviço, a nuvem tem que atender a requisições vindas de diversos dispositivos e comunicar-se ao usuário via uma interface padrão. O Dashboard Horizon é o painel de controle da nuvem que abstrai os detalhes e complexidades da nuvem ao usuário final, conforme já abordado no subcápitulo 3.2. O Dashboard Horizon é disponibilizado como um aplicativo web, desenvolvido em python no Framework Django, implementado sobre mod_wsgi e servidor de páginas web Apache, que o possibilita ser acessado via qualquer dispositivo que tenha acesso a internet e consiga carregar uma página de internet. A requisição é feita acessando o Dashboard Horizon. Este interpreta a solicitação e repassa a requisição para a API responsável para atende-lá. No momento seguinte interage com o serviço responsável para executar a requisição. Enfim retorna ao usuário via Dashboard o resultado (OPENSTACK, 2014). 67 Figura 22 Acesso à nuvem via smartphone. Fonte: O autor (2014). A Figura 22 demonstra o acesso realizado via smartphone ao Dashboard Horizon. Para que fosse realizado este teste o smartphone foi conectado na mesma rede da nuvem via conexão wireless, através de um navegador de internet, pode-se acessar o Dashboard Horizon. 3.3 Agrupamento de Recursos na Infraestrutura de nuvem Aplicada A nuvem é composta a partir da virtualização de dispositivos físicos, que quando virtualizados podem ser mais bem aproveitados e distribuídos. Os recursos computacionais virtualizados são agrupados e totalizados para que o usuário final possa organizá-los e distribuí-los conforme sua preferência ou necessidade. A disponibilidade e quantificação dos 68 recursos computacionais são segmentadas por projetos dentro da nuvem Openstack, onde cada projeto pode ser considerado uma nuvem secundária. A Figura 23 Visão Global, apresenta o resumo da quota de recursos computacionais que podem ser utilizados. Figura 23Visão Global dos recursos computacionais da nuvem. Fonte: O autor (2014). 3.4 Elasticidade rápida ou Escalabilidade na Infraestrutura de nuvem Aplicada O conceito de recursos computacionais infinitos é proporcionado pelo entendimento de que a nuvem não está restritamente atrelada aos recursos disponibilizados no momento. Esses recursos podem ser incrementados com a adição de novos dispositivos físicos, que quando virtualizados e configurados compartilham do mesmo padrão dos atuais, presentes na nuvem. Em outras palavras, os novos recursos computacionais estão aptos a serem agrupados com os recursos já existentes. Isso tudo é possível com base na disponibilidade e gerenciamento dos recursos como serviços. A plataforma de nuvem Openstack foi projetada para ser escalável horizontalmente, que é escalabilidade por adição de nós de nuvem dividindo a carga de processamento entre eles. Em vez de migrar a nuvem para servidores com maior capacidade, pode-se adicionar mais servidores e simplesmente instalar serviços configurados de forma idêntica. Em seguida é 69 possível escalar e balancear a carga entre os grupos de serviços funcionalmente idênticos, que comunicam-se em um barramento de mensagens padrão. A preocupação fica em torno do hardware que vai ser adicionado a nuvem, que deve possuir o mesmo tipo de processador para suportar a migração da instância. Quanto a possível diferença de processamento que pode ocorrer entre as máquinas virtuais, o serviço Nova-Scheduler controla a fila de processos, equilibrando a carga proporcionalmente aos diferentes poderes de processamento. As diferenças no dimensionamento, como quantidade de núcleos dos processadores, e a quantidade de memória RAM, são tratadas para que se tornem equivalentes ao usuário final. A formação desta escalabilidade na plataforma de nuvem Openstack depende da interação do usuário mesmo que se tenham recursos computacionais extras, para que seja possível a criação de uma nova máquina virtual para realizar escalonamento horizontal. Afim de que escalabilidade seja realizada de maneira automatizada, é necessário que existam recursos computacionais disponíveis e a configuração de três serviços: Heat, LBaas e Ceilometer. Cada um destes serviços tem uma tarefa específica, mas quando integrados é possível alcançar o objetivo de escalabilidade automática. O Heat é um serviço para orquestrar múltiplas instâncias virtuais, redes e outros serviços de modo automatizado por meio da comunicação do modelo de WebService com integração com as APIs dos serviços da nuvem. Para que ocorra a automação primeiramente é necessária a criação de um agrupamento de recursos computacionais. Cada um destes recursos é um componente de um agrupamento e deve estar descrito no modelo de template do agrupamento de recursos. A descrição de cada um desses recursos deve conter um tipo de recurso. O tipo de recurso define o que é o recurso alocado, se é uma instância de uma máquina virtual, ou se é um roteador virtualizado, ou uma sub-rede. Definidos os tipos de recurso e suas propriedades relacionadas, como por exemplo, se for uma instância de máquina virtual deve-se ter a definição do template de imagem de sistema operacional corespondente. Já se o recurso for do tipo referente à rede, um roteador, por exemplo, é definido a quais redes, este está conectado. Com as propriedades do modelo de template, os recursos podem ser tratados como objetos na comunicação com o WebService. As alterações feitas nesses objetos são repassadas do WebService para as APIs de serviços da nuvem, portanto é possível a criação de scripts para realização de alterações nos recursos computacionais alocados como objetos. No processo de automação da escabilidade da nuvem, o serviço Heat é responsável pela integração e dos serviços LBaaS e Ceilometer . Com a configuração dos parâmetros para o 70 Heat informando sua área de atuação e o que deve ser feito, este passa a coordenar os serviços de LBaaS (Load Balance-as-a-Service – Balanceador de Carga como Serviço) e Ceilometer, executando-os sem a necessidade de interação com o usuário. O serviço LBaaS é responsável por distribuir as solicitações de clientes em vários servidores. Este melhora a tolerância a falha do servidor, minimiza o tempo de resposta do usuário final e evita gargalos na utilização de recursos.O LBaaS executa sempre sobre um agrupamento de recursos(pool) pré-definido .As operações realizadas pelo serviço LBaaS são: Balanceamento da carga de tráfego rede de um cliente para serviços da nuvem, ou máquinas virtuais da nuvem, presentes na mesma rede ou em redes diferentes. Persistência de sessão de nuvem. Existem dois modelos de persistência de sessão padrão, a do IP de origem e de HTTP Cookies. Na persistência pelo IP de origem, as requisições de rede provenientes do mesmo endereço IP de origem são tratados pelo mesmo membro do agrupamento de recursos. No modelo HTTP Cookies, ao ser realizado a primeira requisição de rede de um cliente, a função de balanceamento de carga cria um cookie, para que as solicitações subsequentes, contendo o mesmo valor de cookie sejam tratadas pelo mesmo membro do agrupamento de recursos. Monitoramento do status atividade dos serviços de aplicativos. Através de requisições baseadas em protocolo ICMP (Internet Control Message Protocol – Protocolo de Controle de Mensagens via Internet) e HTTP (Hyper-Text Transfer Protocol Protocolo de Transferência de Hipertexto). Obtenção de estatísticas de monitoramento agrupamento de recursos. O LBaaS fornece um conjunto de estatísticas de cada agrupamento de recursos. Estas estatísticas detalham a quantidade de bytes recebidos pelos membros do agrupamento de recursos, bem como os bytes enviados, as conexões ativas e total de conexões realizadas. O monitoramento que o LbaaS faz é referente ao controle de uso, mas ele por si só não tem controle em relação à carga da utilização dos recursos. Para controle de carga deve-se utilizar o Ceilometer. Através do Ceilometer é possível realizar o controle de carga e sobre carga do agrupamento de recursos. O Ceilometer é o serviço que faz a mensurabilidade da utilização da nuvem para que seja possível a tarifação e caso da nuvem ser comercializada. Maior 71 detalhamento sobre o serviço Ceilometer está descrito no subcapítulo seguinte, que trata a aderência da nuvem comparando-a com a propriedade de Mensurabilidade. Com os três serviços, Heat, LBaaS e o Ceilometer integrados, a automação da escalabilidade da nuvem ocorre a partir da parametrização do serviço Ceilometer que deve sinalizar através de um aviso ou alerta a sobrecarga do agrupamento de recursos. Este sinal de sobrecarga é encaminhado ao serviço do Heat que está programado para quando recebê-lo, seja instanciada uma nova máquina virtual para dividir a sobrecarga. Após a nova máquina ser instanciada o Heat avisa ao serviço de balanceamento de carga, LbaaS, que está maquina está presente ao agrupamento de recursos e deve ser equilibrada a carga do agrupamento de recursos. 3.5 Mensurabilidade na Infraestrutura de nuvem Aplicada A realização da mensurabilidade da nuvem implementada Openstack é feita pelo serviço Ceilometer, que é distribuído como módulo que pode ser implementado para nuvem. O objetivo do serviço Ceilometer é mensurar o processamento dos recursos computacionais alocados para a nuvem como serviço. Perante a quantificação de utilização é padronizado as métricas para mensuração. O processo de mensuração passa por três etapas, medição, classificação e tarifação. A etapa de tarifação é aplicada para realizar a cobrança do usuário final, auxiliando na determinação do preço pelo uso da nuvem, caso esta seja comercializada. A forma com que são coletados os dados é por meio de uma camada de notificação criada pelo serviço Ceilometer, onde os serviços da nuvem antes de qualquer execução passam por ela. A cada processo que passa pela camada de notificação são gerados as informações sobre os serviços da nuvem. Estes dados são interpretados pelo Agente Coletor do Ceilometer. Na interpretação dos dados coletados, são aplicadas métricas de mensuração para apresentação de valores padronizados. Depois dos dados coletados serem tratados, eles são gravados no banco de dados ou em um arquivo simples para serem resgatados e posteriormente demonstrados ao administrador da nuvem. O serviço Ceilometer contempla um componente que é responsável especificamente pela emissão de notificação de alarme. O componente de alarme permite configurar alarmes com base na avaliação de métricas sobre limites de carga estipulados na coleta dos dados dos serviços da nuvem. Um alarme pode ser definido sobre uma única métrica, ou em uma combinação de métricas. Por exemplo, pode ser definido um alarme que dispare quando o 72 consumo de memória chega a 70% em uma determinada máquina virtual, e se este estado da memória se manteve por um período maior que de 30 minutos. Como base, o Ceilometer tem três tipos de métricas, Acumulativa, Bitola (Gauge) e Delta. Todas estas métricas são aplicadas sobre os recursos computacionais virtualizados, ou sobre as instancias das máquinas virtuais. A métrica Acumulativa mensura o aumento de uso em decorrer do tempo. A partir desta métrica é possível mensurar: Tempo de uso do processador (processador referente a maquina virtual), unidade de medida em nano segundo. Os dados são de origem de pesquisa. Utilização do processador pelo sistema operacional, tempo ocioso do processador, tempo em espera do processador, esperando processamento dos dispositivos de entrada e saída. Unidade de medida nano segundo. Os dados são de origem de notificação. Número de requisições de leitura e escrita de disco, unidade de medida número de requisições. Os dados são de origem de pesquisa. Volume de dados de leitura e escrita em disco. Unidade de medida em Bytes. Os dados são de origem de pesquisa. Número de bytes de entrada de saída na interface de rede de uma máquina virtual. Unidade de medida total de bytes trafegados. Os dados são de origem de pesquisa. A métrica de Bitola, mensura dados referentes a atividades relacionadas com IPs Flutuantes, tempo de processamento de imagens de máquinas virtuais, valores variáveis referentes à leitura e escrita de dados no respectivo disco. Esta métrica é utilizada na mensuração de: Média de utilização de processador. Unidade de medida em percentual. Os dados são de origem de pesquisa. Frequência do processador. Unidade de medida MHz. Origem dos dados por notificação. 73 Utilização do processador pelo sistema operacional em percentual, tempo ocioso do processador em percentual, tempo em espera do processador em percentual, esperando processamento dos dispositivos de entrada e saída em percentual. Unidade de medida nano segundo. Os dados são de origem de notificação. Média de requisição de leitura e escrita de disco. Unidade de medida em requisições por segundo. Os dados são de origem de pesquisa. Média de bytes escritos e lidos de um disco. Unidade de medida bytes por segundo. Os dados são de origem de pesquisa Média de bytes por segundo de entrada de saída na interface de rede de uma máquina virtual. Unidade de medida bytes por segundo. Os dados são de origem de pesquisa A métrica Delta mesura a carga de tráfego quanto é suportado, bem como a largura de banda. Está métrica mensura como, por exemplo: Quantidade de requisições criadas para um roteador, ou uma porta de rede, subrede. Quantidade de rotas, requisições por porta, requisições por sub-redes. Os dados são de origem de Notificação. Estes são somente alguns exemplos de mensurabilidade utilizados pelo serviço Ceilometer divididas entre os três tipos de métricas. A plataforma Openstack na versão que foi implementada, não é perfeitamente aderente à documentação que definição de computação em nuvem do NIST. Entretanto, novas versões da plataforma ocorrem a cada semestre. A cada nova versão, a plataforma fica mais estável e são acrescentadas novas funcionalidades. Uma das funcionalidades que não existia na versão da nuvem implantada, que já foi liberada em nova versão, é a funcionalidade de escalabilidade vertical. Escalabilidade vertical é a capacidade de redimensionar o poder computacional de uma instância, sem que seja necessário instanciar uma nova máquina virtual. É possível adicionar um novo nó computacional e determinar que os recursos computacionais dele vão ser alocados para uma máquina virtual já existe, redimensionado o poder computacional desta máquina virtual. Mesmo assim a plataforma proporciona como 74 serviço uma infraestrutura de nuvem, abstraindo do usuário final maior detalhamento de configuração da estrutura física. O usuário final consegue servir-se e provisionar recursos computacionais sob demanda e através destes, formar uma infraestrutura, definidos modelo de rede, de armazenamento e de capacidade de processamento. É possível mensurar os recursos computacionais, e acessá-los de qualquer localidade com disponibilidade de internet. Com a nuvem implementada, foi formada a infraestrutura base para que ela cresça através da adição de mais nós computacionais. Na nuvem implementada é possível instanciar maquinas virtuais, criar unidades de armazenamento, criar redes, simular ambientes para testes de softwares. É possível aproveitar-se das APIs disponibilizas e formar um sistema auto escalável, onde este quando sobre carregado, solicite à nuvem novas máquinas virtuais para balancear a carga. È possível mensurar a utilização das máquinas virtuais criadas na nuvem, ou dos recursos computacionais em separado. É possível configurá-la, liberando-a para acesso externo, via internet, e provisionar recursos computacionais, ou máquinas virtuais. É possível gerenciar de modo centralizado, rápido e fácil toda a infraestrutura, controle sobre a rede, controle sobre o armazenamento de dados, controle sobre o processamento, sobre as máquinas. Agilidade da manutenção através da formação do catalogo de imagens de sistemas operacionais e templates flavor. Balancear a carga de sistemas migrados para a plataforma de nuvem. 75 4 CONCLUSÕES Este trabalho teve por objetivo explorar o conceito de computação em nuvem aplicada para oferecer uma infraestrutura como serviço. Para isso, foi feita a revisão bibliográfica da área de sistemas distribuídos, que proporcionou o entendimento de como ocorreu a evolução da tecnologia de computação em nuvem. Ficou claro então que as características da computação em nuvem foram herdadas das tecnologias anteriores, virtualização, cluster e computação em grid. A revisão sobre o conceito de computação em nuvem demonstrou a existência de uma convergência dos recursos de TI para imersão neste paradigma, por motivos de necessidade crescente por manuteabilidade, escalabilidade e abstração da complexidade da infraestrutura. Pode se perceber também o aumento da necessidade do usuário pela busca de independência, do autosserviço, sem ter a preocupação de onde está localizada a infraestrutura fisicamente, ou configuração que deve ser feita para ter a disponibilidade de acesso à infraestrutura computacional. A nuvem consegue transformar recursos computacionais ao usuário por meio de uma interface padrão, permitindo assim a independência do usuário, que realiza sozinho suas demandas. Os estudos realizados serviram de suporte para determinar quais serviços a infraestrutura de nuvem deve proporcionar e a base para implementá-los. A expectativa gerada sobre a possível implementação da nuvem em computadores simples, não obteve sucesso. O fator fundamental neste caso foi a ausência da instrução de virtualização nativa nos processadores, como por exemplo, VT-X(Virtualização nativa nos processadores da plataforma Intel) e AMD-V(Virtualização nativa nos processadores da plataforma AMD). O hardware e os processadores utilizados neste primeiro ambiente não tinham a instrução nativa de virtualização. Quanto à tentativa da aplicação do ambiente de nuvem sobre um ambiente já virtualizado, é válida, mas somente para fins de conhecimento do funcionamento da nuvem. Pois neste caso já ocorreu a virtualização, e para seu funcionamento deveria ocorrer a virtualização sobre a virtualização, o que não é possível. Sobre um ambiente já virtualizado pode-se somente simular a virtualização, como por exemplo, a virtualização QEMU. Aplicando a simulação de virtualização perde muito rendimento, pois o processador vai processar dois ciclos para que cada processo gerado a partir desta simulação. Portanto tornase inviável a utilização da nuvem para execução de tarefas que demandam por processamento. 76 Em ambos os casos a premissa determinante para formar-se uma infraestrutura de nuvem é a virtualização. Para que a virtualização seja favorável e não um obstáculo na execução na nuvem, se faz necessária a aplicação sobre uma infraestrutura cujos processadores apresentem a instrução de virtualização nativa. A demanda por processamento da nuvem e a integração de tecnologias de virtualização exigiu alteração do ambiente e busca por uma estrutura de computadores mais modernos, com maior capacidade de processamento e principalmente com a instrução de virtualização nativa. A plataforma de nuvem escolhida, o Openstack, não tem uma instalação monolítica ou empacotada. A proposta do Openstack é ser multitarefa através da divisão em serviços, que são configurados separadamente e por fim integrados e orquestrados pelo próprio Openstack. Cada um destes módulos corresponde a um determinado serviço da nuvem. O detalhamento para prestar cada serviço tem uma dependência em tecnologias variadas, onde cada uma destas gera a necessidade de conhecimento aprofundado. Apesar da complexidade na implantação de cada serviço, a plataforma de nuvem escolhida Openstack, é benéfica por possuir ampla gama de recursos que podem ser provisionados e integrados. Existem inúmeras possibilidades tanto de aprofundamento quanto de melhorias através incorporação em cada um dos serviços. Com o aprofundamento do conhecimento na plataforma Openstack pode-se notar que ela está tornando-se referência padrão de plataforma de nuvem, com grandes corporações investindo em seu crescimento. Pela plataforma ser de código aberto, cada uma destas corporações consegue adaptá-la conforme sua necessidade específica. Os conceitos de nuvem e sua aplicação por meio do Openstack foram contrastados frente à sua aderência as definições de computação em nuvem descritas na documentação The NIST Definition of Cloud Computing (NIST Special Publication 800-145) pelo NIST. Cada propriedade definida na documentação no NIST, foi atendida por um ou mais serviços da nuvem implementada. Como conclusão final pode-se afirmar que o modelo de nuvem na sua camada mais baixa, de infraestrutura como serviço, não atende por completo os requisitos que uma nuvem deve proporcionar ao usuário, principalmente na abstração do detalhamento de configuração. Sempre em algum quesito é necessária a intervenção do usuário na infraestrutura física para atender completamente as requisições feitas para o serviço da nuvem. Entre essas intervenções pode citar a configuração que deve ser realizada para adição de mais Nós Computacionais na nuvem. A tecnologia de computação em nuvem ainda é muito incipiente e 77 ainda não se tem um padrão exato a ser seguido. A plataforma Openstack assim como a tecnologia de computação em nuvem está em constante alteração para facilitar sua instalação. A tecnologia Openstack passa por constantes atualizações que ocorrem a cada semestre, para tornar a nuvem mais estável. Portanto a cada semestre é liberada uma nova versão da plataforma. Desde o início do desenvolvimento deste trabalho de pesquisa foram liberadas quatro versões diferentes. Como trabalhos futuros propõem-se realizar (i)desenvolvimento de aplicações para a nuvem implementada explorando as funcionalidades de escalabilidade e serviços sob demanda; (ii) Portabilidade de sistemas para nuvem implementa; (iii) Aprimoramento dos recursos de escalabilidade a partir da atualização da versão da plataforma, como tornar a nuvem escalável verticalmente além de horizontalmente; (iv) Aumentar o tamanho da nuvem, torná-la uma nuvem Híbrida ou Pública, bem como sua capacidade de processamento adicionando cada vez mais nós; (v) Disponibilizar acesso a nuvem para pesquisa e uso com aplicações que demandam de processamento. Como por exemplo, oferecer acesso à nuvem, para que alunos possam desenvolver aplicações em larga escala. Além do desenvolvimento destas aplicações, testá-las e executá-las o que exige uma infraestrutura flexível e de fácil acesso. 78 REFERÊNCIAS AMRHEIN, Dustin; SCOTT, Quint. Computação em Nuvem para a Empresa: Parte 1: Capturando a Nuvem. 2009. Disponível em <http://www.ibm.com/developerworks/br/websphere/techjournal/0904_amrhein/0904_amrhei n.html>. Acesso 20 abril de 2012. BACELLAR, Hilario Viana. Cluster: Computação de Alto Desempenho. 2010. Campinas, SP, Brasil. CISCO, Connected World Report: Part 3, Data Center. Disponível em: <http://newsroom.cisco.com/dlls/2010/ekits/Cisco_Connected_World_Report_PartIII.pdf >. Acesso em 27 março de 2012. CHRISTESEN, Sune. 20 Cloud Platforms (IaaS software). 2011. Disponível em <http://www.datacentermap.com/blog/cloud-software-389.html>. Acesso 11 de abril de 2011. COELHO, Fabio, et al. Trabalho de Redes de Computadores I. 2008. Disponível em: < http://www.gta.ufrj.br/grad/09_1/versao-final/virtualizacao/index.html>. Acesso em: 17 abril 2012. DEDLEY, H. History of Virtualization. 2009. Disponível em: <http://www.infobarrel.com/History_of_Virtualization>. Acesso em: 03 abril 2012. FERRER, Rafael. Nuvem poderá movimentar US$ 1,45 bi em 2015. 2011. Disponível em < http://info.abril.com.br/noticias/ti/nuvem-podera-movimentar-us-1-45-. shl>. Acesso em 16 de maio de 2012. FOSTER, Ian et al. The Anatomy of the Grid: Enabling Scalable Virtual Organizations, Intl J. Supercomputer Applications. 2001. Disponível em: <http://www.globus.org/alliance/publications/papers/anatomy.pdf >Acesso em: 17 abril 2012. FURHT, Borko, ESCALANTE, Armando. Handbook of Cloud Computing. ,Springer, 2010. GANDOUR, Fábio L. Cloud Computing na área. 2008. Disponível em <http://info.abril.com.br/corporate/storage/cloud-computing-na-area.shtml>. Acesso em 25 de maio de 2012. GOOGLE, App Engine. 2012. Disponível em: <https://developers.google.com/appengine/docs/whatisgoogleappengine?hl=pt-BR>. Acesso em 27 março de 2012. GOOGLE, Google Chrome. 2012. Disponível em: <https://www.google.com/chrome/intl/ptBR/more/index.html?hl=pt-br>. Acesso em: 10 de abril de 2012. HAGUIAR,Alexandre,Openstack Disponível em <https://www.softwarelivre.gov.br/palestras-tecnicas-cisl/linuxnuvem3> Acesso em: 11 de maio de 2012. 79 JONES, Tim M. Computação em Nuvem com Linux: Plataformas e Aplicativos da Computação em Nuvem. 2009. Disponível em: <http://www.ibm.com/developerworks/br/library/l-cloud-computing/>. Acesso em 28 de abril de 2012. JOVANELI, Rogerio. Brasil supera média de cloud computing. 2010. Disponível em < http://info.abril.com.br/noticias/mercado/brasil-supera-media-mundial-em-cloud-computing09122010-28.shl?2>. Acesso em 11 de maio de 2012. KING, Samuel T., et al. Operating System Support for Virtual Machines.. Proceedings of the 2003 USENIX Technical Conference. Department of Electrical Engineering and Computer Science University of Michigan.2003. KUNDRA, Vivek. Federal Cloud Computing Strategy. 2011. Disponível em: <http://www.cio.gov/documents/federal-cloud-computing-strategy.pdf>. Acesso em: 17 abril 2012. LAUREANO, Mauro. Máquinas Virtuais e Emuladores:Conceitos, Técnicas e Aplicações. 2006. Disponível em: < http://www.mlaureano.org/aulas_material/so/livro_vm_laureano.pdf>. Acesso em: 17 abril 2012. LEWIS, A.J. LVM HOWTO. 2006. Disponível em: < http://tldp.org/HOWTO/LVMHOWTO/index.html > Acesso em 20 de Abril de 2014. LIBVIRT, libvirt. 2014. Disponível em <http://libvirt.org/> Acesso em: 28 de março de 2014. M.A.R Dantas. Grids Computacionais Fundamentos, Ambientes e Experiências. Congresso Brasileiro de Ciência da Computação, Itajaí, 2004, 873 – 882. Itajaí, SC – Brasil.2004. MELL,Peter;GRANCE,Timothy. The NIST Definition of Cloud Computing (NIST Special Publication 800-145). NIST National Institute of Standards and Technology,Gaithersburg, September 2011. Disponível em: <http://csrc.nist.gov/publications/nistpubs/800-145/SP800145.pdf>. Acesso em: 03 de Março de 2012. NIST, About NIST. 2014. Disponível em < http://www.nist.gov/ >. Acesso em 03 de junho de 2014. OPENSTACK,Dashboard Horizon.2014.Disponível em <http://horizon.openstack.org/intro.html>. Acesso em: 28 de maio de 2014. OPENSTACK,Grizzly. 2014. Disponível em <http://docs.openstack.org/grizzly/basicinstall/apt/content/basic-install_architecture.html > Acesso em: 28 de maio de 2014. OPENSTACK, GLANCE. 2012. Disponível em <http://glance.openstack.org/> Acesso em 28 de maio de 2012. 80 OPENSTACK, NOVA. 2013. Disponível em < http://nova.openstack.org/>. Acesso em 28 de maio de 2014. OPENSTACK, Openstack. 2014. Disponível em <http://openstack.org/downloads/openstack-overview-datasheet.pdf>. Acesso em: 28 de abril de 2014. OPEN VSWICH, Open vswich. 2014 Disponível em < http://openvswitch.org/>. Acesso em: 13 de maio de 2014. OPENSTACK, Image-Formats. 2014. Disponível em<http://docs.openstack.org/imageguide/content/image-formats.html> Acesso em 01 de maio de 2014. ORLANDO, Dan. Modelos de serviço de computação em nuvem, Parte 1: Infraestrutura como serviço. 2011. Disponível em <http://www.ibm.com/developerworks/br/cloud/library/cl-cloudservices1iaas/ >. Acesso 12 de abril de 2012. PITANGA, Marcos. Compuatacao em Cluster. 2003. Disponível em: <http://www.clubedohardware.com.br/artigos/153>. Acesso em: 17 abril 2012. PITANGA, Marcos. Computação em Cluster:O estado da arte em computação. Rio de Janeiro: EditoraBrasport, 2003. RHOTON, John. Discover OpenStack: The Storage components Swift and Cinder.2013. Disponível em< http://www.ibm.com/developerworks/cloud/library/cl-openstack-swiftcinder/index.html?ca=dat> Acesso em 12 de maio de 2014. RUEST, N., RUEST, D., Virtualization: The beginner´s guide, Mc. Graw Hill, New York, 2009, ISBN: 978-07-161401-6. SINGHT, Amit. An Introduction to Virtualization. 2004. Disponível em: <http://www.kernelthread.com/publications/virtualization/>. Acesso em: 03 abril 2012. STOCKINGER Heinz, Defining the Grid: A Snapshot on the Current View.Springer Netherlands.2007. STRICKLAND, Jonathan. Como funciona a computação em grade. 2009. Disponível em: <http://informatica.hsw.uol.com.br/computacao-em-grade.htm> Acesso em: 17 abril 2012. TAURION, Cezar. Entendendo o modelo multi-tenancy. 2010. Disponível em <https://www.ibm.com/developerworks/mydeveloperworks/blogs/cTAURION/entry/entenden do_o_modelo_multi-tenancy?lang=pt_br>. Acesso em 10 de maio de 2012. TAURION, Cezar. Cloud Computing: Começando a jornada por nuvens privadas. 2011. Disponível em <https://www.ibm.com/developerworks/mydeveloperworks/blogs/cTAURION/entry/comecan do_jornada_por_nuvens_privadas?lang=pt_br>. Acesso 20 abril de 2012. 81 THOMAS, Bittman J. Criando uma nuvem privada. 2009. Disponível em <http://info.abril.com.br/noticias/corporate/gartner/criando-uma-nuvem-privada-0311200912.shl?4 >. Acesso 02 de maio de 2012. THOLETI, Bhanu P. Hypervisors, virtualization, and the cloud: Learn about hypervisors, system virtualization, and how it works in a cloud environment. 2011. Disponível em: < http://www.ibm.com/developerworks/cloud/library/cl-hypervisorcompare/>. Acesso em: 03 abril 2012. UDDOH, Emmanuel. Cloud, Grid and High Performace Computing: Emerging Applications. Hershey. IGI Global, 2011. UBUNTU, iSCSI Initiator.2014.Disponível em: <https://help.ubuntu.com/12.04/serverguide/iscsi-initiator.html> Acesso em 03 de Maio de 2014. Vecchiola C., Chu, X. and Buyya R. Aneka: A software platform for .net-based cloud computing. CoRR, abs/0907.4622, 2009. Disponível em <http://arxiv.org/ftp/arxiv/papers/0907/0907.4622.pdf> . Acesso 02 de maio de 2014. WEISS, Aaron. Computing in the Clouds. Magazine netWorker - Cloud computing: PC functions move onto the web 2007. New York, Estados Unidos. 82 GLOSSÁRIO Firewall Parede corta fogo. Dispositivo que controla o tráfego entre a Internet e um computador ligado a ela. Impede que usuários não autorizados entrem neste computador, via Internet, ou que dados de um sistema caiam na Intenet, sem prévia autorização. Sandbox “Caixa de areia” é um ambiente protegido. Programas executados em um sandbox possuem poucos privilégios e não podem fazer diversas alterações no sistema. Thread É a forma de um processo dividir a si mesmo em duas ou mais tarefas que podem ser executadas concorrentemente. Dashboard Painel de Ferramentas, Painel de instrumentos, Painel de controle geral. Local onde se pode ter a visão geral da plataforma que está sendo utilizada. API Interface de Programação de Aplicativos, padrão formalizado para solicitar funcionalidades de um sistema ou recurso e utilizá-lo sem entrar em detalhes do funcionamento do recurso. QoS (Quality of Service) Qualidade de serviço, qualidade do trafego dos pacotes de rede entre computadores. Smartclient Aplicativo cliente simples, que conecta-se com um aplicativo servidor para ser executado.