78
Curso de Engenharia de Computação UMA COMPARAÇÃO ENTRE APIS PARA COMPUTAÇÃO EM NUVENS Leonardo Carmona Anser Campinas – São Paulo – Brasil Dezembro de 2009

Curso de Engenharia de Computação UMA COMPARAÇÃO ENTRE ...lyceumonline.usf.edu.br/salavirtual/documentos/1671.pdf · uma comparaÇÃo entre apis para computaÇÃo em ... exemplo

  • Upload
    vodat

  • View
    215

  • Download
    0

Embed Size (px)

Citation preview

Curso de Engenharia de Computação

UMA COMPARAÇÃO ENTRE APIS PARA COMPUTAÇÃO EM

NUVENS

Leonardo Carmona Anser

Campinas – São Paulo – Brasil

Dezembro de 2009

Curso de Engenharia de Computação

UMA COMPARAÇÃO ENTRE APIS PARA COMPUTAÇÃO EM

NUVENS

Leonardo Carmona Anser

Monografia apresentada à disciplina de Trabalho de Conclusão do Curso de Engenharia de Computação da Universidade São Francisco, sob a orientação do Prof. Ms. Carlos Eduardo Pagani, como exigência parcial para conclusão do curso de graduação. Orientador: Prof. Ms. Carlos Eduardo Pagani

Campinas – São Paulo – Brasil

Dezembro de 2009

UMA COMPARAÇÃO ENTRE APIS PARA COMPUTAÇÃO EM

NUVENS

Leonardo Carmona Anser

Monografia defendida e aprovada em 15 de Dezembro de 2009 pela Banca

Examinadora assim constituída:

Prof. Ms. Carlos Eduardo Pagani (Orientador)

USF – Universidade São Francisco – Campinas – SP.

Prof Ms. Márcio Henrique Zuchini

USF – Universidade São Francisco – Campinas – SP.

Prof Ms. Ricardo Augusto de Almeida

USF – Universidade São Francisco – Campinas – SP.

iv

Aos meus pais, Alfredo Anser e Maria Aparecida, pela dedicação e amor oferecidos durante esta jornada. A minha irmã, Tatiana, pelo carinho e exemplo de vida.

v

.Agradecimentos

Agradeço primeiramente a Deus, por tudo que Ele tem me proporcionado ao longo de toda a minha vida. Ao Prof. Carlos Eduardo Pagani, pelos seus incentivos, sugestões, críticas e compreensão ao longo desta caminhada. Aos meus pais, por sempre me apoiarem. Se não fossem por eles, eu não teria chegado até aqui. À minha irmã, pelos bons momentos juntos e pelo exemplo de vida. A todos os meus amigos e amigas, que contribuíram para o meu crescimento pessoal e profissional. Meu eterno agradecimento a todos os professores que dedicaram seu tempo a ensinar com grande dedicação e sabedoria. Ao coordenador do curso e TCC, Prof. André Leon Sampaio Gradvohl, por um ano com suas orientações. Aos Profs. Márcio Henrique Zuchini e Ricardo Augusto de Almeida pela disponibilidade e interesse em compor a banca examinadora. À Universidade São Francisco – Campus de Campinas, aos funcionários e colegas de turma, pelo ambiente sadio e infra-estrutura oferecida.

vi

Sumário

Lista de Siglas ........................................................................................................................viii

Lista de Figuras ....................................................................................................................... ix

Lista de Tabelas .......................................................................................................................xi

Resumo ....................................................................................................................................xii

Abstract ...................................................................................................................................xii

1 Introdução .......................................................................................................................... 1

1.1 O que é computação em nuvens? .................................................................................. 1

1.2 Motivação...................................................................................................................... 6

1.3 Estrutura do Texto......................................................................................................... 7

2 Entendendo computação em nuvem ................................................................................ 7

2.3 A nuvem ........................................................................................................................ 7

2.4 Vantagens ...................................................................................................................... 9

2.5 Desvantagens............................................................................................................... 11

2.6 Armazenamento em nuvens ........................................................................................ 12

2.7 Serviços em nuvens..................................................................................................... 12

2.8 Camadas da arquitetura de computação em nuvem .................................................... 13

2.8.1 Aplicação (Software²) como serviço (SaaS).........................................................14

2.8.2 Plataforma como serviço (PaaS). .........................................................................15

2.8.3 Infra-estrutura como serviço (IaaS)......................................................................15

2.9 Virtualização em nuvens. ............................................................................................ 17

3 arquitetura para computação em nuvem ...................................................................... 19

3.2.1 Escalabilidade Horizontal e Paralelização............................................................24

3.2.2 Organização física e segurança dos dados............................................................25

4 API em nuvens.................................................................................................................. 27

4.1 Google™ Apps............................................................................................................ 27

4.1.1 Desenvolvimento no Google™ Apps...................................................................28

4.1.2 Utilizando o Google™ Apps ................................................................................32

4.1.3 Arquitetura do Google™ Apps.............................................................................38

4.2 Amazon® .................................................................................................................... 39

4.2.1 Arquitetura Amazon® EC2 ..................................................................................42

4.3 IBM® Computação sob Demanda em parceria com Amazon®................................. 43

4.3.1 Usando a estrutura Zend com Amazon® S3 ........................................................44

4.3.2 Utilizando o IBM® Cloud Demand em parceria com o Amazon®. ....................45

4.3.3 Preços IBM® utilizando estrutura Amazon® ......................................................54

4.4 Microsoft® Azure ....................................................................................................... 55

vii

4.5 Tabela de Comparações .............................................................................................. 58

4.6 Outros Exemplos ......................................................................................................... 58

4.6.1 Live Mesh .............................................................................................................58

4.6.2 Datasul By You ....................................................................................................58

4.6.3 Virtual Computing Lab (Exemplo Acadêmico) ...................................................59

5 Conclusão.......................................................................................................................... 60

5.3 Contribuições .............................................................................................................. 62

5.4 Trabalhos futuros......................................................................................................... 63

Glossário .................................................................................................................................. 64

Referências Bibliográficas ..................................................................................................... 65

Anexos........................................................................................... Erro! Indicador não definido.

viii

Lista de Siglas

Iaas

Saas

Paas

API

TI

SSL

EC2

Infrastructure as a service ou infra-estrutura como um serviço

Aplicação as a service ou programa como um serviço

Plataform as a service ou plataforma como um serviço

Application Programming Interface ou Interface de Programação de

Aplicativos

Tecnologia da informação

Secure Socket Layer ou Camada de Soquete Segura

Elastic Compute Cloud ou Computação em Nuvem Elástica

KB

MB

GB

Kilobyte7

Megabyte8

Gigabyte9

TB TeraByte10

ix

Lista de Figuras

FIGURA 1-1: COMPARAÇÃO DE BUSCAS NO GOOGLE™ ENTRE ASSUNTOS DE COMPUTAÇÃO [28].

............................................................................................................................................1

FIGURA 1-2: BUSCAS NO GOOGLE™ SOBRE COMPUTAÇÃO EM NUVEM [28]. ...............................2

FIGURA 2-1: USUÁRIOS CONECTANDO-SE À NUVEM DE QUALQUER DISPOSITIVO QUE CONECTA A

INTERNET E A INFRA-ESTRUTURA TRANSPARENTE PARA O USUÁRIO (DESENVOLVIDO PELO

AUTOR). ...............................................................................................................................8

FIGURA 2-2: CAMADAS DA ARQUITETURA DE COMPUTAÇÃO EM NUVEM [3]. ............................13

FIGURA 2-3: CAMADAS DA ARQUITETURA DE COMPUTAÇÃO EM NUVEM [3]. ............................17

FIGURA 3-1: BIBLIOTECA DE MÁQUINAS VIRTUAIS DISPONÍVEIS PARA O DESENVOLVEDOR [3]..19

FIGURA 3-2: EXEMPLO DE UMA IMPLANTAÇÃO DE UM APLICATIVO EM NUVEM COM DOIS NÍVEIS

E SERVIDORES WEB¹ [3]....................................................................................................20

FIGURA 3-3: EXEMPLO DE UMA IMPLANTAÇÃO DE UM APLICATIVO EM NUVEM COM DOIS NÍVEIS

E SERVIDORES WEB¹ [3]. ...................................................................................................21

FIGURA 3-4: EXEMPLO DE UMA IMPLANTAÇÃO DE UM APLICATIVO EM NUVEM COM DOIS NÍVEIS

E SERVIDORES WEB¹ [3]. ...................................................................................................21

FIGURA 3-5: EXEMPLO DE UMA IMPLANTAÇÃO DE UM APLICATIVO EM NUVEM COM DOIS NÍVEIS

E SERVIDORES WEB¹¹ UTILIZANDO APACHE, MYSQL E JDBC PARA BARATEAR OS CUSTOS

AINDA MAIS [3]. ..................................................................................................................22

FIGURA 3-6: BASE DE DADOS EM NUVENS PARTICIONANDO TABELAS, APLICAÇÃO COM DADOS

DISTRIBUÍDOS ATRAVÉS DE INSTÂNCIAS EM ESCALA HORIZONTAL [3]...............................23

FIGURA 3-7: BASE ARQUITETURA COMUM DE PARALELIZAÇÃO COM BALANCEADORES DE

CARGA ESCALONADO HORIZONTALMENTE [3]. ..................................................................24

FIGURA 3-8: OUTRA FORMA DE UTILIZAR O PARALELISMO [3]. .................................................25

FIGURA 4-1: ARQUITETURA JDO [27]. ......................................................................................29

FIGURA 4-2: ARQUITETURA JPA [31]........................................................................................29

FIGURA 4-3: CONSOLE DE ADMINISTRAÇÃO DO GOOGLE™ APPS ENGINE [18]. ........................31

FIGURA 4-4: BAIXANDO O PLUGIN E O SDK UTILIZANDO ECLIPSE. ...........................................33

FIGURA 4-5: INSTALANDO O PLUGIN E O SDK UTILIZANDO ECLIPSE.........................................34

FIGURA 4-6: NOVO PROJETO UTILIZANDO GOOGLE™ APPS®. ..................................................35

x

FIGURA 4-7: NOVO PROJETO UTILIZANDO GOOGLE™ APPS. .....................................................36

FIGURA 4-8: RODANDO UM APLICATIVO COMO APLICAÇÃO WEB¹. ..........................................36

FIGURA 4-9: RODANDO UM APLICATIVO LOCALMENTE..............................................................36

FIGURA 4-10: CRIANDO APLICAÇÕES NA INTERNET. ..................................................................37

FIGURA 4-11: ENVIANDO APLICATIVO PARA AS NUVENS. ..........................................................37

FIGURA 4-12: TELA DE CONFIRMAÇÃO DENTRO DO ECLIPSE. ....................................................38

FIGURA 4-13: APLICAÇÃO EM NUVENS ACESSÍVEL DE QUALQUER COMPUTADOR COM INTERNET.

..........................................................................................................................................38

FIGURA 4-14: ARQUITETURA GOOGLE™ APPS (DESENVOLVIDO PELO AUTOR). ........................38

FIGURA 4-15: CONSOLE DO AMAZON® EC2 [5]........................................................................42

FIGURA 4-16: ARQUITETURA DO AMAZON® EC2 [5]................................................................43

FIGURA 4-17: LISTA DOS BUCKETS ATIVOS [21]. .......................................................................46

FIGURA 4-18: FORMULÁRIO PARA CRIAR UM NOVO BUCKET [21]...............................................47

FIGURA 4-19: LISTA DOS DADOS DENTRO DE UM BUCKET [21]...................................................47

FIGURA 4-20: CRIANDO UM NOVO OBJETO [21]. ........................................................................48

FIGURA 4-21: LISTA DE IMAGENS [22].......................................................................................49

FIGURA 4-22: INICIANDO UMA IMAGEM [22]. ............................................................................49

FIGURA 4-23: BOTÃO DE CONFIRMAÇÃO PARA INICIAR IMAGEM EC2 [22]................................50

FIGURA 4-24: STATUS DA NOVA INSTÂNCIA [22].......................................................................50

FIGURA 4-25: LISTA DE INSTÂNCIAS, ESTÂNCIA CRIADA PENDENTE [22]...................................51

FIGURA 4-26: LISTA DE INSTÂNCIAS, ESTÂNCIA CRIADA RODANDO [22]. ..................................51

FIGURA 4-27: LISTA DE INSTÂNCIAS, ESTÂNCIA CRIADA RODANDO [22]. ..................................52

FIGURA 4-28: TELA DE CONFIRMAÇÃO PARA FINALIZAR A INSTÂNCIA [22]. ..............................52

FIGURA 4-29: TELA DE FINALIZAÇÃO DA INSTÂNCIA [22]. ........................................................52

FIGURA 4-30: TELA DE FINALIZAÇÃO DA INSTÂNCIA [22]. ........................................................53

FIGURA 4-31: TELA DA INSTÂNCIA DESLIGADA [22]..................................................................53

FIGURA 4-32: ARQUITETURA DO MICROSOFT® AZURE [17]. ....................................................57

FIGURA 4-33: ARQUITETURA MOSTRADA EM OUTRO NÍVEL DO MICROSOFT® AZURE (FIGURA

DESENVOLVIDA PELO AUTOR)............................................................................................57

xi

Lista de Tabelas

Tabela 1-1: Cotas dos recursos.................................................................................................32

Tabela 1-2: Cotas de armazenamento.......................................................................................32

Tabela 1-3: Cotas de e-mails.....................................................................................................32

Tabela 1-4: Preços IBM® utilizando estrutura Amazon®........................................................54

Tabela 1-5: Comparações entre os quatro grandes fornecedores na nuvem: Microsoft®,

Google™, Amazon® e IBM®..................................................................................................58

xii

Resumo

Computação em Nuvem ou seu termo em inglês “Cloud Computing” estuda um

modelo para computação onde os serviços oferecidos estão alojados em grandes servidores

virtuais e toda a infra-estrutura fica invisível para o usuário. Grandes empresas já entraram

nesse novo e rentável mercado.

Esta monografia esclarece o que na verdade significa essa nova tecnologia chamada

Computação em Nuvens, dando ênfase em como essa questão irá alterar a computação

tradicional. Existe também uma proposta de uma arquitetura na nuvem comparando-a com as

arquiteturas existentes.

