• Nenhum resultado encontrado

3.2 Nuvens Computacionais

3.2.1 Amazon Elastic Compute Cloud

O Amazon Elastic Compute Cloud (Amazon EC2) apresenta um ambiente de compu- tação virtual, acessível através de interfaces de serviço Web para iniciar instâncias com

várias opções de configuração e personalização [2]. O usuário pode usar imagens previ- amente preparadas com opções em sistemas operacionais ou mesmo criar e personalizar suas próprias imagens. A criação de instâncias é personalizável em capacidade de pro- cessamento, armazenamento e rede. O usuário tem controle total sobre suas instâncias podendo instalar aplicativos personalizados, gerenciar permissões de acesso da sua rede, pagando somente pelos recursos que usar (utility computing). O Amazon EC2 fornece uma série de recursos para criar aplicativos de classe empresarial escaláveis. Os principais recursos oferecidos são:

• Amazon Elastic Block Store (EBS): oferece armazenamento persistente para as instâncias da Amazon EC2 [137]. Os volumes do Amazon EBS são vinculados à rede e persistem independentemente da vigência de uma instância. Eles podem ser usados como um exemplo de partição de inicialização do Amazon EC2 ou liga- dos a uma instância em execução do Amazon EC2 como um dispositivo de bloco padrão. O Amazon EBS fornece dois tipos de volumes, o volume padrão e o vo- lume de IOPS (Input/Output Operations Per Second) provisionadas. Os volumes padronizados oferecem armazenamento econômico, o que é ideal para aplicativos com requisitos moderados ou intermitentes de E/S. Os volumes de IOPS provisio- nadas são desenvolvidos para fornecer alto desempenho previsível para aplicativos com uso intensivo de E/S, como bancos de dados. Visando melhor desempenho a Amazon oferece instâncias otimizadas para EBS que utilizam totalmente as IOPS provisionadas em um volume do EBS. As instâncias otimizadas para EBS fornecem taxa de transferência dedicada entre o Amazon EC2 e o Amazon EBS, com opções de 500 Mbps a 1.000 Mbps, dependendo do tipo de instância usado.

• Amazon Simple Storage Service (Amazon S3): fornece uma interface sim- ples de serviços da Web que pode ser usada para armazenar e recuperar qualquer quantidade de dados, a qualquer momento e de qualquer lugar na Web [72]. O S3 permite gravar, ler e excluir um número ilimitado de objetos que podem conter até 5 terabytes de dados cada um. Cada objeto é armazenado em um balde (bucket) e é recuperado através de uma chave específica que é atribuída a um desenvolve- dor. Os objetos, protegidos por mecanismos de autenticação, podem ser públicos ou privados, e direitos podem ser atribuídos a usuários específicos. Existem opções para upload/download seguro de dados e criptografia de dados em repouso para proteção adicional dos dados. Usa HTTP como protocolo padrão para download e aceita interfaces REST [78] e SOAP para trabalhar com qualquer ferramenta de desenvolvimento de Internet.

• Endereços Elastic IP: endereços de IP estáticos projetados para computação em nuvem dinâmica. Um Endereço Elastic IP está associado à sua conta e não a

uma instância específica. Dessa forma o usuário controla o endereço até que decida explicitamente liberá-lo. A Amazon permite configurar o registro de DNS reverso de qualquer um dos seus endereços Elastic IP facilitando o acesso aos recursos. • Amazon Virtual Private Cloud (VPC): permite provisionar uma seção da

nuvem da Amazon Web Services (AWS) isolada logicamente onde o usuário pode usar recursos da AWS em uma rede virtual por ele definida. Isso permite controle total sobre o ambiente de rede virtual, incluindo a seleção do seu próprio intervalo de endereços IP, criação de subredes e configuração de tabelas de roteamento e gateways de rede. A VPC permite a criação de uma conexão VPN (Virtual Private Network) entre o centro de dados corporativo (datacenter) e a VPC tornado a VPC uma extensão do datacenter [77].

• Cluster de Computação de Alto Desempenho (HPC): a Amazon dispõe de instâncias de computação em cluster, GPU de cluster e de cluster com mais memória que fornecem capacidade de rede de alto desempenho e podem ser executadas de forma programada em clusters, permitindo que aplicativos se beneficiem de baixa latência da rede para comunicações de nó a nó fortemente acoplados. Ampliando as opções para HPC, a Amazon oferece a opção de uso do Univa Grid Engine nos clusters Amazon [138, 117].

