UNIVERSIDADE REGIONAL DO NOROESTE DO ESTADO DO RIO GRANDE DO SUL CURSO DE BACHARELADO EM INFORMÁTICA – SISTEMAS DE INFORMAÇÃO Camila Cerezer Possobom ESTUDO DE CASO: CLOUD COMPUTING COMPUTAÇÃO EM NUVEM Monografia apresentada ao Curso de Bacharelado em Informática – Sistemas de Informação da Universidade Regional do Noroeste do Estado do Rio Grande do Sul de Ijuí, para a obtenção do título de Bacharel em Informática – Sistemas de Informação. Edson Luiz Padoin Ijuí/RS, Novembro de 2010 ESTUDO DE CASO: CLOUD COMPUTING COMPUTAÇÃO EM NUVEM Camila Cerezer Possobom Esta Monografia foi julgada adequada para a obtenção do título de Bacharel em Informática – Sistemas de Informação e aprovada em sua forma final pelo Curso de Bacharelado em Informática – Sistemas de Informação. ______________________________________ Edson Luiz Padoin (Orientador) Banca Examinadora ______________________________________ Marcos Ronaldo Melo Cavalheiro Universidade Regional do Noroeste do Estado do Rio Grande do Sul – UNIJUÍ Curso Superior em Informática – Sistemas de Informação - Campus Ijuí Reitor: Gilmar Antônio Bedin Vice-Reitores: Antonia Carvalho Bussmann Telmo Rudi Frantz Martinho Luis Kelm Chefe do Departamento de Tecnologia Prof. Ms. Edson Luiz Padoin Coordenador do Curso de Informática – Sistemas de Informação Prof. Ms. Edson Luiz Padoin Coordenador da Disciplina de Trabalho de Conclusão de Curso - Campus Ijuí Prof . Ms. Marcos Ronaldo Melo Cavalheiro Banca Avaliadora composta por: Data da defesa: 16/12/2010 Prof. Ms. Edson Luiz Padoin (Orientador) Prof. Ms. Marcos Ronaldo Melo Cavalheiro CIP – Catalogação na Publicação Possobom, Camila Cerezer Trabalho de Conclusão de Curso (Graduação em Informática Sistemas de Informações). Universidade Regional do Noroeste do Estado do Rio Grande do Sul, 2010. 1. Introdução. 2. Conceituando Computação em Nuvem. 3. Modelos de Implantação de Computação em Nuvem. 4. Modelos de Serviços na Computação em Nuvem. 5. Estudo de Caso: Provedores de Serviços de Computação em Nuvem. Endereço: Universidade Regional do Noroeste do Estado do Rio Grande do Sul Campus Ijuí Rua São Francisco, 501 – Bairro São Geraldo CEP 98700-000 Ijuí – RS - Brasil "...É incansável buscar o conhecimento ! Interminável é sua procura ! Aos mestres, que nos abreviam esta procura ! O Reconhecimento sempre !!!!..." Agradecimentos Agradeço, primeiramente, a Deus pelas oportunidades que me foram oferecidas na vida, principalmente por ter conhecido pessoas muito especiais e lugares diferentes, mas, além disto, por estar sempre ao meu lado nas horas mais difíceis e me ajudando na conclusão deste trabalho. Não posso deixar de agradecer a toda a minha família, mas em especial aos meus pais Ademir Luiz Possobom e Liane Cerezer Possobom, os responsáveis diretos pela minha formação, sem os quais não estaria aqui, por terem me fornecido condições para me tornar uma profissional, por me entenderem e me incentivarem a perseguir no que acredito, por mais que isso traga restrições ao nosso convívio. A minha avó Santina Menegazzi Cerezer, a qual me ajudou nas horas mais difíceis e me incentivou muito para a conclusão deste curso. Ao meu namorado Glauber e toda a família dele a Mari, o Marion, o Glauco e a avó Otillia, pelo apoio recebido e pela compreensão nos momentos em eu mais precisei durante toda a minha formação, as quais são pessoas muito especiais e fico muito feliz por eles fazerem parte da minha vida. Ao meu professor orientador Ms. Edson Luis Padoin pela sua disponibilidade, auxílio e apoio. Aos demais professores pelos anos de convivência e troca de informação, os quais foram muito importantes na minha formação acadêmica. A todos só posso dizer: Muito Obrigado! Sumário 1. Introdução .............................................................................................................. 10 1.1 Objetivo Geral ....................................................................................................... 12 1.2 Organização do Trabalho ..................................................................................... 12 2. Conceituando Computação em Nuvem ............................................................... 14 2.1 Tecnologias Relevantes na Computação em Nuvem ............................................ 19 2.1.1 Recursos Compartilhados ................................................................................... 20 2.1.2 Escalabilidade ..................................................................................................... 20 2.1.3 Elasticidade......................................................................................................... 21 2.1.4 Dispositivos de Acesso ....................................................................................... 22 2.1.5 Pay as you go ...................................................................................................... 22 2.1.7 Alta velocidade no acesso de banda larga .......................................................... 24 2.1.8 Os Dispositivos de Armazenamento................................................................... 25 2.1.9 As Tecnologias de Virtualização ........................................................................ 26 2.1.10 Orientada a serviços............................................................................................ 27 2.1.11 Pooling de Recursos ........................................................................................... 28 2.1.12 Serviço Medido .................................................................................................. 28 2.1.13 Service Level Agreement (SLA) ........................................................................ 29 2.1.14 Interoperabilidade ............................................................................................... 29 2.1.15 Portabilidade ....................................................................................................... 30 2.1.16 Integração ........................................................................................................... 30 2.1.17 Disponibilidade................................................................................................... 31 2.1.18 Application Programming Interface (API) ......................................................... 31 2.1.19 Segurança............................................................................................................ 31 3. Modelos de Implantação de Computação em Nuvem ........................................ 35 3.1 Nuvens Públicas ............................................................................................... 36 3.2 Nuvens Privadas .............................................................................................. 38 3.3 Nuvens Híbridas .............................................................................................. 39 3.4 Comparativo entre os Modelos de Nuvens ...................................................... 41 4. Modelos de Serviços na Computação em Nuvem .................................................. 43 4.1 Infra-estrutura como Serviço (IaaS) ..................................................................... 48 4.2 Database-as-a-Service ........................................................................................... 50 4.3 Plataforma como Serviço (PaaS) .......................................................................... 52 4.4 Software como Serviço (SaaS) ............................................................................ 54 5. Análise de Caso: Provedores de Serviços de Computação em Nuvem ................ 57 5.1 Amazon Web Services .......................................................................................... 57 5.1.1 Elastic Compute Cloud (EC2) .................................................................................. 57 5.1.2 Simple Storage Solution (S3) .................................................................................. 60 5.1.3 Simple Queue Service (SQS) ................................................................................... 61 5.1.4 SimpleDB ................................................................................................................. 62 5.2 Eucalyptus ............................................................................................................. 63 5.3 Google ................................................................................................................... 64 5.3.1 Google Apps ............................................................................................................. 65 5.3.2 Google App Engine .................................................................................................. 66 5.4 IBM ....................................................................................................................... 68 5.5 Microsoft ............................................................................................................... 69 5.6 Salerforce .............................................................................................................. 73 5.7 Comparativo entre os Modelos de Serviços ......................................................... 75 6. Conclusão .................................................................................................................. 77 7. Referências Bibliográficas ....................................................................................... 79 Lista de Abreviaturas TI – Tecnologia da Informação IaaS – Infra-estrutura como Serviço PaaS – Plataforma como Serviço SaaS – Software como Serviço SOA - Service Oriented Architecture (Arquitetura Orientada a serviço) GB – Gigabytes MB – Megabytes KB – Kilobytes GHz - Gigahertz SGBD – Sistema de gerenciamento em Banco de Dados API - Application Programming Interface SLA - Service Level Agreement (Acordo de Nível de Serviço) QoS – Qualidade de Serviço VM – Virtual Machine (Máquina Virtual) SO – Sistema Operacional EC2 – Elastic Compute Cloud AWS – Amazon Web Machine AMI – Amazon Machine Instance S3 – Simple Storage Solution SQS – Simple Queue Service SDB - SimpleDB SOAP – Simple Object Access Protocol GFS – Google File System CPU - Unidade Central de Processamento CRM - Gerenciamento de Relações com Clientes PC - Computador Pessoal Lista de Figuras Figura 1. Evolução da Tecnologia (CAMBIUCCI, 2010) .................................................................... 15 Figura 2. Tipos de Nuvens (AMRHEIN, 2009) .................................................................................... 36 Figura 3. Nuvem Pública (MATHER, 2009) ........................................................................................ 37 Figura 4. Nuvem Híbrida (MATHER, 2009) ........................................................................................ 40 Figura 5. Os principais atores que estão relacionados com as camadas de aplicação, de plataforma e de intra-estrutura são, respectivamente, os usuários das nuvens, os prestadores de serviços e os prestadores de infra-estrutura (CHIRIGATI, 2009). ............................................................................. 44 Figura 6. Níveis de divisão da computação em nuvem segundo a ontologia proposta (AHRONOVITZ, 2010). .................................................................................................................................................... 46 Figura 7. Papéis na Computação em Nuvem (SOUZA, 2009).............................................................. 47 Figura 8. Modelos de Serviços (SOUZA, 2009) ................................................................................... 48 Figura 9. Aplicativos de Trabalho no Google Apps (LUIZ, 2010) ....................................................... 66 Figura 10. Serviços oferecidos no Windows Azure (ZUNINO, 2008) ................................................. 71 Figura 11. Tamanhos das instâncias no Windows Azure (CAMBIUCCI, 2010).................................. 72 1. Introdução O setor da Tecnologia da Informação (TI) vem sofrendo muitas transformações nos últimos anos. A virtualização e computação em nuvem, ou também tem pessoas usando o termo computação na nuvem ou computação nas nuvens, quaisquer destes termos são achados na web referindo-se todos ao mesmo conceito, estas duas tecnologias estão sendo as principais estratégias em tecnologia nas empresas. As evoluções constantes da tecnologia e das telecomunicações estão fazendo com que o acesso à internet se torne cada vez mais amplo e mais rápido. Em países mais desenvolvidos como Japão, Estados Unidos e Alemanha, é possível ter acesso rápido à internet pagando-se muito pouco. Estes fatos criam uma situação perfeita para a difusão da computação em nuvem, embora esse conceito esteja tornando-se conhecido no mundo todo, inclusive no Brasil (PRADO, 2010). Não há dúvidas de que esta evolução esteja ligada diretamente à evolução dos processadores e ao crescimento da internet banda larga. A idéia de computação em nuvem não pode ser considerada uma nova tecnologia, mas sim uma nova aplicação da internet a um conceito que existia desde os primórdios da computação. O modelo computacional dos datacenters começou com os mainframes em 1960. Posteriormente, os microcomputadores surgiram no mercado e uma busca constante por altas capacidades de armazenamento se estabeleceu. As estruturas computacionais baseadas nos mainframes e nos computadores pessoais podem ser vistas como modelos de datacenters. O primeiro, como um modelo mais concentrado e o segundo, como um modelo distribuído. Esta fase foi seguida pelos sistemas distribuídos baseados no modelo cliente/servidor e, consequentemente, pelo crescimento explosivo da internet e da web. Mais recentemente, a evolução das técnicas de virtualização tem propiciado o desenvolvimento de aplicações que compartilham a mesma infra-estrutura de hardware, alavancando o surgimento de soluções para serviços em nuvem (VERDI, 2010). Cada vez mais o processamento e o armazenamento estão sendo movidos dos computadores pessoais para grandes provedores de serviços, sendo que, o usuário não precisa saber em que local estes dados estão sendo processados e armazenados, pois tudo fica na nuvem. Fotos, vídeos e aplicações que antes eram armazenadas e processadas nos 10 computadores, agora migram para serem hospedadas e processadas por provedores sob o formato de serviços web. A computação em nuvem pode ser visto como um estágio mais evoluído da virtualização, pois tem a possibilidade de virtualizar e compartilhar recursos entre diferentes aplicativos para uma melhor utilização do servidor (TAURION, 2009). Com a disseminação da internet, a computação em nuvem é a sua evolução natural. Agora que temos tecnologia para transmitir dados em grande quantidade para qualquer ponto do planeta, o que as empresas estão fazendo é “terceirizando” suas necessidades computacionais para os grandes datacenters que são capazes de realizar as operações com mais velocidade. Computação em nuvem é a computação considerada como um serviço, ou seja, é considerada como um software. Você não compra hardware ou software, mas você o aluga e paga apenas pelo que utilizar (FUGULIN, 2010). De modo que, a computação em nuvem é a evolução da infra-estrutura de internet, então como exemplo, vamos supor que existe uma empresa de vendas on-line ou de qualquer outra atividade que necessite de uma infra-estrutura de hospedagem, a empresa precisa adequar sua estrutura cada vez que a demanda aumenta, para acompanhar este crescimento precisa-se investir em infra-estrutura o que custaria muito dinheiro e tempo. E se por acaso a demanda for pontual esta estrutura toda torna-se ociosa, desperdiçando recursos importantes. Com a computação em nuvem, a empresa tem acesso instantâneo a milhares de servidores disponíveis na nuvem, sendo possível contratar mais recursos de processamento, espaço e memória a qualquer instante, além de ser mais seguro, pois a tecnologia responde imediatamente em caso de falhas movendo suas aplicações automaticamente garantindo estabilidade. Gartner avalia que o serviço de computação em nuvem em todo o mundo movimentou US$ 56,3 bilhões no ano de 2009, chegando a US$ 153 bilhões em 2013. Com estes números, podemos dizer que o conceito está evoluindo gradativamente (TAURION, 2009). 11 1.1 Objetivo Geral O objetivo deste trabalho é elaborar uma pesquisa bibliográfica, na qual pretende-se mostrar que a tecnologia está sempre em constantes mudanças e inovações, através do esclarecimento do conceito de Computação em nuvem e suas funcionalidades, conforme concepções apresentadas por diversos autores. Para isso, articulamos os conceitos de computação em nuvem com os seus vários aplicativos e serviços já existentes. Na computação em nuvem, os servidores podem ser compartilhados por sistemas operacionais e aplicativos para ser melhor utilizados pelos servidores, reduzindo os custos. Com o resultado desta pesquisa, se tem como objetivo principal trazer conhecimentos e esclarecimentos referentes à computação em nuvem e também estabelecer um comparativo entre os modelos de serviços que as empresas estão oferecendo no mercado, para que este trabalho sirva de referência para desenvolvimento e aquisições futuras em aplicações na nuvem. 1.2 Organização do Trabalho No Capítulo 2 são apresentadas a evolução nas empresas do ramo de negócios atuais, em seguida são introduzidos alguns conceitos de tecnologias relevantes para melhor compreensão da computação em nuvem e logo após é inserido os conceitos e as opiniões de diversos autores, dessa tecnologia que já esta inserida no mercado e se tornando a melhor estratégia de negócios para as empresas no contexto da atualidade. No Capítulo 3 trata dos quatro tipos de implantações de serviços na computação em nuvem por grau de compartilhamento entre as nuvens empresarias, a nuvem pública, nuvem privada e nuvem híbrida, por fim é feito um comparativo entre elas. No Capítulo 4 está sendo abordado os modelos de serviços disponíveis para a computação em nuvem. O modelo de banco de dados utilizado pela computação em nuvem que se chama Database-as-a-Service (DaaS). Então a arquitetura da computação em nuvem esta divida em camadas abstratas, primeiro temos a camada de infra-estrutura (IaaS). Na 12 camada acima temos a de plataforma (PaaS). E por fim temos a camada de arquitetura na sua forma mais abstrata que é as aplicações (SaaS). No capítulo 5 nos traz os conceitos de provedores de serviços na computação em nuvem, cada um com seus devidos conceitos, por fim um comparativo entre os modelos de serviços. Por fim, são apresentadas as conclusões, trabalhos futuros e referências bibliográficas. 13 2. Conceituando Computação em Nuvem Para entender o que é a computação em nuvem, é importante compreender como este modelo de computação evoluiu. Como Alvin Toffler observa em seu famoso livro, “The Third Wave” (Bantam, 1980), a civilização progrediu em ondas, sendo que, a primeira onda foi em sociedades agrícolas, a segunda foi a era industrial e a terceira é a era da informação. Dentro de cada onda, houveram fatos importantes. Neste pós-industrial da era de informação, estamos agora no início do que muitas pessoas chamam de uma era da computação em nuvem (MATHER, 2009). Observando a Revolução Industrial e seu impacto na economia mundial, a própria revolução não aconteceu de um dia para outro, mas sim através de uma série de mudanças. Neste contexto se observarmos a internet, esta também tem se desenvolvido através de uma sequência de mudanças. E a computação em nuvem é o assunto do momento (MATHER, 2009). Então, vive-se o auge da era de informação, com os avanços da tecnologia, e também com a introdução de tantos meios onde a informação torna-se cada vez mais acessível. Desde a década de 90 que os grandes negócios mundiais estão sendo impulsionados pela TI computacional. Isto acontece porque as empresas atualmente estão em um mercado novo com desenvolvimentos tecnológicos muito grandes e rápidos (LIMA, 2009). O cenário de negócios atual exige das empresas maior velocidade, flexibilidade e consistência na implantação de suas estratégias para sobrevivência e crescimento. A execução destas estratégias envolve certas etapas que competem por recursos (humanos, financeiros e materiais) com as atividades rotineiras da organização, aumentando a complexidade da gestão empresarial (ESCOBAR, 2009). A inovação possibilita que a empresa cresça no mercado, aumente sua lucratividade, enfrente a concorrência de maneira igual e se mantenha adequada no mercado, ou seja, seus produtos, processos e práticas de marketing em permanente sintonia com as necessidades dos 14 seus clientes. É preciso inovar e renovar a organização do empreendimento e acelerar e aumentar a produtividade (VERAS, 2009). Então esta evolução de negócio ágil, de dispositivos e de tecnologias elas ocorrem ao longo do tempo e isso acontece quando diferentes abordagens para construção de arquiteturas direcionam a TI. De acordo com a visão de Waldemir Cambiucci arquiteto de Soluções Microsoft Brasil, essa evolução ao longo do tempo se deu de dez em dez anos, onde para cada período tem-se um destaque em especial, como mostra a Figura 1. 1970 1980 1990 2000 2009+ Figura 1. Evolução da Tecnologia (CAMBIUCCI, 2010) • Nos anos de 1970, nós podemos observar que a visão da tecnologia era centralizada, com aplicações monolíticas que exigia uma grande expertise para programação, coordenação e administração deste ambiente. • Nos anos de 1980, temos uma computação pessoal surgindo e com uma visão do cliente/servidor, com o foco mais descentralizado, distribuído e tinha também o usuário com poder de controle e de acesso na máquina desktop. • Nos anos de 1990, é consolidada a visão da web, de fato as pessoas começam a se conectar e a partir daí, obtemos a própria web tornando-se uma plataforma para novos sistemas e novas aplicações. 15 • Nesses últimos anos, temos muitas discussões em volta de serviços e então Waldemir Cambiucci fala de SOA (Service Oriented Architecture), esta arquitetura orientada para serviços tem sido uma visão perseguida por várias empresas. Que basicamente buscam a diminuição de custo operacional, a consolidação de funcionalidades, a maior eficiência na operação de TI e a reutilização de recursos implementados. • Então depois de SOA, vai ter-se uma maturidade de serviços locais que as aplicações já consomem, mas também será consumido serviços remotos, aonde vem a aplicação do conceito de computação em nuvem. Então pode-se destacar um fator complicador hoje em dia é que as mudanças ocorrem muito rápido. Analisando o mundo atual e comparando com alguns anos atrás, quando não havia o Google, Wikipédia, Orkut, iPhones e outros...e até hoje ela esta em constante mudanças em um tempo mais curto para elas ocorrerem (TAURION, 2009). E neste contexto de atualidade, que precisamos de uma infra-estrutura que permita que o negócio seja tão flexível quanto à demanda do mercado. Daí então surgiu o conceito de computação em nuvem. O qual refere-se à utilização da memória, das capacidades de armazenamento, cálculo de computadores, servidores compartilhados e interligados por meio da internet, ainda implementa o conceito de virtualização permitindo que estes computadores fiquem interligados os quais geram uma imagem de um super computador (TAURION, 2009). Então, a computação em nuvem surgiu como um novo modelo de computação distribuída que aproveita conceitos de clusters e grids, além de basear-se nos avanços de técnicas de virtualização conquistados nos últimos anos. O conceito de “nuvem” surge da disposição física dos elementos envolvidos no modelo. Em outras palavras, os servidores que hospedam dados e aplicativos ficam localizados em datacenters de empresas de qualquer parte do mundo, o que nos leva à necessidade de um termo que abstraia esta localização. Para tal, adotou-se o termo “nuvem”, significando então, um emaranhado de servidores disponíveis via internet (PIGATTO, 2009). 16 De acordo com Andy Bechtolsheim (2008): “O modelo de computação em nuvem é a quinta geração da computação, depois do mainframe, PC (Personal Computer), modelo cliente/servidor e web. Trata-se de uma evolução do modelo cliente/servidor, diferindo na distribuição do processamento, o qual é em grande parte centralizado no servidor remoto, cabendo ao terminal cliente efetuar pequenas tarefas de processamento locais” (PIGATTO, 2009). Computação em nuvem, portanto, trata-se da utilização de softwares ou sistemas em rede e da capacidade de prover recursos sob demanda ao usuário. Desta maneira, as informações são permanentemente armazenadas em servidores na internet (localizados na “nuvem”), sendo realizadas caches destes dados em computadores desktops, notebooks, dispositivos móveis, entre outros, os quais estarão fazendo uso da infra-estrutura em nuvem (PIGATTO, 2009). O termo computação em nuvem, como qualquer novo termo, possui várias definições possíveis, muito embora todas relativamente parecidas. O mais importante é entendermos que a definição do conceito está ainda em evolução e novas definições poderão surgir. O trabalho (Vaquero et al. 2009) faz uma análise das definições utilizadas na literatura atual e adota a seguinte opção: “Computação em Nuvem é um conjunto de recursos virtuais facilmente usáveis e acessíveis tais como hardware, plataformas de desenvolvimento e serviços. Estes recursos podem ser dinamicamente re-configurados para se ajustarem a uma carga variável, permitindo a otimização do uso dos recursos. Este conjunto de recursos é tipicamente explorado através de um modelo pay-per-use com garantias oferecidas pelo provedor através de acordos de nível de serviço (Service Level Agreements-SLAs)” (VERDI, 2010). De acordo com Antônio Carlos Pina, líder técnico do projeto “Cloud Computing da Tecla Internet”, de quatro anos pra cá, fala-se muito em computação em nuvem, desde então, vários fornecedores se apropriaram da expressão computação em nuvem e suas variantes (IaaS, PaaS, SaaS) para vender seus serviços. Fornecedores com diferentes plataformas competem, isto é ótimo, pois a longo prazo, quem ganhará com esse movimento é o usuário que poderá escolher o serviço do fornecedor que melhor atender suas demandas (PINA, 2010). 17 Antônio Carlos Pina ainda diz que, no ponto de vista do usuário, computação em nuvem nada mais é, do que o fornecimento de serviços via internet pagos pelo uso. É muito parecido com a eletricidade nos tempos atuais (Utility Computing), se o usuário usa muito paga muito, se usa pouco paga pouco. E o usuário não precisou investir em geração própria (geradores) para ter acesso a eletricidade, pois a companhia elétrica já faz isso (PINA, 2010). É comum referir-se ao modelo como Utility Computing (computação como uma utilidade), o que significa que o usuário poderá acessar aplicações de negócios online, a partir de qualquer dispositivo virtualmente disponível, mediante um pagamento por uso. Neste mesmo contexto, com a nuvem, o usuário não investe na compra de computadores e infra-estrutura em geral (switches, roteadores, etc.), mas utiliza os dispositivos na nuvem. O fornecedor de computação em nuvem possui uma estrutura escalável e elástica, daí então consegue cobrar apenas o que foi demandado desta grande estrutura (PINA, 2010). Tratando-se especificamente da definição, ainda não se tem uma definição amplamente aceita. Esta definição a baixo é do mais recente projeto da NIST Trabalho de Definição de Cloud Computing publicado por os EUA Governo Instituto Nacional de Padrões e tecnologia e pode ser encontrado no seguinte endereço: http://csrc.nist.gov/groups/SNS/cloud-computing/ “Computação em nuvem é um modelo que possibilita acesso, de modo conveniente e sob demanda, a um conjunto de recursos computacionais configuráveis (por exemplo, redes, servidores, armazenamento, aplicações e serviços) que podem ser rapidamente adquiridos e liberados com mínimo esforço gerencial ou interação com o provedor de serviços” (SOUZA, 2009). Já (Armbrust et al. 2009) propõem a seguinte definição: “A computação em nuvem é um conjunto de serviços de rede ativados, proporcionando escalabilidade, qualidade de serviço, infra-estrutura barata de computação sob demanda e que pode ser acessada de uma forma simples e pervasiva” (SOUZA, 2009). 18 Gartner afirma que: “A computação em nuvem é como um estilo de computação onde capacidades de TI altamente escaláveis são fornecidas como um serviço para consumidores externos usando tecnologias de internet” (FREZENDE, 2009). O termo computação em nuvem estará sendo considerado nas estratégias de tecnologia de informações das empresas e dos prestadores de serviço. Estamos ainda no início da computação em nuvem, por ser um tema muito recente, ainda existe muito desconhecimento. Mas com certeza este termo computação em nuvem no futuro vai transformar o modo como as empresas operam sua TI (TAURION, 2009). 2.1 Tecnologias Relevantes na Computação em Nuvem O conceito de computação em nuvem, já não é mais tão abstrato como era há um tempo. Hoje é possível não somente armazenar dados online, mas também trabalhar em uma máquina remota, acessível de qualquer lugar e disponível o tempo todo, como se o usuário estivesse levando seu computador sempre junto. Não é mais necessário preocupar-se com hardware, sistema operacional ou aplicativos instalados. Até mesmo o backup passa a ser uma preocupação a menos, já que a maioria das empresas fornece planos para garantir a segurança e integridade dos seus dados (JOBSTRAIBIZER, 2010) De fato a computação em nuvem não é vista como uma nova tecnologia, mas sim a combinação de muitas tecnologias já existentes. Essas tecnologias têm amadurecido a ritmos diferentes, em diferentes contextos e não foram concebidos como um todo coerente, no entanto, elas se uniram para criar um ecossistema para a computação em nuvem. Novos avanços tecnológicos em transformações como, a tecnologia de virtualização, discos de armazenamento, acesso à internet de banda larga e rápida, servidores baratos, então se uniram para fazer a nuvem uma solução mais atraente (MATHER, 2009). O entusiasmo com a computação em nuvem se deve às inúmeras vantagens que ele pode oferecer tanto aos fornecedores de tecnologia quanto aos usuários. Em primeiro lugar, este é um modelo que prevê um melhor aproveitamento dos investimentos em hardware. Um dos pilares da computação em nuvem é a consolidação dos 19 recursos de hardware para que eles possam ser aproveitados ao máximo e gerenciados de forma inteligente, proporcionando economia de custos (MOREIRA, 2009). Então nos próximos subtítulos abordaremos as tecnologias relevantes que fazem parte desta evolução computacional, chamada de computação em nuvem, com definições apresentadas por alguns autores. 2.1.1 Recursos Compartilhados Ao contrário dos modelos anteriores de computação, que assumiram recursos dedicados (isto é, a instalações dedicadas a um único usuário ou proprietário), a computação em nuvem é baseada em um modelo de negócio em que os recursos são partilhados (isto é, vários usuários usam o mesmo recurso) no nível de rede (MATHER, 2009). De acordo com NIST, a proposta do modelo de computação em nuvem é ter uma aplicação atendendo a múltiplos clientes, chamados de tenants ou inquilinos. Inquilinos não são usuários individuais, mas empresas clientes do software. Uma arquitetura multi-inquilino é essencial para a computação em nuvem pois permite que múltiplos inquilinos compartilhem recursos físicos comuns (hardware e software), mas permanecendo logicamente isolados. Recusos compartilhados é comum na maioria dos sistemas baseados em nuvem (AHRONOVITZ, 2010). 2.1.2 Escalabilidade Embora as organizações possam ter centenas ou milhares de sistemas, a computação em nuvem fornece a capacidade de escala a dezenas de milhares de sistemas, bem como a capacidade de massividade de escala, de banda e espaço de armazenamento (MATHER, 2009). Se o usuário é surpreendido por uma demanda repentina, a computação em nuvem pode ajudá-lo a gerenciar. Ao invés de ter que comprar, instalar e configurar novos equipamentos, o usuário pode comprar os ciclos da CPU ou armazenamento de um terceiro. Uma vez que os custos são baseados no consumo, provavelmente não teria de pagar tanto 20 como se tivesse que comprar o equipamento. Depois de ter cumprido a necessidade de equipamento adicional, basta parar de usar o prestador de serviços em nuvem e o usuário não terá que lidar com equipamentos desnecessários. Irá simplesmente adicionar ou subtrair com base na necessidade da sua organização (RUSCHEL, 2008). A escalabilidade é uma característica fundamental na computação em nuvem. As nuvens de serviço e as plataformas oferecidas podem ser dimensionadas por vários fatores, tais como a localizações geográficas, desempenho ou configurações. As aplicações desenvolvidas para uma nuvem precisam ser escaláveis, de forma que os recursos utilizados possam ser ampliados ou reduzidos de acordo com a demanda. Para que isso seja possível, as aplicações e os dados devem ser flexíveis o suficiente. Porém, tornar estes dados “elásticos” não tem sido uma tarefa muito fácil, dependendo da sua implementação (CHIRIGATI, 2009); 2.1.3 Elasticidade Dimensionamento rápido e automático para a escalabilidade, freqüentemente aparentando possuir recursos ilimitados. Os recursos podem ser adquiridos de forma rápida e elástica, em alguns casos automaticamente, caso haja a necessidade de escalar com o aumento da demanda e liberados, na retração dessa demanda. Para os usuários, os recursos disponíveis para uso parecem ser ilimitados e podem ser adquiridos em qualquer quantidade e a qualquer momento. O que ajuda muito na característica de elasticidade rápida na computação em nuvem é a virtualização, criando várias instâncias de recursos requisitados utilizando um único recurso real. Virtualização é a criação de ambientes virtuais com o propósito de abstrair características físicas do hardware, podendo emular vários sistemas operacionais em uma única plataforma computacional (AHRONOVITZ, 2010). A elasticidade é definida como a capacidade de dimensionar os recursos, conforme necessário. Para o consumidor, a nuvem parece ser infinita e o consumidor pode comprar muita ou pouca potência de computação, como for necessário. Esta é uma das características essenciais de computação em nuvem, na definição do NIST. (AHRONOVITZ, 2010). 21 2.1.4 Dispositivos de Acesso A gama de dispositivos de acesso para a nuvem tem se expandido nos últimos anos. Computadores domésticos, computadores empresariais, computadores pessoais, dispositivos de telefonia móvel, dispositivos móveis personalizados, todos estão online. Curiosamente, o crescimento do iPhone e da proliferação de aplicações disponíveis a partir de sua App Store ilustra uma melhoria em termos de acesso à nuvem. Este maior acesso está resultando em uma maior utilização e crescimento dos serviços utilizados na nuvem. Por exemplo, você pode agora utilizar o Skype através do iPhone e outros dispositivos móveis, trazendo esta rede mais próximo dos usuários, e a Salesforce.com lançou uma aplicação que permite aos usuários acessar seus serviços a partir do iPhone, assim como muitos outros fornecedores. (MATHER, 2009). Computadores de baixo custo para o usuário, aqui está uma vantagem quantitativa financeira. Na qual o usuário não precisa de um computador potente (e, portanto, de alto preço) precisa sim de um computador para executar a computação em nuvem que é baseado nas aplicações da web. Como o aplicativo é executado na nuvem, o computador não precisa do poder de processamento e espaço em disco rígido exigido pelo software tradicional. Por isso os computadores de clientes em computação em nuvem pode ser de menor custo, com menos discos rígidos, menos memória, processadores mais eficientes, e assim por diante. Na verdade, um computador de usuário neste cenário nem sequer precisa de um drive de CD ou DVD, porque não existem programas de software a serem carregados e os arquivos de documentos não precisam ser salvos (MILLER, 2009) 2.1.5 Pay as you go Este termo pay as you go refere-se que, os usuários irão pagar apenas os recursos que eles realmente irão usar e só o tempo que lhes impõem os valores (MATHER, 2009). O usuário tem um melhor controle de gastos ao usar aplicativos, pois a maioria dos sistemas de computação em nuvem fornece aplicações gratuitamente e, quando não gratuitas, são pagas somente pelo tempo de utilização dos recursos. Não é necessário pagar por uma licença integral de uso de software (DELMIRO, 2010). 22 Embora pesquisas em computação tenham investigado vários modelos econômicos de infra-estrutura computacional durante a última década, a computação em nuvem tem uma abordagem mais aplicada aos negócios e relacionada ao custo. Assim, a computação em nuvem apresenta diversos modelos de preço, sendo estes organizados em três grupos: preço diferenciado, preços por unidade e assinatura de serviços básicos. Preço diferenciado é o modelo adotado pela Amazon, onde os serviços são oferecidos em vários níveis de especificações, tais como alocação de memória e tipo de CPU, o valor cobrado é um preço específico por unidade de tempo. Preço por unidade é normalmente aplicado a dados transferidos ou ao uso de memória. Este modelo é mais flexível do que o de preço diferenciado, já que permite aos usuários personalizarem a alocação de memória de seus sistemas baseados nas necessidades de aplicações específicas. O modelo de assinatura de serviços básicos é o modelo de preços mais amplamente utilizado, permitindo aos usuários preverem suas despesas previamente na utilização de um serviço. Contudo, este modelo não tem a precisão em cobrar dos usuários o que eles têm realmente utilizado (SOUZA, 2009). 2.1.6 Auto Serviço sob demanda O usuário pode adquirir unilateralmente recurso computacional, como tempo de processamento no servidor ou armazenamento na rede na medida em que necessite e sem precisar de interação humana com os provedores de cada serviço. Dentro de uma nuvem, o hardware e o software podem ser automaticamente reconfigurados e estas modificações são apresentadas de forma transparente para os usuários, que possuem perfis diferentes e assim podem personalizar os seus ambientes computacionais, por exemplo, a configuração de rede para a definição de determinados privilégios, instalação de algum software (RUSCHEL, 2008). Os usuários provisionam a utilização de recursos, tais como sistemas complementares (capacidade de processamento, software, recursos de armazenamento) e da rede (MATHER, 2009). A computação em nuvem é um sistema autônomo gerenciado de forma transparente para os usuários. Hardware e software dentro de nuvens podem ser automaticamente reconfigurados, orquestrados e estas modificações são apresentadas ao usuário como uma 23 imagem única. Essa autonomia é importante, pois reduz o custo de equipe de monitoramento do sistema tanto no âmbito centralizado quanto distribuído (Birman et al. 2009). Comparados com sistemas tradicionais, é possível identificar três fatores complexos: intervenção humana limitada, alta alternância na carga de processamento e uma variedade de infra-estruturas compartilhadas. Na maioria dos casos, não existem administradores de sistemas para ajudar os desenvolvedores que acessam a nuvem, fazendo com que a plataforma seja automatizada ao máximo e os usuários podem variar a carga de trabalho habitual, necessitando de uma infraestrutura de virtualização eficaz. A gerência também é importante no contexto do desenvolvimento de tecnologia de auto-sintonia. Assim sendo, técnicas adaptativas e online deverão ser desenvolvidas para tornar estes sistemas viáveis (Aboulnaga et al. 2009) (SOUZA, 2009). Os usuários não são mais confrontados com a escolha entre software obsoleto e atualização de alta despesas. Quando o aplicativo é baseado na web, as atualizações acontecem automaticamente e são disponibilizados na próxima vez que o usuário ocupar a nuvem. Sempre que o usuário acessar um aplicação baseado na web, ele está recebendo a versão mais recente, sem a necessidade de pagar ou fazer o download de uma atualização (MILLER, 2009). 2.1.7 Alta velocidade no acesso de banda larga Um componente crítico da nuvem é a rede banda larga, que oferece os meios para contato entre os componentes e proporciona uma das diferenças substanciais a partir do conceito de Utility Computing de trinta anos atrás. Acesso à banda larga é hoje amplamente disponível, especialmente em áreas metropolitanas. O acesso generalizado sem fio (por exemplo, Wi-Fi, celular, emergentes WiMAX) está disponível, e estabelece dispositivos móveis como pontos de entrada para os recursos de TI da empresa e da nuvem (MATHER, 2009). Uma vez que não se pode exigir que os sistemas que constituem uma nuvem sejam da mesma tecnologia. Os recursos estão disponíveis através da rede e acessados por meio de mecanismos que promovam o padrão utilizado por plataformas heterogêneas (por exemplo, telefones celulares, laptops e PDAs). A interface de acesso a nuvem não obriga os usuários a 24 mudarem suas condições e ambientes de trabalho, como por exemplo, linguagens de programação e sistema operacional. Já os softwares clientes instalados localmente para o acesso à nuvem são leves, como um navegador de internet (RUSCHEL, 2008). 2.1.8 Os Dispositivos de Armazenamento Diminuir os custos de armazenamento e a flexibilidade com que o armazenamento pode ser implantado mudou o conceito de armazenamento. O dispositivo de armazenamento fixo de acesso direto (DASD) foi substituído por redes de armazenamento (SANs), que reduziram os custos e permitiram muito mais flexibilidade em armazenamento no sistema corporativo. SAN software gerencia a integração dos dispositivos de armazenamento e pode independentemente alocar espaço de armazenamento sob demanda através de um número de dispositivos (MATHER, 2009). Vamos olhar mais para o que ocorre quando um computador não tem espaço para armazenar e executar uma tonelada de aplicativos baseados em software. Com menos programas sobrecarregando a memória do computador, os usuários verão melhor o desempenho de seus computadores. Simplificando, computadores em um sistema de computação em nuvem irão arrancar mais rápido e terão maior velocidade, porque eles têm menos programas e processos carregados na memória (MILLER, 2009). A nuvem oferece capacidade de armazenamento praticamente ilimitada. Considere quando o seu computador está funcionando fora do espaço de armazenamento. Por exemplo, um computador com 200 GB de disco rígido é muito pouco, quando comparado com as centenas de petabytes (um milhão de gigabytes), disponíveis na nuvem. Tudo que é preciso armazenar é possível, mas não podemos esquecer que a quantidade de dados armazenados acarreta em valores pagos aos provedores de serviços de nuvem (MILLER, 2009). O gerenciamento de dados é considerado um ponto crítico no contexto de computação em nuvem. Os SGBDs relacionais não possuem escalabilidade quando milhares de sítios são considerados (Weiet al. 2009). Assim, aspectos de armazenamento de dados, processamento de consultas e controle transacional tem sido flexibilizados por algumas abordagens para garantir a escalabilidade, mas ainda não existem soluções que combinem estes aspectos de 25 forma a melhorar o desempenho sem comprometer a consistência dos dados (Abadi, 2009). Existe diversas abordagens para gerenciar dados em nuvens, dentre as quais podemos citar o Microsoft Azure e HBase (Brantner et al. 2008). Um aspecto importante é o trade-off entre funcionalidades e custos operacionais enfrentados pelos provedores de serviços. Os serviços em nuvem para dados oferecem APIs mais restritas do que os SGBD relacionais, com uma linguagem minimalista de consulta e garantia de consistência limitada (Abouzeid et al. 2009). Isso exige mais esforço de programação dos desenvolvedores, mas permite aos provedores construírem serviços mais previsíveis e oferecerem SLA. De acordo com (Armbrust et al. 2009), a criação de um sistema de armazenamento que combina os diversos aspectos de computação em nuvem, de forma a aumentar a escalabilidade, a disponibilidade e consistência dos dados é um problema de pesquisa em aberto (SOUZA, 2009). 2.1.9 As Tecnologias de Virtualização A virtualização é uma plataforma tecnológica fundamental para promover a computação em nuvem. O termo virtualização refere-se à abstração de recursos computacionais (CPU, armazenamento, memória, rede, pilha de aplicativos e banco de dados) de aplicações e usuários finais que utilizam o serviço. Fornece a capacidade de reunir recursos para ser disponibilizado e acessível a qualquer pessoa autorizada a utilizá-las através de métodos padronizados (MATHER, 2009). É um arquivo (geralmente chamado de uma imagem) que, quando executado, olha para o usuário como uma máquina real. A infra-estrutura como serviço muitas vezes é fornecido como uma imagem de máquina virtual que pode ser iniciado ou parado, conforme necessário (AHRONOVITZ, 2010). A virtualização é uma técnica de projeto fundamental para todas as arquiteturas em nuvem. Em computação em nuvem se refere principalmente à virtualização de plataforma. A virtualização permite que os servidores, dispositivos de armazenamento e outros equipamentos devem ser tratados como um conjunto de recursos, em vez de sistemas discretos, de modo que esses recursos podem ser alocados por demanda. Na computação em nuvem, estamos interessados em técnicas tais como virtualização, que permite que um único 26 servidor pode ser tratado como vários servidores virtuais, uma aglomeração, o que permite múltiplos servidores serem tratados como um único servidor (MATHER, 2009). O uso de nível de sistema operacional virtualizado ou de particionamento (como LPARs, vPars, nPars, Sistema Dinâmico de domínios e assim por diante) nas arquiteturas em nuvem pode ajudar a resolver alguns problemas do centro de segurança, privacidade e questões regulatórias que poderiam dificultar a adoção de computação em nuvem (SUN, 2009). Por exemplo, a virtualização do sistema operacional, como o previsto pelo Solaris Containers torna possível manter um modelo de implantação de um aplicativo por servidor, ao mesmo tempo se usa compartilhamento de recursos de hardware. De modo que, estes isolam os aplicativos de software e serviços com limites definidos por software e permitem que muitos ambientes de execução privados possam ser criados em uma única instância do Solaris OS. Cada ambiente tem sua própria identidade, separado do hardware subjacente, de modo que se comporta como se estivesse rodando em seu próprio sistema. Isso torna possível para reduzir as despesas administrativas, a complexidade do gerenciamento de múltiplos sistemas operacionais e a melhor utilização, ao mesmo tempo (SUN, 2009). 2.1.10 Orientada a serviços Abstração e acessibilidade são dois pontos chaves para atingir a concepção de serviço orientado. Através da virtualização e outras tecnologias, a arquitetura subjacente é abstraída sem se expor muito ao usuário. A abstração reduz tanto a necessidade do usuário para aprender detalhes da arquitetura sobre a nuvem e do limiar de aplicação de desenvolvimento. Ao mesmo tempo, os elementos chave da arquitetura subjacente podem ser simplesmente acessados pelo usuário da nuvem. O usuário pode facilmente explorar parâmetros do sistema, tais como o desempenho de processamento e capacidade de armazenamento. Em geral, de acordo com o tipo de capacidade, os serviços de computação em nuvem são amplamente divididos em três categorias: Infra-estrutura como Serviço (IaaS), Plataforma como Serviço (PaaS), e Software como Serviço (SaaS). Então, o usuário não precisa se preocupar com a estrutura para executar a aplicação: hardware, procedimentos de backup, controle de 27 segurança, manutenção, entre outros, ficam de forma abstrata para o cliente, porém quem é responsável por esta infra-estrutura é o fornecedor de serviço (RUSCHEL, 2008). Na maioria das vezes o usuário não precisa se preocupar com o sistema operacional e hardware que está usando em seu computador pessoal, podendo acessar seus dados na nuvem computacional. A possibilidade de acessar arquivos a partir de qualquer lugar é o que mais chama a atenção na computação em nuvem. Um dos motivos que tem feito o modelo alavancar é a melhoria contínua dos serviços de internet, hoje está cada vez mais fácil de obter acesso e estar online em tempo integral. Isso faz com que novos serviços possam ser centralizados na web (CAROLINY, 2010). O trabalho corporativo e o compartilhamento de arquivos se tornam mais fáceis, uma vez que todas as informações se encontram no mesmo lugar, ou seja, na nuvem (CAROLINY, 2010). 2.1.11 Pooling de Recursos O provedor de recursos de computação é agrupado para atender vários consumidores através de um modelo multi-tenant ou também conhecido como Multi-Inquilino, com diferentes recursos físicos e virtuais atribuídos dinamicamente e novamente de acordo com a demanda do consumidor. Há um senso de independência local em que o cliente geralmente não tem nenhum controle ou conhecimento sobre a localização exata dos recursos disponibilizados, mas pode ser capaz de especificar o local em um nível maior de abstração (por exemplo, país, estado ou do data Center). Exemplos de recursos incluem o armazenamento, processamento, memória, largura de banda de rede e máquinas virtuais (RUSCHEL, 2008). 2.1.12 Serviço Medido Os sistemas em nuvem automaticamente controlam e otimizam a utilização dos recursos, alavancando a capacidade de medição em algum nível de abstração adequado para o tipo de serviço (por exemplo, armazenamento, processamento, largura de banda, e contas de usuários ativos). Uso de recursos pode ser monitorado, controlado e relatado a existência de 28 transparência para o fornecedor e o consumidor do serviço utilizado. Podemos monitorar e controlar o uso de recursos, garantindo a transparência para o provedor e o usuário do serviço utilizado. Utiliza-se a abordagem baseada em nível de serviço SLA (Services Level Agreement) para garantir a qualidade de serviço (QoS). O SLA fornece informações sobre os níveis de disponibilidade, funcionalidade, desempenho ou outros atributos do serviço como o faturamento e até mesmo penalidades em caso de violação destes níveis (RUSCHEL, 2008). A computação em nuvem reduz bastante os custos com hardware e manutenção de software para organizações de todos os tamanhos. Em primeiro lugar, o hardware. Com menos hardware (servidores a menos) necessários na organização, os custos de manutenção são imediatamente reduzidos. Quanto à manutenção de software, devemos lembrar que todas as aplicações em nuvem são baseados em outros lugares, portanto não há software em computadores da organização para a equipe de TI manter (MILLER, 2009). 2.1.13 Service Level Agreement (SLA) Um SLA é um contrato entre prestador de serviço e um consumidor, que especifica as exigências dos consumidores e o empenho do provedor para eles. Normalmente, um SLA inclui itens como tempo de atividade, privacidade, segurança e procedimentos de backup (AHRONOVITZ, 2010). A política é um termo geral para um procedimento operacional. Por exemplo, uma política de segurança pode especificar que todos os pedidos para um serviço na nuvem particular devem ser criptografada (AHRONOVITZ, 2010). A governança diz respeito aos controles e processos que garantem que políticas serão aplicadas (AHRONOVITZ, 2010). 2.1.14 Interoperabilidade A interoperabilidade está preocupada com a capacidade dos sistemas de se comunicar entre eles. Ela exige que a informação comunicada seja compreendida pelo sistema de recepção. No mundo da computação em nuvem, isso significa a capacidade de escrever 29 código que trabalha com mais de um fornecedor de nuvem simultaneamente, independentemente das diferenças entre os prestadores de serviços (AHRONOVITZ, 2010). A interoperabilidade diz respeito à capacidade dos usuários de executar os seus programas e os seus dados em diferentes nuvens e plataformas. Isso permite, por exemplo, que as aplicações não fiquem restritas a somente uma nuvem. Essa é uma característica amplamente desejável no ambiente da computação em nuvem. Ultimamente, muitas aplicações têm sido desenvolvidas considerando esse fator. Porém, ainda há a necessidade da implementação de padrões e interfaces para que essa portabilidade seja possível (CHIRIGATI, 2009). Empresas de desenvolvimento de software têm interesse que aplicações possam ser transferidas para a nuvem de forma simples. Essas empresas também esperam que exista interoperabilidade entre diferentes serviços de nuvem, como por exemplo, entre serviços de armazenamento. As APIs da Amazon estão se tornando um padrão de fato para serviços sob demanda [OpenCloud 2009]. Contudo, a quantidade de tecnologias envolvidas é muito grande, tornando-se um desafio padronizar as diversas interfaces e serviços (Brandic 2009) (SOUZA, 2009). 2.1.15 Portabilidade Portabilidade é a capacidade de executar os componentes ou sistemas de escrita de um ambiente para outro ambiente. No mundo da computação em nuvem, este inclui ambientes de software e hardware (físico e virtual) (AHRONOVITZ, 2010). 2.1.16 Integração A integração é o processo de combinação de componentes na nuvem ou sistemas em um sistema global. A integração entre os componentes baseados na nuvem e sistemas pode ser complicado por questões como multiplas locações e regulamentos da federação dos governos (AHRONOVITZ, 2010). 30 2.1.17 Disponibilidade Dependendo do fornecedor, o usuário pode contar com alta disponibilidade, já que, se, por exemplo, um servidor para de funcionar, os demais que fazem parte da estrutura continuam a oferecer o serviço (RUSCHEL, 2008). Os usuários da computação em nuvem possuem uma grande preocupação com a questão da disponibilidade dos serviços. Eles esperam que as aplicações estejam sempre disponíveis, ou seja, em execução durante todo o tempo, principalmente nos momentos necessários. Esse tipo de problema pode ser prejudicial aos usuários quando os mesmos possuem um ponto único de falha, ou seja, uma única nuvem com as suas aplicações e os seus dados. Portanto, uma alternativa é ter mais de um prestador e, conseqüentemente, mais de uma nuvem, o que permite aos usuários executar seus programas em uma nuvem enquanto a outra apresenta problemas técnicos (CHIRIGATI, 2009). 2.1.18 Application Programming Interface (API) É uma programação de aplicações interface é um contrato que diz para o desenvolvedor escrever código para interagir com algum tipo de sistema. A API descreve a sintaxe das operações apoiadas pelo sistema. Para cada operação, a API especifica as informações que devem ser enviadas para o sistema, a informação de que o sistema irá enviar de volta, e qualquer condições de erro que possam ocorrer (AHRONOVITZ, 2010). 2.1.19 Segurança Um dos maiores desafios da computação em nuvem é a segurança, pois este modelo utiliza a internet para disponibilizar seus serviços. Com isso, os usuários desconhecem tanto a localização exata de seus dados quanto à fonte destes. Assim, devem existir formas para impedir o acesso não autorizado a informações e que os dados sensíveis permaneçam privados, pois estes serão processados fora da empresa. Questões de segurança devem ser consideradas para prover a autenticidade, confiabilidade e integridade (SOUZA, 2009). 31 Um sistema é dito confiável se ele não falha com freqüência e, mais importante, se ele não perde os dados ao falhar (SUN 2009a). As aplicações desenvolvidas para a computação em nuvem devem ser confiáveis, ou seja, elas devem possuir uma arquitetura que permita que os dados permaneçam intactos mesmo que haja falhas ou erros em um ou mais servidores ou máquinas virtuais sobre os quais essas aplicações estão decompostas. Essa característica está associada à realização de cópias de segurança dos dados. O armazenamento dessas cópias deve ser feito em local seguro para que, caso haja alguma falha nas aplicações e elas percam os dados, estes, ou pelo menos uma parte deles, possam ser recuperados (CHIRIGATI, 2009); A disponibilidade de serviços permite os usuários acessar e utilizar a nuvem onde e quando quiserem. Como se trata da internet pode ocorrer atrasos e sistemas indisponíveis. Os ambientes de computação em nuvem devem possuir alta disponibilidade. Portanto, estes podem utilizar técnicas de balanceamento de carga dinâmico e composição de nuvens de forma a atender as necessidades dos usuários. Por exemplo, podem-se construir aplicações altamente disponíveis com a implantação de duas ofertas de nuvem diferentes. Caso uma das nuvens falhe, a outra nuvem continua a apoiar a disponibilidade das aplicações (SOUZA, 2009). O fato de juntar todas estas tecnologias, que evoluíram de forma independente, geram muitos problemas que ainda precisam ser resolvidos. A computação em nuvem é uma tecnologia recente e esta em contínua evolução por isso ainda veremos muitas mudanças e transformações (TAURION, 2009). Um ponto adicional de atenção é a questão da plataforma de computação em nuvem ser aberta ou proprietária (é portanto, fechada). Até o momento, as ofertas de nuvem, como o Amazon Web Services, Salesforce e o Google Docs, são proprietárias. Isto significa que, por exemplo, só pode-se usar o Google Docs na nuvem do Google e não em nenhuma outra nuvem, como as nuvens da Yahoo ou Microsoft. Esta limitação às tecnologias proprietárias gera o aprisionamento do usuário, restringindo sua liberdade de migrar de uma nuvem para outra (VELTE, 2010). Ainda não surgiram propostas de nuvens abertas que permitam a portabilidade de aplicações entre os diversos fornecedores de serviços de computação em nuvem. Entretanto, 32 recentemente começaram a surgir alguns movimentos em direção a um padrão aberto para interoperabilidade entre nuvens e foi, inclusive, criado um manifesto, chamado “OpenCloud Manifesto” (www.opencloudmanifesto.org) que se propõe a aglutinar empresas em torno da especificação de um padrão aberto para a computação em nuvem (TAURION, 2009). O OpenCloud Manifesto estabelece um conjunto de princípios, denominados princípios para nuvens abertas, que asseguram que as organizações que usarem nuvens computacionais não ficarão restritas a padrões fechados, mas terão liberdade de escolha, flexibilidade e abertura para não ficarem aprisionadas a uma nuvem. Embora a computação em nuvem traga claros benefícios, existe o potencial de aprisionamento e perda de flexibilidade, caso padrões abertos não sejam adotados. Dentro de dois meses após o seu anúncio, mais de 250 organizações assinaram como patrocinadores. Esta atividade do grupo é feito à luz de seis princípios do Open Cloud Manifesto, os quais estão descritos a seguir: (AHRONOVITZ, 2010) 1. Os fornecedores de serviços em nuvem devem trabalhar juntos para garantir que os desafios para adoção da nuvem (segurança, integração, portabilidade, interoperabilidade, governança / gestão, medição / monitoramento) sejam abordados através de colaboração aberta e ao uso adequado de normas. 2. Os fornecedores de serviços em nuvem não devem usar sua posição no mercado em forma de bloqueio de clientes em suas plataformas específicas e não devem limitar a sua escolha de fornecedores. 3. Os prestadores de serviço na computação em nuvem devem usar e adotar as normas existentes, sempre que adequadas. A indústria de TI tem investido fortemente em padrões existentes e as normas das organizações, não há necessidade de duplicar ou reinventar elas. 4. Quando novos padrões (ou a adaptação às normas existentes) são necessários, temos de ser criteriosos e pragmáticos para evitar a criação de muitas normas. Devemos garantir que as normas promovam a inovação e não inibi-la. 5. Qualquer esforço da comunidade em torno da nuvem aberta deve ser impulsionada por necessidades do cliente, não apenas as necessidades 33 técnicas dos provedores de computação em nuvem, e devem ser verificados em relação às necessidades reais dos clientes. 6. Os padrões de computação em nuvem em organizações, grupos de advocacia e nas comunidades devem trabalhar em conjunto e coordenado, certificando-se que os interesses não estão em conflito. De forma que o modelo de computação em nuvem é composto, tipicamente, pelas tecnologias mostradas anteriormente, três modelos de implantação na nuvem e três modelos de serviços, conforme serão descritos nas próximas seções. 34 3. Modelos de Implantação de Computação em Nuvem Tratando-se do acesso a da disponibilidade de ambientes de computação em nuvem, tem-se tipos diferentes de implantação. A restrição ou abertura de acesso depende do processo de negócios, do tipo de informação e do nível de visão desejado. Pode-se perceber que certas empresas não desejam que todos os usuários possam acessar e utilizar determinados recursos no seu ambiente de computação em nuvem. Dessa forma, surge a necessidade da criação de ambientes mais restritos, onde somente alguns usuários devidamente autorizados possam utilizar os serviços providos. Então neste sentido, podemos de afirmar que existem três tipos de ofertas de computação em nuvem (TAURION, 2009). O termo nuvem é uma metáfora usada para a internet e é uma representação simplificada da complexidade que esta se encontra, onde dispositivos são interconectados formando a internet. Nuvens privadas e públicas são subconjuntos da internet e são definidas com base na relação do usuário com a empresa. Nuvens privadas e nuvens públicas também podem ser referidas como nuvens internas ou externas, a diferenciação é baseado na relação da nuvem com a empresa (MATHER, 2009). Os conceitos de nuvens públicas e privadas são importantes porque suportam a computação em nuvem, que permite o provisionamento da dinâmica, são escaláveis e possuem recursos virtualizados através da internet. Os usuários finais que utilizam os serviços oferecidos via computação em nuvem pode não ter conhecimento, experiência, ou controle sobre a infra-estrutura tecnológica que os suporta (MATHER, 2009). As ofertas são classificadas pelo grau de compartilhamento entre os setores de uma empresa, que pode dividir a nuvem em três tipos básicos de implantação: público, privado e híbrido. Como mostra a Figura 2. 35 Figura 2. Tipos de Nuvens (AMRHEIN, 2009) 3.1 Nuvens Públicas Em termos simples, serviços de nuvem pública são caracterizados por estar disponível para os clientes de um provedor de serviços terceirizado através da internet. O termo "público" não significa sempre livre, mesmo que ele possa ser gratuito ou razoavelmente barato de usar. Uma nuvem pública não significa que os dados de um usuário é publicamente visível, fornecedores de nuvem pública normalmente fornecem um controle de acesso e mecanismo para seus usuários. Nuvens públicas oferecem um custo, elástico efetivo para implementar meios de soluções (AHRONOVITZ, 2010). São serviços em nuvem fornecidos por terceiros (fornecedor). Elas existem além do firewall da empresa e são completamente hospedadas e gerenciadas pelo provedor da nuvem (AMRHEIN, 2009). Uma nuvem pública pode estar sendo hospedada, operada e gerida por um fornecedor terceirizado de um ou mais centro de dados. O serviço é oferecido a múltiplos clientes sobre uma infra-estrutura em comum, ver na Figura 3 (MATHER, 2009). 36 Figura 3. Nuvem Pública (MATHER, 2009) Taurion (2009), diz que estas nuvens públicas podem oferecer às empresas um acesso rápido a infra-estruturas computacionais, com custos mínimos. Entretanto, alguns desafios referentes à segurança, confiabilidade e portabilidade com outras nuvens são reais e precisam ser endereçados corretamente. As nuvens públicas tentam fornecer aos consumidores elementos de TI sem problemas. Seja software, infra-estrutura de aplicativo ou infra-estrutura física, o provedor de nuvem assume as responsabilidades de instalação, gerenciamento, fornecimento e manutenção (AMRHEIN, 2009). No modelo de implantação público, a infra-estrutura de nuvens é disponibilizada para o público em geral, sendo acessado por qualquer usuário que conheça a localização do serviço. Neste modelo de implantação não podem ser aplicadas restrições de acesso quanto ao gerenciamento de redes, e menos ainda, aplicar técnicas de autenticação e autorização (SOUZA, 2009). Um dos benefícios das nuvens públicas é que elas podem ser muito maiores do que uma nuvem privada, por exemplo, já que elas permitem uma maior escalabilidade dos recursos. Essa característica evita a compra de equipamentos adicionais para resolver alguma necessidade temporária, deslocando os riscos de infra-estrutura para os prestadores de infraestrutura da nuvem. Há ainda a possibilidade de destinar algumas porções da nuvem pública 37 para o uso exclusivo de um único usuário, criando o chamado datacenter privado virtual, que provê a esse usuário uma maior visibilidade de toda a infra-estrutura (CHIRIGATI, 2009). 3.2 Nuvens Privadas Taurion (2009) diz que nuvens privadas, também são chamadas de nuvens empresariais, correspondem ao uso do conceito de nuvem computacional aplicado aos servidores localizados internamente no firewall da empresa e são gerenciadas pelas mesmas. As nuvens privadas são construídas exclusivamente para um único usuário. Diferentemente de um datacenter privado virtual, a infra-estrutura utilizada pertence ao usuário, e, portanto, ele possui total controle sobre como as aplicações são implementadas na nuvem. Uma nuvem privada é, em geral, construída sobre um datacenter privado (RUSCHEL, 2008). Nuvens privadas diferem das nuvens públicas em que a rede, computação e armazenamento de infra-estrutura associada com nuvens privadas é dedicado a uma única organização e não é compartilhado com outras organizações. Como tal, uma variedade de padrões de nuvens privadas surgiram: (MATHEL, 2009). - Dedicado Nuvens privadas hospedada em um centro de dados do cliente ou em uma instalação que são operadas por departamentos internos de TI. - Comunidade Nuvens privadas localizadas nas instalações de terceiros, gerenciados e operados por um vendedor que está vinculado por SLAs de costume e cláusulas contratuais, com segurança e requisitos de conformidade. No modelo de implantação comunidade ocorre o compartilhamento por diversas empresas de uma nuvem, sendo esta suportada por uma comunidade específica que partilhou seus interesses, tais como a missão, os requisitos de segurança, política e considerações sobre flexibilidade. Este tipo de modelo de implantação pode existir localmente ou remotamente e pode ser administrado por alguma empresa da comunidade ou por terceiros. Os membros que 38 fazem parte da comunidade possuem acesso aos dados e aplicativos na nuvem (SOUZA, 2009). - Dirigido Infra-estrutura em nuvem privada, de propriedade de um cliente e gerido por um fornecedor. Neste modelo de implantação são empregados políticas de acesso aos serviços. As técnicas utilizadas para prover tais características podem ser em nível de gerenciamento de redes, configurações dos provedores de serviços e a utilização de tecnologias de autenticação e autorização. Um exemplo deste modelo seria o cenário de uma universidade e seus departamentos. A universidade pode estar interessada em disponibilizar serviços para seus departamentos e outros órgãos desta instituição não devem ter acesso a esses serviços (RUSCHEL, 2008). As nuvens privadas oferecem vantagens com relação à variedade pública. O controle com granularidade mais baixa com relação a diversos recursos que formam a nuvem fornece a uma empresa todas as opções de configuração disponíveis. Além disso, as nuvens privadas são ideais quando o tipo de trabalho que está sendo realizado não é prático para a nuvem pública, devido a preocupações com segurança e regulamentação (AMRHEIN, 2009). Caso o usuário aumentar os recursos utilizados em sua nuvem privada, ele deve adquirir novos equipamentos, como sistemas de armazenamento, por exemplo, já que a sua nuvem está limitada à capacidade de seu sistema físico. Em uma nuvem pública, não há essa necessidade, uma vez que, como os recursos são facilmente escaláveis, basta o usuário reservar uma quantidade maior deles. Devido a essas diferenças, diz-se que as nuvens públicas são mais adequadas para aplicações temporárias, enquanto que as nuvens privadas são um ambiente mais apropriado a aplicações permanentes que demandam níveis específicos de qualidade de serviço e de localização dos dados (CHIRIGATI, 2009). 3.3 Nuvens Híbridas A nuvem híbrida ou mista se trata de uma combinação de nuvens públicas e privadas. Essas nuvens seriam geralmente criadas pela empresa e as responsabilidades de 39 gerenciamento seriam divididas entre a empresa e o provedor de nuvem pública. A nuvem híbrida usa serviços que estão no espaço público e privado (AMRHEIN, 2009). Nesse sentido, uma empresa pode determinar os objetivos e necessidades de serviços e obter os mesmos da nuvem pública ou privada, conforme apropriado. Uma nuvem híbrida bem construída poderia atender processos seguros críticos para a missão, como o recebimento de pagamentos de clientes, assim como aqueles secundários para os negócios, como processamento de folha de pagamento de funcionários (AMRHEIN, 2009). Com uma nuvem híbrida, as organizações podem executar serviços que não são necessariamente exigidos pela empresa, ou seja, que possam ser repassadas para terceiros, hospedando eles em uma nuvem pública e mantendo os aplicativos principais e dados sensíveis da empresa em casa, na nuvem privada, ver Figura 4 (MATHER, 2009). Figura 4. Nuvem Híbrida (MATHER, 2009) A nuvem híbrida pode ter sua configuração descrita pela combinação de um dispositivo local como um computador conectado a uma nuvem de serviços. Também pode ser descrita com uma configuração que combina recursos virtuais e físicos como, por exemplo, um ambiente virtual que requer servidores físicos, roteadores ou outro tipo de hardware como um firewall ou um filtro de spam. (VIEIRA, 2009). Para Paul Korzeniowski “o modelo de nuvem híbrida tenta unir o modelo de datacenter local convencional com a capacidade variável que esses modelos de nuvem oferecem. Uma empresa pode comprar capacidade de computação sob demanda para lidar com tráfego de web em uma grande promoção ou por uma iniciativa de pesquisa sob demanda. Ao invés de comprar hardware que roda com uma capacidade bem mais baixa na maioria das vezes, a 40 abordagem híbrida promete permitir que as empresas rodem seus próprios servidores com utilização mais alta, comprando capacidade de fluxo sob demanda” (DUARTE, 2009). É válido destacar que as nuvens híbridas introduzem a complexidade de determinar a maneira como as aplicações são distribuídas entre nuvens públicas e privadas. A relação entre os dados e os recursos de processamento, por exemplo, deve ser considerada. Se uma aplicação possui uma grande quantidade de dados, o seu processamento em uma nuvem pública pode não ser favorável, já que passar esses dados de sua nuvem privada para uma nuvem pública pode ser muito custoso (TAURION, 2009). 3.4 Comparativo entre os Modelos de Nuvens Nuvem é uma palavra que está hoje no vocabulário de TI das maiores empresas brasileiras. Mas questões como segurança e disponibilidade fazem com que as companhias adotem uma dose extra de cautela. Tanto que o conceito ganhou algumas variações: existem as nuvens públicas, as nuvens privadas e as nuvens híbridas. No primeiro caso, estão grandes provedores de serviços – como a Amazon e o Google – cujos equipamentos, infra-estrutura ou aplicações são compartilhados por milhares de clientes em todo o mundo, por intermédio da internet. Já a nuvem privada é a que fica dentro do ambiente protegido (firewall) da empresa e tem o acesso restrito, geralmente aos seus funcionários e parceiros de negócio (SPOSITO, 2009). As nuvens públicas são as mais conhecidas e possuem um fácil acesso. Sendo que, em alguns casos a sua utilização pode ser gratuita ou não, isto vai depender do tipo de serviço que o usuário vai precisar. Nestas nuvens públicas, os dados dos usuários são armazenados em provedores de serviço, os quais são terceirizados, estes vão ser responsáveis pelo gerenciamento correto destes dados, pelas instalações, pela manutenção e fornecimento de recursos de infra-estrutura quando for solicitado pelo usuário. As nuvens privadas são elaboradas para atender somente uma organização. Sendo assim, esta tem total controle sobre as operações na nuvem. 41 Então podemos perceber que com uma nuvem híbrida, uma empresa tem sua nuvem privada, com serviços em execução no seu firewall. No entanto, com as nuvens híbridas, é possível o usuário acessar os dados armazenados fora do local da empresa através da nuvem pública. Este modelo de nuvem híbrida é útil quando uma organização quer ter o controle sobre o armazenamento de dados, mas precisa de espaço adicional para arquivar os seus dados. Então, a empresa vai ter a segurança e a supervisão da nuvem privada em suas redes, mas pode armazenar os dados em excesso em uma nuvem escalável e sob demanda que é a nuvem pública. Com base em todas estas concepções mostradas por diversos autores, vamos estabelecer um quadro comparativo das principais diferenças entre os modelos de nuvens pública e privada. NUVEM PÚBLICA NUVEM PRIVADA - Vários usuários podem usá-las - Quem possui o controle é o provedor de serviços, pois é responsável pelo gerenciamento - Não pode ser implementadas políticas de acesso, mas é possível destinar algumas porções de nuvem pública para o uso exclusivo de um único usuário, criando um datacenter privado virtual, que provê ao usuário mais visibilidade de toda a infraestrutura - Recursos facilmente escaláveis e consequentemente maior escalabilidade - São feitas para somente um usuário - A organização é quem possui o controle total sobre as aplicações na nuvem - Aplicações Temporárias - Pode ser implementadas políticas de acesso ao serviço (gerenciamento de rede, configuração dos provedores de serviço, utilização da tecnologia de autenticação e autorização) - Se o usuário precisar aumentar os recursos utilizados em sua nuvem privada ele deve adquirir novos equipamentos a sua infraestrutura, aumentando assim os custos para manter sua nuvem - Aplicações Permanentes Tabela 1. Comparação entre os Modelos de Nuvem Pública e Nuvem Privada 42 4. Modelos de Serviços na Computação em Nuvem No modelo de software tradicional as aplicações destes softwares são baseados em um modelo com grandes custos de licenciamento inicial e anual e custos de suporte. Aumentar o número de usuários pode aumentar o custo da base do pacote, devido a necessidade de implementações de servidores adicionais de hardware e suporte de TI. Os custos do licenciamento são muitas vezes com base em métricas que não estejam diretamente alinhados com o uso (tipo de servidor, o número de CPUs, etc, ou alguma característica física) e não são virtuais. Um pacote de software empresarial típico requer a implantação de hardware, servidores e backup de rede e provisionamento para acomodar o número de usuários dentro e fora dos campos. Arquitetura de segurança também é tributada em um esforço para proteger este valioso recurso contra acesso não autorizado. Então nos softwares tradicional as aplicações tendem a ser altamente customizável, que tem um custo em dólares e mão de obra (MATHER, 2009). Existem muitos tipos de serviços oferecidos pela computação e nuvem. Esta diversidade de serviços é muito apropriada, pois permite que a empresa adquira os serviços mais adequados às suas necessidades (TAURION, 2009). Então, a arquitetura da computação em nuvem pode ser divida em três camadas abstratas a mais baixa das camadas é a de infra-estrutura como serviço (IaaS), a segunda camada é a de plataforma como serviço (PaaS) e última, a camada de software como serviço (SaaS). Cada camada pode possuir seu gerenciamento ou monitoramento de forma independente das outras camadas, melhorando a flexibilidade, reusabilidade e escalabilidade no sentido de substituição ou adição de recursos computacionais sem afetar as outras camadas (SOUZA, 2009). Pode-se observar na Figura 5 as camadas de aplicações, de plataforma e de infraestrutura (RUSCHEL, 2008). 43 Figura 5. Os principais atores que estão relacionados com as camadas de aplicação, de plataforma e de intra-estrutura são, respectivamente, os usuários das nuvens, os prestadores de serviços e os prestadores de infra-estrutura (CHIRIGATI, 2009). De acordo cam a Figura 5, o prestador de serviços oferece o serviço para o consumidor. A tarefa real do provedor varia dependendo do tipo de serviço: • Para software como serviço (SaaS), o provedor instala, gerencia e mantém o software. Independentemente disso, o consumidor não tem acesso à infraestrutura, eles podem acessar somente os pedidos. • Para a plataforma como serviço (PaaS), o provedor gerencia a infra-estrutura para a plataforma da nuvem, normalmente varia para o tipo de aplicação. O consumidor não pode acessar a infra-estrutura sob o plataforma. • Para a infra-estrutura como serviço (IaaS), o provedor mantém o armazenamento, banco de dados de fila de mensagens, ou outro middleware, ou o ambiente de hospedagem para máquinas virtuais. O consumidor utiliza o serviço como se fosse um disco banco de dados, unidade de fila de mensagem, mas eles não podem acessar o infra-estrutura que o hospeda. No diagrama de prestador de serviços, na Figura 6, a camada mais baixa da pilha é o firmware e hardware em que tudo se baseia e é composto pelo hardware e pelos componentes de rede, os quais formam o esqueleto da nuvem. Acima disso é o kernel de software o qual tem a possibilidade de ser implementado como um kernel de SO ou o gestor da máquina 44 virtual que hospeda a infra-estrutura sob a nuvem. Os recursos virtualizados e imagens incluem os serviços básicos de computação em nuvem, como processamento, armazenamento de energia e middleware. As imagens virtuais controlados pelo gerenciador VM (Virtual Machine) incluem tanto as próprias imagens como os metadados necessários para gerenciá-los (AHRONOVITZ, 2010). É crucial para as operações do prestador de serviços é a camada de gestão. Em um nível baixo de gestão exige a medição para determinar quem usa os serviços e que medida, o provisionamento para determinar como os recursos são alocados para consumidores e monitoramento para acompanhar o status do sistema e seus recursos. Em um nível superior, a gestão envolve cobrança para recuperar os custos, planejamento de capacidade para garantir que as exigências dos consumidores serão atingidos, gestão de SLA para garantir que os termos de serviço acordado entre o fornecedor e o consumidor sejam respeitados e relatórios para os administradores (AHRONOVITZ, 2010). Segurança se aplica a todos os aspectos das operações do prestador de serviços. Abrir normas aplicáveis às operações do provedor também. Um conjunto de normas bem arredondadas, normas para simplificar as operações dentro do provedor e interoperabilidade com outros prestadores de serviços (AHRONOVITZ, 2010). 45 Figura 6. Níveis de divisão da computação em nuvem segundo a ontologia proposta (AHRONOVITZ, 2010). Para entender melhor a computação em nuvem, pode-se classificar os atores dos modelos de acordo com os papéis desempenhados (Marinos e Briscoe, 2009). A Figura 7 ilustra estes papéis (SOUZA, 2009). 46 Figura 7. Papéis na Computação em Nuvem (SOUZA, 2009) O provedor é responsável por disponibilizar, gerenciar e monitorar toda a estrutura para a solução de computação em nuvem, deixando os desenvolvedores e usuários finais sem esses tipos de responsabilidades. Para isso, o provedor fornece serviços nos três modelos de serviços. Os desenvolvedores utilizam os recursos fornecidos e provêem serviços para usuários finais. Esta organização em papéis ajuda a definir os atores e os seus diferentes interesses. Os atores podem assumir vários papéis ao mesmo tempo de acordo com os interesses, sendo que apenas o provedor fornece suporte a todos os modelos de serviços (SOUZA, 2009). Do ponto de vista de interação entre os três modelos de serviços, a IaaS fornece recursos computacionais, seja de hardware ou software, para a PaaS, que por sua vez fornece recursos, tecnologias e ferramentas para o desenvolvimento e execução dos serviços implementados, a serem disponibilizados na visão de SaaS (SOUZA, 2009). Então em ambientes de computação em nuvem pode-se ter três modelos de serviços. Estes modelos são importantes, pois eles definem um padrão arquitetural para soluções em computação em nuvem. A Figura 8 exibe estes modelos de serviços (Armbrust et al. 2009) (SOUZA, 2009). 47 Figura 8. Modelos de Serviços (SOUZA, 2009) 4.1 Infra-estrutura como Serviço (IaaS) O termo original foi criado em março de 2006 pelo economista Nicholas Carr e chamava-se Hardware as a Service (HaaS), mas no final de 2006 começou a ser chamado de pelas empresas como Infra-estrutura como Serviço (IaaS) e hoje é assim comumente denominado. A idéia básica é que o usuário, em vez de adquirir e instalar servidores e equipamentos de rede em um datacenter poderia usar estes recursos a partir de um provedor externo. Mas, diferentemente dos modelos tradicionais de outsourcing, a computação em nuvem não reserva um determinado recurso ao contratante, e sim aloca de forma dinâmica e automática os seus recursos para atender aos requisitos de demanda do cliente (TAURION, 2009). A capacidade prevista para o usuário é a prestação de transformação, armazenamento, redes e outros recursos computacionais fundamentais que o usuário seja capaz de implantar e executar programas arbitrários, que podem incluir sistemas operacionais e aplicativos. O usuário não administra ou controla a infra-estrutura de nuvem subjacente, mas tem controle sobre os sistemas operacionais, armazenamento, aplicativos implantados, e, eventualmente, o controle limitado de componentes de rede selecionar (por exemplo, firewalls host) (RUSCHEL, 2008). 48 A mais baixa das camadas é a de infra-estrutura (IaaS), através dela que os prestadores de infra-estrutura disponibilizam os serviços de rede e armazenamento da nuvem. Nesta camada temos os datacenters, clusters, desktops e outros recursos de hardware, podendo ter recursos heterogêneos (RUSCHEL, 2008). Portanto, se o usuário contrata uma solução de IaaS, contrata uma infra-estrutura capaz de executar e hospedar seu software sobre o sistema operacional que o usuário escolher, instalar, administrar e gerenciar. Maior controle igual maior responsabilidade. (CAMBIUCCI, 2010). A IaaS traz os serviços oferecidos na camada de infra-estrutura, nestes serviços podemos incluir servidores, roteadores, sistemas de armazenamento de dados, bancos de dados e outros recursos de computação. O IaaS traz algumas características, como uma interface única para administração da infra-estrutura, a aplicação API para interação com hosts, switches, roteadores e o suporte para a adicionar novos equipamentos de forma simples e transparente (RUSCHEL, 2008). O termo IaaS refere-se a uma infra-estrutura computacional baseada em técnicas de virtualização de recursos de computação. Esta infra-estrutura pode escalar dinamicamente, aumentando ou diminuindo os recursos de acordo com as necessidades das aplicações (SOUZA, 2009). O modelo IaaS é semelhante a Utility Computing, em que a idéia básica é oferecer serviços de computação. Ou seja, você paga pela quantidade de poder de processamento, espaço em disco, o que você realmente consumir. IaaS é tipicamente um serviço associado com a computação em nuvem e se refere a serviços online em que é abstraido do usuário os detalhes da infra-estrutura, incluindo os recursos de computação física, localização, particionamento de dados, escalonamento, segurança, backup, e assim por diante. Na computação em nuvem, o fornecedor do serviço tem o controle completo da infra-estrutura. (PIGATTO, 2009) O nível de infra-estrutura de software fornece recursos fundamentais para camadas de nível superior, permitindo a criação de novos ambientes de software ou novas aplicações. De 49 acordo com Youseff (2008), este nível pode ser organizado em: recursos computacionais, armazenamento de dados e comunicação. (PIGATTO, 2009) a) Recursos computacionais: Neste nível, máquinas virtuais (virtual machines) são a melhor maneira de oferecer recursos computacionais, já que oferecem ao usuário maior flexibilidade, uma vez que ele normalmente possui permissão total para o uso da máquina virtual, estando apto a personalizar o software e obter maior performance e eficiência. b) Armazenamento de Dados: O segundo recurso de infra-estrutura é o armazenamento de dados, o qual permite ao usuário armazenar seus dados em discos remotos e acessá-los a qualquer momento e de qualquer lugar. Este serviço é comumente conhecido como DaaS – Data-Storage as a Service (Aramazenamento de Dados como Serviço). c) Comunicação: Uma vez que a necessidade de garantia de QoS – Quality of Service (Qualidade de Serviço) para uma rede de comunicação cresce ao tratar-se de um sistema em nuvem, a comunicação se torna um componente vital da infraestrutura em questão. Em consequência disto, estes sistemas possuem a obrigação de fornecer certas capacidades de comunicação “orientada a serviço”, configuráveis, programáveis, previsíveis e confiáveis. 4.2 Database-as-a-Service Taurion (2009) diz que banco de dados são essenciais a qualquer negócio hoje em dia. Não é incomum vermos empresas com centenas ou milhares de diferentes bancos de dados, muitas deles críticos às operações, suportados por diversos softwares de gerenciamento de banco de dados, os SGBD. Cada banco de dados colocado em operação significa um aumento nas tarefas de gestão, que envolvem integração, segurança, disponibilidade e desempenho adequados. E conseqüentemente maiores os custos. Fica claro que esta proliferação de banco de dados aumenta bastante a pressão por meios mais eficazes de gerenciamento. Diante deste contexto, nada mais natural que o conceito de computação em nuvem seja também uma alternativa à problemática do banco de dados. Surge então o modelo Database50 as-a-Service (DaaS) provendo banco de dados por demanda. Com o DaaS uma empresa usa uma nuvem para armazenar e acessar informações sem se preocupar com a infra-estrutura que vai suportar os banco de dados. Neste modelo o usuário paga pelo volume de dados armazenado e pela quantidade de dados transmitidos de e para nuvem. Os custos de infraestrutura e suporte ficam a cargo do provedor da nuvem que mantém o DaaS (TAURION, 2009). Ainda, conforme Taurion (2009), o modelo DaaS pode ser implementado por três arquiteturas básicas. a) Modelo de Container Neste modelo o provedor fornece um container que representa uma coleção de entidades heterogêneas, da mesma maneira que um banco de dados possui múltiplas tabelas. Os programas acessam essas entidades nos containers. Esse modelo se adapta bem a empresas de pequeno porte. Um exemplo desse modelo é o serviço SimpleDB oferecido pela Amazon. b) Modelo de cópia compartilhada Neste modelo uma mesma cópia do software de banco de dados residente na nuvem é compartilhada por vários clientes, embora cada um deles possua seu próprio espaço de dados (tabelas). O compartilhamento é do software de banco de dados e da infra-estrutura computacional. c) Modelo de cópia exclusiva Neste modelo cada cliente tem sua própria cópia do software de banco de dados residente na nuvem. A diferença em relação ao modelo tradicional é que os clientes compartilham a mesma infra-estrutura computacional. Já existem algumas ofertas interessantes de DaaS, mas a medida que o mercado amadurecer surgirão outras alternativas. Hoje existe algumas ofertas pioneiras como o SimpleDB da Amazon, o EnterpriseDB e MySQL, oferecidos em cima da nuvem Amazon. 51 Além disso, empresas tradicionais de banco de dados como a Oracle, IBM e Microsoft já começaram a endereçar este mercado (TAURION, 2009). O Google também entra neste serviço com a oferta BigTable, um componente do Google AppEngine. O BigTable é um ambiente de banco de dados especializado, com aplicações escritas em Python, que usa o próprio Google File System (GFS) como método de armazenamento. Foi projetado para trabalhar com imensos volumes de dados, distribuídos em vários nodos GFS. Na prática, utiliza o modelo container. Não suporta o modelo relacional e é voltado para massiva base de dados (TAURION, 2009). 4.3 Plataforma como Serviço (PaaS) A PaaS oferece uma infra-estrutura de alto nível de integração para implementar e testar aplicações na nuvem. O usuário que é assinante em uma plataforma hospedada remotamente, não administra ou controla a infra-estrutura subjacente, incluindo desenvolvimento de aplicativos, de interfaces e de banco de dados, armazenamento, teste e assim por diante, mas tem controle sobre as aplicações implantadas e, possivelmente, as configurações de aplicações hospedadas nesta infra-estrutura. A PaaS fornece um sistema operacional, linguagens de programação e ambientes de desenvolvimento para as aplicações, auxiliando a implementação de softwares, já que contém ferramentas de desenvolvimento e colaboração entre desenvolvedores (SOUZA, 2009). Em geral, os desenvolvedores dispõem de ambientes escaláveis, mas eles têm que aceitar algumas restrições sobre o tipo de software que se pode desenvolver. Do ponto de vista do negócio, a PaaS permitirá aos usuários utilizarem serviços de terceiros, aumentando o uso do modelo de suporte no qual os usuários se inscrevem para solicitações de serviços de TI ou de resoluções de problemas pela web. Com isso, pode-se descentralizar uma carga de trabalho e responsabilidades nas equipes de TI das empresas (SOUZA, 2009). A camada de plataforma como serviço (PaaS) esta acima da camada de infra-estrutura e provê os serviços para que as aplicações possam ser desenvolvidas, implementadas, testadas e trazidas para o ambiente da nuvem pelos prestadores de serviços. Nesta camada de desenvolvimento os usuários finais não têm acesso, sendo ela destinada aos usuários mais 52 experientes, ou seja, os desenvolvedores das soluções para computação em nuvem (RUSCHEL, 2008). De acordo com a proposta de Youseff (2008), neste segundo nível se encontra o ambiente de software. Este nível é utilizado por desenvolvedores de aplicações para as nuvens, que implementam e implantam suas aplicações diretamente na nuvem. Os provedores destes serviços nas nuvens oferecem aos desenvolvedores um conjunto definido de APIs, as quais facilitam a interação entre o ambiente e as aplicações em nuvem, assim como o aumento da agilidade de implantação e o suporte à escalabilidade necessárias para tais aplicações. Um exemplo deste tipo de serviço é o Google App Engine, o qual oferece um ambiente de desenvolvimento nas linguagens de programação Python e Java e APIs que permitem aplicações interagirem com a nuvem do Google (PIGATTO, 2009). Os prestadores de serviços que produzem um PaaS, por exemplo, podem construir essa plataforma considerando a integração de um sistema operacional, de um mediador, de softwares de aplicação e de um ambiente de desenvolvimento. Os prestadores de serviços que usarão essa plataforma vêem-na como uma Interface de Programação de Aplicativos, ou API. Eles irão interagir com a plataforma através da API sem ter a preocupação de gerenciar e escalar os recursos, o que torna o processo de desenvolvimento de aplicações mais rápido e simples. Por outro lado, esses prestadores de serviços ficam limitados pelas capacidades que a plataforma pode oferecer (CHIRIGATI, 2009). De acordo com Anthony T. Velte em seu livro “Cloud Computing: A Practical Approach” PaaS fornece todos os recursos necessários para construir aplicações e serviços completos a partir da internet, sem precisar baixar ou instalar software. A arquitetura PaaS oferece serviços que incluem design, desenvolvimento, testes, implantação e hospedagem. Outros serviços oferecidos é a colaboração em equipe, integração de serviços web, banco de dados integrados, segurança, escalabilidade, gerenciamento de estado, armazenamento e controle de versão (VELTE, 2009). Uma falha de PaaS é a falta de interoperabilidade e portabilidade entre os provedores. Isto é, se você criar um aplicativo com um fornecedor de cloud e decidir ir para outro provedor, você pode não ser capaz de fazer isso ou você vai ter que pagar um preço elevado. 53 Além disso, se o provedor sai do negócio, suas aplicações e seus dados serão perdidos. (VELTE, 2009). 4.4 Software como Serviço (SaaS) Em sua essência o SaaS, trata-se de uma forma de trabalho onde o software é oferecido como serviço, assim, o usuário não precisa adquirir licenças de uso para instalação ou até mesmo comprar computadores ou servidores para executá-lo. Nessa modalidade, pagase um valor periódico, somente pelos recursos utilizados e/ou pelo tempo de uso (PRADO, 2010). O modelo SaaS é um modelo que entrega software como um serviço, de forma diferente do modelo tradicional, no qual a empresa adquire uma licença de uso e instala o software nos seus próprios servidores. Este modelo transforma a maneira como o software irá ser comercializado. Com o SaaS, também não são mais necessários os contratos de manutenção, pois essas atividades ficam a cargo do provedor e não mais da empresa. O usuário passa apenas a usar o software, sem preocupar-se com as atividades de instalação, manutenção e upgrades (TAURION, 2009). Enquanto o SaaS transfere a responsabilidade da implementação e manutenção do software para o provedor e libera recursos para outros projetos, a TI fica nas mãos do fornecedor em questão de disponibilidade, segurança e outros pontos-chave (BIDDICK, 2010). A idéia é que o usuário deixe de utilizar o software “de caixinha” ou “sob encomenda” e passe a comprar software de acordo com suas necessidades. Por exemplo: Uma empresa de dez pessoas no lugar de encomendar um software pode pagar uma taxa mensal para usar um software com a quantidade de usuários que ela precisa. Essas mensalidades são relativamente baixas e se encaixam melhor na realidade de pequenas e médias empresas (GONÇALVES, 2008). Como o software está na web, ele pode ser acessado pelos usuários de qualquer lugar e a qualquer momento, permitindo mais integração entre unidades de uma mesma empresa ou 54 outros serviços de software. Assim, novos recursos podem ser incorporados automaticamente aos softwares sem que os usuários percebam estas ações, tornando a evolução e atualização transparente dos sistemas. O SaaS reduz os custos, pois é dispensada a aquisição de licença de software, porém é cobrada uma taxa mensal baseada no numero de funcionários que acessam o serviço (SOUZA, 2009). Um SaaS é disponibilizado por prestadores de serviços na camada de aplicação. Ele roda inteiramente na nuvem e pode ser considerado uma alternativa a rodar um programa em uma máquina local. Softwares de aplicação, como processadores de texto e sistemas de banco de dados, são exemplos de SaaS (CHIRIGATI, 2009). A InformationWeek fez uma pesquisa, na qual três quartos das empresas que usam o SaaS consideram os serviços do aplicativo muito importantes ou até essenciais, sendo que a pesquisa foi realizada com duzentos e oitenta e um profissionais de tecnologia de negócio, incluindo cento e trita e um que usam o SaaS. Cerca de um terço descreveu seu aplicativo de SaaS como crítico ao negócio. Apesar da importância, muitos líderes ainda tratam SaaS como ad hoc. Dentre os usuários, 59% dizem que é um ponto de solução tática e apenas 32% o consideram parte das estratégias a longo prazo (BIDDICK, 2010). A razão primeiramente citada, para 37% dos usuários do modelo é a rapidez na implementação. Conforme as empresas saem da recessão, com alta demanda de novas habilidades e, geralmente, com equipes de TI reduzidas, esse fator torna-se mais importante. A velocidade é seguida pela economia nos gastos, citada por 25% dos adeptos. SaaS não é universal, mas entre os 47% dos entrevistados que o usam, SaaS vai além de automação na força das vendas. Aplicativos de RH, presença web, e-mail, serviço de suporte, colaboração, financeiro e backup são usados por um quarto ou mais dos consumidores de software como serviço (BIDDICK, 2010). Outro benefício, que torna-se poderoso com o tempo, é a demanda dos funcionários por mobilidade. SaaS força a TI a criar aplicativos acessíveis mais seguros fora do ambiente corporativo, seja para uso em home Office, na estrada, via smartphone ou em computador pessoal (BIDDICK, 2010). 55 Ao mesmo tempo, contratar uma solução SaaS exige o menor envolvimento sobre desenvolvimento, gerenciamento ou administração da solução. Porém, o usuário irá depender do software e funcionalidades oferecidas pela solução SaaS, o que deve oferecer um impacto em caso de mudança do provedor contratado. Por exemplo, contratar uma solução SaaS CRM da SalesForce.com é diferente de contratar uma solução SaaS CRM da Microsoft, via o Dynamic CRM OnLine. Tem que ter cuidado e reconhecer o tipo de serviço de nuvem que está sendo contratando. Reconhecer quais funcionalidades são únicas de cada provedor é importante e deve esclarecer seu grau de dependência com a solução contratada (CAMBIUCCI, 2010). 56 5. Análise de Casos: Provedores de Serviços de Computação em Nuvem Vamos detalhar um pouco mais as estratégias e ofertas de alguns dos principais provedores de computação em nuvem. Na verdade, com o imenso potencial do mercado de tecnologias e serviços em nuvem, a maioria das empresas de TI está se mobilizando para criar ofertas para computação em nuvem. Então os provedores selecionados vão estar listados em ordem alfabética, para evitar qualquer valor subjetivo de sua importância no mercado. 5.1 Amazon Web Services Um exemplo já bem conhecido de nuvem são serviços da Amazon. A Amazon criou uma subsidiária chamada Amazon Web Service (http://aws.amazon.com/) para ofertar serviços em computação em nuvem. Basicamente são quatro ofertas, o EC2 (Elastic Computing Cloud), para alugar máquinas virtuais Linux, nos quais o usuário pode alugar dezenas ou até milhares de CPUs, o S3, serviço de armazenamento (storage) em nuvem, o SimpleDB, oferta de Database-as-a-Service e o SQS (Simple Queue Service) para serviços de mensagens. A idéia é que os usários possam operar seu negócio sem ter a necessidadede investir em infraestrutura, como servidores storage. E a plataforma computacional oferecida é a própria plataforma que roda os aplicativos da Amazon, uma infraestrutura de tecnologia que incluiu milhares de servidores e que levou anos para ser construída e ajustada (TAURION, 2009). Amazon Web Services (AWS) fornece infra-estrutura como serviço (IaaS) como ofertas na nuvem, para as organizações que exigem poder de processamento, armazenamento e outros serviços. Sendo que, a Amazon foi uma das pioneiras em oferecer serviços na nuvem para o público, lançou seus primeiros serviços, os S3 e EC2, em 2006. AWS oferece uma série de serviços, incluindo as seguintes (MATHER, 2009): 5.1.1 Elastic Compute Cloud (EC2) Para começar a trabalhar com a EC2, é necessário o usuário, de posse de uma conta na Amazon, criar uma Amazon Machine Instance (AMI). Uma AMI é uma imagem de máquina 57 (como uma ISO), contendo aplicações e bibliotecas de programas e componentes. Há muitas AMIs comuns disponíveis a partir da Amazon e da comunidade EC2. Elas podem usar tanto Windows quanto Linux, e os mais diversos conjuntos de software livre, como o Apache, MySQL e quaisquer linguagens que escolha usar. Caso não encontre uma AMI que atenda suas necessidades, a Amazon fornece ferramentas para criar sua própria AMI, que pode ser privada ou compartilhada com a comunidade. O fato é que uma pequena empresa pode começar a operar aplicações em poucos minutos, configurando seu ambiente virtual de forma bem rápida e simplificada. Contrasta vivamente com o modelo tradicional, no qual é necessário adquirir um servidor, instalá-lo em algum local adequado, configurá-lo e mantê-lo continuamente atualizado com as últimas versões de software básico (TAURION, 2009). O EC2, fornece um IaaS em que há cobrança pelo uso. O preço inicial, com base em aspectos como o sistema operacional usado, RAM e espaço em disco partilhado em cada AMI , é de US$ 0,10 por hora. Ele provê um ambiente virtual que permite o desenvolvimento e a execução de aplicações baseadas em Linux. Para isso, os prestadores de serviços devem criar sua própria máquina virtual, conhecida como AMI que contém todas as aplicações, os dados e as bibliotecas necessárias. Alternativamente, os prestadores de serviços também podem usar AMIs que já estão prontas e disponíveis (CHIRIGATI, 2009). A vantagem da flexibilidade da EC2 é que pode-se escolher entre diversas distros do Linux e também pode-se utilizar diferentes versões do Windows como operacional para AMIs. Qualquer linguagem de programação pode rodar: Java , PHP, Python, Ruby, etc. (TAURION, 2009). O serviço EC2 permite rodar aplicações no ambiente de nuvem da Amazon. Os servidores virtuais do EC2 são máquinas virtuais Linux que rodam em cima da plataforma de virtualização Xen. Recentemente, a Amazon também permitiu que as máquinas virtuais sejam imagens do OpenSolaris, mas a maioria continua sendo Linux. Essas máquinas virtuais podem ser servidores de 32 ou 64 bits, baseados em equivalentes a processadores de 1.7 GHz, Opteron ou Xenon. As instâncias das máquinas virtuias podem variar da mais simples, uma máquina de 32 bits, com 1,7 GB de memória, uma unidade de computação EC2, (160 GB de armazenamento 58 e um moderado desempenho de I/O) até uma máquina “extra-large” de 64 bits, memória de 7 GB, 20 unidades de computação EC2 (8 virtual cores, cada um com 2,5 unidades de computação EC2), 1.690 GB de armazenamento e alto desempenho de I/O (SOUZA, 2009). A Amazon consegue cobrar preços baixos porque estes refletem diretamente os custos do imenso parque computacional que a empresa possui. Porém, é importante lembrar que estes preços incluem a tranferência de dados e não apenas o seu armazenamento. Assim, aplicações intensivas em I/O podem ter seus custos bem mais elevados, pois muitas vezes o usuário olha apenas o custo de armazenamento e minimiza os custos de I/O, sendo que, a Amazon não cobra as transferências de dados entre os serviços de S3 e EC2. A Elastic Compute Cloud (EC2) é a principal oferta da AWS e foi uma das primeiras plataformas de computação em nuvem e ainda é uma das mais populares. Ela é baseada em instâncias que são servidores virtuais dedicados prontos para ser customizado e se ajustar a suas necessidades (GOMES, 2010). De acordo com MILLER (2009), a Amazon permite que seus clientes escolher três tamanhos de servidores virtuais: • Small, que oferece o equivalente a um sistema com 1,7 GB de memória, 160 GB de armazenamento e um processador de núcleo virtual de 32 bits; • Grande, que oferece o equivalente a um sistema com 7,5 GB de memória, 850 GB de armazenamento e dois núcleos virtuais de processamento com 64 bits; • Extra grandes, que oferece o equivalente a um sistema com 15 GB de memória, 1,7 TB de armazenamento e quatro núcleos virtuais de 64 bits. O EC2 fornece um ambiente altamente confiável, visto que a substituição de instâncias pode ser realizada de forma rápida, garantindo o QoS. 59 5.1.2 Simple Storage Solution (S3) O S3 é um sistema de armazenamento pela internet que pode ser usado para armazenar e recuperar ilimitado quantidades de dados, a qualquer hora, de qualquer lugar na internet. Diferentemente do SimpleDB que é um banco de dados, o S3 é um sistema de arquivos distribuído, utilizado para recuperar e armazenar dados. O S3 fornece um repositório seguro, confiável e rápido para armazenar as imagens AMI. E ainda armazena e recupera os resultados intermediários durante a execução das tarefas de processamento. Durante a execução, cada tarefa busca o arquivo no S3 e faz o devido processamento. As soluções EC2 armazenam arquivos como objetos no S3 e todos os metadados relacionados ao objeto no SimpleDB (SOUZA, 2009). Geralmente, quando se fala em storage, pensa-se em armazenamento diretamente ligado aos servidores, para evitar demoras (latências) causadas pelas distâncias e meios de comunicação. O S3 muda este conceito ao ofertar um serviço de armazenamento remoto, em nuvem. O usuário armazena seus arquivos nos discos da Amazon e os seus servidores acessam estes dispositivos para obter os dados. Em quais discos e onde eles estão fisicamente localizados é transparente à aplicação do usuário (TAURION, 2009). O S3 é uma oferta de “storage on demand” porque o usuário paga apenas pela quantidade de dados armazenada, sem a necessidade de reservar espaço adicional, prevendo, por exemplo, aumento futuro. Se a demanda por espaço aumentar, o sistema automaticamente aumenta o espaço disponível. Se diminuir, o sistema diminui o espaço alocado. O preço sempre é baseado no uso real do espaço em disco e inclui basicamente três variáveis: bytes tranferidos para a nuvem, bytes transferidos da nuvem e gigabytes armazenados. Em novembro de 2008 os preços praticados para os EUA e Europa eram de 12 a 15 centavos de dólar para GB armazenado e 10 centavos por GB lido (TAURION, 2009). Os dados transferidos dentro de uma Amazon S3 local através de uma solicitação de cópia é gratuita. Dados transferido através de uma solicitação de cópia entre os locais é cobrada em preços regulares. Os dados transferidos entre a Amazon EC2 e Amazon S3 dentro da mesma região é gratuito (ou seja, 0,00 dólares por GB). Os dados transferidos entre a Amazon EC2 e Amazon S3 entre regiões (ou seja, entre os EUA e a UE), será cobrada na 60 internet taxas de transferência de dados em ambos os lados da transferência. Armazenamento e tamanho de banda inclui todas as despesas gerais do arquivo. (Source: http://aws.amazon.com/s3/#pricing.) (CHEE, 2010). 5.1.3 Simple Queue Service (SQS) Amazon Simple Queue Service (SQS) oferece um serviço de fila de distribuição de mensagens que suporta o envio de mensagens programadas através de aplicações de Web Services como uma forma de comunicação através da internet. Os desenvolvedores podem mover dados entre distribuídos componentes de seus aplicativos que executam tarefas diferentes, sem perda de mensagens ou exigindo que cada componente deve estar sempre disponível. SQS permite um fluxo de trabalho automatizado a ser criado e trabalha em estreita colaboração com Amazon EC2 e outros Amazon Web Services. SQS expõe infra-estrutura web de mensagens como um serviço na internet. Como tal, qualquer computador na internet pode adicionar ou ler mensagens sem nenhum software especial instalado, firewall ou configurações especiais. Os componentes da SQS podem ser executados de forma independente, e não precisam estar na mesma rede (VELTE, 2010). O Amazon SQS fornece confiabilidade e escalabilidade ao enfileirar e armazenar mensagens que estão sendo trocadas entre os recursos computacionais. Os desenvolvedores podem, de maneira simples, mover dados entre os recursos distribuídos das aplicações entre diferentes domínios com garantia de entrega (SOUZA, 2009). SQS fornece uma maneira para serviços baseados na web para trocar informações de uma maneira segura. É constituída por três componentes principais: 1. Autenticação dos serviço é conseguido através do uso de editamentos às credenciais AWS padrão. Através de um processo de registro, o desenvolvedor cria um conjunto apropriado de credenciais para que os processos possam atingir um modo seguro; 2. A entrega de mensagens é válida até 8 KB. O que se destaca é que a seqüência não é garantida, e se for necessário, então, os números devem possuir algum tipo de seqüência que deve ser incorporado na mensagem; 61 3. Mensagem deletadas do sistema devem ser tratadas através da aplicação do programador, mas existem temporizadores para a exclusão automática. 5.1.4 SimpleDB Outro serviço interessante é o SimpleDB (SDB), um framework que permite aos usuários armazenar e recuperar informações baseadas na oferta de Web Services da própria Amazon. Com o SDB o usuário pode, em tese, construir todo ou grande parte do seu portfólio de aplicações no ambiente da Amazon. O SDB não é a solução para todo e qualquer problema de negócio, devido ás suas restrições de desempenho e escalabilidade, mas serve muito bem para aplicações simples (TAURION, 2009). SDB é um serviço web que fornece as funções de banco central de dados e indexação de consulta. Este serviço funciona de forma integrada com o S3 e o EC2, coletivamente, a capacidade de armazenar e processar, define consulta de dados na nuvem, tornando a computação na escala da web mais fácil e mais rentável para os desenvolvedores. Um exemplo simples desta integração pode ser uma aplicação de compartilhamento de fotos e vídeos pela web, no qual a aplicação é executada no EC2, as fotos e vídeos em si ficam armazenados no S3 e os comentários e opiniões dos usuários do site ficam no SDB (MATHER, 2009). O serviço tem limitações de recursos (por exemplo, não suporta a linguagem SQL) e seus custos são também baseados no modelo usou – pagou (TAURION, 2009). O SDB é um serviço web que fornece as funcionalidades de um banco de dados como armazemanento, indexação e consultas em ambientes de nuvem. A arquitetura do SDB é utilizada para o armazenamento e recuperação dos estados do sistema. A vantagem dessa abordagem é que em caso de falhas, um novo nó pode ser iniciado quase que imediatamente baseada nas mensagens contidas na fila do Amazon SQS e seu estado pelo SDB (SOUZA, 2009). 62 5.2 Eucalyptus A Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems (Eucalyptus) é um exemplo de software livre que implementa um IaaS. Foi iniciado como um projeto de pesquisa do Departamento de Ciência da Computação de University of California Santa Bárbara e comercializado recentemente como Eucalyptus Systems Inc. Eucalyptus ainda é mantido e desenvolvido como um projeto de software livre. Eucalyptus Systems está criando produtos adicionais com base no Eucalyptus de software livre e oferece também serviços de suporte (SOUZA, 2009). O projeto Eucalyptus (Liu et al. 2007) é uma infra-estrutura de código aberto que fornece uma interface compatível com o Amazon EC2, S3, EBS (Elastic Block Store) e permite aos usuários criarem uma infra-estrutura e experimentar a computação em nuvem. A arquitetura do Eucalyptus é simples, flexível e modular e contém uma concepção hierárquica que reflete os recursos comuns do ambiente (SOUZA, 2009). O Eucalyptus tem como objetivo auxiliar a pesquisa e o desenvolvimento de tecnologias para computação em nuvem e o possui as seguintes características: interface compatível com o EC2, instalação e implantação simples usando ferramentas de gerenciamento de clusters, apresenta um conjunto de políticas de alocação extensível de nuvem, sobreposição de funcionalidade que não requer nenhuma modificação em ambiente Linux, ferramentas para administrar e auxiliar a gestão do sistema e dos usuários e capacidade de configurar vários clusters, cada um com endereço privado de rede interna em uma única nuvem (SOUZA, 2009). Esse sistema permite aos usuários iniciar, controlar o acesso e gerenciar todas as máquinas virtuais utilizando uma emulação do protocolo SOAP (Simple Object Access Protocol) do Amazon EC2 e interfaces de consulta. Neste sentido, os usuários interagem com o Eucalyptus utilizando as ferramentas e interfaces exatamente do mesmo modo que eles interagiriam com o Amazon EC2 (SOUZA, 2009). O Eucalyptus implementa o conceito de IaaS (infrastructure-as-a-Service), implementando nuvens privadas. Também, por ser um ambiente compatível com o EC2 da 63 Amazon, permite que as nuvens privadas criadas por ele, interajam com a nuvem publica da Amazon, pois usa a mesma interface de programação. A NASA tem um projeto de computação em nuvem baseado no Eucalyptus, que é o NEBULA. Este projeto pode ser observado em http://nebula.nasa.gov/ (TAURION, 2010). O projeto NEBULA foi iniciado em 2007 pela NASA, que fornece grande capacidade de processamento e armazenamento, além de conectividade, para a própria NASA e outros órgãos governamentais americanos (ORTEGA, 2010). Assim como outras empresas (Google, Microsoft e Sun, entre outras) que fornecem computação na nuvem, a NASA montou sua estrutura dentro de containers (ORTEGA, 2010). Utilizar containers tem sido uma tendência e segundo especialistas permite agilidade na expansão do datacenter e também controle eficiente no uso de energia, já que é mais fácil controlar a temperatura (ORTEGA, 2010). Recentemente o Eucalytpus foi incorporado à iniciativa de Cloud Computing Open Source do Ubuntu, que é uma bem conhecida distribuição Linux. A base desta iniciativa, o Ubuntu Enterprise Cloud (UEC), é o Eucalyptus (http://www.ubuntu.com/cloud). O Eucalyptus pode também ser instalado em outros ambientes Linux, como os das distribuições RedHat e Debian (TAURION, 2010). 5.3 Google O modelo de Computação em Nuvem ganhou espaço na mídia pelos exemplos pioneiros de empresas como o Google. Uma nuvem computacional que todos nós usamos, embora muitas vezes passe despercebida, é o conhecido mecanismo de busca Google. Uma simples query no Google demanda o acesso a milhares de megabytes e consome dezenas de bilhões de ciclos de processador. Na verdade, o Google mantém em seus datacenters uma cópia de grande fração da internet, cópia esta continuamente atualizada através de softwares “spiders” que percorrem a rede, link por link, procurando o conteúdo das suas bilhões de páginas. Construir uma infra-estrutura computacional que permita milhares de queries por segundo, e completar o processo em poucos segundos, nos moldes tradicionais, requereria 64 inúmeros supercomputadores de centenas de milhões de dólares cada. Então o Google resolveu o problema, a um custo bem menor, agrupando centenas de milhares de servidores Intel/Linux em seus datacenters espalhados pelo mundo (TAURION, 2009). A aplicação Google é por natureza altamente paralelizável, permitindo plena exploração do conceito de nuvem. Diferentes consultas rodam em diferentes processadores e o índice é particionado de modo que uma única query possa também usar múltiplos processadores em paralelo (TAURION, 2009). O resultado é que o Google consegue operar pesquisas rápidas, com uma infraestrutura de TI baseada em milhões de servidores comoditizados, reduzindo sensivelmente os custos quando comparado ao que seria necessário para adquirir um supercomputador que oferecesse a mesma capacidade computacional. Embora à primeira vista poucas aplicações sejam similares ao Google em termos de paralelismo, existem inúmeras outras aplicações que permitem explorar o paralelismo com bastante eficiência. O próprio Google começou a expandir o uso das suas nuvens para acomodar outros serviços como o YouTube, o Google Maps, o Google Apps entre outros, mas recentemente criou o Google AppEngine (http://code.google.com/intl/pt-BR/appengine), plataforma para desenvolvimento de aplicações que rodarão na nuvem do Google (TAURION, 2009). 5.3.1 Google Apps Um exemplo muito conhecido da arquitetura SaaS é o Google Apps. Google Apps é a forma de computação em nuvem do Google voltada para empresas. São serviços baseados na Web, que não usam hardwares ou softwares, e exigem o mínimo de manutenção, o que gera uma grande economia de tempo e custos. A empresa pode usar domínio próprio em diversos aplicativos disponibilizados pelo Google. Uma solução acessível, que permite o compartilhamento de informações importantes entre os usuários. O Google Apps é um conjunto de aplicações da Google que são fornecidas aos usuários na forma de SaaS, como está exibida na Figura 9. Entre essas aplicações, podemos 65 encontrar um serviço de correio eletrônico (Gmail), um programa de mensagens instantâneas (Google Talk), um editor de textos, planilhas e apresentações (Google Docs), um gerenciamento de agendas on-line e compartilhadas (Google Calender) e compartilhamento de vídeos privados (Google Vídeos) (CHIRIGATI, 2009). Figura 9. Aplicativos de Trabalho no Google Apps (LUIZ, 2010) A edição padrão é gratuita e oferece a mesma capacidade de armazenamento que as contas normais de Google. A edição premier, que oferece 25 GB de armazenamento, tem um valor de 50 dólares anuais por conta de usuário. A edição Educação oferece um conjunto gratuito e sem anúncios de ferramentas personalizáveis permitem que professores, funcionários e estudantes trabalhem em grupo e aprendam de forma mais eficiente. Podemos citar como exemplo aqui no Brasil, o Google Apps passou a ser o pacote de aplicativos de escritório de mais de 3.500 funcionários das lojas Renner. A Renner, rede de 120 lojas espalhadas pelo Brasil, decidiu adotar o Google Apps em busca de flexibilidade. 5.3.2 Google App Engine Desta forma, o Google App Engine tornou-se uma das ferramentas mais conhecida na arquitetura PaaS. Ele fornece um conjunto de APIs e um modelo de aplicação que permite aos desenvolvedores utilizarem serviços adicionais fornecidos pelo Google, como o e-mail, armazenamento, entre outros. Os serviços disponibilizados proporcionam um ambiente seguro e eficaz para aplicações que apresentam grandes demandas, fornecendo soluções para 66 empresas e desenvolvedores que necessitam superar os desafios de escalabilidade em seus projetos (SOUZA, 2009). O armazenamento de dados no Google App Engine não é um banco de dados relacional. O serviço de armazenamento de dados do Google App Engine é baseado no BigTable, um sistema distribuído de armazenamento de dados em larga escala. O BigTable funciona como um banco de dados orientado a colunas e utiliza o GFS (Google File System) para gerenciar informações. Uma restrição nesta base de dados é que para acessar estes dados, o AppEngine oferece uma linguagem específica, chamada GQL, que, apesar de ser baseada no SQL, não suporta o modelo relacional e portanto não permite comandos como join. O acesso é limitado a apenas uma tabela. (TAURION, 2009). Por enquanto Bigtable é uma ferramenta robusta, os desenvolvedores têm sido cautelosos quanto ao seu uso. Porque é um sistema proprietário, eles ficam presos em Google. Esse é também o caso da Amazon Web Services e outros provedores de computação em nuvem. As aplicações desenvolvidas para o App Engine serão executadas no Google, que realiza, caso necessário, o dimensionamento automaticamente. Atualmente, o suporte de linguagens de programação no App Engine são Python e Java. O Google App Engine pode ser iniciado gratuitamente. Todos os aplicativos podem usar até 500 MB de armazenamento e CPU e largura de banda suficiente para suportar um aplicativo eficiente que oferece cerca de cinco milhões de visualizações de página por mês, totalmente grátis. Ao ativar o faturamento para o aplicativo, os limites gratuitos aumentam e o usuário paga somente pelos recursos que ultrapassam os níveis gratuitos (SOUZA, 2009). Então, o AppEngine é oferecido, gratuitamente, para cada desenvolvedor 500 MB de memória, 200 megaciclos de CPU e 10 GB de transferência de dados, após isso são cobradas as seguintes taxas: • $ 0.10-$ 0.12 núcleo do processador por horas • $ 0.15-$ 0.18 GB de armazenamento por mês • $ 0.11-$ 0.13 por GB de banda de saída • $ 0.09-$ 0.11 por GB de largura de banda de entrada 67 5.4 IBM A IBM entrou no setor de computação em nuvem em novembro de 2007 com uma oferta chamada Blue Cloud. Esta oferta é um conjunto de tecnologias, algumas proprietárias como o Tivoli Provisioning Maneger e outras open source como o Xen e o Hadoop (versão open source do ambiente de computação paralela do Google, o MapReduce), que permitem uma a organização contruir sua própria infra-estrutura de nuvem. Com esta infra-estrutura, a empresa pode utilizar o conceito de computação em nuvem para uso interno ou para prover serviços para clientes externos (TAURION, 2009). Detalhando um pouco mais a arquitetura do Blue Cloud, observamos algumas tecnologias que são fundamentais a um ambiente de nuvem. Uma delas é a funcionalidade de provisionamento automático. Uma função básica de qualquer nuvem é a capacidade de automaticamente provisionar servidores para atender à demanda. No Blue Cloud, atráves de um portal web, o usuário especifica que plataforma de hardware vai necessitar, selecioando tipo de processador, capacidade de memória e armazenamento, sistema operacional e assim por diante. Outra função é a monitoração dinâmica dos recursos computacionais. A nuvem precisa ser monitorada continuamente e em tempo real, para ajuste e balanceamento da carga. A Bue Cloud adota o Hadoop, uma plataforma de computação paralela de alto desempenho. (TAURION, 2009). O Hadoop é um software open source gerenciado pela comunidade Apache, projetada para distribuir e processar tarefas em computação distribuída e paralela. Os programas que operam no Hadoop são escritos em um estilo de programação próprio, chamado de estilo Map/Reduce (desenvolvido pelo Google) no qual a tarefa é dividida em centenas ou milhares de pequenos pedaços que são processados independentemente, em centenas ou milhares de computadores reais ou virtuais, de acordo com um mapa execução. Os resultados gerados por estes processos independentes são agrupados e sintetizados (reduzidos) para produzir o resultado final em uma fração de tempo (TAURION, 2009). 68 O Blue Cloud usa os servidores IBM BladeCenter, um sistema operacional Linux, virtualização baseada em Xen e o software de gerenciamento Tivoli da IBM. Em síntese, o Blue Cloud é uma série de ofertas de computação em nuvem baseadas em padrões abertos e software livre que ajudam as corporações a fornecerem recursos Web 2.0, como mashups, colaboração aberta, redes de relacionamentos e comércio remoto (SLACK, 2009). Há dois benefícios chave do IBM Blue Cloud, de acordo com Cezar Taurion. Primeiro, o uso de Tivoli na nuvem ajuda as corporações a reduzirem custos e economizar energia. Por exemplo, reduz as etapas manuais envolvidas em gerenciamento de dados e aumenta a automação do centro de dados. Fornecendo dinamicamente e alocando recursos para melhor gerenciar flutuações de carga de trabalho, os recursos de TI são executados em níveis mais consistentes. E Tivoli tem a capacidade de gerenciar o consumo de energia alternando servidores para o modo de espera quando não estão em uso e restaurando-os instantaneamente quando necessário. Segundo, em vez de parar na idéia geral de "rede das redes", o Blue Cloud oferece um desvio: permite que a arquitetura de seus serviços de TI imite configurações básicas de provedores de serviço. Portanto, obtém-se a capacidade de integrar seus serviços internos àqueles de seus parceiros, clientes, fornecedores e provedores (SLACK, 2009). 5.5 Microsoft Uma ferramenta bem conhecida do PaaS é o Microsoft Azure a qual se trata de uma plataforma para a implementação de computação em nuvem que oferece um conjunto específico de serviços para desenvolvedores. Esta plataforma pode ser usada por aplicações em execução em nuvem ou fora desta. A plataforma Azure é formada pelo sistema operacional Windows Azure e um conjunto de serviços: Live Services, .NET Services, SQL Services, SharePoint Services e Dynamics CRM Services (SOUZA, 2009). A Microsoft iniciou suas ofertas para o modelo de computação em nuvem com o Live e com o “Online Services”, voltados principalmente para usuários finais e pequenas empresas. Posteriormente, no final de 2008, lançou o Windows Azure e um conjunto de serviços de 69 PaaS, chamada Azure Services Platform. A proposta da Azure é oferecer uma plataforma e serviços hospedados nos seus datacenters. O Azure não é uma adaptação da tecnologia .NET, mas uma plataforma nova (TAURION, 2009). O Azure Services Plataform é uma estratégia e um conjunto de produtos que se propõe a implementar a visão de nuvem da Microsoft, baseada no conceito de “software-plusservices”(TAURION, 2009): • Ser uma nova geração do ambiente Windows para ambiente de computação em nuvem. A função básica do Azure é automaticamente ligar a aplicação do usuário a máquinas virtuais operando nos datacenters da Microsoft. Na verdade o Windows Azure é essencialmente uma versão modificada do Windows 2008 e do mecanismo de virtualização chamado Hyper-V, suplementada com software projetado para hospedar e gerenciar aplicações e serviços em nuvem; • Fornecer serviços orientados aos desenvolvedores, como SQL Services, .Net Services, Live Services, cada um contendo um pequeno número de funções, a ser expandido ao longo do tempo. Além destes serviços estão incluídos o Share Point Services e Dynamic CRM Services. O Share Point Services oferece APIs para funcionalidades do Share Point como sites de colaboração e workflows. O Dynamic CRM Services oferece APIs para interface com as funções do aplicativo Dynamics CRM. • Ser um novo modelo de programação. Para a aplicação extrair todos os benefícios do Azure, deve ser desenvolvida com este conceito desde o início. 70 Figura 10. Serviços oferecidos no Windows Azure (ZUNINO, 2008) Como podemos observar na Figura 10, a plataforma de serviço no Azure é formada por camadas, dentre elas a camada de nível mais baixo é o windows azure que é um sistema operacional distribuído, no nível mais acima existe um conjunto de serviços como Live services, .NET Services, SQL Services e assim por diante, que são serviços disponibilizados para que o usuário use ou dentro do windows azure ou em uma aplicação externa. E por fim disponibiliza um conjunto de serviços para o usuário final como Windows live, Office Live, Exchange Online, onde o usuário já utiliza suas capacidades de uso para tarefas do dia-a-dia (COELHO, 2008). Então, na nuvem temos que abstrair centenas ou ate milhares de servidores que são disponibilizados para que o usuário execute a sua aplicação. Dentro do Windows Azure existem maneiras de abstração, onde o usuário vai ter o seu serviço sendo gerenciado, vai ver sua computação sendo virtualizada e vai possuir um conjunto de mecanismos como blobs, Tables, Queues, Locks etc.. estão la disponibilizados como primitivas, para que o usuário desenvolva seu programa sem ter que saber aonde esta rodando em que hardware que esta rodando. Portanto o Windows Azure é um sistema operacional para a nuvem que roda em um conjunto grande de computadores de forma organizada e que abstrai do usuario todo esse hardware e toda esta infraestrutura (COELHO, 2008). Uma máquina virtual (VM) executa uma função de imagem do disco rígido virtual um VHD. Este VHD é criado usando uma máquina no local do Windows Server, em seguida, enviados para o Windows Azure. Uma vez que é armazenada na nuvem, o VHD pode ser 71 carregado sob demanda em uma função na VM e executado. Os clientes podem configurar, manter o sistema operacional e usar o Windows Services, etc tarefas agendadas no papel VM. Os desenvolvedores têm a capacidade de escolher o tamanho das VMs para executar a sua aplicação com base nos requisitos da aplicação de recursos. O Windows Azure calcula casos e possui cinco tamanhos originais para permitir aplicações complexas e cargas de trabalho. Introduziram o Extra Windows Small para tornar o Windows Azure mais acessível para os desenvolvedores interessados em executar aplicativos menores na plataforma, como podemos observar na Figura 11. Figura 11. Tamanhos das instâncias no Windows Azure (CAMBIUCCI, 2010) O Live Services é um conjunto de componentes dentro do Azure para o tratamento de dados do usuário e recursos da aplicação. Live Services possibilita aos desenvolvedores construírem aplicações ricas que podem conectar com usuários do Windows Live. O Live Services inclui as tecnologias do Live Mesh para sincronização de dados dos usuários e possibilita a extensão de aplicações Web entre múltiplos dispositivos (SOUZA, 2009). A Microsoft .NET Services é um conjunto da Microsoft que hospeda serviços de desenvolvimento orientado para fornecer os componentes exigidos por muitas aplicações baseadas na nuvem. .NET Services é semelhante ao .NET Framework, oferecendo bibliotecas de classes de alto nível que tornam o desenvolvimento muito mais robusto. .NET Services pode ajudar os desenvolvedores a se concentrar mais em seu produto final do que na construção e implantação de infra-estrutura própria nuvem. .NET Services também está disponível para outras tecnologias de desenvolvimento através do uso de protocolos padrão da indústria, como REST, SOAP e HTTP (VELTE, 2010). 72 O SQL Services é um serviço de armazenamento de dados e de processamento de consultas escalável, sendo construído com base na tecnologia do SQL Server. O SQL Services possui suporte a interfaces SOAP e REST (Representational state transfer), permitindo que seus dados sejam acessados de várias formas. Para garantir a escalabilidade, o SQL Services implementa apenas partes do modelo relacional e não possui suporte completo para a linguagem SQL. O componente SharePoint Services permite colaborar e criar aplicações Intranet e o Dynamics CRM Services é um sistema totalmente integrado de CRM (SOUZA, 2009). O SQL Services amplia as capacidades de armazenamento para a nuvem, como serviços baseados na web. Isso permite o armazenamento de dados estruturado, semiestruturadas e dados não estruturados. SQL Services oferece um conjunto de serviços integrados que permitem consultas relacionais, pesquisa, elaboração de relatórios, análises, integração e sincronização de dados. Isso pode ser feito por usuários móveis, escritórios remotos ou parceiros de negócios (VELTE, 2010). 5.6 Salerforce Um dos exemplos mais conhecido de SaaS é a Salesforce.com esta foi fundada em 1999 pelo ex-executivo da Oracle Marc Benioff, que foi o primeiro a promover o conceito de fornecimento de aplicativos empresariais através de um simples site da web. A Salesforce é uma empresa norte americana de tecnologia que desenvolve soluções no conceito de computação em nuvem (TAURION, 2009). A proposta do Salesforce era diferente. Em vez de venda de licenças e contratos de manutenção e a necessidade de adquirir servidores para hospedar os caros aplicativos contratados, o cliente precisava apenas assinar um contrato de uso aplicativo de CRM (gestão de relacionamento com o cliente). Todo o software e a plataforma por trás residiriam no Salesforce.com. O cliente não precisaria mais se preocupar com a infra-estrutura (TAURION, 2009). Hoje, além as oferta tradicional, que o CRM via SaaS, oferece ainda duas soluções: a Force.com, plataforma de desenvolvimento (PaaS), e o AppExchange, mercado on-line com diretório de aplicações desenvolvidas para o ecossistema Salesforce (TAURION, 2009). 73 A plataforma como um serviço é um serviço oferecido aos desenvolvedores de software. Ao se desenvolver aplicativos para a plataforma Force.com eles ficam armazenados na infra-estrutura da Salesforce. Quando um desenvolvedor coloca uma aplicação a venda na AppExchange ele não precisa mais se preocupar em instalar o software, criar instâncias ou coisas desse tipo (GONÇALVES, 2008). A fim de fornecer uma gama de aplicações que complementem seu CRM a Salesforce criou o AppExchange. Basicamente é um mercado de aplicações onde clientes do CRM podem consumir produtos desenvolvidos pelos parceiros da plataforma Force.com. Hoje diversas empresas já comercializam seus produtos dentro da Salesforce através do AppExchange, dando ao usuário a oportunidade de comprar softwares das mais diversas áreas, desde auxílio para gerenciamento e manutenção de contratos até ferramentas de marketing para envio de e-mails (GONÇALVES, 2008). A idéia da Force.com é prover um ambiente de desenvolvimento para desenvolvedores e empresas que queiram se tornar parceiras da Salesforce. Não existe nenhum custo para iniciar o desenvolvimento de um aplicativo, o cadastro no site é gratuito para obtenção de uma conta com todos os recursos necessários para o desenvolvimento de novos aplicativos (GONÇALVES, 2008). Na direção de reforçar o Force.com estão recentes mudanças, como o fato do cliente do AppExchange não precisar mais ser cliente do CRM da Salesforce. A razão para esta estratégia da Salesforce é simples: constata-se que um grande número de desenvolvedores e pequenas empresas de software não terá competência tecnológica ou capital para proverem sua própria nuvem. Neste contexto, a proposta da Salesforce é disponibilizar sua plataforma para estes desenvolvedores hospedarem suas aplicações (TAURION, 2009). Um outro movimento interessante nesta direção foram as parcerias para integrar o Salesforce com outras nuvens. Uma destas parcerias foi com a Google, para permitir que clientes do Salesforce se integrem às ferramentas de produtividade do Google Apps, como Gmail, e Google Talk. Outra foi com o Facebook, para ligar CRM e a plataforma Force.com às aplicações de computação social. Uma terceira parceria permite que clientes Salesforce 74 interajam com aplicativos e dados hospedados nas nuvens EC2 e S3 da Amazon (TAURION, 2009). 5.7 Comparativo entre os Modelos de Serviços Os modelos de serviços são representados em camadas, cada uma delas possui suas respectivas características e determinados níveis de abstração. Sendo que, para cada camada existem provedores de serviço disponíveis que oferecem seus benefícios diferenciados para que os usuários da computação em nuvem possam escolher o serviço que mais se adapta a sua necessidade. A camada de infra-estrutura inclui o fornecimento de máquinas virtuais nas quais o desenvolvedor possui o controle de seu gerenciamento, permitindo o armazenamento e a execução de uma ampla diversidade de aplicativos, o serviço ainda é a responsável pela adesão de hardware, servidores, roteadores e outros recursos de computação, os quais formam a base dos modelos de serviços da computação em nuvem. Sendo assim, existem empresas que disponibilizam serviços neste modelo, como por exemplo, a IBM Blue Cloud, GoGrid, Amazon EC2. Na camada de plataforma como serviço os desenvolvedores de serviços, adquirem através deste modelo, os recursos necessários (como ambiente de desenvolvimento, linguagens de programação) para construir as suas aplicações, através da internet. A camada de desenvolvimento e serviços de gerenciamento em nuvem tem como exemplo as plataformas de desenvolvimento, como as oferecidas pelo Google App Engine, pelo Force.com. e pelo MS Azure muitas vezes estas camadas usam serviços e softwares da camada anterior. O AppEngine é tecnicamente competidor do EC2 da Amazon, mas oferece uma proposta bem diferente. O EC2 permite mais flexibilidade e controle pela parte do usuário, enquanto o AppEngine oferece mais facilidade de uso e uma grande dose de automoção. Com o AppEngine o usuário escreve o código, carrega sua aplicação e deixa que o Google faça todo o resto. Na Amazon, essas atividades são por conta do usuário. Além disso, o AppEngine, ao contrário do EC2, começa gratuito e, apenas caso demande mais recursos ele é pago. No 75 EC2, também só paga pelo que se usa, mas não existe carência. Outra diferença é que o AppEngine ainda está restrito a duas linguagens de programação. O EC2 não limita a linguagem a ser usada. Assim, se uma determinada aplicação precisar de extensões em C++, por exemplo, o AppEngine não vai atender. E finalmente na camada de software como serviço, no seu mais alto nível de abstração é nela que está sendo oferecida as diversas aplicações como serviços para os usuários, através da internet. Os exemplos de empresas que oferecem este tipo de serviço são as seguintes: Salesforce.com, Google Docs, outras aplicações da web 2.0 como o Facebook e LinkedIn são serviços baseados em nuvem também. Nesta camada o usuário paga somente pelo uso do software, assim o provedor de serviço oferece a plataforma mais o software para o usuário. 76 6. Conclusão De modo que, a evolução da tecnologia nos últimos anos tem contribuído muito para a difusão do termo de computação em nuvem, este modelo é considerado um software disponível na internet, em que o usuário não compra hardware ou software, mas aluga e paga o que utilizar. Podemos observar no decorrer deste trabalho, que a implantação na computação em nuvem pode acontecer de três formas, que são as seguintes: nuvens públicas que são as mais conhecidas, pois o modelo de serviços oferecidos atualmente, em sua maioria, adotam a nuvem pública, na qual múltiplos usuários têm acesso a um software em comum na internet, na qual as empresas provedoras de serviço são as responsáveis pelos recursos necessários para os usuários. As nuvens privadas são adotadas somente por uma organização, onde estas são responsáveis pela adoção de recursos computacionais quando necessário, por isso possui um acesso restrito aos seus respectivos funcionários. E o último modelo a nuvem híbrida, a qual tenta implantar estes dois tipos de modelos ao mesmo tempo. A computação em nuvem, ainda possui três modelos de serviços, os quais são oferecidos pelos seus provedores. Estes provedores são empresas que adotam um tipo de serviço, e os disponibilizam com seus respectivos modos de pagamentos para os usuários. As empresas que se baseiam no modelo de serviço da IaaS, podem incluir em seus sistemas: roteadores, servidores, sistemas de armazenamento, banco de dados e outros recursos computacionais, para oferecer aos seus usuários. As que oferecem modelos de serviços baseados na PaaS, inclui os sistemas operacionais, linguagens de programação e ambientes de desenvolvimento para as aplicações, auxiliando a implementação de softwares, 77 já que contém ferramentas de desenvolvimento e colaboração entre desenvolvedores. No último modelo que é a SaaS, as empresas oferecem o software real como serviço via internet, no qual a empresa adquire uma licença de uso através de um pagamento periódico e instala o software nos seus próprios servidores. Alguns cuidados que se deve ter ao efetuar um contrato com uma empresa provedora de serviço em nuvem, é saber a taxa de transmissão da rede, fazer uma avaliação do desempenho dessa rede, saber se ela não esta sujeita a congestionamentos no tráfego de dados e fazer ainda uma avaliação para saber se é viável migrar os dados de uma empresa para um ambiente virtual. A computação em nuvem, com certeza vai ser um termo cada vez mais aceito pelas empresas em todo o mundo, pois a cada dia que passa, ofertas com mais segurança vão surgindo, fazendo com que as empresas tenham mais confiabilidade em adotar este tipo de serviço. Com o resultado desta pesquisa bibliográfica, tem-se como objetivo principal prover esclarecimentos referentes à computação em nuvem, para que este trabalho sirva de referência para desenvolvimento e aquisições futuras de aplicações em nuvem. Então existem algumas sugestões para a realização de trabalhos futuros, como a resolução de algumas questões de segurança na nuvem. Também, pode ser feito um acompanhamento desta tecnologia, para aprofundar ainda mais os conhecimentos da mesma. Existe ainda a possibilidade de desenvolver algum aplicativo envolvendo a plataforma do Google AppEngine. 78 7. Referências Bibliográficas AHRONOVITZ, M.; AMRHEIN, D.; ANDERSON, P.. Cloud Computing Use Cases: A white paper produced by the Cloud Computing Use Case Discussion Group. Edição 4. Julho, 2010. AMRHEIN, D.; QUINT, S. (2009). Computação em nuvem para a empresa: Parte 1: Capturando a nuvem. Disponível em: <http://www.ibm.com/developerworks/br/websphere/techjournal/0904_amrhein/0904_amrhei n.html>. Acessado em Abril de 2009. BIDDICK, M. (2010). É hora de investir em uma estratégia de SaaS. São Paulo: InformationWeek. Edição 225. Editora it mídia. Março, 2010. P 90. CAMBIUCCI, W. (2010). Computação em Nuvem: algumas perguntas sobre desafios em projetos. Microsoft Brasil. Disponível em: <http://blogs.msdn.com/b/wcamb/archive/2010/05/07/computa-o-em-nuvem-algumasperguntas-sobre-desafios-em-projetos.aspx>. Acessado em Maio de 2010. CAPRAROLI, E. (2009). O Futuro é Nublado. Disponível em: <http://imasters.uol.com.br/artigo/14462/o_futuro_e_nublado>. Acessado em Outubro de 2009. CAROLINY, R. (2010). Parte 4: Vantagens e Desvantagens Cloud Computing. Disponível em: <http://depositodeartigos.blogspot.com/2010/03/parte-4-vantagens-e-desvantagens.html>. Acessado em Março de 2010. CARVALHO, Davi. Cloud da Amazon: US$ 220 milhões/ano. Disponível em: <http://soasimples.com/blog/?tag=cloud>. Acessado em Outubro de 2009. CHEE, B. J. S.; FRANKLIN, C..(2010). Cloud Computing: Technologies and Strategies of the Ubiquitous Data Center. Editora CRC Press. 2010. CHIRIGATI, F. (2009). Computação em Nuvem. Disponível em: <http://www.gta.ufrj.br/ensino/eel879/trabalhos_vf_2009_2/seabra/index.html>. Acessado em Novembro de 2009. COELHO, O. P; CONDÉ, L.; CHRISTEN, M.; CAMBIUCCI, W.. Azure Academy: O Sistema Operacional Azure. Disponível em: <http://blogs.msdn.com/otavio>. Acessado em Novembro de 2010. DELMIRO, E. (2010). Você sabe o que é computação em nuvem?. Disponível em: <http://www.sapienzae.com.br/?p=847>. Acessado em junho de 2010. 79 DUARTE, R. (2009). FinancialWeb: ABC da computação em nuvem. Disponível em: <http://www.robertodiasduarte.com.br/financialweb-abc-da-computacao-em-nuvem/>. Acessado em Novembro de 2009. ESCOBAR, F. (2009). Impacto do Gerenciamento de Projetos nas Organizações. Disponível em: <http://www.managerbrazil.com.br/?FuseAction=Biblioteca>. Acessado em Maio de 2009. FREZENDE, R. (2009). A Relação entre Computação em Nuvem e SaaS. Disponível em: <http://www.scribd.com/doc/22719402/A-relacao-entre-Computacao-em-nuvem-e-SaaS>. Acessado em Novembro de 2009. FUGULIN, M. (2010). Entendendo a Computação em Nuvem. Disponível em: <http://www.tecmedia.com.br/novidades/artigos/entendendo-a-computacao-em-nuvem>. Acessado em Janeiro de 2010. GOMES, D. (2010). Escolhendo sua Plataforma de Cloud Computing Parte 1 – Amazon EC2. Disponível em: <http://escalabilidade.com/2010/02/23/escolhendo-sua-plataforma-decloud-computing-parte-1-amazon-ec2/>. Acessado em Fevereiro de 2010. GONÇALVES, D.; JUNIOR, J. (2008). Integração de Aplicações ao SalesForce. White Papers. Digital Assets. GUN, M. (2008). Software como Serviço: benefícios e precauções. Disponível em: <http://webinsider.uol.com.br/2008/05/20/software-como-servico-beneficios-e-precaucoes/>. Acessado em Maio de 2009. JOBSTRAIBIZER, F. Cloud Computing. São Paulo: Linux Magazine. Editora Linux New Midia. Edição 69. Agosto, 2010. P 31. LIMA, J. (2009). Porquê Inovar nas Empresas?. Disponível em: <http://aportar.blogspot.com/2009/04/porque-inovar-nas-empresas.html>. Acessado em Abril de 2010. LUIZ, A. Google Apps na INFOGLOBO. Disponível em: <http://estagioboachance.blogspot.com/2010/11/google-apps-na-infoglobo.html>. Acessado em Dezembro de 2010. MATHER, T.; KUMARASWAMY, S.; LATIF, S.. Cloud Security and Privacy. Editora O’Reilly Media; Setembro, 2009. 80 MILLER, M.. Cloud Computing: Web-Based Applications That Change the Way You Work and Collaborate Online. Editora Copyright; 2009. MOREIRA, D. (2009). Cloud Computing: Entenda este novo modelo de computação. IDG Now. OLIVEIRA, R.; MAÇADA, A. C.; VANTI, A.. (2009). Infra-estrutura de Tecnologia de Informação – Análise da Visão e Conjunto de Serviços - Estudo Piloto. Universidade Federal do Rio Grande do Sul (UFRGS) – Porto Alegre, RS. ORTEGA, A. (2010). NASA e Cisco: Nuvem dentro de containers. Disponível em: <http://www.brainwork.com.br/blog/tag/nebula/>. Acessado em Junho de 2010. PRADO, B. (2010). O que é Cloud Computing?. Disponível em: <http://bloglog.globo.com/blog/blog.do?act=loadSite&id=221&postId=23389&permalink=tru e>. Acessado em Junho de 2010. PIGATTO, D. F.(2009) Estudo e Implementação de Uma Solução de Softwares Aplicativos Utilizando Computação nas Nuvens. Universidade Regional Integrada do Alto Uruguai e das Missões. Erechim, RS. PINA, A. C. (2010). Cloud Computing. São Paulo: Linux Magazine. Editora Linux New Midia. Edição 69. Agosto, 2010. P 30. PUPIM, M. (2010). Cloud Computing: cinco erros conceituais. Disponível em: <http://www.estudameufilho.com.br/?p=410>. Acessado em Maio de 2010. RUSCHEL, H; ZANOTTO, M; MOTA, W. (2008). Computação em Nuvem. Especialização em Redes e Segurança de Sistemas – 2008/2. Pontifícia Universidade Católica do Paraná (PUC). Curitiba, PR. SISNEMA. (2009). Cloud Computing – Novo Modelo de Computação. Disponível em: <http://sisnema.com.br/Materias/idmat019433.htm>. Acessado em Fevereiro de 2010. SLACK, S. E.(2009). Há Valor na Computação em Nuvem? A computação em nuvem e seu impacto no futuro da arquitetura. Disponível em: < http://www.ibm.com/developerworks/br/library/ar-valuecloudcomputing/#blue_cloud >. Acessado em Maio de 2010. SOUZA, F; MOREIRA, L; MACHADO, J. (2009). Computação em Nuvem: Conceitos, Tecnologias, Aplicações e Desafios. Capítulo 7. Universidade Federal do Piauí (UFPI). 81 SPOSITO, R. Nuvem Pública ou Privada?. Disponível em: <http://epocanegocios.globo.com/Revista/Common/0,,EMI96465-17453,00NUVEM+PUBLICA+OU+PRIVADA.html>. Acessado em Abril de 2010. SUN, Microsystems. (2009). Take your business to a higher level. Disponível em: <http://www.scribd.com/doc/13892125/Everything-You-Need-to-Know-About-CloudComputing>. Acessado em Agosto de 2010 TAURION, Cezar. Cloud Computing Computação em Nuvem: Transformando o mundo da Tecnologia da Informação. Editora Brasport, 2009. VELTE, A. T; VELTE, T. J; ELSENPETER, R. Cloud Computing: A Practical Approach. Editor Copyright. 2010. VERAS, C. (2009). Por que mesmo a Empresa deve Inovar?. Disponível em: <http://clariceveras.wordpress.com/2009/04/02/por-que-mesmo-a-empresa-deve-inovar/>. Acessado em Abril de 2010. VERDI, F. L; ROTHENBERG, C. E; PESQUINI, R; MAGALHÃES, M. F.. (2010). Novas Arquiteturas de Data Center para Cloud Computing. Universidade Federal de São Carlos – UFSCar. Faculdade de Engenharia Elétrica e Computação (FEEC) - Unicamp VIEIRA, A. L.; PEREIRA, F.; TOLEDO, M. B.; CARNEIRO, P.; ARANHA, R.. (2009). Computação em Nuvem. Universidade Federal Fluminense (UFF). ZUNINO, M..(2008). Microsoft Anuncia Windows Azure. Disponível em: <http://www.guiadopc.com.br/noticias/4933/microsoft-anuncia-windows-azure.html>. Acessado em Novembro de 2010. 82