Finalmente, chegando a uma conclusão deste novo modelo onde será o futuro da

Tecnologia da Informação, revolucionando a computação clássica.

Palavras-chave: Computação em Nuvem; Computação; Servidores; Tecnologia da Informação.

Abstract

Cloud Computing studies a model for computing where services are stored in large

virtual servers and infrastructure are invisible for users. Big companies have already entered

in this new and profitable market.

This monograph clarifies actually what means that new technology called Cloud

Computing with emphasis in how this issue will change the traditional computing. There is a

cloud computing architecture proposal comparing with existing architectures too.

Finally, describe a conclusion of this new model that will be the future of Information

Technology, revolutionizing the classical computing.

KEY WORDS: Cloud Computing; Computing; Servers; Information Technology

1

1 INTRODUÇÃO

1.1 O que é computação em nuvens?

Computação em nuvens é o assunto mais comentado ultimamente entre os estudantes de

curso de sistema de informação e também nas empresas em suas áreas de Tecnologia da

informação (TI). Essa foi uma das motivações que resultou nessa monografia.

Apenas para exemplificar, foi utilizado o Google™ Trends® [28] para comparar

tecnologias atuais da computação com Computação em nuvem. O Google™ Trends® é um

site do Google™ que permite a comparação de palavras-chave mostrando a quantia de buscas

que cada palavra recebeu e também novas bibliografias adicionadas. Podemos ver na Figura

1-1 um aumento das buscas pela palavra computação em nuvem em inglês, “cloud

computing”, comparada com outras tecnologias, como “Service-oriented architecture”

(Arquitetura Orientada a Serviço), o SOA, “Virtualization” (Virtualização) e “web¹ services”

(Serviços da web¹). Logo abaixo também podemos notar que o volume do número de

referências também aumenta para computação em nuvem comparado aos mesmos casos.

A Figura 1-2 apresenta as buscas e novas referências apenas sobre computação em

nuvem, ficando mais claro que o termo vem aumentando mês a mês na estatística.

Figura 1-1: Comparação de buscas no Google™ entre assuntos de computação [28].

2

Figura 1-2: Buscas no Google™ sobre computação em nuvem [28].

De acordo com MILLER [1] a computação como nós conhecemos está próximo de

mudar. Aplicações e documentos estão saindo do computador convencional e estão indo para

as nuvens. Computação em nuvens é onde os aplicativos e arquivos estão alocados em

“nuvens”, que consiste em centenas de computadores e servidores em rede e acessíveis via

internet. Com isso, é possível acessar seus programas e arquivos de qualquer computador com

conexão para internet.

“Computação em nuvem é um dos fundamentos da próxima geração de computação, um

mundo onde a rede é a plataforma de computação para todos. Essa é uma ótima maneira de

pensarmos sobre como vamos oferecer serviços de informática no futuro” diz Tim O’Reilly,

CEO da editora de livros O’Reilly Media [24].

O termo “Computação em Nuvens” pode parecer estranho, mas é possível que já a

utilizamos sem perceber algumas aplicações em nuvens. Os programas de e-mail Gmail® e

Hotmail® são exemplos disso, já utilizam essa tecnologia.

Num mundo com tantas tecnologias surgindo e desaparecendo a todo o momento, esta

chamada “Computação em Nuvens” promete durar e também mudar o jeito que nós

utilizamos computador e a internet, mudando o modo que guardamos informação e utilizamos

aplicações, ao invés de rodar programas e dados individualmente em casa no computador

pessoal, tudo será hospedado em uma “nuvem”.

Essa tecnologia possibilita acessar suas aplicações e documentos em qualquer lugar do

mundo, facilitando a mobilidade dos usuários e também dos membros de grupos de

colaboração online que residem em diversas localidades diferentes [1].

3

Podemos até comparar que o aparecimento dessa tecnologia é equivalente a revolução

da energia elétrica há um século, empresas descontinuaram seus geradores e passaram a

comprar energia por um preço muito mais barato e com mais confiança do que produzir a sua

própria. O mesmo tipo de revolução está para ocorrer com computação em nuvem. O modo

como conhecemos computação hoje em dia está para desaparecer [1].

Nomes de peso como Amazon®, AT&T®, Dell®, HP®, IBM®, Intel®, Microsoft® e

Yahoo® já anunciaram planos e investimentos na área. Um relatório publicado por Gartner

(empresa de consultoria fundada em 1979) aponta a computação em nuvem como uma das

três mais importantes tendências emergentes nos próximos três a cinco anos [29].

"A ascensão da nuvem é mais do que apenas uma mudança de plataforma que deixa

com um visual mais animado. Será, sem dúvida, transformar a indústria de TI, mas que

também irá mudar profundamente a maneira como as pessoas trabalham e as empresas

operam”, de acordo com o artigo [10] do jornal “The Economist”.

Há um consenso de que esta é a hora da computação em nuvem, não é possível dizer

que haja uma idéia definida comum do que realmente é a chamada computação em nuvem. As

opiniões são variadas e um bom exemplo de que o conceito ainda está “nublado”, é o

divertido vídeo da fornecedora Joyent [25], que mostra personalidades notórias como o

visionário da web¹ 2.0, Tim O'Reilly, o editor-chefe da CNet, Dan Farber, e o co-fundador do

Wodpress, Matt Mullenweg, além de vários CEO’s e CO’s de empresas reconhecidas

mundialmente, dando visões bastante distintas sobre o tema.

“O que realmente significa é que alguém vai assumir a responsabilidade de entregar

algumas funções de TI como serviços para alguns clientes que não precisam saber como

funcionam, simplesmente usarão”, esclarece Daryl C. Plummer, vice-presidente do Gartner,

em um podcast da empresa [29].

Resumindo, podemos definir computação em nuvem como uma tecnologia no qual

processamento, armazenamento e aplicações estão acessíveis via internet.

4

1.2 Como funciona a Computação em Nuvem

Com computadores convencionais, cópias de programas rodam em cada computador e

os documentos que criados são armazenados no computador que os criou, podendo ser

acessados por outros computadores na mesma rede, mas não podem ser acessados por

computadores fora da rede.

Na computação em nuvem, os programas que utilizamos não rodam do seu computador

pessoal, mas sim de um servidor acessado via internet. Se o seu computador parar de

funcionar, por qualquer motivo, o programa ainda estará acessível para outros utilizarem, o

mesmo acontece com documentos que são criados, qualquer pessoa com permissão, pode

acessar ou até mesmo editar e colaborar nesse documento em tempo real.

Primeiramente computação em nuvem não é uma rede de computadores convencional,

utilizando rede de computadores, aplicações e documentos são hospedados no servidor de

uma única empresa e acessados por rede de empresas. Engloba várias empresas, servidores e

redes. Também não se pode comparar computação em nuvem com terceirização, onde é

contratado serviços de outra empresa.

A chave para entender computação em nuvens é entender o que é a “nuvem”. Nada mais

é que um grupo de computadores interconectados, que podem ser de qualquer tipo,

computadores pessoais ou servidores, públicos ou privados.

As aplicações e dados guardados na nuvem são disponibilizadas para um grupo de

usuários autorizados, que podem acessar de qualquer computador com acesso a internet e para

o usuário, a infra-estrutura por trás da nuvem é invisível [1].

Segundo o Google™, um dos pioneiros dessa tecnologia, há seis propriedades

principais dos computadores em nuvem [4]:

• Computação em nuvens é focado no usuário, ou seja, tudo o que se gravar na nuvem, documentos, mensagem, imagens, aplicações, o que for, será seu, e poderá ser compartilhado com outros usuários.

• Computação em nuvens é também focado em serviços, ou seja, ao invés do foco ser na aplicação e o que ela pode fazer, o foco é no que você precisa fazer e o que a aplicação pode fazer por você.

• Computação em nuvens é poderosa, conectando centenas de milhares de computadores na nuvem, criando um grande poder computacional, impossível com um computador convencional.

• Computação em nuvens é acessível, porque os dados estão na nuvem, usuários podem solicitar mais informação de diversos repositórios a qualquer momento. Não ficando limitado a apenas um como nos computadores convencionais.

5

• Computação em nuvem é programável, muitas tarefas precisam ser automatizadas, por exemplo, a proteção dos dados, as informações guardadas são replicadas em mais de um computador, pois se um computador é desligado, automaticamente a nuvem redistribui os dados para um novo computador.

• Computação em nuvens é inteligente, com o número crescente de dados guardados nos computadores da nuvem, mineração de dados e análises serão necessários para acessar a informação de maneira inteligente.

De acordo com a Sun [11], em muitos aspectos, a computação em nuvem é

simplesmente uma metáfora para a Internet, com movimento crescente de recursos de

computação e dados para a web¹. Mas há uma diferença: a computação em nuvem representa

um novo ponto para o valor da computação em rede. Proporcionando maior eficiência,

escalabilidade, velocidade e mais fácil o desenvolvimento de aplicação. É sobre novos

modelos de programação, novas infra-estruturas de TI, e a habilitação de novos modelos de

negócio.

1.3 Antecedentes

Computação em nuvem tem como antecedente a arquitetura cliente-servidor e “Peer-to-

Peer” (P2P). Que são maneiras de centralizar informações e multiplicar o processamentos dos

computadores [1].

Uma grande utilidade do modelo P2P é a computação distribuída, que segundo a

definição de Andrew Tanenbaum é uma "coleção de computadores independentes que se

apresenta ao usuário como um sistema único e consistente" [2].

Assim, a computação distribuída consiste em adicionar o poder computacional de

diversos computadores interligados por uma rede de computadores ou mais de um

processador trabalhando em conjunto no mesmo computador, para processar

colaborativamente determinada tarefa de forma coerente e transparente, ou seja, como se

apenas um único e centralizado computador estivesse executando a tarefa. A união desses

diversos computadores com o objetivo de compartilhar a execução de tarefas é conhecida

como sistema distribuído.

Desde o inicio da arquitetura Cliente-Servidor e a evolução do P2P, existe o desejo de

vários usuários trabalharem simultaneamente no mesmo projeto baseado no mesmo

computador, esse tipo de computação colaborativa, algo cada vez mais necessário hoje em

dia, onde o trabalho à distância e fora do escritório começa a ganhar cada vez mais adeptos.

6

Os primeiros sistemas de colaboração em grupo variaram dos mais simples como o

Lotus Notes® e Microsoft® NetMeeting® ao mais complexo como construção de blocos de

arquitetura e o sistema Groove Networks, chamado também de "escritório virtual", permite

compartilhar através da rede todos os tipos de informação, como bases de dados ou

documentos.

A maioria desses sistemas são dirigidos as grandes corporações e limitada a redes

privadas.

Com o crescimento da Internet, houve a necessidade de limitar a colaboração do grupo

para um ambiente corporativo único da rede. Usuários de vários locais dentro de uma

corporação e de várias organizações desejavam colaborar em projetos, atravessando os limites

da empresa. Para isso acontecer, os projetos tiveram que ser alojadas em "nuvem" na internet

e acessado de qualquer computador com internet.

O Google™ é uma das grandes empresas que já começou a oferecer soluções de

computação em nuvem, mas não é a única, no lado da infra-estrutura, outros fornecedores

grandes estão oferecendo o equipamento necessário para construir redes em nuvem que será

detalhado no desenvolvimento desse projeto.

Sobre aplicações, dezenas de empresas estão desenvolvendo aplicações em nuvem

baseadas em serviços de armazenagem.

Hoje, as pessoas estão usando serviços de nuvem e de armazenamento para criar,

compartilhar, localizar e organizar as informações de todos os tipos. Amanhã, esta

funcionalidade vai estar disponível não só para os usuários de computador, mas para usuários

de qualquer dispositivo que conecta a Internet, telefones celulares, tocadores de música

portáteis, até mesmo automóveis e aparelhos de televisão em casa [1].

1.2 Motivação

Hoje em dia há grandes investimentos de grandes empresas para oferecer essa nova

tecnologia chamada Computação em Nuvens. Gigantes como Google™, IBM®, Microsoft®,

Amazon® e Yahoo® já entraram nesse novo mercado. Os usuários, sem perceber, já estão

fazendo parte dessa história e utilizando serviços em nuvens, como por exemplo: Gmail®,

Orkut®, Facebook®. As informações são guardadas em grandes servidores virtuais em

nuvens, ou seja, nós já utilizamos a nuvem.

7

Gigantes centros de dados estão armazenando nossas informações e de usuários por

todo o mundo que podem acessar de qualquer computador conectado a internet. Por outro

lado, nossas informações estão guardadas fora do nosso controle e podem ser utilizadas para

fim comercial futuramente.

Uma das principais motivações é que essa nova tecnologia irá revolucionar a

computação clássica e será uma grande mudança no modelo de fornecimento e de serviços em

TI. Esse é um dos motivos que hoje em dia, computação em nuvem é alvo de cada vez mais

estudos e pesquisas.

Essa é uma grande oportunidade da computação progredir. O impacto será enorme, pois

irá mudar o modo que utilizamos o computador, desenvolvemos aplicações e utilizamos

recursos computacionais.

Nessa monografia, descrevo os principais fundamentos dessa nova tecnologia, os APIs

existentes e disponíveis, pontos positivos, negativos e aspectos da infra-estrutura, o que me

deu conhecimento para propor uma arquitetura.

1.3 Estrutura do Texto

Esta monografia está dividida em quatro capítulos:

O capítulo 1 existe uma introdução, descrevendo o que realmente é a Computação em

Nuvem. No capítulo 2 entro em mais detalhes explicando as vantagens e desvantagens, como

funciona a arquitetura em nuvem e detalhes dos elementos principais para a construção da

arquitetura em nuvem, o capítulo 3 trata de uma proposta para computação em nuvem,

descrevendo uma arquitetura e seus componentes. No capítulo 4 aborda algumas APIs

existentes no mercado, das quatro grandes empresas e outros três de empresas menores, mas

não menos interessantes e importantes.

Por fim, no capítulo 5, descrevo minhas conclusões, contribuições e trabalhos futuros.

2 ENTENDENDO COMPUTAÇÃO EM NUVEM

2.3 A nuvem

A chave para entender a computação em nuvem, como dito anteriormente, é entender a

nuvem, que é uma rede massiva de servidores, ou mesmo computadores pessoais interligados