• Amazon Elastic MapReduce (Amazon EMR): é um serviço para processa- mento de grandes massas de dados. O EMR usa uma estrutura Hadoop [139] hospe- dada e executada na infraestrutura Amazon. O EMR permite que aplicações sejam desenvolvidas com ferramentas específicas do Hadoop com o Pig [140] e também com as linguagens tradicionais como Java, C++, Perl e Python. O EMS permite o uso de vários clusters com a possibilidade de redimencionamento em tempo de exe- cução. A integração do EMR com os outros serviços da Amazon (EC2, S3, VPC, HPC) faz dele uma opção para endereçar o paradigma Big Data.

• Amazon CloudWatch: é um serviço Web para monitoramento de recursos e aplicativos da nuvem da Amazon. O CloudWatch fornece visibilidade sobre uso de recursos, desempenho operacional e padrões de demanda geral, incluindo métricas como utilização de CPU, leituras e gravações do disco e tráfego de rede. Ele gera estatísticas, gráficos e permite definir alarmes para a métrica de dados [141]. • Auto Scaling e Elastic Load Balancing: Auto Scaling [142] permite expandir

ou reduzir a capacidade de uso automaticamente conforme condições previamente definidas. Ele redimensiona durante picos de demanda para manter o desempenho e diminui automaticamente durante quedas de demanda para minimizar custos. O

Elastic Load Balancing [143] distribui automaticamente o tráfego de entrada dos aplicativos em várias instâncias. Ambos podem ser usados em conjunto com o CloudWatch.

• Amazon Simple Workflow (Amazon SWF): é um serviço de coordenação de tarefas e gerenciamento de estado para aplicativos em nuvem. As APIs SWF forne- cem um mecanismo de controle e ferramentas para coordenar, auditar e dimensionar aplicativos em várias máquinas, na nuvem da Amazon ou em outros centros de da- dos. O SWF gerencia as dependências entre as tarefas, agenda a execução das tarefas e executa toda a lógica que precisa ser executada em paralelo. Além disso, o serviço armazena tarefas, despacha-as com segurança para os componentes do apli- cativo, acompanha seu progresso e mantém seu estado mais recente. O SWF é o gerenciador de workflows da Amazon.

Modelo para comercialização de instâncias: a Amazon oferece três opções para tarifar o uso de seus recursos computacionais, instâncias on-demand; reserva- das e spots. Instâncias on-demand são tarifadas com taxa específica por hora de uso conforme a capacidade computacional das instâncias usadas, sem nenhum com- promisso em longo prazo ou pagamentos prévios. Instâncias reservadas usam tarifa mais baixa, única e inicial para cada instância, sempre disponível mas que deve ser reservada por contrato por um período de um ou três anos. Instâncias spots permitem aos clientes comprarem capacidade computacional sem compro- misso prévio e por taxas horárias normalmente menores do que a taxa on demand. Instâncias spots são oferecidas de forma intermitente cujo custo spot oscila com base no fornecimento e na demanda das instâncias.

AWS SDK para Java: é a principal ferramenta de desenvolvimento de aplicações para a plataforma Amazon [144]. O AWS SDK fornece APIs Java para os principais serviços Amazon Web Services (AWS) [145]. Através do SDK é possivel desenvolver soluções com e para o EC2, S3, VPC, CloudWatch e os outros serviços Amazon. A API Amazon não é um padrão mas é a grande referência para os desenvolvedores de middlewares, infraestruturas e aplicações de nuvem.

A Amazon é a maior referência de IaaS e na tecnologia relacionada, mas é importante destacar alguns outros esforços.

Microsoft Azure

O Windows Azure é uma plataforma em nuvem aberta e flexível que permite criar, im- plantar e gerenciar aplicativos em uma rede global de centros de dados gerenciada pela

Microsoft [71]. O Azure permite criar aplicativos usando qualquer linguagem, ferramenta ou estrutura, além de facilidades para integrar aplicativos em nuvem pública ao ambiente de TI já existente. A plataforma Azure fornece um ambiente Windows para execução de aplicativos e armazenamento de dados em servidores nos centros de dados; o SQL Azure fornece serviços de dados baseado em SQL Server; e servicos .NET podem ser usados tanto para a plataforma de nuvem como para aplicações locais. As facilidades do Azure são semelhantes às da Amazon já vistas. Uma caracterítica importante do Azure é a sua integração com a linha de produtos Microsoft como o Office. A Microsoft tem feito um esforço para levar seus produtos para os limites da computação em nuvem. Um exemplo desse esforço é a integração dos componentes do Microsoft Business Intelligence (BI) [146] com clusters HDInsight Hadoop [147]. Através dessa integração é possível conectar uma planilha Excel com o sistema de armazenamento do Azure associando os dados armazena- dos com clusters HDInsight Hadoop através da Microsoft Power Query para Excel [147]. Essa opção facilita o tratamento de grandes massas de dados (big data).

