UNIVERSIDADE DO SUL DE SANTA CATARINA DERIK JONATAN LIMA PROPOSTA DE ARQUITETURAS PARA DESENVOLVIMENTO DE APLICAÇÕES CORPORATIVAS VOLTADAS AO AMBIENTE DE NUVEM Monografia apresentada ao Curso de Especialização em Engenharia de Projetos de Software da Universidade do Sul de Santa Catarina, como requisito parcial à obtenção do título de Especialista em Engenharia de Projetos de Software. Orientador: Prof. Osmar De Oliveira Braz Junior, M.Eng. Florianópolis 2013 DERIK JONATAN LIMA DIRETRIZES, PADRÕES E BOAS PRÁTICAS NO DESENVOLVIMENTO DE APLICAÇÕES CORPORATIVAS VOLTADAS AO AMBIENTE DE NUVEM Esta monografia foi julgada adequada à obtenção do título de Especialista em Engenharia de Projetos de Software e aprovada em sua forma final pelo Curso de Especialização em Engenharia de Projetos de Software da Universidade do Sul de Santa Catarina. Florianópolis, 16 de Abril de 2014. ______________________________________________________ Prof. Osmar De Oliveira Braz Junior, M.Eng. Universidade do Sul de Santa Catarina ______________________________________________________ Prof. Jean Carlo Rossa Hauck, DR. Universidade do Sul de Santa Catarina Dedico esta monografia aos meus pais, Evandro e Fabiana e a minha irmã, Petlyn. AGRADECIMENTOS Aos meus pais pelo apoio e grande incentivo, não só neste trabalho, como na vida. Ao professor Osmar, pela sua orientação. Ao criador da cerveja, por ter criado o líquido que impulsionou muitas ideias para o presente trabalho. “If ignorance is bliss, then knock the smile off my face.” (Rage Against The Machine). RESUMO A computação em nuvem veio para auxiliar as empresas de desenvolvimento de software a manterem seu foco, preocupando-se menos com infraestrutura e mais com o desenvolvimento do software em si. A infraestrutura como serviço na nuvem (Infrastructure as a Service, IaaS) permitiu a criação e evolução de diversas empresas que precisaram de pouco ou nenhum investimento inicial em hardware e infraestrutura de rede. O presente trabalho visa estudar os serviços que uma dessas empresas de infraestrutura na nuvem oferece, A Amazon Web Services (AWS), que é a maior no segmento, assim como as boas práticas de arquitetura específicas para a infraestrutura na nuvem. Como objetivo, este trabalho fará um comparativo entre uma arquitetura de uma aplicação legada real, que roda da maneira tradicional, com servidores físicos próprios, e o que deveria ser alterado para que a mesma funcionasse utilizando da melhor maneira possível os recursos da infraestrutura em nuvem. Palavras-chave: Computação em Nuvem. Infrastructure as a Service. Arquitetura. Amazon Web Services. ABSTRACT Cloud computing is here to help companies that developing software to keep your focus, worrying less about infrastructure and more with the development of the software itself. Infrastructure as a cloud service (Infrastructure as a Service, IaaS) allowed the creation and evolution of several companies that needed little or no upfront investment in hardware and network infrastructure. The present work aims to study the services of one of these companies in the cloud infrastructure offers, the Amazon Web Services (AWS), which is the largest company of IaaS, as well as the best practices of architecture specific for cloud infrastructure. As a goal, this work will make a comparison between an architecture for a real legacy application that runs in the traditional way, with their own physical servers, and what should be changed so that it would work the best way possible using the resources of the cloud infrastructure. Keywords: Cloud Computing. Infrastructure as a Service. Architecture. Amazon Web Services. LISTA DE ILUSTRAÇÕES Figura 1: Quadrante mágico para provedores de Infraestrutura como Serviço........................14 Figura 2: Console de gerenciamento dos serviços disponibilizados pela AWS.......................23 Figura 3: Screenshot da área de seleção de região do console da AWS, mostrando as atuais opções de regiões......................................................................................................................29 Figura 4: Zonas de disponibilidades (VERAS, 2013, p. 41).....................................................30 Figura 5: Detalhe da zona de disponibilidade (VERAS, 2013, p. 43)......................................31 Figura 6: Regiões e zonas de disponibilidade (VERAS, 2013, p. 43)......................................31 Figura 7: Níveis de Multitenancy (CHATE, 2010, p. 5)...........................................................36 Figura 8: Arquitetura para hosting de uma aplicação Web.......................................................47 Figura 9: Arquitetura para alta tolerância a falhas e alta disponibilidade utilizando o Elastic Load Balancing.........................................................................................................................50 Figura 10: Arquitetura para alta tolerância a falhas e alta disponibilidade utilizando o Elastic IP...............................................................................................................................................51 Figura 11: Diagrama de deployment mostrando a atual infraestrutura que roda as aplicações da empresa hipotética................................................................................................................52 Figura 12: Uma representação do lado do servidor da interface com o usuário. (BURNS, 2009, p. 37)...............................................................................................................................54 LISTA DE TABELAS Tabela 1: Frameworks utilizados para suportar o modelo MVC nas aplicações da empresa hipotética...................................................................................................................................53 LISTA DE SIGLAS IaaS – Infrastructure as a Service PaaS – Plataform as a Service SaaS – Software as a Service AWS – Amazon Web Services NIST – National Institute of Standards and Technology IBM – International Business Machines CSA – Cloud Security Alliance REST – Representational State Transfer SOA – Service-oriented Architecture WS – Web Services MVC – Model-view-controller SUMÁRIO 1 INTRODUÇÃO...............................................................................................................................12 2 REVISÃO BIBLIOGRÁFICA.......................................................................................................18 3 PROPOSTA DE ARQUITETURAS PARA A NUVEM...............................................................46 4 CASO DE USO: APLICAÇÃO LEGADA....................................................................................52 5 CONCLUSÃO..................................................................................................................................57 REFERÊNCIAS................................................................................................................................58 12 1 INTRODUÇÃO Muitas empresas, principalmente startups1, encontram dificuldades para conseguir investimentos para iniciar seus negócios. Em alguns casos, faz-se necessário um grande investimento inicial em infraestrutura computacional para suportar grandes acessos a uma nova aplicação. Por exemplo, para lançar uma nova rede social, é necessário um grande investimento em infraestrutura para poder suportar uma grande quantidade de usuários. (HOWARD, 2010) Gerenciar a infraestrutura computacional é bastante complexo, pois é difícil saber exatamente o quanto, em recursos computacionais, você precisará para suportar sua aplicação. Além disso, cada aplicação pode utilizar os recursos computacionais disponíveis (Ex: Processamento, memória, armazenamento, performance de rede, entre outros.) de maneiras diferentes. Algumas aplicações exigem um grande armazenamento de dados, outras exigem maior processamento, entre outros. (VARIA, 2010) Se a empresa optar por fazer um grande investimento em infraestrutura, pode vir a ter um grande prejuízo se a aplicação não der certo. Por outro lado, caso a aplicação cresça demais e não possua a infraestrutura suficiente, a empresa poderá perder mercado por falta de performance da sua aplicação para atender a demanda necessária. (VARIA, 2010) Possuir uma infraestrutura computacional grande também requer custos adicionais com energia, espaço físico, aluguel de salas, segurança e pessoas capacitadas para gerenciar esses recursos. (VARIA, 2010) A computação em nuvem vem para acabar com o problema citado acima. Computação em nuvem é um novo conceito para abstrair o acesso aos recursos computacionais, utilizando-os sob demanda. Por recursos computacionais, entende-se: redes, servidores, armazenamento, aplicações, serviços, entre outros. Esses recursos devem estar disponíveis rapidamente, com o mínimo esforço de configuração ou interação com o provedor de serviço. (MELL, 2011) Conforme REESE (2009, p. 16): 1 Uma startup compreende de uma a oito pessoas, a maioria desenvolvedores, que se uniram para criar uma base de código cujos benefícios eles oferecerão ao mundo, especialmente o mundo online. Essa base de código, muitas vezes, pode ser acessado através da Web. (WALSH, 2009, p. 8) 13 “A nuvem é onde você vai para usar tecnologia conforme sua necessidade, pelo tempo que você precisar e nenhum minuto a mais. Você não instala nada no seu computador pessoal e você só paga pela tecnologia quando você está utilizando-a.” A computação em nuvem possui diversas modalidades. Segundo a proposta de padronização da National Institute of Standards and Technology (NIST), essas modalidades se dividem em três (MELL, 2011): Infrastructure as a Service (IaaS); Plataform as a Service (PaaS), e; Software as a Service (SaaS). O IaaS é responsável pelos recursos computacionais providos por um provedor de nuvem, limitando-se a parte física (hardware) dos recursos, como processamento, armazenamento, tráfego de rede, entre outros. (MELL, 2011) Já o PaaS é responsável pelas plataformas de desenvolvimento providas por um provedor de nuvem. Por plataformas de desenvolvimento entende-se servidores de aplicação 2, APIs3 para acesso aos recursos disponibilizados, através de uma ou mais linguagens de programação, entre outros. Nessa modalidade o cliente não possui acesso aos recursos de hardware. (MELL, 2011) O SaaS é responsável pelas aplicações providas por um provedor de nuvem. Essas aplicações rodam totalmente online, não sendo necessário instalar nada localmente. O acesso a essas aplicações pode ser feito de computadores, dispositivos móveis, entre outros. (MELL, 2011) No capítulo Revisão Bibliográfica (Capítulo 2), esses temas serão explicados com maior profundidade. Para tornar o trabalho mais específico e objetivo, utilizaremos como base para aplicação dos conceitos propostos a estrutura da Amazon Web Services (AWS) que, segundo Gartner, é a empresa líder em IaaS. 2 3 Servidor de aplicação refere-se ao processo que fornece as funções que são necessárias para suportar os aplicativos do usuário. (ALBERTONI, 2010) API significa Application Programming Interface. Uma API pode fornecer um gancho para colegas, parceiros ou desenvolvedores terceiros, provendo acesso a dados e serviços para construir aplicações, como aplicativos para dispositivos móveis, rapidamente. (JACOBSON, 2012) 14 Figura 1: Quadrante mágico para provedores de Infraestrutura como Serviço. Fonte: <http://www.gartner.com/technology/reprints.do?id=1-1IMDMZ5&ct=130819&st=sb>. Acesso em: 20 dez. 2013. O presente trabalho será focado apenas no IaaS, que é o modelo de serviço na computação em nuvem no qual poderemos aplicar arquiteturas para aplicações. 1.1 JUSTIFICATIVA A arquitetura de sistemas tradicionais foi projetada para utilizar uma infraestrutura única, com pouca ou nenhuma elasticidade4. É bastante complexo fornecer recursos computacionais a medida que a demanda cresce. Sendo assim, o cenário mais comum são 4 Elasticidade é a capacidade do ambiente computacional de nuvem aumentar ou diminuir de forma automática os recursos computacionais demandados e provisionados para cada usuário. (CHEDE, 2009) 15 empresas que possuem recursos insuficientes para sua atual demanda, ou possuem recursos demasiados para sua demanda, recursos que são desperdiçados, gerando custos para a empresa. (VERAS, 2013) Dado o cenário acima, muitas das consolidadas práticas de arquitetura de aplicações não levam em consideração a arquitetura de recursos dos provedores de nuvem como elasticidade, balanceamento de carga e uma arquitetura voltada a serviços. (VARIA, 2010) A maioria das aplicações são criadas sem a arquitetura necessária para a elasticidade e extensibilidade das mesmas, o que ocasiona um mal aproveitamento dos recursos de infraestrutura quando a aplicação é portada para a nuvem. (VARIA, 2010) Hoje em dia a nuvem surge como uma solução para utilizar grandes recursos computacionais e de infraestrutura, sem a necessidade de um grande investimento inicial. Além disso, utilizando os serviços de infraestrutura de um provedor de nuvem, é possível aumentar a capacidade de recursos para uma aplicação de maneira simples, rápida e com baixo custo, diminuindo muito o risco de investimentos em infraestrutura. (VARIA, 2010) Para adequar as aplicações a essa nova realidade, é necessário um projeto de arquitetura que saiba utilizar da melhor maneira possível esses recursos disponibilizados pelo provedor de nuvem. (VARIA, 2010) Este trabalho possui a intenção de mostrar algumas boas práticas de arquitetura de aplicações que auxiliam no melhor uso possível dos recursos da nuvem. Por melhor uso se entende alta performance, baixo custo, alta escalabilidade, alta disponibilidade de dados e alta segurança. Além disso, pretende fazer um comparativo prático entre a atual arquitetura de uma aplicação legada e o que a mesma deve alterar na sua arquitetura para se ajustar aos novos conceitos da nuvem. 1.2 OBJETIVOS Para facilitar o entendimento, os objetivos foram divididos em duas partes: objetivo geral e objetivo específico. 16 1.2.1 Objetivo Geral O objetivo geral do trabalho é propor soluções arquiteturais para que novas aplicações possam utilizar os recursos dos provedores de nuvem da melhor maneira possível, de acordo com objetivos predefinidos como: baixo custo, alta performance, alta disponibilidade, alta segurança, entre outros, além de realizar um comparativo entre a arquitetura atual de uma aplicação legada, que não é utilizada com os recursos da nuvem, e o que deveria ser alterado para que a mesma suportasse da melhor maneira possível os recursos da nuvem. 1.2.2 Objetivo Específico Os objetivos específicos são: 1.3 Definir os conceitos envolvidos em Computação na Nuvem; Apresentar os serviços que são disponibilizados nos principais provedores de Nuvem; Apresentar como esses serviços devem ser utilizados; Propor boas práticas de desenvolvimento de aplicações para a nuvem; Propor arquiteturas de aplicações para objetivos específicos; Fazer um estudo sobre uma aplicação legada não projetada para nuvem e o que deveria ser alterado para a mesma utilizar corretamente todos os recursos de nuvem. METODOLOGIA A metodologia do trabalho será conceitual e teórica, sendo fundamentada em pesquisa bibliográfica. O trabalho será baseado em estudos teóricos sobre os serviços disponíveis nos provedores de nuvem e as boas práticas de arquiteturas disponíveis no mercado, culminando em diversas propostas de arquitetura de aplicações específicas para a nuvem que caminhem de acordo com o objetivo do cliente. 17 1.4 ESTRUTURA DO TRABALHO O trabalho está dividido em cinco partes: A introdução apresenta os objetivos, a justificativa e a motivação do trabalho, além de explicar, brevemente, alguns conceitos importantes de computação em nuvem para auxiliar no entendimento do trabalho; A segunda parte fará a revisão bibliográfica dos conceitos que serão necessários para o entendimento da proposta desse trabalho, como Computação em Nuvem, Cache, Amazon Web Services (AWS), Representational State Transfer (REST), Serviceoriented Architecture (SOA), Elasticidade, Balanceamento de Carga, Paralelização, Redundância, Multi-tenant, entre outros; A terceira parte apresentará as propostas de arquiteturas de aplicações que melhor se adéquam aos conceitos citados acima para que possa servir de base para entidades que queiram criar aplicações totalmente adequadas ao ambiente de nuvem; A quarta parte apresenta um caso de uso das alterações necessárias em uma aplicação legada para que a mesma utilize da melhor maneira possível os recursos do ambiente de nuvem; A quinta, e última, parte apresenta a conclusão do trabalho e sugestões para futuros trabalhos. 18 2 REVISÃO BIBLIOGRÁFICA Este capítulo é responsável por dar o embasamento teórico necessário para o correto entendimento da proposta deste trabalho. Conceitos como Computação em Nuvem, Cache, AWS, REST, SOA, Elasticidade, Balanceamento de Carga, Paralelização, Redundância, Multi-tenant, entre outros, serão vistos. 2.1 VISÃO GERAL SOBRE A NUVEM Existem diversos modelos que propõe uma arquitetura de referência para explicar a computação em nuvem. Segundo Veras (2013, p. 16), existem quatro arquiteturas de referência que se destacam: NIST Cloud Computing Reference Architecture IBM Cloud Reference Architecture Cisco Cloud Reference Architecture Cloud Reference Model da CSA Ainda segundo Veras (2013, p. 16), o modelo NIST é o mais aceito atualmente. Por isso, utilizaremos o NIST como base para explicar os conceitos mais básicos da computação em nuvem. Segundo Coutinho (2013, p. 216): “A Computação em Nuvem propõe a integração de diversos modelos tecnológicos para o provimento de infraestrutura de hardware, plataformas de desenvolvimento e aplicações na forma de serviços sob demanda com pagamento baseado em uso [Sá et al. 2011]. Neste novo paradigma de utilização de recursos computacionais, clientes abrem mão da administração de uma infraestrutura própria e dispõem de serviços oferecidos por terceiros, delegando responsabilidades e assumindo custos estritamente proporcionais à quantidade de recursos que utilizam.” A título de melhor entendimento, os modelos tecnológicos aos quais Coutinho (2013) se refere podem ser ligados com os modelos de serviços citados pelo NIST. Infraestrutura de Hardware seria o IaaS, Plataformas de Desenvolvimento seriam o PaaS e as 19 Aplicações seriam o SaaS. Esses três modelos de serviços serão explicados no texto sobre “Modelos de Serviço”. Para explicar em definitivo os principais conceitos da nuvem, será seguido a mesma estrutura proposta pelo NIST (MELL, 2011) que é dividida em três partes: 2.1.1 Características essenciais da Computação em Nuvem; Modelos de serviços; Modelos de deployment. Características essenciais da Computação em Nuvem: Autosserviço sob demanda: Um cliente de um serviço de computação em nuvem pode requisitar recursos computacionais em tempo real sem precisar interagir com o provedor de serviço. (MELL, 2011, p. 2) Amplo acesso à rede: Os recursos computacionais estão disponíveis através da rede e são acessados através de mecanismos padrão que possibilitam o acesso através de diversos tipos de dispositivos, como smartphones, tablets e computadores pessoais. (MELL, 2011, p. 2) Pool de recursos: Os recursos de computação do provedor são agrupados para atender vários clientes através de um modelo multi-tenant 5, com diferentes recursos físicos e virtuais atribuídos e realocados dinamicamente de acordo com a demanda do cliente. A localização dos recursos é transparente para o usuário, normalmente se restringindo ao país, estado ou datacenter6. Exemplos de recursos incluem armazenamento, processamento, memória e largura de banda da rede. (MELL, 2011, p. 2) 5 6 Multi-tenant é uma aplicação do lado servidor que suporta diversos clientes em uma única instância da aplicação. (REESE, 2011, p. 3) Datacenter (centro de dados) é o departamento em uma empresa que abriga e mantém a infraestrutura dos sistemas de tecnologia da informação e armazenamento de dados (seus mainframes, servidores e bancos de dados). Este departamento e todos os sistemas residem em um lugar físico, portanto, o nome Datacenter. (Fonte: <http://www.gartner.com/it-glossary/data-center/ >, Acesso em: 20 jan. 2014) 20 Elasticidade rápida: Os recursos computacionais podem ser elasticamente usados e liberados, algumas vezes até de maneira automática, para aumentar ou diminuir os recursos computacionais de acordo com a demanda. Para o cliente, os recursos computacionais parecem ilimitados e podem ser apropriados para qualquer quantidade a qualquer tempo. (MELL, 2011, p. 2) Serviço mensurado: Os sistemas Cloud automaticamente controlam e otimizam o uso dos recursos, medindo, de maneira abstrata para o usuário, todos os tipos de serviço como armazenamento, processamento, largura de banda e contas de usuários ativos. (MELL, 2011, p. 2) 2.1.2 Modelos de serviços: IaaS: É a capacidade fornecida ao consumidor para processamento, armazenamento, redes e outros recursos de computação fundamentais onde o consumidor é capaz de implementar e executar software arbitrário, que pode incluir sistemas operacionais e aplicativos. O consumidor não gerencia nem controla a infraestrutura de nuvem subjacente, mas tem controle sobre sistemas operacionais, armazenamento e aplicativos implementados e possivelmente controle limitado de componentes de rede (por exemplo, firewalls do host). (MELL, 2011, p. 3) PaaS: É a capacidade fornecida ao consumidor para implantar suas aplicações consumindo a infraestrutura de nuvem criada usando linguagens de programação, bibliotecas, serviços e ferramentas suportadas pelo provedor. O consumidor não gerencia nem controla a infraestrutura de nuvem subjacente, incluindo rede, servidores, sistemas operacionais ou armazenamento, mas tem controle sobre os aplicativos implementados e possivelmente definições de configuração para o ambiente de hospedagem de aplicativos. (MELL, 2011, p. 2) 21 SaaS: É a capacidade fornecida ao consumidor de utilização de aplicativos rodando em uma infraestrutura de nuvem. As aplicações são acessíveis a partir de vários dispositivos clientes, quer através de uma interface de cliente, como um navegador web (por exemplo, e-mail baseado na web), ou uma interface desktop nativa. O consumidor não gerencia nem controla a infraestrutura de nuvem subjacente, incluindo rede, servidores, sistemas operacionais, armazenamento, ou mesmo capacidades de aplicativos individuais, com a possível exceção de configurações limitadas de configuração de aplicativos específicos do usuário. (MELL, 2011, p. 2) 2.1.3 Modelos de deployment: Nuvem privada: a infraestrutura de nuvem privada é provisionada para uso exclusivo para uma única organização, sendo que essa organização pode agrupar vários consumidores. A infraestrutura pode, ou não, ser de propriedade da própria organização, além de ser gerenciada e operada pela mesma, um terceiro, ou alguma combinação deles, e pode existir dentro ou fora das instalações da organização. (MELL, 2011, p. 3) Nuvem comunitária: a infraestrutura de nuvem comunitária é provisionada para uso exclusivo por uma comunidade específica de organizações que possuem objetivos similares. A infraestrutura pode, ou não, ser de propriedade de uma ou mais organizações, além de ser gerenciada e operada por uma ou mais organizações na comunidade, um terceiro, ou uma combinação deles, além de poder existir dentro ou fora das instalações das organizações responsáveis. (MELL, 2011, p. 3) Nuvem pública: a infraestrutura de nuvem pública é provisionada para uso aberto ao público em geral. A infraestrutura pode, ou não, ser de propriedade, gerenciada e operada por uma empresa, centro acadêmico ou organização governamental, ou alguma combinação das mesmas. Ela existe nas instalações do provedor de nuvem. (MELL, 2011, p. 3) 22 Nuvem híbrida: a infraestrutura de nuvem híbrida é uma composição de duas ou mais infraestruturas de nuvem distintas (privada, comunitária, ou pública) que permanecem entidades únicas, mas são unidas por tecnologia padronizada ou proprietária que permitem portabilidade de dados e aplicações. (MELL, 2011, p. 3) 2.2 2.2.1 AMAZON WEB SERVICES Introdução a AWS A Amazon começou como uma loja online, no final de 1990. Logo de início, seu faturamento cresceu exponencialmente, batendo 1.6 bilhões de dólares em 1999. Mesmo assim, seu volume de vendas era apenas 0.5% do Walmart, forçando a Amazon a expandir seus negócios. (VLIET, 2011, p. 1) Após esse crescimento exponencial, a Amazon estava sofrendo com o gerenciamento da sua infraestrutura. Era um sistema monolítico, difícil de escalar. (VLIET, 2011, p. 1) O primeiro passo da Amazon para melhorar sua infraestrutura foi criar uma API para acessar os recursos do site atual. Era dado os primeiros passos para a criação da AWS. (VLIET, 2011, p. 1) Apesar de existir uma API para desenvolvedores terceiros acessarem recursos da loja online da Amazon, a mesma ainda sofria com os problemas da sua infraestrutura. O problema foi resolvido em 2004, quando a Amazon deixou de ser apenas uma loja online com uma API para acesso de terceiros aos seus recursos e tornou-se, também, uma completa infraestrutura de nuvem. (VLIET, 2011, p. 1) Em 2006 a Amazon começou a oferecer acesso à sua infraestrutura através de serviços web, o que caracteriza o modelo de serviço de infraestrutura como serviço da computação em nuvem. (AMAZON WEB SERVICES, 1, 2013) A partir desse novo direcionamento nos negócios, a Amazon não só resolveu seu problema com infraestrutura, como foi pioneira em um novo modelo de negócios. (VLIET, 2011, p. 1) 23 2.2.2 Serviços AWS Segundo Veras (2013, p. 17) a estrutura de serviços da AWS é dividida em três grandes partes: Infraestrutura global de suporte para a plataforma. Aqui se incluem as regiões, zonas de disponibilidade, localizações de conteúdo e DNS. (VERAS, 2013, p. 17) Segundo Veras (2013, p. 17, 18): “Serviços de infraestrutura que são os serviços de processamento, armazenamento, rede, banco de dados e gerenciamento. Serviços de infraestrutura de TI, mas com outro nível de abstração, acesso baseado em web services e fornecidos sob demanda. No modelo AWS pode-se contratar estes serviços de acordo com a necessidade. Um servidor virtual, uma instância virtual, por exemplo, pode ser contratado com diferentes níveis de processamento e diferentes tipos de armazenamento local. Os serviços de armazenamento na AWS podem ser utilizados mediante a necessidade, sem precisar antecipar a capacidade.” Serviços básicos de plataforma que estão no limite do serviço IaaS e acabam por completar a oferta de serviços incluindo mensageria, workflow e gerenciamento dos aplicativos. (VERAS, 2013, p. 17) Figura 2: Console de gerenciamento dos serviços disponibilizados pela AWS Fonte: https://console.aws.amazon.com/console/home, acesso em 13 jan. 2014 Atualmente a AWS conta com os seguintes serviços (AMAZON WEB SERVICES, 2, 2014): Computação ◦ Amazon Elastic Compute Cloud (EC2): Oferece capacidade computacional em nuvem, escalável e paga conforme o uso. 24 ◦ Elastic Load Balancing: Distribui automaticamente o tráfego de entrada dos aplicativos em várias instâncias do Amazon EC2. ◦ Auto Scaling: Permite expandir ou reduzir a capacidade do Amazon EC2 automaticamente, de acordo com condições pré-definidas. ◦ Amazon WorkSpaces: É um serviço computacional de desktop totalmente gerenciado na nuvem. Analytcs ◦ Amazon Elastic MapReduce: É um serviço web que permite que empresas, pesquisadores, analista de dados e desenvolvedores processem grandes quantidades de dados com facilidade e economia. ◦ AWS Data Pipeline: É um serviço que ajuda a processar e mover dados entre diferentes serviços de armazenamento e computação da AWS, além de fontes de dados locais, com segurança e em intervalos especificados. ◦ Amazon Kinesis: É um serviço gerenciado para processamento em tempo real para streaming7 de dados em alta escala. Implementação e gerenciamento ◦ AWS Identity and Access Management (IAM): Permite que você controle com segurança o acesso aos serviços e recursos da AWS para seus usuários. A IAM permite que você crie e gerencie usuários na AWS, e também possibilita a concessão de acesso a recursos da AWS para usuários gerenciados fora da AWS no seu diretório corporativo. ◦ AWS Elastic Beanstalk: É uma maneira ainda mais fácil de implementar e gerenciar aplicativos na nuvem da AWS. Para gerenciar uma aplicação online, é necessário fazer o upload da mesma e o Elastic Beanstalk automaticamente gerencia os detalhes de implantação, fornecimento de capacidade, balanceamento de carga, escalonamento automático e monitoramento do status do aplicativo. ◦ AWS CloudWatch: É um serviço web que fornece monitoramento para recursos da nuvem da AWS, começando com o Amazon EC2. ◦ AWS CloudTrail: É um serviço da web que registra chamadas de API da AWS de uma conta específica e entrega arquivos de registro para o usuário dessa mesma conta. 7 Streaming é a técnica que suporta a, transmissão contínua de áudio e / ou vídeo através da Internet e, mais recentemente, através de uma rede móvel. (Fonte: <http://www.gartner.com/it-glossary/streaming/>, Acesso em: 12 jan. 2014) 25 ◦ Amazon CloudFormation: é um serviço que fornece aos desenvolvedores e empresas uma forma rápida de criar um conjunto de recursos relacionados da AWS e os oferece de maneira organizada e previsível. ◦ AWS OpsWorks: É uma plataforma de operações de desenvolvimento para o gerenciamento de qualquer escala ou complexidade na nuvem da AWS. ◦ AWS CloudHSM: É um serviço que ajuda a atender requisitos de conformidade corporativos, contratuais e normativos para a segurança de dados utilizando dispositivos Hardware Security Module (HSM – Módulo de segurança de hardware) dedicados dentro da nuvem da AWS. Com o AWS CloudHSM, o usuário que gerencia a conta AWS que mantém toda a propriedade, o controle e o acesso a chaves e dados confidenciais, enquanto a Amazon gerencia os dispositivos HSM localizados perto dos seus aplicativos e dados para obter o desempenho máximo. Serviços de aplicativos ◦ Amazon AppStream: É um serviço flexível, de baixa latência, que permite o streaming de aplicativos com uso intenso de recursos e jogos na nuvem. ◦ Amazon CloudSearch: É um serviço de pesquisa totalmente gerenciado na nuvem que permite aos clientes integrar facilmente funcionalidades de pesquisa altamente escaláveis e rápidas a seus aplicativos ◦ Amazon Simple Workflow Service (Amazon SWF): Ajuda a coordenar as etapas do processo nos seus aplicativos e a gerenciar estados de execução distribuída. ◦ Amazon Simple Queue Service (Amazon SQS): Fornece uma fila hospedada para armazenar mensagens à medida que elas são transferidas entre computadores, facilitando a criação de um fluxo de trabalho automatizado entre os serviços web. ◦ Amazon Simple Notification Service (Amazon SNS): É um serviço web que facilita a configuração, a operação e o envio de notificações com base na nuvem. ◦ Amazon Simple Email Service (Amazon SES): É um serviço de envio de e-mails em massa e transacional altamente escalável e econômico para a nuvem. ◦ Amazon Elastic Transcoder: É um serviço totalmente gerenciado que facilita a conversão de arquivos de mídia na nuvem, com escalabilidade e economia. Pagamentos e faturamento ◦ Amazon Flexible Payments Service (FPS): Facilita a transferência digital monetária entre duas entidades, pessoas ou computadores quaisquer. 26 ◦ Amazon DevPay: É um serviço de faturamento e de gerenciamento de contas que permite que os desenvolvedores cobrem o pagamento pelos seus aplicativos da AWS. Software ◦ AWS Marketplace: É uma loja on-line que ajuda os clientes a encontrar, comprar e começar a usar imediatamente software executado na nuvem da AWS. Ele inclui software de fornecedores confiáveis, como SAP8, Zend9, Microsoft10, IBM11, Canonical12 e 10gen13, bem como muitas ofertas de software livre amplamente usadas, como Wordpress14, Drupal15 e MediaWiki16. Redes ◦ Amazon Route 53: É um serviço web de Domain Name System 17 (DNS) altamente disponível e escalável. ◦ AWS Direct Connect: Facilita o estabelecimento de uma conexão de rede dedicada do seu local para a AWS, o que normalmente reduz os custos da rede, aumenta a taxa de transferência da largura de banda e fornece uma experiência de rede mais consistente que as conexões baseadas em Internet. ◦ Amazon Virtual Private Cloud (VPC): Permite aproveitar uma seção privada e isolada na nuvem da AWS onde é possível executar recursos em uma rede virtual própria. Lembra muito uma rede tradicional que você poderá operar no seu próprio Datacenter. Entrega de conteúdo ◦ Amazon CloudFront: É um serviço web que facilita a distribuição de conteúdo com baixa latência por meio de uma rede global de pontos de presença. 8 9 10 11 12 13 14 15 16 17 http://www.sap.com/index.html http://www.zend.com/en/ http://www.microsoft.com/pt-br/default.aspx http://www.ibm.com/us/en/ http://www.canonical.com/ http://www.mongodb.com/ http://wordpress.com/ https://drupal.org/ http://www.mediawiki.org/wiki/MediaWiki DNS é a abreviação de Domain Name System, um sistema para nomear computadores e serviços de rede que é organizado em uma hierarquia de domínios. O Servidor DNS é usado em redes como a Internet, para localizar computadores e serviços através de nomes amigáveis. Quando um usuário insere um nome DNS em um aplicativo, serviços de DNS podem traduzir o nome para outras informações associadas com o nome, como um endereço IP. (Fonte: <http://technet.microsoft.com/en-us/library/cc787920(v=ws.10).aspx>, Acesso em: 14 jan. 2014) 27 Banco de dados ◦ Amazon Relational Database Service (Amazon RDS): É um serviço web que facilita a configuração, a operação e a escalabilidade de um banco de dados relacional na nuvem. ◦ Amazon DynamoDB: É um serviço de banco de dados NoSQL de alto desempenho que é fácil de configurar, operar e escalar. ◦ Amazon Redshift: É um serviço de armazenamento de dados rápido, potente e totalmente gerenciável para fazer data warehouse em larga escala (petabytes) na nuvem. Oferece consultas rápidas para analisar virtualmente qualquer tamanho de dados utilizando o mesmo estilo de uma ferramenta de SQL comum. ◦ Amazon ElastiCache: É um serviço web que torna fácil implementar, operar e escalar um cache em memória na nuvem. ◦ Amazon SimpleDB: É um serviço de armazenamento de dados não relacional, altamente disponível e flexível. Storage ◦ Amazon Simple Storage Service (Amazon S3): Fornece uma infraestrutura de armazenamento de dados totalmente redundante para armazenar e recuperar qualquer quantidade de dados, a qualquer momento, de qualquer local na web. ◦ Amazon Glacier: É um serviço de armazenamento de custo extremamente baixo, que fornece armazenamento seguro e durável para backup e arquivamento de dados. ◦ AWS Storage Gateway: É um serviço que conecta um dispositivo de software local ao armazenamento baseado na nuvem para fornecer a integração perfeita e segura entre o ambiente de TI local de uma organização e a infraestrutura de armazenamento da AWS. ◦ Amazon Elastic Block Store (Amazon EBS): Fornece volumes de armazenamento em bloco para uso com instâncias do Amazon EC2. Os volumes Amazon EBS são armazenamentos independentes da instância EC2. ◦ AWS Import/Export: Acelera a movimentação de grandes volumes de dados para dentro e para fora da AWS usando dispositivos de armazenamento portáteis para transporte. Suporte 28 ◦ AWS Support: É um canal de suporte de resposta rápida e individualizada para ajudar na criação e na execução de aplicativos nos serviços de infraestrutura da AWS. Tráfego da Web ◦ Alexa Web Information Service: Disponibiliza para os desenvolvedores o enorme repositório de dados do Alexa18 com relação aos padrões de tráfego e de estrutura na Web. ◦ Alexa Top Sites: Expõe dados de tráfego de sites globais à medida que eles são continuamente coletados e atualizados pelo Alexa Traffic Rank. Força de trabalho ◦ Amazon Mechanical Turk: Permite que as empresas tenham acesso a milhares de trabalhadores globais sob demanda e integrem, de forma programática, seu trabalho em vários processos de negócios. 2.2.3 Infraestrutura Segundo Veras (2013, p. 36), “a infraestrutura da AWS é baseada nos conceitos de zonas de disponibilidade e de região. As zonas de disponibilidade refletem os datacenters da AWS, e as regiões consistem de uma ou mais zonas de disponibilidade que são separadas em áreas geográficas ou países.” Existem também os pontos de presença, onde a AWS permite o armazenamento de conteúdos estáticos dos clientes. Esses conteúdos estáticos podem ser os componentes mais acessados do website do cliente, podem ser para distribuição de software, publicação de arquivos de mídia popular e até mesmo para distribuições por streaming. (VERAS, 2013, p. 36, 52 e 53) Devido a sua infraestrutura estar localizada em países, e até continentes, distintos, a AWS pode ser considerada um serviço global de IaaS. (VERAS, 2013, p. 37) 18 Alexa é o principal fornecedor de métricas web globais e livres. (Fonte: <http://www.alexa.com/>, Acesso em: 12 jan. 2014). 29 2.2.4 Regiões As regiões da AWS são conjuntos isolados de datacenters em uma determinada geografia. (VERAS, 2013, p. 39) No momento do desenvolvimento deste trabalho, a AWS conta com oito regiões, conforme a Figura 3. Figura 3: Screenshot da área de seleção de região do console da AWS, mostrando as atuais opções de regiões. Fonte: <https://console.aws.amazon.com/console/home>. Acesso em: 21 dez. 2013 Segundo Veras (2013, p. 39), “quando se utiliza a AWS, pode-se definir onde os dados devem ficar armazenados, onde devem rodar as instâncias, onde as filas de mensagens são inicializadas e os bancos de dados devem ser instanciados.” 2.2.5 Zonas de Disponibilidade Segundo o próprio site da AWS, (AMAZON WEB SERVICES, 3, 2014): “As Zonas de disponibilidade são as posições distintas que são projetadas para serem isoladas das falhas em outras Zonas da disponibilidade e fornecem rede de conectividade acessível e de baixa latência para outras Zonas de disponibilidade da mesma região.” 30 Veras (2013, p. 41, 42 e 43) explicou bem através de figuras como funciona a interação entre as regiões e as zonas de disponibilidade. Na figura 4 é possível visualizar como as zonas de disponibilidades dentro de uma determinada região (no caso da figura, a região US East, Virginia) possuem uma rede de alto desempenho e baixa latência. As zonas de disponibilidade (abreviadas para “AZ”, na figura 4), a título de exemplificação, foram nomeadas de “AZA”, “AZB”, “AZC” e “AZD”. Figura 4: Zonas de disponibilidades (VERAS, 2013, p. 41) Através da figura 5, é possível verificar que cada zona de disponibilidade possui seu próprio datacenter, com infraestrutura independente. 31 Figura 5: Detalhe da zona de disponibilidade (VERAS, 2013, p. 43) Na figura 6 é possível vislumbrar a interação entre as diversas regiões da AWS e suas zonas de disponibilidade. Figura 6: Regiões e zonas de disponibilidade (VERAS, 2013, p. 43) 32 2.2.6 REST e SOAP Como se pode constatar ao longo deste trabalho, muitas das APIs para acesso aos serviços da AWS são acessadas através de REST e SOAP (VERAS, 2013). Abaixo será feita uma rápida revisão bibliográfica sobre a arquitetura SOA e suas implementações (REST e SOAP). 2.2.6.1 Arquitetura SOA Service Oriented Architecture é uma arquitetura de referência que é baseada em serviços. Se a arquitetura é definida pela perspectiva de serviços, a mesma é chamada de “orientada a serviços” ou SOA. (DIKMANS, 2012, p. 46) A arquitetura orientada a serviços é centrada em torno de serviços. Os serviços são pequenos blocos de construção que oferecem acesso claro para um conjunto limitado de recursos. O mesmo serviço é responsável pela lógica de negócios e consistência dos dados de um determinado conjunto de capacidades. Se os dados que pertencem a um serviço precisam ser alterados, isso é feito exclusivamente através desse serviço, reforçando, assim, um único ponto de acesso para essa funcionalidade e/ou dados particulares. A arquitetura orientada a serviços promove isso, dados e lógica que não pertencem um ao outro são dissociados (ou fracamente acoplado), através do conjunto de serviços. Este fraco acoplamento ocorre em nível de propriedade, lógica de negócios, dados e implantação. (DIKMANS, 2012, p. 47) 2.2.6.1.1 SOAP Web services baseados em SOAP são serviços formalmente descritos, criados e consumidos baseados em uma série de padrões web services e protocolos. Juntos, esses padrões são denotados como “WS-*” e são mantidos por comitês de padronização como a 33 World Wide Web Consortion (W3C) e OASIS. Alguns exemplos de padrões web service são “WS-Security”, “Web Service Description Language” (WSDL), “WS-RM” (Reliable Messaging) e “Simple Object Access Protocol” (SOAP). (BAKKER, 2013, p. 116) Serviços baseados em SOAP possuem interfaces que mostram as operações disponíveis, as entradas e saídas dessas operações e a tecnologia de ligação por meio do qual as operações são disponibilizados. Essas interfaces são documentadas utilizando documentos WSDL e XSD. Uma WSDL define as operações de um serviço e pode definir as mensagens de entrada e saída ou referenciar um arquivo XSD externo para isso. (BAKKER, 2013, p. 116) É uma boa prática definir as operações em um WSDL, referenciar um XSD externo que define as mensagens de solicitação e resposta, e referem-se a partir daí a outros XSDs que definem as entidades de negócio, como cliente, e entidades de ordem que fazem parte das mensagens de solicitação e resposta. (BAKKER, 2013, p. 116) 2.2.6.1.2 REST REST, ou Representational State Transfer (Transferência de Estado Representativo) é um estilo arquitetural para construção de aplicações web que descreve um conjunto de princípios utilizando os padrões Web, como o protocolo HTTP e um Identificador Uniforme de Recursos (URI, Uniform Resource Identifier), de uma maneira natural. O estilo de arquitetura REST encaixou-se muito bem com as aplicações em nuvem, porque permite a interação com clientes diversos como telefones móveis, browsers e outros websites com o mínimo de processamento. (BAKKER, 2013, p. 114) Serviços Representational State Transfer (REST) são baseados em um modelo muito diferente do que os serviços baseados em SOAP. REST é um modelo formal baseado em recursos. A ideia é que se envia uma solicitação para um recurso. O recurso que é retornado mostra as opções para a próxima etapa. Por exemplo, pode-se requisitar uma lista de clientes. A lista resultante irá mostrar-lhe a localização dos dados individuais de cada cliente, por exemplo, em uma URL. Este modelo é muito flexível e não requer que o cliente 34 saiba de antemão quais os serviços e chamadas de serviço estão disponíveis. A World Wide Web é um exemplo de uma implementação de arquitetura REST. Serviços RESTful dependem do protocolo HTTP em que métodos HTTP, como GET, PUT, POST e DELETE são usados para representar operações do tipo CRUD (Create, Read , Update, Delete). As mensagens são trocadas usando XML. (DIKMANS, 2012, p. 117) A linha a seguir mostra como os mesmos detalhes dos clientes que foram recuperados usando SOAP podem ser recuperadas usando REST (DIKMANS, 2012, p. 117). Basicamente, um serviço RESTful é invocado usando uma URL, por exemplo: http://www.foo.org/resource/customer/56080086 Em ambos os exemplos de clientes, o servidor que hospeda o serviço que retorna a lista de clientes receberá o pedido, processar o pedido e retornar uma resposta contendo os dados do cliente. Embora os serviços baseados em SOAP sempre utilizam XML, os serviços RESTful não impõem restrições sobre o formato dos dados trocados. Os dados podem ser formatados como HTML, XML ou JavaScript Object Notation (JSON), e assim por diante. (DIKMANS, 2012, p. 117) Segundo Veras (2013, p. 11): “A API REST é uma interface HTTP. Para usar a API REST pode-se utilizar qualquer kit de ferramentas que ofereça suporte a HTTP. Pode-ser usar um navegador para buscar objetos, contanto que eles sejam anonimamente legíveis. Deve-se utilizar a API REST para os cabeçalhos HTTP padrão e códigos de status, para que os toolkits e navegadores funcionem conforme o esperado.” 2.2.7 Elasticidade Segundo Coutinho (2013, p. 216 e 217): “A elasticidade é ponto chave para implementar serviços com qualidade de serviço para nuvem, pois permite adicionar ou remover recursos, sem interrupções e em tempo de execução para lidar com a variação da carga. De acordo com (COUTINHO, 2013 apud Mell and Grance 2009), estes recursos podem ser adquiridos de forma rápida, em alguns casos automaticamente, caso haja a necessidade de escalar com o aumento da demanda, e liberados, na retração dessa 35 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.” 2.2.8 Balanceamento de Carga Se o sistema for escalado verticalmente (elasticidade vertical), não precisa se preocupar muito com as requisições dos usuários. As requisições chegam ao nosso servidor monolítico, são atendidas, e uma resposta é enviada de volta para o usuário. Dividir a carga entre os vários processadores é um trabalho do sistema operacional. Como a maioria dos softwares servidores de aplicação web suportam multi-processadores, podemos manter uma instância em cada processador e executar muitos pedidos em paralelo. (HENDERSON, 2006, p. 214) Quando o servidor começa a escalar horizontalmente (elasticidade horizontal), um novo problema aparece. Existem vários processadores, provenientes de diversos computadores, mas não existe nenhum sistema operacional para espalhar pedidos entre eles. Diversas solicitações entram para o mesmo IP, que deveria dividir o processamento entre várias máquinas. A solução pode vir de uma série de métodos, mas todos eles são agrupados sob o termo “balanceamento de carga”. (HENDERSON, 2006, p. 214) 2.2.9 Multitenancy Singletenancy é quando uma aplicação suporta apenas um cliente. Se um novo cliente resolver ter acesso a essa mesma aplicação, ele precisa instalar essa aplicação em uma nova infraestrutura, totalmente independente da primeira, para que as informações dos dois clientes não se misturem. Multitenancy é um conceito que é o oposto do Singletenancy. No jargão da computação em nuvem, um cliente ou uma organização é referido como tenant (inquilino). As várias desvantagens e ineficiências de custo de modelos single-tenant são superadas pelo modelo multi-tenant. A aplicação multi-tenant atende a várias organizações, cada uma trabalhando em seu próprio ambiente virtual isolado e compartilham uma única 36 instância física e versão do aplicativo hospedado na infraestrutura da nuvem. É isolado porque, embora a infraestrutura seja compartilhada, os dados de cada cliente, customizações e código permanecem seguros e isolados de outros clientes. (ARORA, 2013, p. 32) Aplicações multi-tenant executam em uma única instância física e possuem a mesma versão da aplicação, fornecendo a mesma infraestrutura robusta para todos os seus clientes. Isso também significa liberdade de custos iniciais, de atualizações contínuas, e de custos de manutenção. (ARORA, 2013, p. 33) Segundo Chate (2010, p. 4), Multi-tenancy é a chave determinante para eficiência de uma aplicação SaaS. Normalmente, um aplicativo suporta múltiplos usuários, mas com a presunção de que todos os usuários são de uma mesma organização. Esse modelo é bom para as aplicações tradicionais, não-SaaS, no qual uma organização compraria um aplicativo para uso dos seus funcionários. Mas no mundo do SaaS e na nuvem, muitas organizações usarão o mesmo aplicativo, todas essas organizações devem ser capazes de permitir o acesso de todos seus usuários, mas a aplicação deve permitir que os funcionários de cada organização possam acessar os dados somente da sua organização, e não de qualquer outra. Esta capacidade de ter várias organizações (chamadas de tenant na nomenclatura SaaS), coexistindo na mesma aplicação, sem comprometer a segurança dos dados para as organizações, define o aplicativo como multi-tenant. Existem vários níveis de multi-tenant: 1. Virtualização simples na nuvem, onde apenas o hardware é compartilhado. 2. Aplicação única com bancos de dados separados por inquilino. 3. Aplicação única e banco de dados compartilhado (maior eficiência, verdadeiro multitenancy). Figura 7: Níveis de Multitenancy (CHATE, 2010, p. 5) 37 2.2.10 Serviços assíncronos Quando se fragmenta uma aplicação em serviços, é normal que alguns deles demorem mais para responder do que outros. Quando um usuário realiza uma requisição, alguns dos serviços que são acessados por aquela requisição podem demorar alguns segundos para responder. Isso é definido como uma má experiência para o usuário, já que o mesmo não sabe quais serviços estão sendo chamados e porque demoram. Isso pode levá-lo a pensar que o sistema caiu ou a infraestrutura está saturada. (HENDERSON, 2006) A solução é mover esses serviços para um modelo assíncrono. Assim, otimiza-se a fase de requisição (request) para responder imediatamente e guardar a requisição. A fase de resposta (response), se for preciso uma, pode vir depois, fora da solicitação da página. Quando se fala de serviços assíncronos, normalmente, significa requisições síncronas e respostas assíncronas. (HENDERSON, 2006) Como regra, usa-se a comunicação assíncrona sempre que possível. Essa prática não é apenas para criar alguns serviços que se comunicam de maneira assíncrona, mas sim desenvolver o aplicativo para possuir um comportamento assíncrono. Isto significa, em grande parte, o afastamento de protocolos de request/response, ou, pelo menos, aqueles com restrições temporais sobre as respostas (responses). (ABBOTT, 2011) Utiliza-se serviços assíncronos para garantir que cada serviço e camada seja o máximo independente possível. Isso permite que o sistema seja muito mais escalável do que se todos os componentes forem fortemente acoplados. (ABBOTT, 2011) 2.2.11 EC2 O Amazon EC2 é um web service que provê um processamento computacional na nuvem, totalmente redimensionável e o cliente paga apenas pelo seu uso. (AMAZON WEB 38 SERVICES, 5, 2014) Através do console de gerenciamento do EC2, o cliente pode selecionar o sistema operacional que deseja utilizar e instalar todos os recursos de que necessita. Para isso, o cliente cria uma instância EC2 através do console, dizendo quais os recursos de que precisa, como quantidade de memória, quantidade de processadores, entre outros, podendo alterar esses recursos posteriormente. Além dessa elasticidade vertical, onde você aumenta os recursos da máquina que está rodando os serviços, você pode ter uma elasticidade horizontal, adicionando mais máquinas e distribuindo o processamento entre elas através do Balanceamento de Carga. (VERAS, 2013, p. 119 e 120) Para permitir a economia utilizando as instâncias do EC2, você optar entre três modalidades de uso: Instâncias On-Demand: “As instâncias On-Demand permitem que você pague pela capacidade computacional por hora, sem compromissos a longo prazo. Isso exime você dos custos e das complexidades de planejamento, aquisição e manutenção de hardware e transforma o que normalmente são grandes custos fixos em custos variáveis muito menores. As Instâncias On-Demand também eliminam a necessidade de se comprar uma “rede de segurança” com capacidade de lidar com repiques de tráfego periódicos.” (AMAZON WEB SERVICES, 5, 2014) Instâncias reservadas: “As Instâncias reservadas lhe dão a opção de fazer um pagamento único e acessível para cada instância que você deseja reservar e, por sua vez, você recebe um desconto significativo sobre a taxa por hora para essa instância. Existem três tipos de instância reservada (utilização leve, média e pesada) que permitem equilibrar o valor inicial pago e o preço efetivo da hora. Se suas necessidades mudarem, você pode solicitar mover sua instância reservada para outra Zona de disponibilidade dentro da mesma região, pode mudar sua plataforma de rede ou, para RIs Linux/UNIX e Windows, pode modificar o tipo de instância de sua reserva para outro tipo na mesma família de instâncias sem custo adicional. Você também pode vender suas instâncias reservadas para outros clientes através do Reserved Instance Marketplace se tiver uma conta nos Estados Unidos.” (AMAZON WEB SERVICES, 5, 2014) Instância Spot: “As Instâncias Spot permitem aos clientes negociarem a capacidade não utilizada do Amazon EC2 e executarem essas instâncias durante o período em que sua oferta exceder o Preço Spot atual. O Preço Spot muda periodicamente com base no fornecimento e na demanda, e os clientes cuja proposta atende-o ou ultrapassa-o ganham acesso às Instâncias Spot disponíveis. Se você tem flexibilidade sobre quando os seus aplicativos podem ser executados, as Instâncias Spot podem reduzir significativamente seus custos no Amazon EC2.” (AMAZON WEB SERVICES, 5, 2014) 39 2.2.12 S3 Amazon Simple Storage Service (S3) é um armazenamento persistente baseado em nuvem. Ele opera independentemente de outros serviços da Amazon. As aplicações que você escreve para hospedar em seu próprio servidor podem utilizar o serviço da Amazon S3, sem necessidade estar na nuvem. (REESE, 2009, p. 25) Segundo a própria AWS (AMAZON WEB SERVICES, 4, 2014), “o Amazon S3 fornece uma interface simples de serviço web que pode ser usada para armazenar e recuperar qualquer quantidade de dados, a qualquer momento, de qualquer lugar na web.” Veras (2013, p. 164) diz que: “O S3 fornece uma interface web service que pode ser usada para armazenar e recuperar qualquer quantidade de dados, a qualquer momento, de qualquer lugar na web. Pode-se gravar, ler e deletar objetos contendo de um byte até cinco terabytes de dados cada, e o número de objetos que você pode armazenar em um bucket19 do S3 é ilimitado. O S3 também é altamente escalável, permitindo o acesso simultâneo à leitura e à gravação dos dados por diferentes clientes ou threads de aplicativo.” Para acessar as APIs fornecidas pelo S3, o cliente pode utilizar qualquer linguagem de programação, já que o acesso é feito via SOAP ou REST. (VERAS, 2013, p. 164) As funcionalidades do S3, segundo o site da AWS (AMAZON WEB SERVICES, 4, 2014), são as seguintes: Grave, leia e exclua objetos que contenham entre 1 byte e 5 terabytes de dados cada um. O número de objetos que você pode armazenar é ilimitado. Cada objeto é armazenado em um bucket e é recuperado através de uma chave específica que é atribuída a um desenvolvedor. Um bucket pode ser armazenado em uma das diversas regiões. Escolha a região em que deseja otimizar a latência, minimizar custos ou atender aos requisitos regulatórios. Os objetos armazenados em uma região nunca saem dela, exceto se você desejar transferi-los. Os objetos armazenados na região da UE (Irlanda), por exemplo, nunca saem da UE. 19 “Buckets são containers para objetos S3. Cada objeto armazenado no S3 está contido em um bucket, e ele funciona como um diretório em um sistema de arquivos. Uma das principais distinções entre uma pasta de arquivos e um bucket é que cada bucket e seu conteúdo podem ser acessados usando uma URL”. (VERAS, 2013, p. 167) 40 Os mecanismos de autenticação são fornecidos para garantir que os dados permaneçam livres de acesso não autorizado. Os objetos podem ser públicos ou privados, e direitos podem ser atribuídos a usuários específicos. Existem opções para upload/download seguro de dados e criptografia de dados para proteção adicional dos dados. Utilize interfaces REST e SOAP com base padrão projetadas para trabalhar com qualquer ferramenta de desenvolvimento de Internet. Projetado para ser flexível para que camadas funcionais ou de protocolo possam ser facilmente adicionadas. O protocolo padrão de download é HTTP. Fornece funcionalidade para simplificar a capacidade de gerenciamento de dados durante sua vida útil. Inclui opções para separação de dados por buckets, monitoramento e controle de despesas e arquivamento automático de dados para opções de armazenamento de custo ainda mais baixo. 2.2.13 CloudFront O Amazon CloudFront é feito para funcionar com outros serviços da AWS, como o S3, por exemplo. O S3 guarda os recursos estáticos de uma determinada aplicação, enquanto o CloudFront trata de retornar as requisições dos clientes a esses recursos da maneira mais rápida possível, com menor latência possível, através de pontos de presença 20 espalhados pelo mundo todo. As solicitações de seus conteúdos são direcionadas automaticamente para o ponto de presença mais próximo, para que o conteúdo seja distribuído com o melhor desempenho possível. (AMAZON WEB SERVICES, 6, 2014) Se um cliente realizar uma requisição de um conteúdo estático (hospedado no S3) e o ponto de presença mais próximo não possuir esse conteúdo, o CloudFront obterá uma cópia no servidor para esse referido ponto de presença, e a próxima requisição não precisará ir até o servidor novamente, indo apenas até o ponto de presença mais próximo. (VERAS, 2013, p. 52) 20 Pontos de presença são servidores da AWS espalhados pelo mundo que guardam apenas recursos estáticos para aumentar a performance na entrega desses recursos, entregando de pontos que estejam mais próximos do usuário solicitante. (VERAS, 2013, p. 52) 41 2.2.14 Elastic Load Balancing O Elastic Load Balancing distribui automaticamente o tráfego de entrada dos aplicativos em várias instâncias do Amazon EC2. Ele permite que você atinja uma maior tolerância a falhas em seus aplicativos, fornecendo a capacidade de equilíbrio de carga necessária em resposta ao tráfego de entrada dos aplicativos. O Elastic Load Balancing detecta instâncias com problemas de integridade dentro de um conjunto e redireciona automaticamente o tráfego para instâncias íntegras até que as instâncias com problemas sejam restauradas. Você pode habilitar o Elastic Load Balancing dentro de uma única zona de disponibilidade ou em várias zonas para alcançar um desempenho de aplicativo ainda mais consistente. (AMAZON WEB SERVICES, 5, 2014) 2.2.15 Amazon EBS O Amazon Elastic Block Store (EBS) oferece armazenamento para as instâncias do Amazon EC2. Os volumes do Amazon EBS são vinculados à rede e são armazenados independentemente da vida de uma instância. Os volumes do Amazon EBS são altamente disponíveis e extremamente confiáveis podendo ser aproveitados como um exemplo de partição de inicialização do Amazon EC2 ou ligados a uma instância em execução do Amazon EC2 como um dispositivo de bloco padrão. Quando utilizadas como uma partição de inicialização, as instâncias Amazon EC2 podem ser interrompidas e posteriormente reiniciadas, permitindo que você pague apenas pelos recursos de armazenamento utilizados, mantendo o estado de sua instância. Os volumes do Amazon EBS oferecem melhor durabilidade em comparação aos armazenamentos locais de instância do Amazon EC2, porque os volumes do Amazon EBS são automaticamente replicados no back-end (em uma única zona de disponibilidade). Para aqueles que desejam ainda maior durabilidade, o Amazon EBS fornece a capacidade de criar snapshots de momentos específicos de seus volumes, sendo armazenados no Amazon S3 e automaticamente duplicados através de várias zonas de disponibilidade. Esses snapshots podem ser usados como ponto inicial para novos volumes Amazon EBS e podem proteger seus dados para uma durabilidade a longo prazo. 42 Você pode também, facilmente, compartilhar esses snapshots com os colegas de trabalho e com outros colaboradores da AWS. O Amazon EBS fornece dois tipos de volumes: volumes padrão e de IOPS provisionadas. Os volumes padrão oferecem armazenamento econômico, que é ideal para aplicativos com requisitos moderados ou intermitentes de entrada/saída. Os volumes de IOPS provisionadas são desenvolvidos para fornecer alto desempenho previsível para aplicativos com uso intensivo de entrada/saída, como bancos de dados. (AMAZON WEB SERVICES, 5, 2014) 2.2.16 Amazon Route 53 Como descreve a própria Amazon Web Services (AMAZON WEB SERVICES, 7, 2014) descreve o serviço: “O Amazon Route 53 é um serviço web de Domain Name System (DNS) altamente disponível e escalável. Ele é projetado para oferecer aos desenvolvedores e empresas uma maneira extremamente confiável e de baixo custo de direcionar os usuários finais para aplicativos de Internet ao traduzir nomes legíveis como www.example.com para os endereços IP numéricos como 192.0.2.1 que os computadores usam para se conectarem uns aos outros.” As principais características do Amazon Route 53 são as seguintes: Altamente disponível e confiável: O Route 53 foi criado usando a infraestrutura altamente disponível e confiável da AWS. A natureza distribuída dos servidores DNS da AWS ajuda a assegurar uma capacidade consistente de direcionar os usuários finais para seu aplicativo. O Route 53 foi criado para fornecer o nível de confiabilidade exigido por aplicativos importantes. (AMAZON WEB SERVICES, 7, 2014) Escalável: O Route 53 foi criado para ser escalonado automaticamente para lidar com volumes de consulta muito grandes sem a intervenção do cliente da AWS. (AMAZON WEB SERVICES, 7, 2014) Projetado para uso com outras Amazon Web Services: O Route 53 foi projetado para funcionar bem com outros serviços da AWS. É possível usar o Route 53 para mapear nomes de domínio para instâncias do Amazon EC2, buckets do Amazon S3, distribuições do Amazon CloudFront e outros recursos da AWS. (AMAZON WEB SERVICES, 7, 2014) 43 Simples: Com possibilidade de inscrição pelo autoatendimento, o Route 53 pode começar a responder as consultas DNS em poucos minutos. É possível configurar as definições de DNS com o Console da AWS ou uma API de fácil utilização. Também é possível integrar programaticamente a API do Route 53 em todo o aplicativo da Web. Por exemplo, você pode usar a API do Route 53 para criar um registro de DNS sempre que uma nova instância do EC2 for criada. (AMAZON WEB SERVICES, 7, 2014) Rápido: Usando uma rede anycast 21 global de servidores DNS no mundo todo, o Route 53 foi projetado para direcionar automaticamente seus usuários para a localização ideal dependendo das condições da rede. Como resultado, o serviço oferece baixa latência de consulta para os usuários finais, assim como baixa latência de atualização para as necessidades de gerenciamento de registros do DNS. (AMAZON WEB SERVICES, 7, 2014) Econômico: Paga-se somente pela gestão dos domínios por meio do serviço e do número de consultas às quais o serviço responde para cada um dos domínios, por um custo baixo e sem compromissos de uso mínimo ou quaisquer taxas prévias. (AMAZON WEB SERVICES, 7, 2014) Seguro: Ao integrar o Route 53 ao AWS Identity and Access Management (IAM), é possível conceder credenciais exclusivas e gerenciar permissões para todo usuário dentro da conta da AWS e especificar quem tem acesso a quais partes do serviço Route 53. (AMAZON WEB SERVICES, 7, 2014) Flexível: O Route 53 oferece balanceamento de carga do DNS. Isso permite designar “pesos” aos registros do DNS que especificam qual parte do seu tráfego é direcionada a vários pontos finais. (AMAZON WEB SERVICES, 7, 2014) 21 Anycast trabalha com a topologia de roteamento de dados para encaminhar os dados para o destino mais próximo. Resumidamente, ela encaminha as requisições feita por um ponto para o servidor mais próximo que possa responder por aquela requisição. (Fonte: <http://www.cisco.com/en/US/docs/app_ntwk_services/data_center_app_services/gss4400series/v3.1.1/admi nistration/guide/Anycast.html>, acesso em: 12 jan. 2014) 44 2.2.17 Amazon RDS O Amazon RDS é um banco de dados relacional na nuvem. Dentro dele é possível instanciar os seguintes sistemas gerenciadores de banco de dados: MySQL, Oracle, Microsoft SQL Server ou PostgreSQL. O Amazon RDS facilita a configuração, a operação e escalabilidade de um banco de dados relacional na nuvem. (AMAZON WEB SERVICES, 8, 2014) O Amazon RDS é integrado ao IAM (Identity Access and Management) da AWS, o que facilita a gestão de segurança do banco de dados. (VERAS, 2013, p. 223) O Amazon RDS faz o backup do banco de dados automaticamente e mantém o backup por um tempo configurado pelo usuário do serviço, permitindo a recuperação do estado do banco em uma data específica. (AMAZON WEB SERVICES, 8, 2014) É possível instanciar um banco de dados com o armazenamento padrão ou o armazenamento de IOPS (Input/Output Operations per Second, Operações de Entrada/Saída por segundo). As IOPS provisionadas do Amazon RDS permitem desempenho rápido, previsível e consistente de entrada e saída de dados. (AMAZON WEB SERVICES, 8, 2014) O Amazon RDS permite a sua replicação em múltiplas zonas de disponibilidade (chamado de Multi-AZ) facilitando o uso da replicação para aumentar a disponibilidade e confiabilidade de cargas de trabalho de produção. Segundo a documentação do Amazon RDS (AMAZON WEB SERVICES, 8, 2014): “Quando você provisiona uma instância de banco de dados Multi-AZ, o Amazon RDS cria automaticamente uma instância de banco de dados primária e replica sincronicamente os dados para uma instância de espera em uma zona de disponibilidade (AZ) diferente. Cada AZ opera em sua própria infraestrutura fisicamente distinta e independente e é projetada para ser altamente confiável.” 2.2.18 Amazon ElastiCache A AWS oferece um serviço elástico de cache em memória na nuvem que auxilia a implementação, operação e dimensionamento do mesmo. O cache em memória pode ser utilizado para aumentar o desempenho das aplicações web, permitindo que se recupere 45 informações de caches na memória em vez de recuperar essas mesmas informações no banco de dados, que são mais lentos. (AMAZON WEB SERVICES, 9, 2014) A Amazon ElastiCache fornece suporte para dois mecanismos de armazenamento em cache, de código aberto (AMAZON WEB SERVICES, 9, 2014): Memcached: um sistema de armazenamento em cache de objetos na memória largamente adotado. (AMAZON WEB SERVICES, 9, 2014) Redis: um popular armazenamento de chaves e seus respectivos valores na memória, que fornece suporte para estruturas de dados como listas e conjuntos classificados. O ElastiCache fornece suporte para a replicação mestre/escravo (master/slave) do Redis, que pode ser usada para se obter redundância cruzada de zonas de disponibilidade. (AMAZON WEB SERVICES, 9, 2014) 2.2.19 Modelos de precificação Os modelo de precificação da AWS são baseados nos seguintes aspectos (VERAS, 2013, p. 89): Pay as you go: Não há compromissos mínimos necessários, nem contratos de longo prazo. Essa flexibilidade reduz a necessidade de realizar um planejamento de uso dos recursos de forma detalhada. (VERAS, 2013, p. 89) Pague pelo uso: Não há necessidade de pagar adiantado para o excesso de capacidade ou ser penalizado por problemas de falta de planejamento. (VERAS, 2013, p. 89) Pague menos usando mais: Para transferência de armazenamento de dados, o preço é definido em camadas. Quanto mais usa, menos paga. Quando o recurso desejado é reservado mensalmente, o custo é ainda menor. (VERAS, 2013, p. 89) Preço personalizado: Existem preços personalizados para projetos de alto volume com necessidades específicas. (VERAS, 2013, p. 89) Características fundamentais da precificação (VERAS, 2013, p. 90): Computação (processamento) Armazenamento Transferência de dados para fora da nuvem 46 Apesar de existir um custo para transferência de dados para fora da nuvem, não existe custo para transferências dentro de uma mesma região. (VERAS, 2013, p. 90) O problema de comparar custos tradicionais com custos na AWS é que poucas empresas sabem exatamente o quanto gastam com infraestrutura. Além disso, o gasto não pode ser só dimensionado em recursos computacionais, deve-se considerar o gasto com espaço físico, energia elétrica, ar-condicionado, manutenção e pessoas capacitadas para garantir toda a estrutura e segurança necessárias para os recursos computacionais operarem corretamente. (VERAS, 2013, p. 89) Os preços podem variar de acordo com a região utilizada (VERAS, 2013, p. 90). Os valores exatos de cada serviço da AWS estão disponíveis no site: http://aws.amazon.com/pricing/ 3 PROPOSTA DE ARQUITETURAS PARA A NUVEM Neste capítulo serão apresentadas algumas propostas de arquitetura de aplicações utilizando os serviços da AWS. Essas arquiteturas são propostas na documentação da própria AWS, para que os seus clientes possam ter uma aplicação com um baixo custo de hospedagem, grande elasticidade, suporte a balanceamento de carga, alta disponibilidade e tolerância a falhas. 3.1 ARQUITETURA PARA HOSPEDAGEM DE APLICAÇÕES WEB Para utilizar a arquitetura de serviços AWS ideal para aplicações Web, recomendada pela própria AWS (AMAZON WEB SERVICES, 10, 2014), é necessário o uso dos seguintes serviços: Amazon Route 53 Amazon CloudFront Amazon S3 47 Elastic Load Balancing Amazon EC2 Auto Scaling Amazon RDS Figura 8: Arquitetura para hosting de uma aplicação Web. Fonte: AWS Reference Architetures: Web Hosting Application. Disponível em: <http://media.amazonwebservices.com/architecturecenter/AWS_ac_ra_web_01.pdf>. Acesso em: 4 jan. 2014. Visão geral da arquitetura 1. Através do Route 53, o DNS requisitado pelo browser do cliente é traduzido e o tráfego é roteado para os servidores da AWS. (AMAZON WEB SERVICES, 10, 2014) 2. Todo o conteúdo estático, de streaming ou dinâmico deve ser entregue pelo Amazon CloudFront. Sendo assim, as requisições são automaticamente roteadas para o servidor mais próximo do usuário, aumentando a performance da aplicação. (AMAZON WEB SERVICES, 10, 2014) 3. Recursos e conteúdos estáticos usados pela aplicação web devem ser armazenados no Amazon S3. (AMAZON WEB SERVICES, 10, 2014) 4. As requisições HTTP devem ser primeiramente gerenciadas pelo Elastic Load Balancing, no qual automaticamente distribui o tráfego de entrada da aplicação através de múltiplas instâncias EC2, dispersas entre várias Zonas de Disponibilidade (AZs). 48 Essa prática permite ainda maior tolerância a falhas nas aplicações fornecendo a capacidade de balanceamento de carga necessária em resposta ao tráfego de entrada da aplicação. (AMAZON WEB SERVICES, 10, 2014) 5. Os servidores web e de aplicação devem ser implantados nas instâncias EC2. (AMAZON WEB SERVICES, 10, 2014) 6. Os servidores web e de aplicação devem ser implantados em um grupo de “Auto Scaling”. O “Auto Scaling” da AWS automaticamente ajusta a capacidade computacional da aplicação de acordo com condições pré-definidas. O serviço de “Auto Scaling” da AWS possibilita que a capacidade computacional das instâncias EC2 aumente ou diminua automaticamente de acordo com a demanda requerida. (AMAZON WEB SERVICES, 10, 2014) 7. Para prover alta disponibilidade, o banco de dados relacional que contém os dados da aplicação deve possuir uma redundância em múltiplas zonas de disponibilidade. (AMAZON WEB SERVICES, 10, 2014) 3.2 ARQUITETURA PARA TOLERÂNCIA A FALHAS E ALTA DISPONIBILIDADE Para utilizar a arquitetura de serviços AWS ideal para aplicações com alta tolerância a falhas e alta disponibilidade, recomendada pela própria AWS (AMAZON WEB SERVICES, 10, 2014), é necessário o uso dos seguintes serviços: Amazon EC2 Amazon EBS Elastic Load Balancing Amazon S3 A maioria dos serviços da AWS, como Amazon S3, Amazon SimpleDB, Amazon SQS e Amazon ELB, foram construídos com tolerância a falhas e alta disponibilidade em mente. Serviços que provem infraestrutura básica, como o EC2 e o EBS, provem recursos específicos, como as zonas de disponibilidade, endereços de IP elásticos e snapshots, que um sistema com tolerância a falhas e alta disponibilidade devem usar corretamente. Apenas 49 mover um sistema para a nuvem não o torna tolerante a falhas ou altamente disponível. (AMAZON WEB SERVICES, 10, 2014) Abaixo seguem os passos necessários para uma arquitetura tolerante a falhas e com alta disponibilidade, primeiro através do serviço Elastic Load Balancing (Figura 8), depois, através do serviço Elastic IP (Figura 9) 1. Balanceamento de carga é uma maneira efetiva de aumentar a disponibilidade de um sistema. Instâncias que falham podem ser substituídas facilmente pelo balanceador de carga, enquanto as outras instâncias continuam funcionando. (AMAZON WEB SERVICES, 10, 2014) 2. As zonas de disponibilidade são em locais geograficamente distintos, projetados para ser isolados de falhas em outras zonas de disponibilidade. Colocando as instâncias EC2 em múltiplas zonas de disponibilidade, uma aplicação fica protegida caso haja uma falha em alguma localidade específica. É importante rodar as aplicações de maneira independente em diversas zonas de disponibilidade, sendo em uma mesma região ou em regiões diferentes, para que, caso alguma das zonas falhe, a aplicação em outra zona continue rodando. Quando se projeta um sistema desse tipo, é importante possuir um bom conhecimento das zonas de disponibilidade e regiões. (AMAZON WEB SERVICES, 10, 2014) 3. Endereços Elastic IP são IPs públicos que podem ser programaticamente mapeados entre instâncias de uma determinada região. Endereços Elastic IP são associados com uma conta AWS e não com uma instância específica. Endereços Elastic IP podem ser utilizados para contornar falhas de instância EC2 ou zona de disponibilidade remapeando rapidamente o endereço para outra instância em execução ou uma instância de substituta que pode ser iniciada. Instâncias Reservadas podem ajudar a garantir que essa capacidade está disponível em outra zona. (AMAZON WEB SERVICES, 10, 2014) 4. Dados importantes nunca devem ser armazenados apenas no armazenamento da instância sem backups adequados, replicações, ou uma maneira de recriar os dados. O Amazon EBS oferece volumes para armazenamentos independentes de instâncias específicas que são mais duráveis do que no armazenamento da instância. Volumes EBS são automaticamente replicadas dentro de uma única zona de disponibilidade. Para aumentar a durabilidade ainda mais, snapshots de um período específico podem ser criados para armazenar dados em volumes no Amazon S3, que são então replicados para várias zonas de disponibilidade. Embora os volumes EBS estão 50 vinculados a uma zona de disponibilidade específica, snapshots são vinculados a uma região. Usando um snapshot, você pode criar volumes EBS em qualquer zona de disponibilidade da mesma região. Esta é uma maneira eficaz de lidar com falhas de disco ou outras questões de servidor, bem como com os problemas que afetam uma zona de disponibilidade específica. Os snapshots são incrementais, por isso é aconselhável armazenar somente snapshots recentes. (AMAZON WEB SERVICES, 10, 2014) Figura 9: Arquitetura para alta tolerância a falhas e alta disponibilidade utilizando o Elastic Load Balancing. Fonte: AWS Reference Architetures: FAULT TOLERANCE & HIGH AVAILABILITY. Disponível em: <http://media.amazonwebservices.com/architecturecenter/AWS_ac_ra_ftha_04.pdf>. Acesso em 4 jan. 2014. 51 Figura 10: Arquitetura para alta tolerância a falhas e alta disponibilidade utilizando o Elastic IP. Fonte: AWS Reference Architetures: FAULT TOLERANCE & HIGH AVAILABILITY. Disponível em: <http://media.amazonwebservices.com/architecturecenter/AWS_ac_ra_ftha_04.pdf>. Acesso em: 4 jan. 2014 52 4 CASO DE USO: APLICAÇÃO LEGADA Neste capítulo será visto a atual arquitetura das aplicações de uma empresa hipotética e a infraestrutura na qual essa arquitetura costuma rodar. Além disso, serão propostas alterações na arquitetura atual das aplicações dessa empresa para que a mesma possa rodar de acordo com as arquiteturas propostas no capítulo 3 (Proposta de arquiteturas para a nuvem). 4.1 INFRAESTRUTURA ATUAL Figura 11: Diagrama de deployment mostrando a atual infraestrutura que roda as aplicações da empresa hipotética Na figura 11 é possível visualizar a atual infraestrutura que roda as aplicações da empresa hipotética. 53 4.2 ARQUITETURA ATUAL A arquitetura atual segue o modelo Model-view-controller (MVC), que é estruturado em três camadas. Na tabela 1, é possível visualizar quais frameworks são utilizados em cada camada. Tabela 1: Frameworks utilizados para suportar o modelo MVC nas aplicações da empresa hipotética Model Controller View Java Persistence API (JPA) Java Server Faces (JSF) Java Server Faces (JSF) Hibernate Contexts and Dependency Injection (CDI) JavaScript Java Database (JDBC) Connectivity Enterprise JavaBeans (EJB) 4.3 HyperText Markup Language (HTML) JSF Segundo Burns (2009, p. 37): “A capacidade de processamento do ciclo de vida do request JSF de sincronizar automaticamente do lado do servidor propriedades Java Bean para um conjunto hierárquico de componentes que são baseados na interface apresentada ao usuário é uma grande vantagem sobre as outras tecnologias web. Esse recurso é conhecido como “gerenciamento de estado” e é uma pedra angular do valor fornecido pelo JSF”. A afirmação de Burns pode ser vista melhor na figura 12, logo abaixo. 54 Figura 12: Uma representação do lado do servidor da interface com o usuário. (BURNS, 2009, p. 37) Isso significa que todo o usuário da aplicação possui na sua sessão uma árvore de componentes que representa aquilo que o mesmo está vendo renderizado na tela. (BURNS, 2009, p. 38) Devido a essa replicação da árvore de componentes, tanto no servidor quanto no cliente, o balanceamento de carga é dificultado, pois o mesmo, no seu modo padrão, pressupõe que os servidores não guardam sessão do usuário. (AMAZON WEB SERVICES, 11, 2012) Uma das maneiras de resolver esse problema é utilizar o conceito de Sticky Sessions, no qual relaciona uma sessão de usuário a um servidor específico. Isso garante que todas as requisições provenientes de um usuário durante a sua sessão será enviado para a mesma instância do aplicativo. (AMAZON WEB SERVICES, 11, 2012) 55 4.4 SESSÕES DE USUÁRIO Atualmente todas as sessões do usuário nas aplicações dessa empresa hipotética são armazenadas no próprio servidor de aplicação. Isso dificulta o balanceamento de carga, pois, no cenário de balanceamento de carga, não se sabe em qual dos servidores disponíveis cairá a requisição do usuário. Sendo assim, ou o a sessão do usuário deve ser replicada em todos os servidores, ou deve-se utilizar o recurso Sticky Sessions, no qual um usuário específico é endereçado a somente um dos servidores do balanceamento de carga. (AMAZON WEB SERVICES, 11, 2012) O uso de um servidor de cache é recomendado para evitar manter a sessão do usuário no servidor web, que pode ocasionar a perda da sessão com a quebra do servidor. (VERAS, 2013, p. 247) 4.5 CACHE DE CONSULTAS DE BANCO A utilização de um cache para as consultas no banco de dados são importantes para a redução da carga sobre o banco de dados (chamado de cache de query), melhorando o desempenho da aplicação. (VERAS, 2013, p. 248) O atual framework da empresa hipotética não possui nenhuma extensão para auxiliar que determinadas consultas possam usufruir de uma estrutura pré-definida de cache. 4.6 MULTITENANCY As aplicações da empresa hipotética não cobrem todos os cenários Multi-tenant, apenas o cenário 1 e 2, mostrados no capítulo 2.2.9, no entanto, o cenário 3 é o melhor uso do multitenancy, e ideal para aplicações SaaS. Deve ser implementado os identificadores de tenant (tenant id) nas entidades que representam o modelo de dados da aplicação. 56 4.7 CHAMADAS ASSÍNCRONAS Para o correto escalonamento dos serviços da aplicação, os EJBs devem ser apenas stateless (sem estado), para que a elasticidade possa funcionar corretamente sem haver problemas com o estado dos objetos. Apesar da arquitetura da empresa hipotética permitir serviços stateless, através dos EJB's, ela não prega o uso de serviços assíncronos. Como visto no capítulo 2.2.10, o uso de serviços assíncronos é importante para dar uma melhor experiência de uso da aplicação ao usuário. Alguns serviços, que são demorados por natureza, podem continuar rodando enquanto o usuário navega em outras partes do sistema. O uso de sistemas sincronizados deixará o usuário esperando até o serviço ser executado, o que causaria uma experiência de uso ruim para o usuário. 4.8 ARQUITETURA DE SERVIÇOS Conforme disse Veras (2003, p. 286), “A nuvem reforça o princípio SOA de design de que quanto mais separados estiverem os componentes do sistema, muito mais e de melhor maneira eles se dimensionarão e facilitarão a elasticidade.” A arquitetura atual da empresa hipotética utiliza EJBs para encapsular os serviços. Isso já é suficiente para implementar a elasticidade, mas não é o suficiente para disponibilizar esses mesmos serviços para acesso de outras linguagens. Para resolver esse problema, recomenda-se o uso de serviços REST, já explicados no capítulo 2.2.6.1.2, possibilitando a criação de clientes em diversas linguagens e interfaces diferentes que acessem os mesmos serviços. 57 5 CONCLUSÃO O estudo sobre os serviços disponibilizados na nuvem foi muito importante para saber como projetar uma aplicação para utilizar os mesmos da melhor maneira. Conhecendo profundamente todos os serviços, é possível conseguir alta performance, tolerância a falhas e alta disponibilidade com relativo baixo custo. Uma arquitetura mal projetada, utilizando apenas serviços básicos pode gerar insatisfação, desapontamento e altos custos com a infraestrutura na nuvem. Pesquisando também sobre arquiteturas, concluiu-se que nenhum dos conceitos levantados são exclusivos da infraestrutura em nuvem. A maioria deles sempre existiu, mas era extremamente complexos de serem implementados. Conceitos como elasticidade, balanceamento de carga e auto-escalonamento já existiam antes mesmo da nuvem. Apesar desses conceitos serem pouco aplicados na prática da maioria das empresas, eles foram cruciais para o crescimento exponencial dos provedores de infraestrutura na nuvem, ainda mais pela facilidade e possibilidades que se tem na hora utilizá-los. Com esses conceitos novamente em alta, resta às aplicações projetarem suas arquiteturas para utilizá-los da melhor maneira possível sendo esse o principal estudo deste trabalho: saber quais são as arquiteturas de hardware ideais e o que deve ser projetado na aplicação para a mesma utilizar bem esses recursos. O comparativo entre a aplicação legada, que roda em um servidor próprio, foi muito importante para entender melhor e na prática como projetar adequadamente uma aplicação para a nuvem. Por fim, espero que esses estudos possam ser aplicados de fato para que as empresas que o apliquem possam estar preparadas para essa mudança de responsabilidade sobre a infraestrutura de hardware e de redes, que já é uma realidade, e, com isso, possam estar a frente no mercado. 58 REFERÊNCIAS ABBOTT, Martin L.; FISHER, Michael T.. Scalability Rules: 50 Principles for Scaling Web Sites. Boston: Addison-wesley Professional, 2011. ALBERTONI, Fabio. et al. WebSphere Application Server V7 Administration and Configuration Guide. United States of America: IBM, 2010. AMAZON WEB SERVICES, 1 (Org.). About AWS. Disponível em: <http://aws.amazon.com/about-aws/>. Acesso em: 20 dez. 2013. AMAZON WEB SERVICES, 2 (Org.). Products & Services. Disponível em: <http://aws.amazon.com/products/>. Acesso em: 13 jan. 2014. AMAZON WEB SERVICES, 3 (Org.). Amazon Elastic Compute Cloud: Amazon EC2. Disponível em: <http://aws.amazon.com/ec2/>. Acesso em: 13 jan. 2014. AMAZON WEB SERVICES, 4 (Org.). Amazon Simple Storage Service: Amazon S3. Disponível em: <http://aws.amazon.com/s3/>. Acesso em: 12 jan. 2014. AMAZON WEB SERVICES, 5 (Org.). Amazon Elastic Compute Cloud: Amazon EC2. Disponível em: <http://aws.amazon.com/ec2/>. Acesso em: 12 jan. 2014. AMAZON WEB SERVICES, 6 (Org.). Amazon CloudFront. Disponível em: <http://aws.amazon.com/cloudfront/>. Acesso em: 6 jan. 2014. AMAZON WEB SERVICES, 7 (Org.). Amazon Route 53. Disponível em: <http://aws.amazon.com/route53/>. Acesso em: 7 jan. 2014. AMAZON WEB SERVICES, 8 (Org.). Amazon Relational Database Service: Amazon RDS. Disponível em: <http://aws.amazon.com/rds/>. Acesso em: 5 jan. 2014. AMAZON WEB SERVICES, 9 (Org.). Amazon ElastiCache. Disponível em: <http://aws.amazon.com/elasticache/>. Acesso em: 8 jan. 2014. AMAZON WEB SERVICES, 10 (Org.). AWS Architecture Center. Disponível em: <http://aws.amazon.com/architecture/>. Acesso em: 18 jan. 2014. AMAZON WEB SERVICES, 11 (Org.). Create Sticky Sessions. 2012. Disponível em: <http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/US_StickySessio ns.html>. Acesso em: 3 fev. 2014. ARORA, Ankit; GUPTA, Abhinav. Force.com Tips and Tricks: A quick reference guide for administrators and developers to get more productive with Force.com. Birmingham: Packt Publishing Ltd., 2013. BAKKER, Paul; Ertman, Bert. Building Modular Cloud Apps with OSGi. 1. ed United States of America: O'Reilly, 2013. BURNS, Ed; SCHALK, Chris; GRIFFIN, Neil. JavaServer Faces 2.0: The Complete Reference. United States Of America: Mcgraw-hill Osborne Media, 2009. 59 CHATE, Scott. Convert your web application to a multi-tenant SaaS solution: A checklist of considerations and steps to quickly turn your web app into a cloud application. 2010. Disponível em: <http://www.ibm.com/developerworks/cloud/library/cl-multitenantsaas/>. Acesso em: 10 jan. 2014. CHEDE, Cezar. O que é Elasticidade em Cloud Computing, dez. 2009. Disponível em: <https://www.ibm.com/developerworks/community/blogs/ctaurion/entry/o_que__c3_a9_elast icidade_em_cloud_computing?lang=en>. Acesso em: 02 de dez. 2013. COUTINHO, Emanuel F.; Sousa, Flávio R. C.; Gomes, Danielo G.; Souza, José N. de. Elasticidade em Computação na Nuvem: Uma Abordagem Sistemática. 2013. Disponível em: <http://sbrc2013.unb.br/files/anais/minicursos/minicurso-5.pdf >. Acesso em: 09 de dez. 2013. DIKMANS, Lonneke; Luttikhuizen, Ronald v. SOA Made Simple: Discover the true meaning behind the buzzword that is 'Service Oriented Architecture'. 1. ed. United Kingdom: Packt Publishing, 2012. HENDERSON, Cal. Building Scalable Web Sites. 1. ed United States of America: O'Reilly, 2006. HOWARD, Chris; Plummer, Daryl C.; Genovese, Yvonne; Mann, Jeffrey; Willis, David A.; Smith, Mitchell Smith. The Nexus of Forces: Social, Mobile, Cloud and Information, jun. 2010. Disponível em: <https://www.gartner.com/doc/2049315 >. Acesso em: 11 de dez. 2013. JACOBSON, Daniel; Brail, Greg; Woods, Dan. APIs: A Strategy Guide. United States of America: O'Reilly, 2012. MELL, Peter; Grance, Timothy. The NIST Definition of Cloud Computing: Recommendations of the National Institute of Standards and Technology, set 2011. Disponível em: <http://csrc.nist.gov/publications/nistpubs/800-145/SP800-145.pdf >. Acesso em: 18 nov. 2013. OTTINGER, Joseph. What is an App Server? Set. 2008. Disponível em: <http://www.theserverside.com/news/1363671/What-is-an-App-Server > Acesso em: 10 de dez. 2013 REESE, George. Cloud Application Architectures: Building Applications and Infrastructure in the Cloud. United States of America: O'Reilly, 2009. ROSNER, Todd. Learning AWS OpsWorks: Learn how to exploit advanced technologies to deploy and auto-scale web stacks. 1. ed. United Kingdom: Packt Publishing, 2013. VARIA, Jinesh. Projetando para a nuvem: práticas recomendadas, jan. 2010. Disponível em: <http://d36cz9buwru1tt.cloudfront.net/pt/wp/AWS_Cloud_Best_Practices_05252010.pdf >. Acesso em: 20 nov. 2013. VERAS, Manoel. Arquitatura de Nuvem: Amazon Web Services (AWS). 1. ed. Rio de Janeiro: Brasport, 2013. VLIET, Jurg v.; Paganelli, Flavia. Programming Amazon EC2. 1. ed. United States of America: O'Reilly, 2011. 60 WALSH, Bob. The Web Startup Success Guide. United States of America: APRESS, 2009. WILDER, Bill. Cloud Architecture Patters. United States of America: O'Reilly, 2012.