em rede. Esses computadores funcionam em paralelo, combinando os recursos de cada um

para gerar um supercomputador [1].

8

Simplificando, a nuvem é um conjunto de computadores e servidores que estejam

acessíveis ao público através da Internet. Estes equipamentos são geralmente de propriedade e

operados por um terceiro em uma base consolidada em um ou mais locais do centro de dados.

A Figura 2-1 mostra uma representação dos usuários individualmente se conectam na

nuvem de seus computadores pessoais, aparelhos portáteis ou de qualquer outro dispositivo

conectado através da Internet. Para estes usuários, a nuvem é visto como um único aplicativo,

dispositivo ou documento. O equipamento em nuvens (e o sistema operacional que gerencia

as conexões ao equipamento) é invisível para o usuário.

Figura 2-1: Usuários conectando-se à nuvem de qualquer dispositivo que conecta a internet e a infra-estrutura transparente para o usuário (desenvolvido pelo autor).

"Nesta arquitetura, os dados são na sua maioria residentes em servidores "em algum

lugar na internet" e o aplicativo é executado em ambos, nos servidores da ‘nuvem’ e no

navegador do usuário." É o que diz Eric Schmidt do site Wired [13].

Há muitas preocupações na tecnologia em nuvens, para os desenvolvedores e usuários

finais. Para desenvolvedores, a computação em nuvem fornece maior quantidade de

armazenamento e poder de processamento para executar as aplicações que desenvolvem.

Computação em nuvem também permite novas formas de acesso à informação,

processamento e analise de dados, e também ligar pessoas e recursos em qualquer lugar do

mundo.

Para os usuários finais, computação em nuvem oferece todos esses benefícios e mais.

Uma pessoa usando um aplicativo baseado na internet não está fisicamente ligado a um único

computador, local ou rede. Seus pedidos e documentos podem ser acessados onde quer que

9

ele esteja. Não se teria mais o medo de perder dados por uma falha do computador, pois os

documentos são hospedados na nuvem e sempre estarão lá, não importa o que acontecer com

a máquina do usuário. Após isso, também há o benefício da colaboração do grupo. Usuários

de todo o mundo podem colaborar com os mesmos documentos, aplicações e projetos e tudo

em tempo real. É um novo mundo de computação colaborativa.

A nuvem permite o compartilhamento de recursos mais eficiente do que a computação

em rede tradicional, o equipamento não tem que ser fisicamente alocado no escritório de uma

empresa ou no centro de dados. A infra-estrutura da nuvem pode ser localizada em qualquer

lugar [1].

2.4 Vantagens

Miller [1] afirma que existem algumas vantagens na utilização de computação em

nuvem:

• Custo relativamente baixo: Em computadores para usuários, por exemplo, pois como

as aplicações rodam diretamente na nuvem, o usuário não necessita ter um computador com

alto poder de processamento ou um disco rígido de grande capacidade, ou seja, não é

necessário ter um computador caro.

• Desempenho melhor: Com menos programas e processos carregados na memória,

usuários vão sentir uma melhor performance nos seus computadores.

• Redução nos custos de infra-estrutura TI: Ao invés de se investir em servidores mais

potentes, os departamentos de TI podem usar a computação em nuvem para completar ou

substituir determinados recursos alocados internamente.

• Manutenção dos equipamentos: Com menos servidores, o custo com manutenção é

reduzido.

• Manutenção das aplicações: As aplicações são baseadas em nuvens, portanto, não há

aplicações ou programas instalados localmente. Ainda terá o custo da licença por usuário, mas

ao invés de comprar pacotes de aplicações para cada computador de uma organização, será

apenas uma instalação e apenas quem realmente precisa acessar, terá acesso.

• Atualização: Semelhante à vantagem de manutenção da aplicação, a atualização

acontece apenas uma vez e na nuvem. Com a vantagem das atualizações ocorrerem

automaticamente e estarão disponíveis no próximo vez que o usuário acessar a nuvem.

10

• Segurança de dados: Ao contrário dos computadores convencionais, onde um ruído

elétrico no disco rígido pode destruir todos os seus dados, na nuvem, os seus dados são

replicados em vários servidores, aumentando a segurança

• Compatibilidade:

o Entre sistemas operacionais: Windows, Mac OS, Linux ou Unix, não importa

seu sistema operacional, na nuvem é possível compartilhar documentos.

o Entre formato de documentos: Os documentos criados por aplicações na nuvem

podem ser lidos por qualquer outro usuário que acessar esse aplicativo, sem incompatibilidade

de formato.

• Facilidade na colaboração em grupo: Diversos usuários podem colaborar facilmente

no mesmo documento ao mesmo tempo.

Já os departamentos de TI das empresas podem usar a nuvem para reduzir os riscos na

compra de novos servidores físicos. Não tem mais as preocupações como se o novo servidor

será bem sucedido ou quantos servidores serão necessário para o aumento da carga de

trabalho. Se realmente for feito a compra, também não há mais dúvidas como quando acabar o

projeto o que fazer com o investimento feito ou ainda as dúvidas se a nova infra-estrutura será

bem utilizada ou ficará ociosa a maior parte do tempo.

Ao colocar uma aplicação na nuvem, a escalabilidade e o risco de adquirir muito ou

pouca infra-estrutura desaparecem. Há uma série de atributos de computação em nuvem que

ajudam a reduzir custos para entrar em um novo mercado.

Infra-estrutura pode ser locada e não comprada, controlando o custo e muitas vezes não

é necessário ter investimentos financeiros. Rápido desenvolvimento das aplicações, o que

reduz o tempo de entrada no mercado e entram em ritmo acelerado contra a concorrência.

Isso permite as pequenas empresas competirem com mais força, pois os processos de

implantação podem ser significativamente maiores. Aumentando também o ritmo de

inovação, pois aumenta a concorrência e muitas dessas inovações vêm utilizando aplicações

de código-aberto. Todas as indústrias irão se beneficiar com o ritmo de inovação que a

computação em nuvem oferece [1].

De acordo com a Sun [11], Computação em nuvem traz um novo nível de eficiência e

economia para fornecer recursos de TI sob demanda. Abrindo novos modelos de negócios e

oportunidades de mercado. As plataformas de computação são uma convergência das duas

principais tendências de TI:

11

• Eficiência: Minimizar os custos, as empresas estão convertendo seus custos de TI para

as despesas operacionais por meio de tecnologias como virtualização. Começa como uma

forma de melhorar a infra-estrutura de implantação e utilização de recursos, mas com a

exploração desta infra-estrutura, leva a um novo modelo de desenvolvimento de aplicações.

• Agilidade no negócio: Utilizar os recursos de TI como diferencial competitivo no

mercado, ou seja, revolucionar o tempo de serviço.

Um exemplo de agilidade e eficiência é o que fez o conhecido jornal Americano “The

New York Times”. Necessitavam converter 11 milhões de artigos e imagens de seus arquivos

de 1851 até 1980 para PDF. Um funcionário calculou e disse que levaria sete semanas, mas

um desenvolvedor utilizou 100 interfaces simples do Amazon® EC2, utilizando ferramentas

open-souce (código aberto) e completou o trabalho em 24 horas e com menos de $300. [12]

2.5 Desvantagens

Miller [1] também descreve algumas desvantagens:

• Requer conexão à Internet: Quando você estiver desconectado da rede mundial de

computadores, a computação em nuvem simplesmente não funciona.

• Não funciona bem com conexões lentas: Aplicações baseadas na internet exigem uma

grande largura de banda e conexões lentas podem prejudicar o desempenho.

Existem ainda alguns desafios para as empresas envolvidas na computação em nuvem,

entre eles segurança e confiabilidade (tarefas de desenvolvimento, armazenamento,

manutenção, atualização, escalonamento, etc.). O usuário não precisa se preocupar com nada

disso, apenas com acessar e usar. Para que o usuário confie grande parte de seus sistemas e

arquivos a um terceiro, ele terá de garantir que os dados estejam devidamente protegidos e

100% disponíveis.

Isso é ainda mais crítico quando se trata de informações empresariais altamente

sensíveis, como processamento de dados financeiros. “Isso terá de ser regulado para garantir

que será feito da forma certa”, alerta Plummer, do Gartner [29].

A forma como esses serviços serão cobrados também é outra questão importante.

Fornecedores que tiveram sucesso vendendo caixas fechadas - sejam de aplicações ou de

equipamento - terão que migrar para o modelo de venda de serviços. “Os custos para os

usuários finais serão menores”, assegura Otávio Pecego, gerente do grupo de arquitetura da

Microsoft® Brasil [17].

12

Para resolver questões como esta, três grandes nomes da indústria de tecnologia –

Intel®, HP® e Yahoo® - formaram uma aliança. “Hoje as questões de segurança e

confiabilidade são inibidores do modelo. A idéia é identificar como atender esses

requerimentos e criar padrões”, explica Sena, da HP® [30].

2.6 Armazenamento em nuvens

Um dos principais usos da computação em nuvem é para armazenamento de dados,

afirma Miller [1]. Com armazenamento na nuvem, os dados são armazenados em servidores

de terceiros, em vez de servidores dedicados, como usados no armazenamento tradicional de

dados em rede. Ao armazenar dados, o usuário enxerga um servidor virtual, ou seja, ele

aparece como se dados estivessem armazenados em um lugar particular com um nome

específico, mas esse lugar não existe na realidade, é apenas um pseudônimo usado para fazer

referência virtual a um espaço fora da nuvem. Na realidade, os dados do usuário podem ser

armazenados em qualquer um ou mais computadores usados para criar a nuvem.

O armazenamento real pode até mesmo variar de dia para dia ou mesmo minuto a

minuto, de acordo com o espaço dinamicamente gerado e disponibilizado pela nuvem, mas

mesmo que o local é virtual, o usuário vê uma localização “estática” de seus dados e

pode visualizar seu espaço de armazenamento como um todo, como se fosse o seu próprio

computador.

Armazenamento em nuvem tem tanto benefícios financeiros como de segurança. Os

recursos virtuais na nuvem são normalmente mais baratos do que os dedicados e quanto à

segurança, dados armazenados na nuvem é seguro contra o apagamento acidental ou por

falhas no equipamento, porque os dados são distribuídos em várias máquinas físicas, que nada

mais é que o conceito de computação distribuída.

2.7 Serviços em nuvens

“De acordo com Miller, qualquer aplicativo baseado na internet ou serviços oferecidos

através de computação em nuvem é chamado de um serviço em nuvens. Serviços em nuvens pode-

se incluir calendários, agendas, aplicações de processamento de texto e apresentações. Quase todas

as grandes empresas de computação de hoje, como Google™, Amazon®, Microsoft®, estão

desenvolvendo vários tipos de serviços na nuvem. Com um serviço em nuvens, o próprio

aplicativo está hospedado em nuvem e um usuário executa o aplicativo pela Internet, normalmente

13

dentro de um navegador da internet. O navegador acessa o serviço em nuvens e uma aplicação é

aberta dentro da janela do navegador. Uma vez acessado, o aplicativo baseado na internet funciona

e se comporta como uma aplicação de desktop padrão, a única diferença é que a aplicação e os

documentos permanecem em servidores da nuvem. Serviços em nuvens oferecem muitas

vantagens. Por exemplo, se o computador do usuário falhar, não afeta a aplicação ou o documento

aberto, ambos permanecem inalterados na nuvem, além disso, um usuário pode acessar seus

aplicativos e documentos de qualquer lugar em qualquer computador. Não tem a necessidade de

ter uma cópia de cada aplicativo e arquivo.” [1].

Podemos dizer de modo resumido que, computação em nuvem é um meio de entrega de

recursos de TI como serviços. Quase todos os recursos de TI podem ser um serviço de nuvem:

aplicações, poder computacional, capacidade de armazenamento, redes, ferramentas de

programação, até mesmo serviços de comunicações e ferramentas de colaboração.

2.8 Camadas da arquitetura de computação em nuvem

De acordo com a visão da Sun [3], os prestadores de serviços de nuvens tendem a

oferecer serviços que podem se agrupar em três categorias, como mostra a figura 2-2:

• Aplicação (Software²) como serviço (SaaS);

• Plataforma como serviço (PaaS);

• Infra-estrutura como serviço (IaaS).

Figura 2-2: Camadas da arquitetura de computação em nuvem [3].

14

2.8.1 Aplicação (Software²) como serviço (SaaS)

Aplicação como um serviço nada mais é um aplicativo completo oferecido sob

demanda. Uma única instância do aplicativo é instalada na nuvem e podem ter vários serviços

ou usuários o utilizando, assim, o usuário não precisa adquirir licenças de uso para instalação

ou mesmo comprar computadores ou servidores para executá-lo. Nessa modalidade, no

máximo paga-se um valor periódico - como se fosse uma assinatura - somente pelos recursos

que utilizar e/ou pelo tempo de uso.

Para entender melhor os benefícios do SaaS, suponham que uma pequena empresa que

tem cinqüenta funcionários e necessita de um aplicativo para gerar folhas de pagamento. Há

várias soluções prontas para isso no mercado, no entanto, a empresa terá que comprar licenças

de uso do aplicativo escolhido e, dependendo do caso, até mesmo equipamento para executá-

lo. Em muitos casos, o preço da licença ou mesmo dos equipamentos pode gerar um custo alto

e não compatível com a condição de porte pequeno da empresa.

Se, por outro lado, a empresa encontrar uma fornecedora do aplicativo para folhas de

pagamento que trabalha com o modelo SaaS, a situação pode ficar mais fácil: essa

fornecedora pode, por exemplo, oferecer esse serviço através de Computação em nuvem e

cobrar apenas pelo número de usuários e/ou pelo tempo de uso.

Dessa forma, a empresa interessada paga um valor baixo pelo uso da aplicação. Além

disso, equipamento, instalação, atualização, manutenção, entre outros, ficam por conta do

fornecedor. Também é importante levar em conta que o intervalo entre a contratação do

serviço e o início de sua utilização é extremamente baixo, o que não aconteceria se o

aplicativo tivesse que ser instalado nos computadores da empresa-cliente. Esta última só

precisa se preocupar com o acesso ao serviço (no caso, uma conexão à internet) ou, se

necessário, com a simples instalação de algum plugin no navegador de internet de suas

máquinas.