IBM SmartCloud

A IBM SmartCloud é uma família de tecnologias e serviços de computação em nuvem de classe corporativa para construir, com segurança, nuvens públicas, particulares e hí- bridas [148] com consultoria e suporte na implementação. As facilidades oferecidas pela SmartCloud são semelhantes às disponíveis na Amazon. Um aspecto de destaque é que a IBM, através da IBM’s open cloud architecture [61], está fazendo um esforço em padrões abertos para nuvem. A IBM é membro fundador do Cloud Standards Customer Council (CSCC) [149], um dos locais onde estão sendo discutidos padrões para nuvens.

Google App Engine

O Google App Engine (GAE) é uma plataforma para aplicações Web tradicionais em cen- tros de dados gerenciados pelo Google [65]. O GAE suporta linguagens de programação como Python e Java. Arcabouços Web que executam o GAE incluem suporte a Django, CherryPy, Pylons e web2py, bem como JSP e ASP.NET. O GAE lida com implanta- ção de código em clusters, faz monitoramento, trata falhas e pode disparar instâncias de aplicativos quando necessário. O GAE dispõe de um conjunto de APIs para tratar ar- mazenamento e recuperação de dados em bancos de dados não-relacionais BigTable [150]. Além do Google App Engine o Google desenvolveu outras duas tecnologias importantes para a computação em nuvem, o Google File System e o arcabouço de software MapRe- duce [4].

O Google File System (GFS) [151] é um sistema distribuído de arquivos, proprietário, desenvolvido pela Google e especialmente concebido para fornecer acesso eficiente aos

dados confiáveis usando grandes aglomerados de servidores. Os arquivos são divididos em segmentos de 64MB, cujos dados geralmente são lidos ou anexados e muito raramente atualizados. O GFS foi projetado e otimizado para fornecer alta vazão de dados, baixa latência e ser tolerante a falhas individuais de servidores. Os dados são providos através de HTTP, permitindo o acesso a todo o conteúdo a partir do navegador Web ou qualquer outro tipo de cliente. Os nós de dados podem conversar entri si para reequilibrar a distribuição de dados, para mover cópias e manter a replicação de dados alta.

MapReduce [152] é um arcabouço de software introduzido pelo Google para suportar a computação distribuída em grandes conjuntos de dados em clusters. MapReduce é composto por um Mestre para o qual aplicações submetem tarefas MapReduce. O Mestre distribuí as tarefas em nós disponíveis no centro de dados, tentando manter as tarefas o “mais próximo possível” dos dados. O Mestre sabe qual nó contém os dados e quais outros hospedeiros são próximos. Se a tarefa não pode ser hospedada no nó onde os dados estão armazenados, a prioridade é dada para nós no mesmo rack. Dessa forma, o tráfego no backbone é reduzido melhorando a desempenho da rede com um todo, pois o backbone é um gargalo potencial no centro de dados. Se uma tarefa falha ela é realocada pelo Mestre. O projeto open source Hadoop MapReduce [139] é inspirada pelo trabalho do Google.

3.2.2 Middlewares para Construção de Nuvens

O crescimento da computação em nuvem é vigoroso e muitas são as opções em middlewa- res, plataformas e kits para a construção de nuvens privadas, públicas e híbridas. Pela sinergia com os objetivos desta tese a seguir serão abordadas opções de plataformas open source para nuvem. As caracteríticas e facilidades das plataformas Eucalyptus, Nim-

bus, OpenNebula e CloudStack serão mostradas de forma resumida. Por ter sido

usada na construção do protótipo do CEO, a plataforma OpenStack será mostrada com maiores detalhes.

Eucalyptus