SaaS é a camada mais alta e possui um aplicativo completo oferecido como um serviço

e por demanda, que significa uma única instância do aplicativo funciona na infra-estrutura e

atende organizações de múltiplos clientes [3].

15

2.8.2 Plataforma como serviço (PaaS).

A camada do meio, plataforma como um serviço envolve uma camada de aplicativos e é

fornecido como um serviço que pode ser usado para desenvolver um nível mais alto de

serviço.

Há duas perspectivas [3]:

• Desenvolvedores de PaaS tem o poder de integrar o sistema operacional, aplicação e

até mesmo um ambiente de desenvolvimento que então seria fornecido a um cliente como

serviço;

• Desenvolvedores de PaaS poderiam ver um serviço encapsulado que é mostrado

através de uma API e a plataforma faz o que é necessário para gerenciar e escalar assim

fornecendo um determinado nível de serviço.

2.8.3 Infra-estrutura como serviço (IaaS)

O modelo predominante para a computação em nuvem hoje é chamado de “infra-

estrutura como um serviço”, ou IaaS e está na camada mais baixa. Nos últimos anos as

máquinas virtuais se tornaram um objeto padrão em implementações.

Com a virtualização, aumentou a flexibilidade, pois aplicações podem ser instalados e

dados distribuídos sem ficarem alocados em apenas um servidor físico e específico,

permitindo os datacenter4 serem dinâmicos e os recursos aproveitados de uma melhor forma,

conforme a necessidade do usuário porque o armazenamento e os recursos da rede também

podem mudar dinamicamente.

A combinação de máquina virtual e servidores como objeto padrão de desenvolvimento

é um dos principais recursos de computação em nuvem. Fornece armazenamento virtualizado

por meios de interfaces de programação de aplicativos ou APIs.

Serviço por demanda e pagar por uso são algumas tendências de computação em

nuvem. Sob uma perspectiva corporativa, o serviço por demanda auxilia o desempenho e a

capacidade dos serviços e permite as organizações criarem ambientes elásticos, isto é, que se

expandem ou contraem com base nas necessidades e carga de trabalho.

Pagar pelo uso utiliza dos benefícios da computação em nuvem para alugar

equipamentos em um provedor na nuvem.

16

A virtualização é a característica chave desse modelo, como dito anteriormente. Os

departamentos de Tecnologia da Informação (TI) das corporações têm utilizado há muito

tempo a virtualização, pois permite de forma fácil e rápida, criar cópias de registros em

diversas máquinas virtuais, apoiando ambiente de testes e desenvolvimento, barateando os

custos, pois podem estar alocados em um mesmo servidor com diferentes ambientes de

produção.

Novas aplicações podem ser desenvolvidas e implantadas em novas máquinas virtuais

em servidores já existentes, para o uso na internet e em grande escala.

O faturamento pode ser baseado no consumo de recursos: como horas de CPU utilizada,

volume de dados movidos ou gigabytes armazenados.

Essa capacidade de usar e pagar somente os recursos que serão utilizados transfere a

necessidade de certa parte da infra-estrutura para o prestador de serviço na nuvem. Também

transfere a responsabilidade por decisões de arquitetura de aplicativos. A transferência da

responsabilidade da arquitetura tem conseqüências significativas.

Os arquitetos determinavam como os componentes de uma aplicação seriam alocados,

interligados, gerenciados e dimensionados dentro dos servidores. Agora um desenvolvedor

utiliza um API de um provedor na nuvem. A capacidade dinâmica da computação em nuvens

coloca um enorme poder nas mãos dos desenvolvedores, por isso o desenvolvedor também

precisa ser um arquiteto, pois precisa ser capaz de criar um controle para suas aplicações em

expansão. O arquiteto / desenvolvedor precisa agora saber quando será necessário criar um

novo segmento ou uma nova máquina virtual.

Aplicações e arquiteturas podem ser reformuladas para aproveitar ao máximo a

utilização dos benefícios dos componentes e serviços da computação em nuvem. O mesmo

vale para as aplicações que serão projetadas, podendo ser interligadas [3].

Na figura 2-3 podemos analisar como é a iteração das camadas de arquitetura explicadas

anteriormente e localizar onde o Usuário final, o Desenvolvedor e o Provedor atuam.

17

Figura 2-3: Camadas da arquitetura de computação em nuvem [3].

2.9 Virtualização em nuvens.

Virtualização [26] é uma tecnologia que prove uma camada abstrata de recursos de uma

máquina, oferecendo um equipamento virtual para cada um dos sistemas com objetivo de

“esconder” as características físicas e como as aplicações e sistemas operacionais interagem

com recursos computacionais. Suas maiores qualidades são o reaproveitamento de recursos, a

portabilidade e a segurança. Podemos executar sistemas operacionais diferentes e aplicações

como um processo de outro sistema operacional.

Virtualização para a computação em nuvem é uma técnica fundamental para todas as

arquiteturas. Permite que os servidores, dispositivos de armazenamento e outros

equipamentos serem tratados como um conjunto de recursos, de modo que estes recursos

possam ser alocados por demanda. A computação em nuvem está interessado nas técnicas da

virtualização, que permite que um único servidor seja utilizado como múltiplos servidores

virtuais e nas técnicas de cluster que permite que múltiplos servidores sejam tratados como

um único servidor.

A virtualização resolve problemas de datacenters4 e traz algumas vantagens [11]:

• Taxas maiores de utilização: Antes da virtualização as taxas de utilização e

armazenamento em centros de dados corporativos eram média menores que 50% da

capacidade total (na verdade, 10% a 15% de taxas de utilização eram comum). As cargas

de trabalho podem ser encapsuladas e transferidos para sistemas ociosos, que significa que

18

os sistemas existentes podem ser consolidadas e a aquisição de capacidade adicional de

servidor pode ser adiado ou evitado.

• Consolidação de recursos: Permite consolidação de vários recursos de TI. Além da

consolidação de servidores e armazenamento, a virtualização oferece uma oportunidade

para consolidar a arquitetura de sistemas, infra-estrutura do aplicativo, dados e bases de

dados, interfaces, redes, desktops e até mesmo processos de negócios, resultando em

economia de custos e maior eficiência.

• Menor utilização de energia: A eletricidade necessária para o funcionamento de

datacenters4 em empresas já não está disponível no fornecimento ilimitado e o custo é

crescente. Usando a virtualização torna-se possível reduzir o consumo total de energia e

poupar dinheiro significativo.

• Economia de espaço: Expansão de servidores continua sendo um grave problema na

maioria dos datacenter4, a expansão nem é sempre uma opção, com custo médio de

construção de vários milhares de dólares por metro quadrado. Virtualização pode

consolidar muitos sistemas virtuais em menos sistemas físicos.

• Recuperação de desastre: Virtualização de serviços pode aumentar as taxas globais de

disponibilidade e oferecer novas opções para soluções e recuperação de desastres.

• Redução dos custos de operação: Uma empresa média gasta mais em manutenção do que

em infra-estrutura. A virtualização pode reduzir essa carga e também reduzir os custos

totais das operações.

19

3 ARQUITETURA PARA COMPUTAÇÃO EM NUVEM

Essa proposta [3] [11] é um exemplo de como combinar virtualização e facilitar a

implantação de uma aplicação, considerando uma implantação com duas camadas em uma

nuvem.

A arquitetura utilizada contém os seguintes componentes:

• Balanceamento de carga: Quando um Equipamento chega ao seu limite o mesmo

serviço pode ser dividido em diversas máquinas para não ocorrer “congestionamento”.

Quando utilizado mais de um balanceamento de carga, aumenta a confiabilidade através da

redundância. Essa solução é o balanceamento de carga que pode ser sobre:

• Utilização do CPU;

• Armazenamento;

• Rede.

• Servidor Web¹: Será um computador que aceitará os pedidos vindos dos clientes e divididos pelo balanceador de cargas.

• Base de Dados: Onde as informações serão guardadas.

• API de Armazenamento: Sistema que envia instruções para o banco de dados. Após entender os componentes, o desenvolvedor deve seguir as premissas a seguir:

• O desenvolvedor deve escolher um balanceador de carga, servidor Web¹¹ e o servidor

de banco de dados de uma biblioteca de imagens de máquinas virtuais pré-configuradas, como

podemos ver na figura 3-1.

Figura 3-1: Biblioteca de máquinas virtuais disponíveis para o desenvolvedor [3].

• O desenvolvedor deve configurar cada componente para montar sua imagem

customizada. Com a arquitetura implementada, o balanceador de carga deve ser configurado,

o Servidor Web¹¹ preenchido com seu conteúdo estático carregando-o para a nuvem de

20

armazenamento e as Base de Dados também populadas, mas diferente do Servidor Web¹¹, seu

conteúdo é dinâmico. O desenvolvedor escolhe um padrão que leva as imagens para cada

camada e os implementa como mostra a figura 3-2, levando em consideração as manipulações

na rede, segurança e problemas de escalabilidade.

Figura 3-2: Exemplo de uma implantação de um aplicativo em nuvem com dois níveis e

servidores WEB¹ [3].

• O desenvolvedor deve personalizar as camadas da nova arquitetura fazendo os

componentes conhecer as exigências específicas de cada aplicação.

• O desenvolvedor escolhe um padrão que leva as imagens para cada camada e como

são implementadas, escolhe como será a manipulação de dados na rede, segurança e

escalabilidade.

• Quando a aplicação precisar ser atualizada, as imagens da máquina virtual podem ser

atualizadas, versionadas e copiada em todo a cadeia de desenvolvimento, de teste e de

produção e toda a infra-estrutura é reimplantada rapidamente. Em computação em nuvem,

tudo é visto como temporário, ficando mais fácil reimplantar um aplicativo inteiro do que

corrigir manualmente um conjunto de máquinas virtuais individuais.

Após isso a arquitetura começa a dar forma, podemos analisar a infra-estrutura mínima

necessária para Computação em Nuvem, como mostra a figura 3-3.

21

Figura 3-3: Exemplo de uma implantação de um aplicativo em nuvem com dois níveis e

servidores WEB¹ [3].

Esse conjunto padrão de componentes podem ser utilizados para implantar rapidamente

um aplicativo. Com esse modelo as necessidades de uma empresa podem ser atendidas

rapidamente, sem a necessidade de comprar equipamentos, seguir manuais de instalação,

instalar mais cabeamento e reconfiguração de servidores e infra-estrutura de rede.

Podemos ainda alterar as configurações, adicionando um novo balanceador de cargas

para aumentar a redundância como mostra a figura 3-4.

Figura 3-4: Exemplo de uma implantação de um aplicativo em nuvem com dois níveis e servidores WEB¹ [3].

Para baratear os custos ainda mais, podemos utilizar de programas open source

(código aberto) para o banco de dados, utilizando MySQL, para o Servidor Web¹¹, utilizando

o Apache e para a API de armazenamento, utilizar o JDBC ou Java Database Connectivity

22

(Conectividade entre Banco de Dados Java), como mostra a figura 3-5, pois estão disponíveis

na internet e de graça.

Figura 3-5: Exemplo de uma implantação de um aplicativo em nuvem com dois níveis e servidores WEB¹¹ utilizando Apache, MySQL e JDBC para baratear os custos ainda mais [3].

Nos anos 90 a discussão era como decompor as aplicações em diversos componentes

para implantar em servidores separados com o objetivo de otimizar os recursos.

Hoje em dia, mantemos essa arquitetura de aplicativos distribuída e utilizamos a

virtualização. Computação em nuvem mantém essa tendência e oferece maneira de

implementar essa arquitetura de aplicação e com um datacenter4 dinâmico.

Essas tendência da arquitetura atual tem sido fatores para impulsionar a adoção da

computação em nuvem, outras tendências são [3] [11]:

• Escalabilidade: Aplicativos desenvolvidos para computação em nuvem necessitam

trabalhar em escala de acordo com as demandas de carga de trabalho para obter um bom

desempenho e cumprir os níveis de serviço. Para isso, as aplicações devem ser flexíveis para

maximizar a escalabilidade. O melhor termo seria elasticidade da aplicação, pois tanto podem

reduzir como aplicar as cargas de trabalho;

• Disponibilidade: Os usuários esperam que esteja funcionando 24 horas por dia, 7 dias

por semana;

• Confiabilidade: Significa que os componentes do sistema raramente falham e podem

ser substituídos rapidamente caso ocorra. E o mais importante, sem perder dados;

23

• Segurança: Aplicações devem fornecer acesso remoto a quem realmente for

autorizado. Os usuários devem confiar na segurança dos seus dados.

• Flexibilidade e agilidade;

• Manutenção: Componentes da aplicação podem ser atualizados ou retirados sem

interromper o sistema como um todo.

• Eficiência: Avaliar o seu objetivo final é sempre importante, pois aplicações de

planejamento de recursos empresariais, por exemplo, pode ser mais adequado para sistemas

verticalmente dimensionados e fornecidos através de SaaS. Aplicações que extrair, manipular

e apresentar dados derivados desses sistemas, pode ser adequado para a implantação na

nuvem;

• Segmentação: Os dados e distribuir para um grande número de servidores;

• Frames (Quadro de dados): Aplicações que processam frames é possível criar uma

máquina virtual através de escala horizontal para renderizar cada frame aumentando o

desempenho.

• Base de dados: Adaptadas para trabalhar em nuvem utilizando escalabilidade

horizontal, ao invés de acessas uma base de dados única e central, os pedidos dependem agora

de qual fragmento contém os dados desejados como mostra a figura 3-6;

Figura 3-6: Base de dados em nuvens particionando tabelas, aplicação com dados distribuídos através de instâncias em escala horizontal [3].

Para uma empresa passar a utilizar a computação em nuvem é necessário planejar os

padrões como que tipo de máquina virtual utilizar, qual sistema operacional utilizar para cada

imagem, ferramenta, programa ou linguagem.

24

3.2.1 Escalabilidade Horizontal e Paralelização

Computação em nuvem, como já mencionado, faz uma enorme quantidade de

escalabilidade horizontal. Com isso, o número de aplicações pode crescer e continuam sendo

adequadas para computação em nuvem [3].

As plataformas de nuvens são construídas de forma que o servidor virtual se houver

uma falha física as máquinas virtuais são realocadas para um servidor físico diferente.

Escalabilidade Horizontal e Paralelização caminham lado a lado, porém sua

implementação mudou. Analisando os aplicativos, esses podem utilizar o paralelismo entre

muitos servidores e escalar para milhares de servidores, oferecendo maior escalabilidade.

A paralelização é freqüentemente implementada com balanceadores de carga que

distribui as solicitações entre os servidores. Na computação em nuvem a paralelização pode

ser implementado com um balanceador de carga que distribui os pedidos recebidos através

das máquinas virtuais. Os pedidos podem ser projetados para solicitar recursos adicionais para

suportar picos de carga de trabalho.

Na figura 3-7 exemplifica uma arquitetura clássica de paralelização com balanceadores

de carga e alguns servidores Web¹¹ acessando o mesmo dado. O volume das solicitações é

distribuído entre os servidores.

Figura 3-7: Base Arquitetura comum de paralelização com balanceadores de carga escalonado horizontalmente [3].

25

Existem outras maneiras de utilizar paralelismo em ambientes de computação em

nuvem [3]. Um aplicativo que usa bastante tempo de CPU para processar dados pode utilizar

esse outro modelo, representado na figura 3-8.

Figura 3-8: Outra forma de utilizar o paralelismo [3].

O planejador recebe tarefas e dados dos usuários e os guarda em um repositório e em

seguida inicia uma nova máquina virtual para cada tarefa e cada máquina virtual recebe um

token, que retorna ao usuário quando o projeto for concluído e a máquina virtual desligada.

Aplicações podem ser paralelizadas na medida em que os dados forem particionados. O

particionamento de dados tem um impacto significativo no volume de dados transferidos

através de redes. Tornando a organização física dos dados uma importante consideração a ser

tratada ao planejar uma arquitetura [3].

3.2.2 Organização física e segurança dos dados

A organização física dos dados é a relação entre os elementos de processamento e os

dados operados. Existe uma equação simples que descreve o tempo para mover certa

quantidade de dados.

Esta equação é importante para o momento do processamento de dados e para o

planejamento em longo prazo. Ela pode ajudar a determinar se faz sentido implementar uma

estratégia de computação onde se demora mais tempo para mover o dados do que para

26

processá-lo. Também pode ajudar a determinar o custo de mover as operações de um

fornecedor em nuvem para outro. O custo da movimentação de dados pode ser expressa em

tempo e custos de largura de banda.

A organização física dos dados está diretamente relacionada com dados e

processamento. Os dados para as empresas normalmente são o mais valioso bem e deve ser

protegido com segurança maior do que qualquer outro ativo. Para isso, alguns passos são

importantes decidir, como: Criptografia, autenticações, controle de acesso e etc.

As aplicações devem apresentar apenas os dados apropriados para cada usuário. Na

implementação, os desenvolvedores devem evitar práticas de codificação que poderia resultar

em vulnerabilidade. Na computação em nuvem, as aplicações são implantadas em redes

partilhadas e utilizam técnicas de segurança simples e filtragem nas portas para proteger as

camadas da arquitetura [3].

27

4 API EM NUVENS

Como dito nos capítulos anteriores, grandes empresas já disponibilizaram seus serviços

em nuvens. Algumas APIs ainda estão em fase de testes.

Neste capítulo analisarei quatro dos grandes fornecedores, são eles:

• Google™, com o Google™ Apps;

• Amazon®, com o Amazon® EC2;

• Microsoft®, com o Microsoft® Azure;

• IBM®, com o IBM® Computing on Demand.

4.1 Google™ Apps

Google™ é o líder em aplicações baseadas em internet, portanto não é surpreendente

que a empresa também forneça seus serviços em nuvens. Esses serviços são chamados de

Google™ App Engine® ou somente Google™ Apps, que permite os desenvolvedores criarem

suas próprias aplicações web¹¹, utilizando a mesma infra-estrutura das poderosas aplicações

do Google™. Google™ Apps fornece um ambiente de aplicações totalmente integrado, são

fáceis de construir, fácil manutenção e alta escalabilidade [4].

Tudo o que o desenvolvedor tem que fazer é desenvolver seus aplicativos e enviá-los

para a nuvem e a partir dai, está pronto para servir seus usuários.

Google™ Apps é um pacote de serviços que o Google™ oferece que contém aplicativos

de edição de texto, planilhas e apresentações (Google™ Docs®), serviço de agenda

(Google™ Agenda®), comunicador instantâneo integrado (Google™ Talk®), e-mail com o

domínio da empresa (por exemplo, [email protected]), entre outros. Todos esses

serviços são processados pelo Google™ e o cliente só precisa criar as contas do usuário. O

Google™ Apps oferece pacotes gratuitos e pagos, de acordo com o número de usuários. Um

dos maiores clientes do Google™ Apps é a Procter & Gamble, que contratou os serviços para

mais de 130 mil colaboradores. O Google™ Apps proporciona um ambiente seguro para as

aplicações e trabalha também sobre demanda.

No modelo de aplicação do Google™ Apps, o desenvolvedor pode criar aplicações em

Java® e Python®. O armazenamento não é relacional, é baseado no Google™ Big Table®

que é um sistema distribuído de armazenamento. Seu funcionamento é como um banco de

28

dados orientado a colunas. Utiliza o GFS - Google™ File System® (Sistema de Arquivo do

Google™) para gerenciar as informações. Se necessário o Google™ Apps dimensiona as

aplicações desenvolvidas automaticamente [4].

O Google™ fornece também uma API para “amarrar” contas do Google™ para

utilização das suas aplicações online, mas não é necessário utilizar. A Microsoft®, com o

Microsoft® Azure®, também faz isso utilizando seu “Live Service” que será melhor

explicado no capítulo 4.3

4.1.1 Desenvolvimento no Google™ Apps

Podemos desenvolver aplicativos em ambiente de execução Java utilizando ferramentas

comuns como “Java Server Pages” (JSP). O Google™ Apps suporta o ambiente de execução

Java 5 ou 6. Para armazenar os dados o Kit de desenvolvimendo do Google™ inclui

interfaces JDO (Objetos de dados Java) e JPA (API persistente Java) [18].

O JDO é uma interface de programação de aplicações padrão Java [27] que provê uma

camada de abstração entre as aplicações e armazenadores de dados. Muito utilizada por

desenvolvedores de aplicações, pois possibilita a interpretação de objetos na estrutura do

banco de dados relacional. Há várias opções de banco de dados como MySQL®, Oracle® ou

SQL Server®. Diversas implementações comerciais e código-aberto utilizam o JDO.

Existem alternativas como JDBC®, EJB® – Enterprise JavaBeans, BMP® – Bean-

Managed Persistence ou ainda o CMP® – Container-Managed Persistence, mas não será

explicado.

Por ser de fácil utilização, os programadores deixam de se preocupar com os detalhes da

persistência de armazenar campo por campo. JDO pode ser executado em várias

implementações sem ter que recompilar ou alterar o código fonte e também independe do

banco de dados utilizado, JDO suporta diferentes tipos e tem um ótimo desempenho e também

otimiza acesso aos dados.

A figura 4-1 exemplifica melhor como funciona o JDO. Permitindo múltiplas

implementações ligadas ao armazenamento de dados, conectadas a um servidor de aplicativos

que permite armazenar dados usando JDO.

29

Figura 4-1: Arquitetura JDO [27].

O JPA [31] provê um modelo de persistência, visa simplificar, melhorar e padronizar

aplicações Java usando persistência de dados. Esta API se baseia nas melhores idéias de

tecnologias de persistência como Hibernate®, TopLink® e JDO® e com isso, surgiu esse

novo padrão. O desenvolvedor tem a liberdade de escolher o padrão de implementação.

A figura 4-2 representa como funciona a arquitetura de uma aplicação Java qualquer

utilizando JPA. Não ficando amarrado a uma solução de certo fornecedor.

Figura 4-2: Arquitetura JPA [31].

Voltando ao desenvolvimento no Google™ Apps® [18], o serviço de armazenamento

de dados é distribuído, entendemos como ele funciona em nuvens no capítulo 3,

especificamente na figura 3-6. O servidor Web¹ também é distribuído e cresce ou diminui de

30

forma elástica à medida que o usuário requer mais poder computacional, como também o

armazenamento age dessa mesma forma. Os objetos de dados no banco de dados têm um tipo

de conjunto de propriedades, onde as consultas podem recuperar entidades, pois o

armazenamento não é feito de forma tradicional como em um banco de dados relacional. O

armazenamento é consistente e utiliza de controle de concorrência. O número de tentativas é

fixo, caso outros processos estejam utilizando a mesma entidade. Utiliza de grupos de

entidades para armazenar, o mesmo grupo de entidades são armazenadas ao mesmo tempo,

tornando-a mais eficientes, mas isso não impede da execução falhar ou recusar. O aplicativo

pode atribuir entidades aos grupos quando forem criadas.

Alguns outros serviços são fornecidos para facilitar operações no gerenciamento do

aplicativo. Conforme exemplos explicados no site do Google [18]:

• Obter de URL: Permite acessar recursos da internet ou dados;

• Mensagens: Os aplicativos podem enviar mensagens de e-mail para facilitar o

controle;

• Memória Cache: Fornece memória cache para os aplicativos para melhorar o

desempenho, diminuindo o uso da persistência e transação de armazenamento para dados

copiados ou temporários;

• Manipular imagens: Permite o aplicativo redimensionar imagens;

• Programar Tarefas: Permite programar tarefas para serem executadas periodicamente.

O SDK inclui um aplicativo de servidor Web¹ para emular os serviços do Google™

Apps no computador, antes de enviá-los para a nuvem. O SDK também inclui ferramentas

para enviar os aplicativos para App Engine, depois de criar o código, pode-se executar essa

ferramenta que solicita o nome da sua aplicação no Google™ Apps, criado anteriormente, seu

login e sua senha. Pode-se também versionar suas aplicações, quando já existe um aplicativo

executando é criado uma nova versão, mas a versão antiga, se o desenvolvedor desejar, ainda

continua funcionando para o usuário.

Existe um Console de Administração na página do Google™ Apps, que é a interface

web¹ utilizada para gerenciar os aplicativos sendo executados, nele é possível criar

aplicativos, criar nome de domínio, pois é possível criar seus próprio domínio, útil para

empresas que contratam os serviços de e-mail, também pode alterar versões ativas dos

31

aplicativos, verificar os logs de acessos e erros, gerenciar o armazenamento de dados e ainda

visualizar gráficos de estatística dos seus aplicativos, como podemos ver a figura 4-3.

Figura 4-3: Console de administração do Google™ Apps Engine [18].

A criação dos aplicativos é gratuita até certo limite, existem cotas. Podemos utilizar até

500 Megabytes de armazenamento, até 5 milhões de visualizações do seu aplicativo por mês e

10 aplicativos. Existe um tempo limite de resposta de 30 segundos para a aplicação, se passar

esse tempo o aplicativo é encerrado. Se um aplicativo ultrapassar esse tempo por muitas vezes

é possível que esse tempo seja diminuído automaticamente.

Outra cota que existe é o número de resultados mostrados ao fazer uma consulta

(query), podendo retornar no máximo 1000 resultados, se ultrapassar é mostrado apenas os

primeiros 1000 resultados encontrados.

Muitos podem estar lendo essa monografia e pensando que como podemos criar até 10

aplicações é possível utilizar múltiplos aplicativos funcionando em paralelo, como existem

programas prontos na internet que fazem isso com o Gmail e o utilizam como um Disco

Rígido virtual, porém o Google™ já pensou nisso e inclusive é uma violação dos termos de

serviços, explícitos ao criar uma nova conta e se isso acontecer é possível que sua aplicação

seja desativada ou sua conta cancelada.

32

Para entender melhor sobre as cotas, foram criados algumas tabelas. Na tabela 1-1 o

foco são os recursos.

Tabela 1-1: Cotas dos recursos [18].

Na tabela 1-2 o foco são os armazenamentos.

Tabela 1-2: Cotas de armazenamento [18].

Na tabela 1-3 o foco é a utilização do e-mail (Gmail).

Tabela 1-3: Cotas de e-mails [18].

Percebemos que o Google™ deixa bem explícito as cotas e tudo é feito de um modo

automático, se ultrapassar, você não pode mais utilizar o tipo do serviço ultrapassado pelo

período de tempo estipulado, que podem ser em minutos, meses, gigabytes, megabytes e etc.

4.1.2 Utilizando o Google™ Apps

Google™ fornece um modo prático e rápido de adicionar seus aplicativos em nuvens.

Para isso é necessário criar sua conta App Engine [18], baixar a aplicação “Development Kit”,

SDK, (Kit de Desenvolvimento de Sotware) [19] do Google™ para Pyton ou Java, no meu

caso eu escolhi o Java para demonstrar.

Para baixar o SDK, podemos utilizar o próprio Eclipse entrando na aba “Help” >

“Install New Application”. Utilizando a URL “Google™ apps -

33

http://dl.Google.com/eclipse/plugin/3.5”, como podemos ver na figura 4-4, o Plugin e o SDK

já estarão disponíveis para download.

Figura 4-4: Baixando o Plugin e o SDK utilizando Eclipse.

34

Os arquivos necessários serão instalados automaticamente, como mostra a figura 4-5.

Figura 4-5: Instalando o Plugin e o SDK utilizando Eclipse.

Ao finalizar a instalação, o Eclipse irá liberar alguns novos ícones, entre eles estão:

Novo projeto Web¹: Permite criar um novo projeto de aplicação Web¹;

Deploy: Permite enviar sua aplicação para as nuvens.

Ao criar um novo projeto, utilizando o novo ícone explicado acima (G em azul), a

janela sofre algumas alterações, podemos perceber na figura 4-6 que existem as opções agora

de utilizar o Google™ Web¹ Toolkit e o Google™ Apps®. Quando utilizado o Google™

Web¹ Toolkit algumas configurações inicias do projeto são alteradas, como vou demonstrar

um JSP simples, nesse exemplo mostrarei apenas utilizando o Google™ Apps.

35

Figura 4-6: Novo projeto utilizando Google™ Apps®.

O assistente cria um modelo de projeto padrão, mostrado na figura 4-7. O diretório de

origem (source), SRC, contém os arquivos fonte Java como acontece normalmente. Há