O projeto Eucalyptus [153] oferece uma plataforma de código aberto para pesquisa em nuvem computacional. Ele é compatível com as APIs EC2 da Amazon, suporta quase todos os principais recursos do EC2, incluindo criação de instâncias virtuais, armazena- mento (EBS e S3) e endereços IP elásticos. O Eucalyptus provê uma plataforma para criar e gerenciar uma nuvem privada para mútiplos usuários. No entanto, Eucalyptus, como grande parte do software emergente para computação em nuvem, ainda está evoluindo e tem princípios de projeto que podem não ser compatíveis com as políticas de centros de supercomputação (data centers). A arquitetura do Eucalytpus é formada por quatro componentes, Node Controller (NC), Cluster Controller (CC), Storage Control (Walrus)

e o Cloud Controller (CLC) [75].

Node Controller: este componente é executado em cada nó que hospeda VMs. Ele controla a execução, inspeção e o término das VMs.

Cluster Controller: é responsável por coletar e reportar informações sobre a execução

de VMs em NCs específicos e pelo gerenciamento de redes virtuais (SDN).

Storage Control: o Walrus, como é chamado, é um serviço de armazenamento que usa serviços Web (Axis2, Mule) e implementa interfaces SOAP que são compatíveis com o S3 da Amazon. Ele provê um mecanismo para armazenamento e acesso a imagens para a criação de máquinas virtuais e também armazenar dados do usuário.

Cloud Controller: é o ponto de entrada na nuvem para usuários e adminstradores. Ele consulta os nós de gerenciamento para obter informações sobre recursos, tomar de- cisões sobre escalonamento em alto nível e implementar tais decisões fazendo requisições aos Cluster Controllers. Esse componente é formado por um conjunto de serviços Web agrupados em serviços para recursos computacionais, serviços de dados e serviços de in- terface.

O Eucalyptus oferece ainda serviços para gerência de imagens, monitoramento, porta- bilidade através da compatibilidade com as APIs Amazon e políticas para alocação, con- tabilidade e escalonamento.

Nimbus

O Nimbus é um arcabouço open source para computação em nuvem [154]. Desenvolvido por pesquisadores do Argonne National Labs da Universidade de Chicago disponibiliza IaaS como modelo de negócio e tem por foco principal a computação científica. O Nimbus permite aos usuários alocar e configurar recursos remotos através de máquinas virtuais disponibilizadas através do Virtual Workspace Service (VWS). O VWS é um gerente de VMs que pode ser invocado por diferentes interfaces, incluindo uma interface para o OpenNebula. Para implantar aplicações na nuvem o Nimbus oferece um cloudkit com um gerente de serviços de hospedagem e um repositório de imagens [73]. Os componentes do workspace, mostrados na Figura 3.3 são:

Workspace service (WS): é o gerente dos espaços dos usuários (user workspaces). Uma das facilidades do WS é localizar o WS pessoal e devolver o seu IP para que o usuário

Figura 3.3: Componentes do Nimbus Workspace [154].

possa acessá-lo diretamente. O WS pode ser usado através de interfaces WSRF ou APIs EC2 Amazon. Ele provê também uma camada de segurança (autenticação e autorização). Workspace control (WC): controla a criação das instâncias de VMs, gerenciando e reconstruindo imagens, integrando as instâncias à rede e assinalando os IPs e endereços MAC. O WC pode operar com KVM [63] e hypervisors Xen [62].

Workspace resource management: é uma solução open source alternativa para ge- rência de instâncias. Ele pode ser substituido por outras tecnologias como OpenNebula. Workspace pilot: é responsável por provêr virtualização com poucas mudanças em cluster operacionais. Esse componente trata sinais e tem ferramentas para adminstração. O serviço de armazenamento do Nimbus é provido por um projeto associado denominado Cumulus [155]. Cumulus é uma implementação open source do conjunto de APIs REST S3 da Amazon. É um pacote dentro do Nimbus que provê acesso confiável e escalável a dados científicos.

De forma semelhante ao Nimbus, o CEO usa WSRF para acessar a grade seja para processamento ou para suporte ao paralelismo. Em domínio de nuvem usa APIs Amazon.

OpenNebula

OpenNebula é um conjunto de ferramentas open source que permite criar nuvens priva- das, públicas e híbridas [156]. A arquitetura OpenNebula (Figura 3.4) engloba vários componentes [157]. Para controlar o ciclo de vida de VMs, o núcleo faz a orquestração de: tecnologias para imagem e armazenamento usadas na preparação de imagens para máquinas virtuais; uma fábrica de redes para prover redes virtuais (SDNs) para interli-