também as bibliotecas App Engine e Java virtual machine SDK. No diretório “War” estão os

arquivos Web¹, onde estarão os arquivos estáticos e JSP do projeto.

O arquivo com extensão java do diretório src é o Servelet Java padrão, que responde as

requisições HTTP e as saídas. No meu caso, apenas um “Hello World”.

36

Figura 4-7: Novo projeto utilizando Google™ Apps.

Para essa estrutura ser testada é necessário um servidor. No App Engine como dito

anteriormente, existe um servidor web¹ para testes que imita um ambiente de produção, o que

permite desenvolver localmente, antes de enviar para a nuvem. Para realizar esse teste é

preciso rodar o aplicativo como uma aplicação web¹ como mostra a figura 4-8,

disponibilizado através do SDK do Google™.

Figura 4-8: Rodando um aplicativo como Aplicação WEB¹.

Assim, já podemos rodar a aplicação e visualizar localmente, como mostra a figura 4-9.

Figura 4-9: Rodando um aplicativo localmente.

Antes de enviar a aplicação, precisamos dizer o nome dela no App Engine via internet

na página do Google™ Apps e configurar o Eclipse antes do envio, dizendo o nome da

aplicação apenas. Na figura 4-10 podemos ver as aplicações criadas nos testes. A aplicação

que irá receber é a “leoanser332”.

37

Figura 4-10: Criando aplicações na internet.

Funcionando a aplicação localmente, podemos utilizar o botão “Deploy” explicados

anteriormente para enviar nossa aplicação para as nuvens do Google™ Apps, como mostra a

figura 4-11 e ao terminar veremos os resultados do envio mostrados na figura 4-12.

Figura 4-11: Enviando aplicativo para as nuvens.

38

Figura 4-12: Tela de confirmação dentro do Eclipse.

Após enviar o aplicativo e ter a confirmação, podemos utilizar o endereço

http://nome_da_aplicação.aapspot.com/nome_da_classe_java para acessar a aplicação

enviada. No meu caso ficou http://leoanser332.appspot.com/guestbook. Como mostra a figura

4-13.

Figura 4-13: Aplicação em nuvens acessível de qualquer computador com internet.

4.1.3 Arquitetura do Google™ Apps

Figura 4-14: Arquitetura Google™ Apps (desenvolvido pelo autor).

39

Na arquitetura mostrada na figura 4-14 podemos perceber que o Google™ não

demonstra sua arquitetura por completo. Foi desenvolvido a figura 4-14 termos uma idéia de

como é a estrutura do Google™ por trás do Google™ Apps®, que é a mesma utilizada nas

grandes aplicações desenvolvidas pelo Google™.

A única opção de Base de dados que o Google™ oferece é o Google™ Big Table®, o

que se torna um malefício para a estrutura pois, pode atrapalhar testes de desenvolvimento,

pois é uma banco de dados distribuído e o Google™ não oferece outro banco de dados do tipo

relacional por exemplo. Também não dispõe de relacionamentos muitos-para-muitos (N-para-

N), consultas com joins não é possível e agregações nas consultas também não, como por

exemplo utilizar uma consulta de soma, média e etc [18].

Comparando a arquitetura do capítulo 3, o grande diferencial é a memória cache. Com

isso podemos sentir um melhor desempenho para os aplicativos e banco de dados.

Diminuindo o uso do CPU e o uso da persistência.

Um grande diferencial é utilizar e agregar as APIs existentes do Google™ em sua

aplicação.

Também ressalto que a administração dos seus aplicativos é muito simples, existem

relatórios e estatísticas e seu aplicativo pode ser executado em diversas versões diferentes.

O serviço ainda está em fase Beta e existem alguns problemas que ocorrem de forma

intermitente, mas no geral tem se comportado de forma satisfatória.

Por fim, o API de armazenamento do Google™, que discutimos no capítulo 3 é o

Google™ File System ou GFS (Sistema de Arquivos do Google™) para gerenciar as

informações e também podendo utilizar o “Map Reduce”, que também é um aplicativo

desenvolvido pelo Google™ para suportar computação distribuída entre grandes quantidades

de dados para distribuir o processamento [18].

Como mencionado anteriormente, os aplicativos em Java podem armazenar os dados

com interfaces JDO e JPA, que são interfaces de objetos de dados e API persistente

respectivamente.

4.2 Amazon®

Um dos maiores varejistas da internet é também um dos principais fornecedores de

serviços em nuvens, pois a Amazon® tem gasto muito tempo e dinheiro na criação de um

grande número de servidores para serviços em seu página da web¹. Esse serviço é chamado de

“Elastic Compute Cloud” ou apenas EC2. Este é um serviço web¹ comercial que permite os

40

desenvolvedores e empresas alugar a capacidade em nuvem dos servidores da Amazon®. EC2

permite que os clientes acessem máquinas virtuais no qual podem carregar qualquer aplicativo

de sua escolha, podendo criar, abrir ou encerrar instâncias do servidor [5].

No Amazon® é possível escolher entre três tamanhos de servidores virtuais [5]:

• Pequeno porte: Oferece o equivalente a um sistema com 1.7GB de memória, 160GB

de armazenamento e um processador virtual de 32-bit5.

• Grande porte: Oferece o equivalente a um sistema com 7.5GB de memória, 850GB de

armazenamento e dois processadores core virtuais de 64-bit5.

• Porte extragrande: Oferece o equivalente de um sistema com 15GB de memória,

1.7TB de armazenamento e quatro processadores virtuais de 64-bit5.

EC2 é apenas parte do “Amazon Web¹ Services” (AWS), os desenvolvedores podem

criar confiávelmente, em máquinas potentes e de baixo custo, pois pagam apenas o poder de

computação que usam. AWS é talvez o mais popular serviço de computação em nuvem até

hoje. Amazon® afirma que detém um mercado de mais de 330.000 clientes, que é composto

de desenvolvedores, usuários iniciantes e também empresas.

Para não deixar a sua grande estrutura de processamento e armazenamento de dados

ociosa o Amazon® teve a idéia de “alugar” para uso de máquinas virtuais. É possível saber

mais sobre os serviços oferecidos pela Amazon® em sua página na internet [5];

Amazon® EC2 oferece suporte para Solaris OS, Linux e Windows [16]. EC2 é uma

IaaS, ou seja, Infra-estrutura como um serviço que oferece instâncias de servidor virtual com

endereços Ips e armazenamento por demanda. As instâncias no servidor, como dito

anteriormente, podem ser criadas conforme a necessidade e pagando apenas pelos servidores

ativos. É o que chamamos de elasticidade e pagar por uso.

As máquinas virtuais criadas são chamadas de Amazon® Machine Images (AMIS) ou

em português, Máquina de Imagens da Amazon®. Inclui sistema operacional e alguns

aplicativos necessários para a prestação do serviço [5].

“Amazon® Simple Storage Service®” (S3), ou em português, Serviço de

Armazenamento Simples é o serviço web¹ de armazenamento que oferece o acesso a grande

estrutura de armazenamento de dados da Amazon® e que é altamente escalável. Fornece uma

41

interface que pode ser utilizado para armazenar ou recuperar os dados guardados a qualquer

hora em qualquer lugar.

Amazon® oferece ferramentas para ajudar na seleção das imagens configuradas a partir

do seu armazenamento S3 e também podemos configurar a segurança e funções de

acessibilidade através da rede. Ao selecionar os tipos de instâncias e sistema operacional, é

possível iniciar e monitorar suas instâncias do IAM quando necessário, utilizando APIs

oferecidas. Permite também executar aplicações em diversos locais, utilizar terminais com IP

estático ou ainda bloquear instâncias [5].

Para utilizar os benefícios e se cadastrar no Amazon® EC2, basta acessar a página

aws.amazon.com e preencher seus dados criando uma conta. Quando receber a sua conta

existem diversos modos utilizados para acessar e gerenciar suas máquinas virtuais.

O console de gerenciamento do Amazon® é mostrado na figura 4-15, que é um

aplicativo da Web¹ que cria e gerencia instâncias EC2 sem ter que aprender ou baixar as APIs

ou plataformas de desenvolvimento. O console fornece os recursos listados abaixo [5]:

• Criar, parar e gerenciar instâncias EC2;

• Verificar seus dados no EC2 e serviços ativos;

• Criar novos AMIs;

• Criar e associar Ips;

• Gerenciar chaves de acesso público e privado;

• Configurar firewall6.

42

Figura 4-15: Console do Amazon® EC2 [5].

Para iniciar o console devemos criar chaves para garantir que só o usuário terá acesso às

instâncias que o usuário cria. É preciso baixar o arquivo de chaves para guardá-lo em um local

seguro. Este arquivo é necessário para acessar suas instâncias que são criadas a partir destas

chaves. Após criar suas chaves é necessário autorizar o acesso de rede para suas instâncias

configurando um grupo de segurança. Esse grupos definem as permissões de rede,

controlando o acesso as instâncias [5].

4.2.1 Arquitetura Amazon® EC2

Na figura 4-16 podemos ver a arquitetura do Amazon® EC2. Detalho abaixo cada

componente [16]:

• Amazon® SQS prove confiabilidade e escalabilidade enfileirando e armazenando

mensagens são trocadas entre os recursos.

• O Controlador é responsável por executar o processamento sob demanda utilizando

todos os componentes aqui descritos, faz toda a lógica entre os componentes para realizar o

processamento distribuído. O Controlador é considerado, em comparação a arquitetura do

capítulo 3, como o Balanceador de Cargas.

43

• SimpleDB® é um serviço Web¹ e prove as funcionalidades de um banco de dados

como armazemanento, indexação e consultas. Sua arquitetura é usada para armazenamento e

recuperação de estados do sistema. No caso de falha um novo nó pode ser iniciado. O

SimpleDB® nada mais é que a API de Armazenamento utilizado pelo Amazon®. O

SimpleDB® é a Base de Dados, da arquitetura estudada no capítulo 3.

• S3 é um sistema de armazenamento pela Internet. SimpleDB® é um banco de dados e

o S3 é um sistema de arquivos distribuído que tem a utilidade de recuperar e armazenar dados.

Oferece segurança, confiabilidade e rapidez. Se o SimpleDB® é a Base de Dados, o S3 é o

API de Armazenamento do Amazon®.

Figura 4-16: Arquitetura do Amazon® EC2 [5].

4.3 IBM® Computação sob Demanda em parceria com Amazon®.

A IBM® fez uma parceria com o Amazon® Web¹ Services para dar acesso aos usuários

aos aplicativos da IBM® utilizando o Amazon “Elastic Compute Cloud” (EC2) explicados

em detalhes no capítulo 4.2.

Além de usar a grande estrutura do Amazon® que oferece armazenamento com o

Amazon® S3, máquinas virtuais com o Amazon® EC2, troca de mensagens com o Amazon®

44

SQS e serviços de Banco de Dados com o Amazon® Simple DB a IBM® disponibilizou

alguns produtos do seu portfólio [20], como:

• Aplicativos de gerenciamento de dados;

o DB2® : Servidor de dados DB2, oferece 3 versões para computação em

nuvem. Gerencia os dados e fornece base para construir e implementar

aplicativos utilizando C/C++®, Java®, .Net®, PHP®, Ruby® e outras

plataformas.

o Informix Dynamic Server®: Projetado para desenvolvimento de

aplicações e protótipos. Integrado com outro aplicação da IBM®, Data

Studio, que oferece algumas ferramentas adicionais de desenvolvimento.

• Aplicação Lotus, para colaboração;

o IBM® Mashup Center®: Permite reutilizar códigos existentes para novas

aplicações

o Lotus Forms Turbo®: Ajuda a desenvolver formulários;

• Tivoli, para gerenciamento das aplicações;

o Tivoli Monitoring: Sistema de monitoramento de aplicação para banco

de dados, sistemas operacionais e servidores.

4.3.1 Usando a estrutura Zend com Amazon® S3

Zend [21] é uma estrutura que contém diversas classes tornando a utilização do

armazenamento de serviços na nuvem simples.

Como o armazenamento na nuvem não é tão fácil de acessar como um disco rígido, os

desenvolvedores precisam criar protocolos e configurações para trabalhar com os dados.

Sobre a interface para os serviços, no S3, pode-se utilizar a interface REST -

Transferência de Estado Representacional (Representational State Transfer), onde descreve

qualquer interface web¹ simples, pode ser XML, HTML ou mesmo o SOAP, que é outra

interface aceita pelo S3, SOAP quer dizer Protocolo de acesso a objetos (Simple Object

Access Protocol) que é um protocolo para troca de informações com uma estrutura em

plataformas distribuídas, utilizando tecnologias baseadas em XML. Isso quer dizer que você

pode utilizar um serviço de qualquer linguagem de programação, mas obriga o desenvolvedor

a pensar nos detalhes do pedido e não sobre os dados usados, por exemplo, as solicitações S3

45

devem sempre incluir um token para a autenticação em conjunto com uma chave de acesso ao

Amazon®.

O Zend entra exatamente nesse ponto, em vez do desenvolvedor se preocupar em

assinaturas, que é uma detalhe irrelevante para a aplicação, concentra-se nos dados, pois essa

classe permite [21].

4.3.2 Utilizando o IBM® Cloud Demand em parceria com o

Amazon®.

Para iniciar a criação de uma aplicação no IBM® Cloud Demand é necessário a Zend

instalado [21] [22] (zend.com/community/downloads). Esse pacote instala o Zend, o PHP e o

Servidor Web¹ Apache. Também é necessário criar uma conta no Amazon®, que fornece uma

chave de acesso e outra chave secreta para conseguir adicioná-las no código e enviar as

páginas em PHP para o S3. Todas as páginas PHP precisarão dessa chave e o melhor a se

fazer é criar uma classe para recuperar as credenciais. Exemplo:

Credenciais necessárias:

[amazon]

accessKey=X

secretKey=Y

ownerId=123

[nirvanix]

username=Leo Anser

password=xxxxx

appKey=Z

Classe PHP para recuperar as credenciais:

<?php

class Credentials

{

var $key_array;

function Credentials() {

$this->key_array = parse_ini_file("..\conf\cloud.ini", true);

}

function getCredential($group, $key) {

return $this->key_array[$group][$key];

}

} ?>

Esta classe usa parse_ini_file() para ler os valores do arquivo inicial, no caso cloud.ini.

A matriz $key_array guarda as chaves do Amazon®. getCredential() é um método para

recuperar um valor a partir do arquivo .ini ao invés de codificar para cada arquivo PHP.

46

Com isso as credenciais serão definidas apenas uma vez em um lugar e caso precise

alterá-la também. O arquivo .ini não está na raiz do documento pois assim os usuários

poderiam acessá-lo, ele está no diretório conf. Os outros PHPs estarão na raiz do web¹ Server.

Amazon® S3 é um sistema de arquivos distribuído como explicado anteriormente, seu

modelo de dados tem dois conceitos: Bucket e o Objeto. O Bucket concentra e pode haver um

número infinito de objetos com dados, mas não pode conter outro Bucket. Seu nome precisa

ser único.

O objeto, quando criado é definido os parâmetros de controle de acesso para ele e por

padrão são privados, não podem ser modificado ou compartilhados, apenas substituído ou

excluído.

No nosso exemplo, criaremos um aplicativo baseado na Web¹ que gerencia arquivos S3

usando a classe Zend. As páginas criadas no PHP permitirão:

• Criar, Verificar e Deletar os Buckets na conta S3;

• Criar, Verificar e Deletar os Objetos dentro do Bucket.

A aplicação será escrita com 2 arquivos PHP: S3.PHP (exibe os arquivos da sua conta e

permite criar novos e excluir bucket) e Bucketlist.PHP (Exibe, cria e exclui os objetos de

certo bucket).

Quando o usuário carregar o S3.php ele poderá ver uma lista dos Bucket em sua conta

no Amazon®. Como mostra a figura 4-17.

Figura 4-17: Lista dos Buckets ativos [21].

Para criar um novo bucket há algumas restrições impostas pelo Amazon®:

47

• De 3 a 63 caracteres, pode conter números, letras, pontos e traços e deve

começar com número ou letra;

• Não pode ser um endereço IP;

• Não pode terminar com traço;

É fornecido um método para validar o nome (validBucketName()). O formulário fica

dessa forma como mostra a figura 4-18:

Figura 4-18: Formulário para criar um novo bucket [21].

Existe um PHP chamado bucketlist.php que lista todos os buckets existentes e os dados

sobre cada objeto, como mostra a figura 4-19.

Figura 4-19: Lista dos dados dentro de um bucket [21].

48

Zend fornece o método getObjectsByBucket(), que retorna um array com os nomes dos

objetos como mostra a figura 4-17. Para exibir os objetos, utiliza-se o método getInfo() para

cada item do Bucket.

Criar um objeto é a parte mais complicada, o nome deve seguir as regras descritas

anteriormente e os dados devem estar disponíveis. O formulário da figura 4-20 mostra o

usuário adicionando um novo arquivo no objeto, pedindo para selecionar um arquivo, uma

opção de acesso e um nome que é opcional.

Figura 4-20: Criando um novo objeto [21].

Para deletar um objeto é simples, a figura 4-17 mostra o botão “delete” dos objetos.

Para excluir um bucket também é simples, a figura 4-15 mostra também um botão

delete ao lado dos buckets, mas existe uma diferença, é necessário verificar se ele não está

vazio e confirmar com o usuário se ele realmente deseja deletar esse bucket.

O código usa getObjectsByBucket() para pegar o array de todos os objetos de cada

bucket, se não estiver vazio é gerado uma mensagem de confirmação como dito

anteriormente.

O código passa por várias etapas até apagar o bucket, primeiro confirma se o nome é

válido, verifica se o conteúdo é vazio, mas se o parâmetro deleteeverything do código estiver

configurado como verdadeiro, o bucket é excluído de qualquer maneira. Existe método

Cleanbucket() verifica todos os itens do bucket e deleta um a um.

Um dos aspectos mais interessantes para computação em nuvem é a capacidade que o

usuário tem de executar máquinas virtuais em seu prestador de serviço, no nosso caso o

Amazon®. Amazon® EC2 oferece a capacidade de criar imagens de máquinas virtuais com

aplicaçãos e dados e criar quantas imagens forem necessárias.

49

Utilizando ainda o Zend, podemos trabalhar com imagens no EC2. Vamos agora

analisar como trabalhamos com as imagens.

A figura 4-21 mostra uma tabela das imagens, sua localização, seu status e a

plataforma utilizada.

Figura 4-21: Lista de imagens [22].

Para iniciar uma nova imagem, existe um formulário e para cada imagem é possível

iniciar como mostra a figura 4-22.

Figura 4-22: Iniciando uma imagem [22].

Após clicar no botão start this image (Iniciar está imagem), um botão de confirmação

parece para o usuário como mostra a figura 4-23.

50

Figura 4-23: Botão de confirmação para iniciar imagem EC2 [22].

Ao clicar em Ok, uma nova imagem ou instância é iniciada e suas informações são

enviadas para a página de gerenciamento de instâncias. É necessário criar um objeto para a

nova instância e com o objeto criado, é possível iniciar a nova imagem.

Podemos especificar alguns parâmetros para iniciar a nova instância, como o número

de instâncias, tamanho da memória e uso da CPU.

A figura 4-24 mostra o status de uma nova instância.

Figura 4-24: Status da nova instância [22].

Ao clicar em OK, a nova instância é coloca na lista de instâncias. A figura 4-25 mostra

essa lista.

51

Figura 4-25: Lista de instâncias, estância criada pendente [22].

Podemos nota os IDs da nova instância e a chave, explicados anteriormente. Quando

iniciamos uma nova instância seus status(estado) fica pending (pendente), que significa que a

imagem está iniciando mas não funciona ainda.

Quando iniciar, seu status se altera para running (funcionando) como podemos ver na

figura 4-26.

Figura 4-26: Lista de instâncias, estância criada rodando [22].

Isso significa que sua instância já está habilitada para acessos via Web¹. A instância será

executada em um servidor Web¹ utilizando a porta 80, podemos utilizar o endereço DNS

mostrado na figura 4-26 para consultar a página da web¹ da instância.

A figura 4-27 mostra a página de gerenciamento das instâncias onde é possível

reiniciar ou finalizar.

52

Figura 4-27: Lista de instâncias, estância criada rodando [22].

Ao clicar no botão Terminate (Finalizar) surge uma tela de confirmação para finalizar

a instância como mostra a figura 4-28 e ao apertar Ok, a figura 4-29 mostra a tela de

finalização da instância.

Figura 4-28: Tela de confirmação para finalizar a instância [22].

Figura 4-29: Tela de finalização da instância [22].

Como no caso de iniciar a instância, para finalizar ela também leva um tempo, as

figuras 4-30 e 4-31, representam isso. A instância, primeiro fica no status Shuting down

(Desligando) e ao finalizar seu status muda para terminated (Finalizado).

53

Figura 4-30: Tela de finalização da instância [22].

Figura 4-31: Tela da instância desligada [22].

Após terminar uma instância, dentro de uma hora todos os dados dentro dela serão

apagados. Após esse tempo a instância deixará de aparecer na lista.

Vale ressaltar que essa explicação incluindo as telas foram obtidas através da

bibliografia disponível no site da IBM® [21] [22]. Não foi possível demonstrar uma criação

prática, pois os serviços oferecidos pela Amazon® são pagos, como explicados no próximo

capítulo 4.3.4. Também não foi detalhado a programação PHP de cada formulário, pois estão

54

disponíveis no site para consulta, inclusive com exemplos prontos e esse não era o objetivo da

monografia.

4.3.3 Preços IBM® utilizando estrutura Amazon®

Tabela 1-4: Preços IBM® utilizando estrutura Amazon® (Tabela desenvolvida pelo autor com dados retirados so site do Amazon [5]).

55

4.4 Microsoft® Azure

É uma plataforma de serviços em nuvem baseada na internet hospedada nos

datacenters4 da Microsoft®, o qual fornece um sistema operacional e uma série de serviços de

desenvolvimento que podem ser usados individualmente ou colaborar em grupos. A

flexibilidade e interoperabilidade da plataforma Azure pode ser usada para criar novas

aplicações para serem executadas através da nuvem ou melhorar as aplicações existentes com

as capacidades baseadas na nuvem. A arquitetura abertura dá aos desenvolvedores a escolha

de construir aplicações para web¹, aplicações que rodam em dispositivos conectados, PCs,

Servers ou soluções híbridas oferecendo o melhor do online e local.

O Azure atualmente se encontra em fase de testes e foi liberado para o uso de um

número restrito de especialistas, que opinarão sobre o sistema, de forma a definir melhorias

antes de levá-lo definitivamente ao mercado. Nasceu com a idéia de revolucionar o mundo de

aplicativos e serviços na web¹, a fim de automatizar as relações entre empresas e clientes e

aumentar a conectividade. Proporcionará [8]:

• Hospedagem

• Administração de serviços

• Armazenamento em escala

• Computação e redes

Também oferece componentes básicos como:

• Microsoft® SQL Services

• Microsoft®.NET

• Live Services

• Microsoft® SharePoint

• Dynamics CRM Services.

Na figura 4-32 e 4-33 podemos ver a infra-estrutura adotada pela Microsoft® e seu

conjunto de serviços disponíveis [8].

56

• Microsoft® .NET Services são conjuntos de serviços escaláveis para desenvolvedores

e oferecem componentes para as aplicações na nuvem. O desenvolvedor concentram-se na

lógica da aplicação ao invés de construir e disponibilizar o próprio serviço de infra-estrutura

na nuvem. Esse é um grande diferencial da Microsoft® oferece suporte à plataforma de

desenvolvimento dentro da sua infra-estrutura;

• Live Services é um conjunto de componentes dentro do Azure para o tratamento de

dados dos usuários e outros recursos da aplicação. Possibilita os desenvolvedores construírem

aplicações para iteração com Windows Live por exemplo. Como o Google™, a Microsoft®

utiliza dos seu serviço Live para “amarrar” os usuários e obrigá-los a ter uma conta da

Microsoft®.

O Live Services também as tecnologias do Live Mesh para sincronização de dados dos

usuários e pode estender as aplicações na WEB¹ para diversos dispositivos;

• O SQL Services é o serviço da Microsoft® para Armazenamento, quando comparado

a arquitetura discutida no capítulo 3, que é um serviço de armazenamento de dados e de

processamento de consultas construído com base na tecnologia do SQL Server. Diferente do

Google™ que utiliza o Big Table que é um Banco de dados distribuído, SQL Services

implementa apenas partes do modelo relacional. Por isso não possui suporte completo da

linguagem SQL;

• SharePoint Services permite criar aplicações Intranet;

• Dynamics CRM Services é um sistema integrado de CRM.

Share Point e CRM são grandes diferenciais da Microsoft®, em nenhuma arquitetura

analisada temos serviços desse tipo.

57

Figura 4-32: Arquitetura do Microsoft® Azure [17].

Figura 4-33: Arquitetura mostrada em outro nível do Microsoft® Azure (figura desenvolvida pelo autor).

Diferente do Google™, a Microsoft® utiliza Visual Studio ao invés de Pyton® e

Java®. Isso já era esperado, já que o Visual Studio® é um grande pacote de programas da

Microsoft® para desenvolvimento de aplicações muito conhecido e utilizado por

desenvolvedores.

58

4.5 Tabela de Comparações

Tabela 1-5: Comparações entre os quatro grandes fornecedores na nuvem, desenvolvida pelo autor: Microsoft®, Google™, IBM® e Amazon®.

4.6 Outros Exemplos

4.6.1 Live Mesh

Esse é um serviço da Microsoft® ainda em estágio inicial. Sua proposta principal é a de

permitir que o usuário acesse o seu desktop de qualquer computador, com a diferença de que

todos os seus arquivos ficam na nuvem, isto é, nos servidores da Microsoft® [6];

4.6.2 Datasul By You

A brasileira Datasul (agora integrada a TOTVS), dispõe de um conjunto de soluções de

ERP chamado By You que utiliza os conceitos de computação em nuvem e SaaS. O site

InfoWester [7] testou uma das versões do By You analisando suas características;

59

4.6.3 Virtual Computing Lab (Exemplo Acadêmico)

Um caso real de aplicação do conceito de computação em nuvem foi a criação do

Virtual Computing Lab (VCL) [9] na Universidade da Carolina do Norte (EUA). Várias

questões foram analisadas previamente antes da implementação dos laboratórios, como:

• Conseguiríamos suprir os custos e diversidades do que era requerido para o laboratório

dos estudantes;

• Precisaremos de desktops sob demanda;

• Suportaremos o custo de escalonamento entre as dezenas de aplicações instaladas nos

computadores do laboratório;

• Os estudantes fora da universidade terão acesso suficiente aos recursos computacionais;

• Conseguiremos suprir a necessidade de todos os aplicaçãos requeridos pelos estudantes;

• Quando nós deveremos instalar a uma nova versão de uma importante aplicação

demandado pela universidade;

• Precisaremos dos recursos de HPC (High Performance Computing);

Essas questões foram detalhadamente estudadas e em uma primeira tentativa de

análise de pacotes comerciais, nenhum deles atendeu a todos os requisitos exigidos. Na

mesma época a universidade começou a instalação de um serviço HPC centralizado,

utilizando equipamento (BladeCenter) e aplicação IBM® (xCAT – Extreme Cluster

Administration Toolkit). A experiência do uso dessa plataforma deixou claro que poderia

também ser usada para entregar aplicações pelo servidor Blade sob demanda. Essa realização

levou ao nascimento do NCSU’s Virtual Computing Labaratory (VCL) [5]. A principal

exigência do VCL foi acessibilidade. O objetivo era usar componentes industriais padrão com

a combinação de aplicações open source e proprietário (incluindo código VCL desenvolvido

em PHP e Perl pela NCSU), de modo flexível e economicamente atender às necessidades do

laboratório.

60

5 CONCLUSÃO

Concluindo esse estudo pode-se observar que o novo modelo chamado Computação em

Nuvem disponibiliza ao usuário uma forma de acessar os dados em qualquer lugar do mundo,

apenas havendo um computador conectado a internet, mudando completamente os conceitos

da computação clássica como conhecemos nos dias atuais.

Por serem ainda muito prematuros alguns problemas no sistema e a segurança dos dados

ainda deixa empresas e usuários pouco confiantes, no entanto merecem ser analisados e