gar VMs; e os hypervisors para criar e controlar VMs. O núcleo realiza armazenamento, rede ou operações de virtualização através de drivers conectáveis. Além de gerenciar as VMs, o núcleo também trata a entrega de informações de contexto, como endereços IP de servidores Web, certificados digitais e licenças de software para as VMs.

Figura 3.4: Arquitetura OpenNebula.

O escalonador tem acesso a informações sobre todas as requisições feitas e usa-as para manter o controle de alocações, criar e atualizar o agendamento de recursos e enviar os comandos de implantação adequadas ao núcleo do OpenNebula. O OpenNebula conta com gerenciamento de interfaces para integrar suas funcionalidades com outras ferramentas de gestão como arcabouços de contabilidade ou de monitoramento. Para fazer esta integração o OpenNebula implementa APIs Libvirt [158] e também disponibiliza uma interface de linha de comando. Além disso, um subconjunto das funcionalidades é exposto aos usuários externos através de uma interface de nuvem.

CloudStack

O CloudStack é um software open source projetado para implantar e gerenciar grandes redes de máquinas virtuais e suportar computação em nuvem através do modelo IaaS [159]. CloudStack pode ser usado na implantação de nuvens privadas, públicas e híbridas. A “pilha” de facilidades do CloudStack inclui orquestração de recursos, suporte a redes definidas por software (SDN), gerência de usuários, APIs para desenvolvedores, serviço de contabilidade e uma interface amigável com o usuário (User Interface - UI) [160].

CloudStack define uma arquitetura inovadora ao dividir a nuvem em zonas, casulos (pods), clusters e hypervisors. Um centro de dados pode ter uma ou mais zonas. Um

cluster é formado por um ou mais hosts ligados a um armazenamento primário. Um casulo é tipicamente uma prateleira de máquinas que inclui um switch de camada 2 e um ou mais clusters. O CloudStack introduz o conceito de domínios, que podem ter uma ou mais contas, que por sua vez podem ter um ou mais usuários.

Atualmente o CloudStack suporta hypervisors VMware [64], KVM [63], XenServer e plataforma de nuvem Xen (Xen Cloud Platform - XCP) [62]. Os usuários podem gerenciar sua nuvem através de uma interface Web, através de ferramentas de linha de comando e/ou através de APIs RESTful. Alternativamente o CloudStack fornece APIs compatíveis com EC2 e S3 Amazon para maior abrangência na implantação de nuvens híbridas.

OpenStack

O OpenStack é um software open source que pode ser usado para converter recursos de computação e armazenamento em uma infraestrtura para IaaS. Ele provê serviços de computação e armazenamento similares ao EC2 e S3 da Amazon. O OpenStack foi iniciado pela associação da National Aeronautics and Space Administration (NASA, EUA) [161] com a Rackspace [162] sendo no momento disponibilizado como open source sob licença Apache 2.0. O OpenStack é totalmente escrito em Python e suporta hypervisors KVM, Xen e VMware. Ele é composto por serviços de computação, serviços para gerência de imagens, serviços de identificação, serviços de rede, serviços para armazenamento de blocos e objetos e a interface com o usuário [160]. O relacionamento entre os principais componentes da arquitetura OpenStack é ilustrado pela Figura 3.5.

• Dashboard: denominado Horizon é a interface Web para os usuários acessarem a todos os serviços do OpenStack. Com o Dashboard é possível lançar instâncias para computação, associar endereços IPs a essas instâncias e atualizar controles.

• Compute: denominado Nova é o gerente da fábrica de computação do OpenStack.

Ele concentra os serviços de computação, compatíveis com o EC2 Amazon, provendo e gerenciando VMs sob demanda. É composto de um servidor de APIs (Nova-API), que aceita pedidos para a criação de VMs e seus discos associados (locais ou remo- tos). Cada nó de computação (ou hypervisor) executa um serviço de computação (Nova-Compute). Todos os serviços englobados pelo Nova interagem uns com os outros de forma assíncrona através de um protocolo avançado de enfileiramento de mensagens (Advanced Message Queuing Protocol- AMQP). Como todos os serviços OpenStack, o Nova autentica todas as requisições junto ao Keystone através da API REST. Apesar de ser o gerente de VMs, o Nova não tem qualquer capacidade de vir- tualização. Ele usa a API libvirt [158] para interagir com os hypervisors (KVM [63] e QEMU [164] entre outros). Para facilitar a compatibilidade com outras nuvens o Nova expõe suas capacidades através de serviços Web compatíveis com a API