aprovados na rotina diária de trabalho.

Os investimentos estão grandes e para alcançar as previsões as empresas investiram

muito em segurança e alguns outros investimentos para aumentar a armazenamento e

processamento, pois para conseguir a confiança dos usuários o acesso deve ser rápido como a

execução de um aplicativo nos computadores pessoais. Com a internet de alta qualidade está

cada vez mais disponível no mercado essa modalidade não será um grande problema.

Computação em nuvem é uma arquitetura que vai além de um conjunto de

computadores, neles devem existir uma infra-estrutura gerenciada que inclui funções de

prover recursos computacionais de modo elástico, balanceamento dinâmico das cargas e

monitoração constante do desempenho. Dessa forma o conceito ganha mais complexidade

onde todos os recursos de aplicações “online” devem trabalhar de forma integrada. No entanto

a arquitetura da computação em nuvem ainda está em discussão.

Hoje, ainda se consome muito tempo com manutenção de sistemas, porém as

perspectivas são de minimizar o tempo gasto com mais recursos computacionais.

Dessa forma a Computação em nuvem é muito mais que uma nova tecnologia, significa

novas oportunidades de se pensar em novas formas de negócio. Também será uma grande

alternativa para as empresas não comprar infra-estrutura e sim locarem esses serviços ou

ainda fazer uma combinação dos dois modelos e utilizarem uma arquitetura híbrida, os

recursos de grande utilização podem ser alojados dentro das empresas e novos recursos para

diferentes projetos podem ser alugados, diminuindo o tempo de resposta para os negócios e

disponibilizando uma forma ágil de decisão nos empreendimentos, com infra-estrutura,

deixando grandes recursos computacionais parados ou com pouca utilização.

Pode-se também utilizar na prevenção de desastres, quando as empresas podem estar em

locais de riscos naturais ou políticos.

61

Das plataformas analisadas, o Amazon® com o seu Amazon® “Elastic Cloud” (EC2)

é a que recebe maior atenção dos seus desenvolvedores. Quando há necessidade, pode-se

solicitar uma “unidades de computação”. Amazon® disponibiliza uma base de dados, fila de

armazenamento de mensagem e outros recursos com custos adicionais.

A plataforma é muito flexível, podendo aumentar poder de processamento e

armazemanento quando necessário existe suporte para diversos sistemas operacionais, banco

de dados e ambientes de desenvolvimento. No futuro a Amazon® promete adicionar melhores

recursos de balanceamento de carga, dimensionamento automático e outras ferramentas de

gestão e monitoramento.

O Google™ Apps é o mais novo e está em fase de testes, mas é a única empresa que

libera cotas grátis para usuários testarem. A Amazon® oferece uma máquina virtual para ser

instalado qualquer aplicação, o Google™ oferece um ambiente fixo, baseado na linguagem

Python® ou Java®, base de dados Google™ Big Table® e sistema de armazenamento

Google™ File System® (GFS). Por esses motivos o Google™ parece ser mais restritivo com

seus desenvolvedores, principalmente na parte de Banco de Dados, pois o Google™ Big

Table é distribuído e é o único banco de dados aceito.

Os desenvolvedores obtém 500 MB de armazenamento para testes e a empresa

anunciou que deverão cobrar cerca de 10 a 12 centavos de dólar por hora.

Por ser a única empresa que disponibiliza sua arquitetura sem onus até certa cota, foi a

única arquitetura que pode-se fazer testes e adicionar um aplicativo.

A IBM® com o “Computing on Demand” ou computação sob demanda da IBM® é de

alta performance, para ser utilizada, por exemplo, em simulações indústrias aeroespaciais ou

modelos genômicos. A IBM® utiliza a infra-estrutura do Amazon® para oferecer seus

serviços. Diferente do Google™ e da Microsoft®, os clientes recebem servidores físicos

dedicados e as empresas podem rodar máquinas virtuais nesses servidores. A IBM® apostou

na parceria com o Amazon® e já está gerando resultados. Prevê um investimento de $

100 milhões de dólares para o ano de 2010. Com seus poderosos aplicativos já conhecidos

pelo mercado e a mega estrutura do Amazon®, a IBM® entrou de vez na briga pela liderança

do mercado de computação em nuvem.

Dessa forma, a Microsoft® entrou na briga com sua plataforma Microsoft® Azure para

desenvolver serviços em nuvens. Azure também ainda é uma versão Beta, como o Google™.

Diferente das outras, a Microsoft® focou apenas para os desenvolvedores profissionais

e há pouco tempo lançou a Plataforma Windows Azure que utiliza ambiente desenvolvido

62

pela própria Microsoft®. Como o Google™, o Azure obtém uma variedade grande de

serviços já conhecidos e agora adaptados para a computação em nuvem.

A plataforma de desenvolvimento padrão é o Visual Studio® onde é possível com

muita facilidade mover o aplicativo para a nuvem. Após criar sua conta no Azure pode-se

criar uma aplicação na nuvem com facilidade e enviar de dentro do próprio Visual Studio.

A versão mais simples do Azure inclui uma base de dados simples, sendo possível

conectar com uma nuvem de base de dados SQL Server®. O grande diferencial é que a

Microsoft® pretende oferecer os seus próprios serviços. Sua plataforma foi projetada para

rodar em computadores pessoais, servidores locais ou corporativos, dentro da empresa, no

Brasil ou no Exterior.

Analisando os quatro grandes concorrentes na nuvem, é possível perceber que cada um

segue um caminho e na verdade não são concorrentes diretos, pois oferecem serviços

diferentes e cada um segue uma linha. A Amazon® foi à pioneira e tem utilizado de grandes

plataformas em código aberto para se beneficiar e criar sua plataforma tornando-a muito

flexível e ganha maior atenção dos desenvolvedores. O Google™ deseja criar o ambiente

mais poderoso, mas esconde seus métodos de desenvolvimento tornando mais restritivo. A

Microsoft® tem o maior número de serviços e acompanha sua tradicional força em

desenvolvimento. A IBM® aposta em indústrias que exigem grande poder de processamento.

Há muitas empresas a serem analisada. Diversas pequenas empresas estão

desenvolvendo seus serviços em nuvens. Muitas utilizam a estrutura dos quatro grandes

fornecedores que foi escolhido para a análise. Para resumir todos os benefícios, criei também

a tabela 1.5, que consta no anexo dessa monografia, onde podemos rever as comparações

citadas e mais algumas dos quatro grandes fornecedores de computação em nuvem:

Google™, Amazon®, Microsoft® e IBM®.

5.3 Contribuições

Com esse estudo, acredito possibilitar um melhor entendimento desta nova tecnologia,

pouco conhecida chamada de computação em nuvens, como também a arquitetura que a

compõe sendo que ainda não foi definido um padrão de arquitetura e infra-estrutura.

Foi detalhada uma proposta e realizado uma análise da arquitetura dos grandes

fornecedores em nuvem e realizado a comparação entre as tecnologias. Além da comparação

63

da arquitetura, buscou-se também analisar os serviços oferecidos e fornecidos para os usuários

finais e para as empresas.

Como resultados dessa análise foram criados algumas tabelas para uma melhor

visualização, comparando algumas características como: Sistema Operacional, Linguagens,

Base de Dados, Sistema de Base de Dados e Servidores Web¹ suportados. Também algumas

outras como: Plataforma de visualização, Garantia de Serviço (SLA), Promessas.

5.4 Trabalhos futuros

É importante ressaltar que esse estudo foi um pequeno recorte, para analise da nova

tecnologia da computação em nuvens. Vejo a necessidade de avançar nas pesquisas, dando

continuidade a esse estudo, com a criação de um protótipo através da arquitetura analisada;

pesquisa e comparação de outras diversas APIs existentes; pesquisa e comparação de sistemas

operacionais na nuvem e testes funcionais de arquiteturas utilizando o CloudSim e

Eucalyptus.

Como se trata de tecnologia avançada, necessária a manutenção e avanços na área

computacional, penso que poderá fazer parte de novos projetos de estudo e pesquisa que

deverá acrescentar no meu currículo profissional, que por ora deixarei como propostas de

continuidade para um futuro objetivo de estudo.

64

Glossário

1 – Web¹ = É a rede mundial de computadores, Internet.

2 - Software² = Programa de computador.

3 - Hardware³ = Equipamento.

4 - Datacenter4 = Centro de Processamento de Dados, ou seja, local onde são concentrados os

computadores e sistemas.

5 – Bit5 = Menor unidade de informação que pode ser armazenada ou transmitida.

6 – Firewall6 = Programa ou equipamento que protege a rede de computadores, restringindo o

acesso a determinadas zonas.

7 – Kilobyte7 = 1 Kbyte = 1024 Bytes (210) Bytes.

8 – Megabyte8 = 1.024 KB.

9 – Gigabyte9 = 1.024 MB.

10 – Terabyte10 = 1.024 GB.

65

Referências Bibliográficas

[1] MILLER, MICHAEL. Cloud Computing: Web¹-Based Applications That Change the Way You Work and Collaborate Online, 2008.

[2]TANENBAUM, Andrew S. Redes de computadores - tradução da 4a. edição americana. Traducao de Vandenberg D. de Souza. Rio de Janeiro: Elsevier, 2003. 945 p.

[3] Sun Microsystems: “Introduction to Cloud Computing architecture” Primeira edição, Junho 2009, 40 páginas.

[4] – Google™ Aps [http://www.Google.com/a/help/intl/pt-BR/index.html]. Google™; c2009 [acesso em 2009 Set 05]. Aplicativos avançados para aumentar a produtividade dos usuários com menos esforço; Disponível em: http://www.Google.com/intl/pt-BR/apps/admins/index.html

[5] – Amazon® Web¹ Services [http://aws.amazon.com/]. Amazon®; c2009 [acesso em 2009 Set 23]. What is AWS?; Disponível em: http://aws.amazon.com/what-is-aws/

[6] – Live Mesh [https://www.mesh.com/]. Microsoft®; c2009 [acesso em 2009 Out 10]. Synchronizing life - Sync, share, and access the information you care about—wherever you happen to be. Disponível em: https://www.mesh.com/Welcome/overview/overview.aspx

[7] – Datasul by You [http://www.datasul.com.br/byyou/]. Datasul; c2009 [acesso em 2009 Out 10]. Datasul By You ECM: gestão de informação através da internet; [7 telas]. Disponível em: http://www.infowester.com/blog/datasul-by-you-ecm-gestao-de-informacao-atraves-da-internet/

[8] – Plataforma Microsoft® Azure [http://www.microsoft.com/azure]. Microsoft®; c2009 [acesso em 2009 Out 12]. What is the Windows Azure Platform?; [9 telas]. Disponível em: http://www.microsoft.com/azure/whatisazure.mspx

[9] – Virtual Computing Labaratory(VCL) [http://vcl.ncsu.edu]. NCSU; c2009 [acesso em 2009 Set 09]. NCSU’s Virtual Computing Labaratory; [12 telas]. Disponível em: http://cwiki.apache.org/VCL

[10] – The Economist [http://www.economist.com/]. The Economist: “Let it rise”; 2008 [acesso em 25/10/09]. http://www.economist.com/research/articlesbysubject/displaystory.cfm?subjectid=348909&story_id=E1_TNQTTRRN

[11] Sun Microsystems: “Cloud Computing at a Higher Level” Agosto 2009 20 páginas.

[12] New York Times [Open.blogs.nytimes.com] "Self-service, pro-rata Super Computing Fun!" 11/1/07, open.blogs.nytimes.com/2007/11/01/self-service-prorated-super-computing-fun/ [acesso em 25/10/09]

[13] Wired News [http://www.wired.com/] “The Information Factories” 10/06 http://www.wired.com/wired/archive/14.10/cloudware.html [acesso em 25/10/09]

[14]http://mediadl.microsoft.com/mediadl/www/b/brasil/MSDN/AzureAcademy/AzureAcademy_Aula01_Computacao_Nuvem.wmv [Acesso em 01/11/2009]

[15]http://www.convergenciadigital.com.br/cgi/cgilua.exe/sys/start.htm?infoid=16024&sid=16 [Acesso em 01/11/2009]

[16] Sun MicroSystems: “Getting Started in the Cloud with the Sun GlassFish™ Portfolio”. Outubro 2009 11 páginas.

[17] Microsoft® Azure Web¹site, acesso em Novembro de 2009: http://www.microsoft.com/windowsazure/

66

[18] Google™ Apps, acesso em Novembro de 2009: http://code.Google.com/intl/pt-BR/appengine/

[19] Google™ Apps, acesso em Novembro de 2009: http://code.Google.com/intl/pt-BR/appengine/downloads.html

[20] IBM® Computing on Demand, acesso em Novembro de 2009 http://www-03.ibm.com/press/br/pt/pressrelease/25568.wss

[21] IBM® Computing on Demand, acesso em Dezembro de 2009 http://www.ibm.com/developerworks/web¹/library/os-php-cloud1/index.html

[22] IBM® Computing on Demand, acesso em Dezembro de 2009 http://www.ibm.com/developerworks/web¹/library/os-php-cloud1/index.html

[23] Amazon® EC2, acesso em Dezembro de 2009: https://aws-portal.amazon.com/gp/aws/developer/subscription/index.html?ie=UTF8&productCode=AmazonEC2

[24] Sprending The Knowledge of Technology Innovators, acesso em Setembro de 2009: http://oreilly.com/

[25] Enterprise Class Cloud Computing, acesso em Setembro de 2009: http://www.joyent.com/

[26] VM World: Virtualização e Informação, acesso em Setembro de 2009: http://www.vmworld.com.br/freedow/doku.php?id=vmworld:utilidade_diaria:aula_virtual:beneficios

[27] Java Data Objects (JDO), acesso em Dezembro de 2009, http://java.sun.com/jdo/

[28] Google Trends, acesso em Setembro de 2009 http://www.google.com/trends

[29] Gartner, acesso em Setembro de 2009 http://www.gartner.com/technology/home.jsp

[30] Core – Telecom & IT, Acesso em Setembro de 2009 http://www.caldasonline.com.br/cloudcomputing.php

[31] Introdução à Java Persistence API – JPA, acesso em Setembro de 2009 http://www.devmedia.com.br/articles/viewcomp.asp?comp=4590