Prévia do material em texto
Indaial – 2020 Fundamentos ao Cloud Computing e deploy na nuvem Prof. Airan Arinê Possamai Prof. Marcio Poffo Prof. Nader Ghoddosi Prof.ª Neli Miglioli Sabadin Prof. Pedro Sidnei Zanchett Prof.ª Simone Erbs da Costa 1a Edição Copyright © UNIASSELVI 2020 Elaboração: Prof. Airan Arinê Possamai Prof. Marcio Poffo Prof. Nader Ghoddosi Prof.ª Neli Miglioli Sabadin Prof. Pedro Sidnei Zanchett Prof.ª Simone Erbs da Costa Revisão, Diagramação e Produção: Centro Universitário Leonardo da Vinci – UNIASSELVI Ficha catalográfica elaborada na fonte pela Biblioteca Dante Alighieri UNIASSELVI – Indaial. Impresso por: P856f Possamai, Airan Arinê Fundamentos ao cloud computing e deploy na nuvem. / Airan Arinê Possamai et.al. – Indaial: UNIASSELVI, 2020. 227 p.; il. ISBN 978-65-5663-329-9 ISBN Digital 978-65-5663-330-5 1. Computação em nuvem. – Brasil. I. Possamai, Airan Arinê. II. Poffo, Marcio. III. Ghoddosi, Nader. IV. Zanchett, Pedro Sidnei. V. Costa, Simone Erbs da. VI. Sabadin, Neli Miglioli. VII. Centro Universitário Leonardo Da Vinci. CDD 006.78 apresentação Atualmente, a computação em nuvem está sendo cada vez mais utilizada, sobretudo na prática conhecida como “sob demanda”, isto é, o pagamento pelo uso de recursos é realizado somente para a quantidade de recursos utilizada. Os serviços fornecidos, as APIs e os aplicativos que podem ser hospedados por estes provedores de nuvem substituíram a utilização de servidores locais, podendo ser citados os provedores comerciais Amazon e Google, dentro outros. Neste sentido, existem três modelos de serviços baseados em nuvem, sendo um deles o Software as a Service (SaaS), em que o consumidor utiliza um aplicativo sem controle do sistema, hardware e infraestrutura de rede. Outro modelo é a Plataforma como Serviço (PaaS), no qual os usuários controlam os aplicativos, mas não controlam sistema operacional, hardware e infraestrutura de rede. E por fim, existe o modelo de Infraestrutura como Serviço (IaaS), em que o usuário acessa recursos de computação fundamentais, como CPU, memória, middleware e armazenamento, mas o consumidor não controla a infraestrutura de nuvem abaixo deles. Existe também o conceito de nuvem chamado BaaS (Back-end as Service), o qual é ideal para abstrair algumas das tarefas repetitivas em aplicações, mobile ou web, como login e storage de arquivos, por exemplo, não se preocupando com a infraestrutura envolvida. Além disso, com a utilização deste modelo de serviço, se reduz os custos e se obtém a escalabilidade elástica. Um dos conceitos de computação em nuvem é o serverless computing, ou computação sem servidores, também conhecida por Function as a Service (FaaS), em que o provedor de nuvem possui o gerenciamento completo do contêiner onde as funções são executadas, para atendimento às solicitações, e, com isso, a necessidade de executar sistemas pode ser extinguida, passando a execução baseada em eventos, aumentando a possibilidade de criação de aplicações escalonáveis. Lembrando que estes tipos de serviços em nuvem são baseados na banda que um usuário possui de Internet e, portanto, bandas ruins significam que a utilização de recursos baseados em nuvem não é viável. Além disso, existe a questão de que usuários e organizações não se sentem confortáveis com o armazenamento de seus dados e aplicativos em uma infraestrutura que eles não controlam, sendo que a migração para uma infraestrutura compartilhada pode aumentar o potencial risco de acesso não autorizado, além de exposição de dados confidenciais. Neste sentido, sistemas baseados em nuvem precisam ser consistentes com relação à autenticação, o gerenciamento de identidade, conformidade e tecnologias relacionadas ao acesso, sendo estas imprescindíveis. A computação em nuvem possui uma das vantagens em diminuir o gasto de capital com compra de hardware e software, instalações e configurações em datacenters locais, eletricidade, além de especialistas de TI para o gerenciamento da infraestrutura. Além disso, dependendo modelo utilizado, normalmente o desenvolvedor não precisará se preocupar e ocupar seu tempo com configuração de infraestrutura para executar suas aplicações, reservando seu tempo unicamente com seu trabalho de desenvolvimento, melhorando com isso a produtividade. Outro benefício da computação em nuvem é a possibilidade de disponibilização de grandes quantidades de recursos de computação em minutos, muitas vezes com apenas alguns cliques, fornecendo flexibilidade e aliviando a pressão do planejamento de capacidade. Neste sentido, existem vários modelos de serviços, cada um com suas características, vantagens e desvantagens, se tornando mais ou menos produtiva ou barata para uma determinada organização ou equipe. Este livro fornece uma exploração de conceitos de computação em nuvem, como ela funciona, quais os tipos de serviços e plataformas, além do conceito serverless, containers e versionamento de deploy de aplicações para aprofundamento e entendimento de como se utilizar a computação em nuvem. Bons estudos! Prof. Airan Arinê Possamai. Prof. Marcio Poffo. Prof. Nader Ghoddosi. Prof. Pedro Sidnei Zanchett. Prof.ª Simone Erbs da Costa. Você já me conhece das outras disciplinas? Não? É calouro? Enfim, tanto para você que está chegando agora à UNIASSELVI quanto para você que já é veterano, há novi- dades em nosso material. Na Educação a Distância, o livro impresso, entregue a todos os acadêmicos desde 2005, é o material base da disciplina. A partir de 2017, nossos livros estão de visual novo, com um formato mais prático, que cabe na bolsa e facilita a leitura. O conteúdo continua na íntegra, mas a estrutura interna foi aperfeiçoada com nova diagra- mação no texto, aproveitando ao máximo o espaço da página, o que também contribui para diminuir a extração de árvores para produção de folhas de papel, por exemplo. Assim, a UNIASSELVI, preocupando-se com o impacto de nossas ações sobre o ambiente, apresenta também este livro no formato digital. Assim, você, acadêmico, tem a possibilida- de de estudá-lo com versatilidade nas telas do celular, tablet ou computador. Eu mesmo, UNI, ganhei um novo layout, você me verá frequentemente e surgirei para apresentar dicas de vídeos e outras fontes de conhecimento que complementam o assun- to em questão. Todos esses ajustes foram pensados a partir de relatos que recebemos nas pesquisas institucionais sobre os materiais impressos, para que você, nossa maior prioridade, possa continuar seus estudos com um material de qualidade. Aproveito o momento para convidá-lo para um bate-papo sobre o Exame Nacional de Desempenho de Estudantes – ENADE. Bons estudos! NOTA Olá, acadêmico! Iniciamos agora mais uma disciplina e com ela um novo conhecimento. Com o objetivo de enriquecer seu conhecimento, construímos, além do livro que está em suas mãos, uma rica trilha de aprendizagem, por meio dela você terá contato com o vídeo da disciplina, o objeto de aprendizagem, materiais complemen- tares, entre outros, todos pensados e construídos na intenção de auxiliar seu crescimento. Acesse o QR Code, que levará ao AVA, e veja as novidades que preparamos para seu estudo. Conte conosco, estaremos juntos nesta caminhada! LEMBRETE sumário UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING .................................................... 1 TÓPICO 1 — INTRODUÇÃO AO CLOUD COMPUTING E O COTIDIANO ......................... 3 1 INTRODUÇÃO .................................................................................................................................... 3 2 CONCEITOS DE CLOUD COMPUTING ...................................................................................... 4 2.1 ELASTICIDADE .............................................................................................................................. 7 2.2 DISPONIBILIDADE .......................................................................................................................7 2.3 ESCALABILIDADE ........................................................................................................................ 7 3 A NUVEM E O COTIDIANO ............................................................................................................ 8 3.1 SERVIÇOS DE ARMAZENAMENTO ......................................................................................... 9 3.2 SERVIÇOS DE COMUNICAÇÃO .............................................................................................. 10 3.2.1 Plataforma como um serviço (PaaS) .................................................................................. 12 3.2.1 Software como um serviço (SaaS)...................................................................................... 12 3.3 SERVIÇOS DE TRANSMISSÃO AO VIVO ............................................................................... 13 3.4 DEMAIS EXEMPLOS NO COTIDIANO ................................................................................... 15 4 A NUVEM E BIG DATA ................................................................................................................... 16 5 INFRAESTRUTURA COMO UM SERVIÇO (IAAS) ................................................................. 18 5.1 PLATAFORMAS DE IAAS .......................................................................................................... 20 5.1.1 DigitalOcean ......................................................................................................................... 20 5.1.2 Linode .................................................................................................................................... 21 5.1.3 Rackspace .............................................................................................................................. 22 5.1.4 Amazon Web Services (AWS) ............................................................................................ 22 5.1.5 Cisco Metapod...................................................................................................................... 23 5.1.6 Microsoft Azure ................................................................................................................... 24 5.1.7 Google Compute Engine (GCE) ........................................................................................ 25 RESUMO DO TÓPICO 1..................................................................................................................... 26 AUTOATIVIDADE .............................................................................................................................. 27 TÓPICO 2 — SOFTWARE COMO SERVIÇO - SAAS .................................................................. 29 1 INTRODUÇÃO .................................................................................................................................. 29 2 CONCEITO DE SAAS ...................................................................................................................... 30 3 CARACTERÍSTICAS DO SAAS .................................................................................................... 33 4 APLICAÇÕES SAAS EM CENÁRIOS DE BIG DATA ............................................................... 35 5 PLATAFORMAS DE SAAS.............................................................................................................. 37 5.1 GOOGLE APPS ............................................................................................................................. 37 5.2 ONEDRIVE .................................................................................................................................... 38 5.3 DROPBOX ...................................................................................................................................... 39 5.4 SALESFORCE ................................................................................................................................ 40 5.5 CISCO WEBEX .............................................................................................................................. 40 5.6 CONCUR........................................................................................................................................ 41 5.7 GOTOMEETING ........................................................................................................................... 41 5.8 GOOGLE BIGQUERY ................................................................................................................. 42 5.9 O GOOGLE DRIVE ...................................................................................................................... 43 RESUMO DO TÓPICO 2..................................................................................................................... 44 AUTOATIVIDADE .............................................................................................................................. 46 TÓPICO 3 — PLATAFORMA COMO SERVIÇO PAAS ............................................................... 47 1 INTRODUÇÃO .................................................................................................................................. 47 2 CONCEITOS DE PAAS .................................................................................................................... 47 4 VANTAGENS E DESVANTAGENS DO USO DE PAAS .......................................................... 54 5 APLICAÇÕES PAAS EM CENÁRIOS DE BIG DATA ............................................................... 55 6 PLATAFORMAS DE PAAS .............................................................................................................. 57 6.1 AWS ELASTIC BEANSTALK .............................................................................................. 57 6.2 WINDOWS AZURE PLATFORM (WAP) .................................................................................. 58 6.3 HEROKU ........................................................................................................................................ 60 6.4 FORCE.COM ................................................................................................................................. 61 6.5 GOOGLE APP ENGINE .............................................................................................................. 62 6.6 APACHE STRATOS ...................................................................................................................... 63 6.7 OPENSHIFT ................................................................................................................................... 64 6.7.1 Red Hat OpenShift............................................................................................................... 65 6.8 IBM .................................................................................................................................................. 66 6.9 JELASTIC ....................................................................................................................................... 67 LEITURA COMPLEMENTAR ............................................................................................................ 68 RESUMO DO TÓPICO 3..................................................................................................................... 72 AUTOATIVIDADE .............................................................................................................................. 74 REFERÊNCIAS ...................................................................................................................................... 76 UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) .................................................................................................................................. 83 TÓPICO 1 — SERVERLESS .................................................................................................................85 1 INTRODUÇÃO .................................................................................................................................. 85 2 CONCEITOS DE SERVERLESS ...................................................................................................... 86 2.1 SERVERLESS COMO COMPUTAÇÃO ORIENTADA A EVENTOS .................................... 87 2.2 ESTRUTURA DA ARQUITETURA SERVERLESS ................................................................... 88 2.3 SERVERLESS: FUNÇÃO COMO UM SERVIÇO ..................................................................... 90 3 FUNÇÕES E OBJETIVOS ................................................................................................................ 90 4 SERVERLESS E CLOUD COMPUTING ......................................................................................... 92 4.1 PRINCIPAIS DIFERENÇAS ENTRE COMPUTAÇÃO SERVERLESS E CONSTRUIR A INFRAESTRUTURA DO ZERO .................................................................................................. 93 4.1.1 Desenvolvimento de aplicações......................................................................................... 93 4.1.2 Processos independentes .................................................................................................... 94 5 POR QUE USAR SERVERLESS ....................................................................................................... 97 5.1 DESENVOLVIMENTO E IMPLANTAÇÃO RÁPIDA............................................................. 97 5.2 BAIXO CUSTO .............................................................................................................................. 98 5.3 ESCALONABILIDADE SOB DEMANDA ................................................................................ 98 5.4 REDUZIR O TEMPO DE ATIVAÇÃO DA APLICAÇÃO ....................................................... 99 5.5 ALTA DISPONIBILIDADE DA APLICAÇÃO ......................................................................... 99 5.6 SEPARAÇÃO DE PREOCUPAÇÕES POR COMPONENTES ............................................... 99 RESUMO DO TÓPICO 1................................................................................................................... 100 AUTOATIVIDADE ............................................................................................................................ 102 TÓPICO 2 — BACK-END AS SERVICE - BAAS............................................................................ 105 1 INTRODUÇÃO ................................................................................................................................ 105 2 APLICAÇÕES ................................................................................................................................... 106 3 CONCEITOS DE BACK-END AS A SERVICE - BAAS ............................................................. 106 4 ARQUITETURA DE BAAS ............................................................................................................ 108 5 DIFERENÇA ENTRE FRONT-END E BACK-END .................................................................... 108 6 RAZÕES PARA USAR BAAS ........................................................................................................ 110 6.1 RAZÕES COMERCIAIS ............................................................................................................. 110 6.2 RAZÕES TÉCNICAS ................................................................................................................. 111 7 QUANDO UTILIZAR UM BAAS? ............................................................................................... 111 7.1 VANTAGENS DE UM BAAS .................................................................................................... 112 7.2 DESVANTAGENS DE UM BAAS ............................................................................................ 112 8 BAAS E SEUS RECURSOS ............................................................................................................ 113 8.1 IAAS X PAAS X BAAS ............................................................................................................... 113 8.1.1 Azure Mobile Apps ........................................................................................................... 115 8.1.2 Back4App ............................................................................................................................ 115 8.1.3 Firebase................................................................................................................................ 116 8.1.4 Parse ..................................................................................................................................... 116 8.1.5 CloudKit .............................................................................................................................. 117 8.1.6 Kinvey ................................................................................................................................. 117 8.1.7 AWS Ampify ....................................................................................................................... 118 8.1.8 Kii ......................................................................................................................................... 118 8.1.9 Kumulos .............................................................................................................................. 118 9 MERCADO ........................................................................................................................................ 119 RESUMO DO TÓPICO 2................................................................................................................... 120 AUTOATIVIDADE ............................................................................................................................ 121 TÓPICO 3 — FUNÇÃO COMO SERVIÇO (FAAS) ..................................................................... 123 1 INTRODUÇÃO ................................................................................................................................ 123 2 CONCEITOS ..................................................................................................................................... 124 3 FUNÇÕES COMO SERVIÇO ........................................................................................................ 126 4 ESCALABILIDADE ......................................................................................................................... 128 5 SEGURANÇA ................................................................................................................................... 128 6 CUSTOS RELACIONADOS.......................................................................................................... 128 7 CASOS DE APLICAÇÕES ............................................................................................................. 129 8 APLICAÇÕES EM CENÁRIOS DE BIG DATA ......................................................................... 130 9 DESVANTAGENS ........................................................................................................................... 131 10 PLATAFORMAS DE FAAS .......................................................................................................... 131 10.1 AWS LAMBDA .......................................................................................................................... 131 10.2 GOOGLE CLOUD FUNCTIONS ............................................................................................. 136 10.3 MICROSOFT AZURE FUNCTIONS ...................................................................................... 140 10.4 IBM CLOUD FUNCTIONS ...................................................................................................... 142 LEITURA COMPLEMENTAR ..........................................................................................................145 RESUMO DO TÓPICO 3................................................................................................................... 147 AUTOATIVIDADE ............................................................................................................................ 149 REFERÊNCIAS .................................................................................................................................... 151 UNIDADE 3 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO ................ 153 TÓPICO 1 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO .................... 155 1 INTRODUÇÃO ................................................................................................................................ 155 2 CONCEITOS ..................................................................................................................................... 155 2.1 INTRODUÇÃO AOS CONTÊINERES .................................................................................... 156 2.2 QUANDO USAR DOCKER ...................................................................................................... 158 3 TRABALHANDO COM OS CONTÊINERES ............................................................................ 159 RESUMO DO TÓPICO 1................................................................................................................... 172 AUTOATIVIDADE ............................................................................................................................ 173 TÓPICO 2 — CONTÊINER COMO SERVIÇO (CAAS) ............................................................. 175 1 INTRODUÇÃO ............................................................................................................................... 175 2 CONCEITOS .................................................................................................................................... 175 3 CASOS DE APLICAÇÕES ............................................................................................................ 178 4 O FUNCIONAMENTO ................................................................................................................. 178 5 DESVANTAGENS .......................................................................................................................... 180 6 PLATAFORMAS DE CAAS .......................................................................................................... 180 6.1 AMAZON EC2 CONTAINER SERVICE (ECS) ..................................................................... 181 6.2 GOOGLE CONTÊINER ENGINE (GKE) .............................................................................. 191 6.3 SERVIÇO DE CONTÊINER DO AZURE (ACS) .................................................................... 192 RESUMO DO TÓPICO 2................................................................................................................... 195 AUTOATIVIDADE ............................................................................................................................ 196 TÓPICO 3 — VERSIONAMENTO E DEPLOY EM NUVEM .................................................... 197 1 INTRODUÇÃO ................................................................................................................................ 197 2 CONCEITOS DE VERSIONAMENTO ....................................................................................... 197 2.1 O SISTEMA DISTRIBUÍDO GIT ............................................................................................... 202 2.2 FERRAMENTAS ......................................................................................................................... 206 3 CONCEITOS DE DEPLOY ............................................................................................................ 210 4 AUTOMAÇÃO DO DEPLOY EM NUVEM ............................................................................... 212 LEITURA COMPLEMENTAR .......................................................................................................... 214 RESUMO DO TÓPICO 3................................................................................................................... 222 AUTOATIVIDADE ............................................................................................................................ 223 REFERÊNCIAS .................................................................................................................................... 224 1 UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING OBJETIVOS DE APRENDIZAGEM PLANO DE ESTUDOS A partir do estudo desta unidade, você deverá ser capaz de: • conhecer os fundamentos de cloud computing; • compreender e introduzir a computação em nuvem; • conhecer exemplos de computação em nuvem no cotidiano; • conhecer quais os principais recursos disponibilizados em nuvem; • conhecer os três grandes modelos de serviços em nuvem. Esta unidade está dividida em três tópicos. No decorrer da unidade, você encontrará autoatividades com o objetivo de reforçar o conteúdo apresentado. TÓPICO 1 - INTRODUÇÃO AO CLOUD COMPUTING E O COTIDIANO TÓPICO 2 - SOFTWARE COMO SERVIÇO – SAAS TÓPICO 3 - PLATAFORMA COMO SERVIÇO – PAAS Preparado para ampliar seus conhecimentos? Respire e vamos em frente! Procure um ambiente que facilite a concentração, assim absorverá melhor as informações. CHAMADA 2 3 TÓPICO 1 — UNIDADE 1 INTRODUÇÃO AO CLOUD COMPUTING E O COTIDIANO 1 INTRODUÇÃO Você que é profissional ou estudante de Tecnologia da Informação (TI) sabe que muitos termos da área foram muito instigados, sendo um deles o cloud computing, muito utilizado no mundo das corporações. Neste sentido, muitas empresas utilizam esta tecnologia, as quais percebem as vantagens que ela retorna. Em agosto de 1962, foi publicado o artigo, um dos mais famosos, chamado On-line ManC-Computer Communication, no qual foi escrito um dos conceitos iniciais do futuro da internet, sendo descrito como pessoas podem interagir com computador para desenvolvimento de diversas tarefas (BAI, 2015). Ainda segundo Bai (2015), neste artigo foi descrito como compartilhar o armazenamento de dados e também como os computadores podem auxiliar as pessoas para o desenvolvimento de tarefas complicadas através de colaboração on-line. O termo cloud computing está sendo analisado por executivos de Tecnologia de Informação, para que se tenha uma investigação desta tecnologia e de seus benefícios, dentre os quais a utilização de recursos ociosos de computadores sem a preocupação com investimentos em hardware (TAURION, 2009). Ainda segundo Taurion (2009), esta tecnologia está sendo estudada em vários artigos científicos, além de publicações e eventos da área, o que induz ser uma inovação com vantagens para as empresas. Durante muitos anos, equipes de desenvolvimento de software, assim como administradores de redes de computadores, têm usado uma abstração de nuvem para representar detalhes a comunicação de mensagens enviadas entre computadores na internet (JAMSA, 2013). Esta abstração de nuvem foi expandida através da inclusão de utilização tanto física quanto virtual de processadores, discos rígidos, serviços de software e aplicações mobiles (JAMSA, 2013). Aplicações baseadas em nuvem possuem novos recursos, os quais se pode pagar por uso de determinada velocidade de processador, quantidade de disco ou de memória RAM por exemplo, mas por outro lado, com recursos em nuvem, muitos são os desafios para a questão de segurança (JAMSA, 2013). Existem muitas definições diferentes para a computação em nuvem, sendo que muitas das definições não são claras, ressaltando que o termo nuvem se originou da área de telefonia (TAURION, 2009). UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING 4 Neste sentido, o termo computação em nuvem surgiu da indústria de TI, na qual vários fornecedores de TI começaram a disponibilizar recursos de computação,como armazenamento e serviço de hospedagem de aplicações com alcance em todo o mundo (BUYYA; BROBERG; GOSCINSKI, 2011). Este tipo de computação em nuvem teve sua evolução com os data centers, nos quais eram disponibilizados serviços pela rede ou pela internet, cujos clientes poderiam pagar pela sua utilização, ou seja, a alocação de recurso é baseada na utilização do cliente (BUYYA; BROBERG; GOSCINSKI, 2011). Com isso, se um cliente precisar de 1 GB de armazenamento de dados, é o valor referente a este espaço que ele paga, ou se precisar de um servidor de hospedagem para um site, será pago ao data center apenas os recursos necessários que sejam suficientes para manter o site funcional. Com a evolução destes serviços, a interoperabilidade e a usabilidade foi aumentando, e consequentemente o custo da computação em nuvem foi diminuindo (BUYYA; BROBERG; GOSCINSKI, 2011). Desenvolvedores mais avançados, fornecedores de recursos de TI e pesquisadores estão trabalhando para disseminar informações e conhecimentos a respeito das vantagens da utilização de recursos em nuvem (BUYYA; BROBERG; GOSCINSKI, 2011). 2 CONCEITOS DE CLOUD COMPUTING Cloud computing, ou computação em nuvem, pode ser compreendido pelo armazenamento de dados, assim como seu acesso, além de permitir a disponibilização de serviços pela Internet a partir de um computador remoto, em vez do disco rígido de um computador local (CHANDRASEKARAN, 2015). Segundo Chandrasekaran (2015), dentre as vantagens destes serviços remotos, podem ser citadas a escalabilidade e a elasticidade, por exemplo, sendo diferentes de uma simples máquina remota, e o termo nuvem, conforme entendido anteriormente, é uma metáfora utilizada na internet. Ainda segundo Chandrasekaran (2015), o armazenamento de dados em um disco rígido de um computador local é chamado de armazenamento local, assim como a execução de alguma aplicação, seja um programa ou um serviço, rodando em um computador local, o qual é denominado de computação local. TÓPICO 1 — INTRODUÇÃO AO CLOUD COMPUTING E O COTIDIANO 5 FIGURA 1 – EXEMPLO DE COMPUTAÇÃO EM NUVEM FONTE: Chandrasekaran (2015, p. 11) Com estas definições, é fácil compreender a diferença com a computação em nuvem, em que neste caso, é necessário acessar os dados ou executar uma aplicação ou serviço pela Internet, conforme ilustrado na Figura 1 (CHANDRASEKARAN, 2015). Ainda segundo Chandrasekaran (2015), o termo computação em nuvem foi originado do Instituto Nacional de Padrões e Tecnologia (NIST), que designa computação em nuvem como um modelo sob demanda para uso de recursos de computação configuráveis. Esta disponibilização de recursos computacionais, como servidores, armazenamento de dados, aplicações e serviços, podem ser rápida e facilmente liberados para os clientes, com pequeno esforço do provedor de serviços (CHANDRASEKARAN, 2015). Computação em nuvem se refere a aplicações desenvolvidas e disponibilizadas como serviços por provedores em data centers, oferecendo diferentes modelos de serviços para usuários finais (PATHAN; MONOWAR; FADLULLAH, 2013). A computação em nuvem, por possuir uma infraestrutura expansível, isto é, se precisar de mais recursos, basta adicionar novos, permite a disponibilização de serviços de streaming de vídeo, podendo oferecer programações ao vivo (PATHAN; MONOWAR; FADLULLAH, 2013). UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING 6 Segundo Taurion (2009, p. 2), cloud computing, ou computação em nuvem, pode ser definido como “um conjunto de recursos como capacidade de processamento, armazenamento, conectividade, plataformas, aplicações e serviços disponibilizados na internet”. Neste sentido, computação em nuvem pode ser descrita como sendo a virtualização de um data center, pois os recursos de servidores são disponibilizados através da internet para os clientes (TAURION, 2009). Computação em nuvem foi criado para descrever a sofisticada tecnologia de serviços e recursos de computação sob demanda, os quais foram disponibilizados inicialmente por provedores comerciais como Microsoft, Google e Amazon (BUYYA; BROBERG; GOSCINSKI, 2011). Estes provedores comerciais, assim como muitos outros, possuem parques computacionais com milhares de máquinas, assim como vários data centers espalhados pelo mundo (TAURION, 2009). Segundo Taurion (2009), algumas das características principais da computação em nuvem são: • a computação em nuvem pode criar ilusão de que os recursos em nuvem sejam infinitos; • com a computação em nuvem, não é necessário adquirir recursos antecipadamente; • a computação em nuvem permite que empresas usem apenas a quantidade de recursos necessários, podendo aumentar ou diminuir a quantidade; • a computação em nuvem permite que se pague os serviços utilizados pelo que se utiliza. De certa forma, pode ser considerado o retorno da centralização, pois computadores pessoais, neste cenário, podem ser utilizados apenas como forma de acesso a aplicações, serviços ou armazenamento de dados que rodam em servidores remotos (TAURION, 2009). Ainda segundo Taurion (2009), com a computação em nuvem, usuários que utilizam computadores pessoais com poucos recursos, podem ter acesso a ilimitados espaços de armazenamentos, em servidores remotos, ou ainda executar aplicações em servidores remotos que requisitam grande capacidade de processamento. Serviços que rodam em nuvem podem ser chamados de Cloud Services, podendo pertencer a duas categorias: computação em nuvem (cloud computing) e armazenamento em nuvem (cloud storage) (BAI, 2015). Ainda segundo Bai (2015), a computação em nuvem possui algumas vantagens em relação à arquitetura local, as quais são: elasticidade, disponibilidade e escalabilidade. TÓPICO 1 — INTRODUÇÃO AO CLOUD COMPUTING E O COTIDIANO 7 2.1 ELASTICIDADE A elasticidade significa o cliente de um serviço poder aumentar ou diminuir a demanda por um serviço, isto é, o cliente de um serviço pode, por exemplo, solicitar o aumento do espaço de armazenamento em nuvem, ou diminuir a capacidade de armazenamento (BAI, 2015). Outro exemplo para a elasticidade é um site que está hospedado em um servidor na nuvem, por um determinado período de tempo precisar rodar em mais servidores do que a quantidade normal, como por exemplo durante o Black Friday, para suportar a quantidade de usuários, mantendo uma resposta aceitável (BAI, 2015). Em um data center tradicional, esta característica de elasticidade é mais difícil, pois normalmente depende de aprovação, aquisição, instalação e testes de novos equipamentos de hardware, para permitir atender a demanda, havendo, normalmente, demora ou impossibilidade (BAI, 2015). 2.2 DISPONIBILIDADE A característica disponibilidade é a possibilidade de usuários poderem acessar serviços hospedados na nuvem em qualquer momento (dia, hora) e de qualquer lugar do mundo, e estando os serviços disponíveis, significa que estes estão funcionando perfeitamente (BAI, 2015). Normalmente, serviços na nuvem possuem redundância de servidores além de backups, garantindo que se um servidor cair, outro pode assumir no lugar para manter os serviços em perfeito funcionamento (BAI, 2015). 2.3 ESCALABILIDADE O termo escalabilidade pode ser compreendido em como um sistema suporta o aumento do número de usuários, mantendo a sua qualidade e eficiência, sendo que, neste caso, o aumento da capacidade de trabalho é o número que indica a quantidade (BAI, 2015). Em data centers tradicionais, a escalabilidade é alcançada melhorando os equipamentos de hardware, e uma situação para exemplificar, é um banco de dados estar com o uso de memória RAM no limite, e para resolver, basta adicionar mais memória, sendo conhecido por escalabilidade vertical (BAI, 2015). Escalabilidade vertical não possui limites, ao não ser alguns servidores físicos que possuem limites de memória RAM ou processadores, por exemplo, assim como máquinas virtuais também possuírem algumas limitações, mas geralmente, os provedoresde servidores em nuvem disponibilizam vários tamanhos ou configurações diferentes para que os clientes possam optar pelo mais adequado para seu uso (BAI, 2015). UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING 8 Se a escalabilidade vertical não resolver alguma determinada demanda para um cliente, é possível aplicar outro tipo de escalabilidade, a horizontal (BAI, 2015). A escalabilidade horizontal não altera as configurações dos servidores, mas ajusta a capacidade do sistema para permitir aumentar ou diminuir o número de servidores (BAI, 2015). Ainda segundo Bai (2015), a escalabilidade horizontal possui a vantagem de não limitar o espaço em disco de um servidor ou máquina virtual. 3 A NUVEM E O COTIDIANO Além da Amazon e Google, as quais possuem vários data centers pelo mundo, disponibilizando inúmeros recursos computacionais, assim como a IBM, a qual também entra nessa lista de provedores de serviços em nuvem, sendo um exemplo o seu portal de inovação chamado de Technology Adoption Program (TAP) (TAURION, 2009). Este portal permite que softwares experimentais desenvolvidos pela IBM sejam analisados e testados por seus próprios funcionários, quanto ao quesito de qualidade, funcionalidade e desempenho, e, para que estes testes fossem possíveis rodando em computadores locais, seria necessário a implementação de uma infraestrutura para cada funcionário (TAURION, 2009). Neste sentido, com a computação em nuvem, a equipe responsável pelo software apenas configura os recursos necessários no servidor e, disponibiliza facilmente e em poucos minutos para os funcionários testarem (TAURION, 2009). Outro exemplo de computação em nuvem foi uma incubadora de software criada na cidade de Wuxi, na China, tendo em vista que empresas incubadas não possuem muitos recursos financeiros, foi criada uma estrutura em nuvem para alocação de recursos conforme a necessidade (TAURION, 2009). Neste sentido, a computação em nuvem permite que se ocorrer uma alta demanda por recursos computacionais, basta alocar mais recursos, e, se a demanda diminuir, basta liberar estes recursos ociosos (TAURION, 2009). Ao invés de uma empresa perder tempo e recursos para montar um data center físico, ou ampliar seus recursos, como incluir mais espaço de armazenamento, por exemplo, com a computação em nuvem basta acessar o site de um provedor de serviços em nuvem e pagar pela ampliação dos recursos, o que pode estar disponível em poucos minutos (TAURION, 2009). Com isso, segundo Taurion (2009), a empresa não precisa alocar funcionários para a montagem de hardware, instalação de software, além de pagar por estes três recursos, fora a economia em energia elétrica. Outra vantagem da computação em nuvem é a questão das evoluções tecnológicas, em que equipamentos que são deteriorados com o tempo e precisam ser substituídos, ou mesmo uma nova necessidade em que se necessite de um determinado hardware mais moderno, em que neste modelo, a organização ou empresa não permanece refém dos equipamentos que possui no data center físico, podendo apenas alocar o recurso desejado (TAURION, 2009). TÓPICO 1 — INTRODUÇÃO AO CLOUD COMPUTING E O COTIDIANO 9 3.1 SERVIÇOS DE ARMAZENAMENTO Um dos tipos de virtualização é a utilizada para armazenamento de dados, na qual inúmeros discos rígidos físicos podem ser combinados, formando um único sistema de armazenamento virtualizado, podendo aumentar a capacidade ou até a velocidade de gravação (CHANDRASEKARAN, 2015). Este tipo de virtualização, chamado de armazenamento em nuvem, pode ser concebido pelo armazenamento privado, disponibilizado o serviço por uma empresa, ou ainda por armazenamento público, como o DropBox, por exemplo, em que o armazenamento ocorre fora da empresa, mas também pode ser uma abordagem mista, isto é, privado e público (CHANDRASEKARAN, 2015). Ainda segundo Chandrasekaran (2015), na virtualização de armazenamento, os discos utilizados no armazenamento físico são considerados como uma única mídia de armazenamento virtual, sendo que este conceito de virtualização de armazenamento é preparado com técnicas de armazenamento como Storage Area Network (SAN) e Network Attached Storage (NAS). O termo SAN (Storage Area Network) pode ser melhor compreendido em http://www.infortrendbrasil.com.br/storage-san/ e em http://www.infortrendbrasil.com. br/dicas/diferencas-entre-nas-das-e-san/, assim como o termo NAS (Network Attached Storage). NOTA A virtualização de data centers permite um caminho para reduzir o uso ineficiente de recursos de computação, assim como a redução de energia elétrica, sabendo que um data center físico de uma organização atende a somente esta, e um data center virtual pode atender a várias organizações ou clientes (FAYNBERG; LU; SKULER, 2016). É possível que uma organização tenha um data center virtual, terceirizado e um outro data center físico, sendo os dois unidos por uma rede virtual privada (FAYNBERG; LU; SKULER, 2016). Uma das principais necessidades de um data center é o uso para armazenamento de dados, sendo que o tráfego na rede deve ter um bom desempenho para evitar que sistemas se tornem lentos (FAYNBERG; LU; SKULER, 2016). Com máquinas virtuais é possível realizar a alocação e desalocação fácil e rápida, o que permite alocação eficiente de recursos de computação, mas muitos processamentos executados nestes servidores podem gerar dados, os quais devem ser armazenados (SULLIVAN, 2010). Gerar dados localmente em um servidor que realizou o processamento pode ser útil quando os dados são temporários, http://www.infortrendbrasil.com.br/storage-san/ UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING 10 porém se o servidor for desalocado, estes dados serão perdidos, e é por este motivo que o armazenamento em nuvem é útil (SULLIVAN, 2010). Através do armazenamento em nuvem, os dados antigos, assim como os novos, gerados recentemente, são armazenados de forma que possam ser disponibilizados em qualquer servidor em nuvem, levando em consideração restrições de controle de acesso (SULLIVAN, 2010). Com o provisionamento rápido de hardware e a utilização de armazenamento em nuvem, consequentemente é desencadeada a escalabilidade massiva (SULLIVAN, 2010). Com o acesso à internet disponibilizado cada vez para mais pessoas, o número de usuários e dispositivos conectados na grande rede está crescendo e, consequentemente, a quantidade de dados trafegada e armazenada também está aumentando (FAYNBERG; LU; SKULER, 2016). Segundo Faynberg, Lu e Skuler (2016), diariamente são trafegados mais de 1 exabyte de dados e, em 2011, mais de 1.8 exabyte de dados foram criados no mundo, e como a quantidade de dados está crescendo rapidamente, o armazenamento em nuvem deve avançar para suprir estas necessidades. 3.2 SERVIÇOS DE COMUNICAÇÃO A Web 2.0 permitiu que simples usuários da internet realizassem publicações sem a utilização de HTML, diretamente, sendo que ferramentas ou aplicações permitiram esta funcionalidade (JAMSA, 2013). FIGURA 2 – FERRAMENTAS DA WEB 2.0 FONTE: Jamsa (2013, p. 4) TÓPICO 1 — INTRODUÇÃO AO CLOUD COMPUTING E O COTIDIANO 11 A Figura 2 apresenta algumas das ferramentas que permitem usuários publicarem diretamente os conteúdos em nuvem, as quais estão descritas a seguir, conforme Jamsa (2013): • Blog: permite usuário publicar conteúdo na web. • Wiki: aplicação web que permite usuários colaborarem com o compartilhamento de documentos e assuntos. • Twitter: um mini blog que permite usuários enviarem mensagens para os seus seguidores. • Facebook: rede social que permite usuários postarem textos, fotos, vídeos. • Youtube: site que permite usuários realizarem upload de vídeos, sendo compartilhados com outros usuários da rede. As aplicações baseadas em nuvem disponibilizam aos usuários uma variedade de soluções, sendo que para análise e descrição destas aplicações, normalmente são utilizadas referências pelo seu modelo de implantação e modelos de serviço, conforme Figura 3 (JAMSA,2013). FIGURA 3 – MODELOS DE IMPLANTAÇÃO E SERVIÇOS DA NUVEM FONTE: Buyya, Broberg e Goscinski (2011, p. 14) Um modelo de implementação define como serviços são compartilhados em nuvem, e a interação de clientes (usuários e sistemas) pode ocorrer por diversas formas diferentes, como pelas chamadas de serviços, por exemplo (JAMSA, 2013). Conforme Jamsa (2013), os serviços da web podem ser divididos em até três grandes modelos ou tipos, sendo: • Software as a Service (SaaS): plataforma de aplicação com interface para o usuário, como redes sociais, por exemplo. UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING 12 • Platform as a Service (PaaS): plataforma com a qual desenvolvedores podem implementar suas aplicações, como linguagens de programação, hardware (servidores, discos), sistema operacional, ferramentas de desenvolvimento etc. • Infraesrtucture as a Service (IaaS): fornecimento de computadores servidores, armazenamento de dados, Firewall, recursos de internet, entre outros. Os modelos SaaS e PaaS são brevemente introduzidos nos dois subtópicos a seguir, cujo estudo é mais aprofundado nos tópicos seguintes deste livro. O modelo IaaS está descrito na seção 5 deste tópico. 3.2.1 Software como um serviço (SaaS) Normalmente, o SaaS (Software as a Service) é baseado em uma aplicação para a qual o usuário terá acesso, e é necessária a utilização de um navegador de internet, sendo que a aplicação é hospedada em nuvem (JAMSA, 2013). Neste modelo, a vantagem é o usuário necessitar apenas de um dispositivo com acesso à internet e um navegador de internet (browser), porém, a desvantagem é a percepção do usuário quanto a segurança, pois os dados da empresa são armazenados em nuvem (JAMSA, 2013). FIGURA 4 – EXEMPLO DO MODELO SAAS FONTE: Jamsa (2013, p. 7) 3.2.2 Plataforma como um serviço (PaaS) O modelo de plataforma como serviço, ou PaaS (Platform as a Service), fornece recursos de hardware, podendo ser servidor físico ou virtual (VMs), sistemas operacionais, ferramentas para bancos de dados, assim como ferramentas de desenvolvimento e recursos de internet, tudo para permitir que desenvolvedores implantem suas soluções (JAMSA, 2013). Ainda segundo Jamsa (2013), estes recursos do PaaS, são gerenciados pelo provedor da plataforma, e desenvolvedores não precisam se preocupar com estes recursos, como TÓPICO 1 — INTRODUÇÃO AO CLOUD COMPUTING E O COTIDIANO 13 atualizações do sistema operacional, por exemplo, mas sim, focar no seu trabalho de desenvolvimento. A Figura 5 apresenta um exemplo do PaaS, na qual é possível analisar dois computadores usuários acessando serviços em nuvem. FIGURA 5 – EXEMPLO DO MODELO PAAS FONTE: Jamsa (2013, p. 7) 3.3 SERVIÇOS DE TRANSMISSÃO AO VIVO Streaming pode ser compreendido por ser um modo de transmissão de vídeo contínuo, enviando dados do provedor (fonte) diretamente para o receptor, assistindo o vídeo em tempo de execução, porém, a ação de um cliente baixar (download) um arquivo de vídeo para depois assistir, não é streaming, sendo conhecida por mídia não streaming (KANNAN et al., 2016). Neste sentido, televisão ou rádio pertencem a categoria streaming e Compact Discs (CDs) pertencem à categoria mídia não streaming ou non-streaming (KANNAN et al., 2016). No início dos anos 1990, o streaming existia, porém, era muito lento devido ao buffer, isto é, o vídeo iniciava e então logo parava para carregar mais uma parte do vídeo (buffering), tornando monótono para o cliente (KANNAN et al., 2016). Todavia, com o passar dos anos, e principalmente nos dias atuais, com a evolução dos equipamentos de hardware, com recursos cada vez melhores, além da banda de internet e com o aumento da capacidade de armazenamento, inclusive em nuvem, o streaming se tornou muito utilizado (KANNAN et al., 2016). O conceito de streaming é velho e pode ser exemplificado quando uma pessoa fala algo e o som é transportado até o ouvido de outra pessoa, e a partir daqui o cérebro decodifica a mensagem para ser compreendida (KANNAN et al., 2016). Este exemplo é parecido com o que ocorre com televisão ou rádio, situação em que o sinal é enviado por cabo, antena ou satélite para o receptor, o qual decodifica os sinais elétricos em pixels de imagens ou ondas sonoras, conforme ilustrado na Figura 6 (KANNAN et al., 2016). UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING 14 FIGURA 6 – ARQUITETURA DE STREAMING DO SERVIDOR PARA O CLIENTE FONTE: Kannan et al. (2016, p. 75) Vídeo pode ser compreendido por uma fita de imagens fixas que são apresentadas uma após a outra e FPS (Frame Per Second), sendo a quantidade de frames que um reprodutor de vídeo possui de capacidade para apresentar um após o outro (KANNAN et al., 2016). Neste sentido, com FPS mais baixo, a quantidade de dados necessária para rodar um vídeo é menor, mas o vídeo terá uma qualidade menor, sendo que um projeto utiliza entre 24 até 48 FPS para exibição de filmes em cinemas (KANNAN et al., 2016). Existe o software conhecido por codec, utilizado para comprimir o tamanho de vídeos, isto é, diminui a resolução de um vídeo, evitando dados desnecessários reduzindo consequentemente o tráfego de vídeos pela rede (KANNAN et al., 2016). A transferência de dados por streaming necessita que dados sejam rapidamente enviados e na ordem correta, sendo que protocolos especiais como o RTSP (Real-Time Streaming Protocol), RTP (Real-Time Transfer Protocol) e o RTCP (Real-Time Transport Control Protocol) (KANNAN et al., 2016). Ainda segundo Kannan et al. (2016), estes três protocolos trabalham em conjunto com TCP/IP, o qual converte os grandes arquivos de dados em pacotes enviando-os para rotas da rede (KANNAN et al., 2016). A arquitetura Peer-to-Peer (P2P) streaming tem sido muito utilizada para distribuir conteúdo multimídia ao vivo para inúmeros usuários da internet, permitindo a visualização a qualquer momento (KANNAN et al., 2016). Alguns serviços de streaming de vídeo integram os benefícios da tecnologia P2P e de computação em nuvem (PATHAN; MONOWAR; FADLULLAH, 2013). A arquitetura cloud-P2P pode ser analisada na Figura 6, pela qual pode ser notada uma nuvem que possui servidores que disponibilizam streaming de vídeo como multimídia, em que os clientes são identificados por C1, C2, C3 e C4, sendo o primeiro nível (PATHAN; MONOWAR; FADLULLAH, 2013). O alto nível de clientes é composto pelos identificadores HP11, HP12, HP21, HP31, HP32 e HP41, os quais podem ter contato com o primeiro ou com o alto nível de clientes, mas não conseguem contato diretamente com o provedor de streaming (PATHAN; MONOWAR; FADLULLAH, 2013). Os primeiros níveis de clientes escolhem um dos três serviços de pacotes disponibilizados, sendo que cada um possui um preço, atribuído dependendo da banda de velocidade por exemplo (PATHAN; MONOWAR; FADLULLAH, 2013). Os clientes de alto nível que quiserem oferecer seus serviços grátis, podem se conectar através dos pontos (P111, P112, P121, TÓPICO 1 — INTRODUÇÃO AO CLOUD COMPUTING E O COTIDIANO 15 P122, P212 etc.). Resumindo, a rede de streaming em nuvem é organizada em uma estrutura de camadas, em que o provedor de serviço possui o gerenciamento centralizado do contrato de políticas de uso dos serviços (PATHAN; MONOWAR; FADLULLAH, 2013). FIGURA 6 – ARQUITETURA CLOUD-P2P FONTE: Pathan, Monowar e Fadlullah (2013, p. 83) Existe também o serviço chamado de OTT (Over-The-Top), outro tipo de transmissão ao vivo, no qual emissoras de televisão utilizam o serviço de transmissão de seus programas ao vivo pela internet, (FONSECA; BOUTABA, 2015). Este serviço de compartilhamento de dados de imagens de televisão possibilita atingir uma grande parcela da população que utiliza mais a internet para uma infinidade de atividades, incluindo assistir jornais, filmes, séries, entre outros (FONSECA; BOUTABA, 2015). Uma consequência do serviço de OTT TV é qualquer pessoa pode se tornar um provedor de televisão pela internet, isto é, usuários de internet podem se tornargrandes fontes de informação, e uma das ferramentas que possibilitam isso é o Youtube (FONSECA; BOUTABA, 2015). 3.4 DEMAIS EXEMPLOS NO COTIDIANO Máquina virtual pode ser compreendida por ser um programa que permite rodar outro sistema operacional dentro dele e, este programa roda dentro do sistema operacional principal do computador, isto é, dentro de um software específico de virtualização é possível instalar um outro sistema operacional (KANNAN et al., 2016). Isso pode ser útil na situação em que se necessite instalar um software incompatível com o sistema operacional instalado no computador. Por exemplo, o sistema operacional principal do computador ser Linux e houver a necessidade de utilizar o Microsoft Office, situação na qual pode ser instalado o sistema operacional Windows na máquina virtual para então instalar o Microsoft UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING 16 Office (KANNAN et al., 2016). Ainda segundo Kannan et al. (2016), com máquina virtual, os recursos de hardware são compartilhados entre o sistema operacional do computador e com o sistema operacional da máquina virtual. Na computação em nuvem, uma das principais tecnologias emergindo é a virtualização, a qual auxilia na criação de um ambiente em nuvem, onde os recursos são otimizados através do compartilhamento (CHANDRASEKARAN, 2015). Neste sentido, a virtualização permite que a infraestrutura física de um servidor (provedor de serviços) seja compartilhada entre diferentes clientes, evitando ociosidade e ampliando o uso de recursos, o que retorna com mais eficiência os investimentos realizados (ROI) (CHANDRASEKARAN, 2015). No entanto, como nem todo sistema seja infalível, a virtualização possui a desvantagem de ter um ponto de falha do software, o que pode atingir toda a virtualização e, consequentemente, afetando aos clientes, isto é, se uma virtualização disponibiliza algum serviço para vários clientes, e nesta máquina ocorrer falha, afetará a todos (CHANDRASEKARAN, 2015). Um exemplo para a nuvem é o Microsoft Azure, mais detalhado ainda neste tópico, o qual pode ser descrito como um ambiente de desenvolvimento e também servidor de hospedagem para soluções SaaS, sendo confiável e flexível, sendo que este ambiente possui três níveis: IaaS, PaaS e o SaaS (BAI, 2015). Outro exemplo é o Google Cloud Platform, o qual permite que desenvolvedores implementem aplicativos em sua infraestrutura escalável e confiável, sendo suas infraestruturas de software o MapReduce, BigTable e Dremel, inovações para desenvolvimento industrial (CHANDRASEKARAN, 2015). Uma das características do Google Cloud Platform são suas máquinas virtuais, seu armazenamento em bloco, armazenamento de dados NoSQL além de análise de Big Data, fornecendo uma variedade de serviços de armazenamento e permitindo fácil manutenção e rápido acesso aos dados (CHANDRASEKARAN, 2015). 4 A NUVEM E BIG DATA O armazenamento de dados em nuvem permite realizar a análise de dados, processo de análise de dados brutos ou não processados que permite obter conclusões, o qual pode realizado em nuvem pública ou privada, cujo resultado pode ser um ou vários valores ou ainda um gráfico (CHANDRASEKARAN, 2015). Esta técnica de obtenção de resultados está sendo utilizada por pesquisadores de todo o mundo, que com base em seus resultados, são tomadas decisões importantes para os negócios de organizações (CHANDRASEKARAN, 2015). Neste sentido, se uma análise destas é realizada com grande quantidade de dados, terabytes ou petabytes por exemplo, chamada de análise de Big Data, termo recente utilizado na computação, sendo que um exemplo de onde pode ser gerada essa enorme quantidade de dados é a internet (CHANDRASEKARAN, 2015). TÓPICO 1 — INTRODUÇÃO AO CLOUD COMPUTING E O COTIDIANO 17 Para exemplificar o uso de Big Data na internet, pode ser tomado como exemplo uma rede social, em que o administrador deste site deseja saber algo de um usuário, como o tipo de postagem que ele mais possui interesse, e para chegar a essa informação, pode ser realizada análise de todos os dados deste usuário. Outro exemplo é uma companhia de seguros, a qual deseja fazer um ranking dos melhores clientes no sentido de bons pagadores, se baseando em seus pagamentos mensais, podendo chegar a esse resultado fazendo uso de análise de dados (CHANDRASEKARAN, 2015). As vantagens da computação em nuvem, como popularidade, disponibilidade e escalabilidade sem limites, com uma estrutura robusta com várias camadas, têm levado a utilização do serviço de armazenamento na nuvem para o Big Data (MISTRIK et al., 2017). Armazenar Big Data em nuvem pública é mais econômico, existindo uma enorme redução de recursos financeiros tanto através da infraestrutura física quanto na questão do gerenciamento de sistemas (KAVIS, 2014). Neste sentido, o armazenamento tradicional (físico) envolve vários recursos de infraestrutura e de software, como dispositivos em fita ou disco para realizar backups, podendo haver vários tipos de mídia para armazenamento, assim como outros serviços que complementam o uso em data center físico (KAVIS, 2014). Com o armazenamento em nuvem, as empresas podem eliminar o data center físico e partir para o armazenamento em nuvem, os quais podem ser automatizados através da utilização de scripts, cujo custo é muito mais barato que o armazenamento físico, além dos processos de recuperação de dados serem mais fáceis (KAVIS, 2014). Para a análise de terabytes ou petabytes de dados, isto é, Big Data, é necessário alto poder de processamento e memória, com recursos pesados em back-end, sendo que isso custa muito caro para as empresas ou organizações, podendo ser um grande problema para organizações que não possuem recursos financeiros para isso (KAVIS, 2014). Nesse caso, a solução é o aluguel dos recursos necessários, o que pode ser exemplificado pelo Large Hadron Collider (LHC), o qual registrava petabytes de dados semanalmente e havia a necessidade de processa-los, sendo que os cientistas não possuíam seus próprios recursos (CHANDRASEKARAN, 2015). Foi utilizado o modelo de computação em grade, a qual pode ser entendida por ser uma das tecnologias que permite o usuário utilizar recursos de computação pagando por eles, tecnologia direcionada principalmente para aplicações científicas com Big Data, usando em áreas de astronomia, física, bioinformática, entre outros (CHANDRASEKARAN, 2015). A diferença entre computação em grade e em nuvem é os serviços em nuvem serem divididos em vários tipos, sendo os dois principais os privados e os públicos, conforme já mencionado (CHANDRASEKARAN, 2015). A nuvem pública possui a característica de oferecer serviços para usuários em todo o mundo, enquanto que a nuvem privada é considerada restrita e pode apenas ser utilizada por uma organização ou indivíduo (CHANDRASEKARAN, 2015). Neste sentido, análise em nuvem é o termo utilizado para definir a nuvem UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING 18 pública ou privada, sendo utilizada para análise de dados e possui a vantagem em relação à plataforma de grade, de qualquer pessoa no mundo poder utilizar essa plataforma para realizar análises de dados (CHANDRASEKARAN, 2015). Com estes serviços de análise de Big Data em nuvem pública ou privada, não é necessário comprar nenhum recurso de computação, permitindo que apenas se aloque quando e o quanto for necessário de recursos (KAVIS, 2014). Segundo Chandrasekaran (2015), a análise em nuvem permite que ao invés de utilizar recursos de processamento diretamente, seja possível utilizar os aplicativos em nuvem projetados especificamente para análise de Big Data, criados pelo provedor, sendo este modelo chamado SaaS. A Figura 8 apresenta a classificação da análise em nuvem. FIGURA 8 – ANÁLISE EM NUVEM FONTE: Chandrasekaran (2015, p. 366) 5 INFRAESTRUTURA COMO UM SERVIÇO (IAAS) A infraestrutura como serviço (IaaS) fornece data center em nuvem, como servidores físicos e virtualizados,armazenamento de dados em nuvem, os quais podem ser acessados de qualquer local (JAMSA, 2013). Neste modelo de serviço, desenvolvedores precisam instalar sistema operacional, sistema gerenciador de banco de dados e os softwares necessários, e então, os desenvolvedores, ou administradores, precisam gerenciar o hardware e o software (JAMSA, 2013). A Figura 9 apresenta um exemplo do modelo IaaS, o que também pode ser exemplificado pelo Amazon Elastic Compute Cloud (Amazon EC2). TÓPICO 1 — INTRODUÇÃO AO CLOUD COMPUTING E O COTIDIANO 19 FIGURA 9 – EXEMPLO DO MODELO IAAS FONTE: Jamsa (2013, p. 8) O Instituto Nacional de Padrões e Tecnologia (NIST - National Institute of Standards and Technology) define IaaS como sendo o fornecimento de processamento, armazenamento, redes e outros recursos de computação para o consumidor poder implantar e executar operações de sistemas ou executar aplicações (VACCA, 2017). Neste caso, o consumidor não controla a infraestrutura da nuvem, mas possui controle de sistemas operacionais, do armazenamento e de aplicativos implantados e, em alguns casos, possui certos controles de componentes de rede, como firewall, por exemplo (VACCA, 2017). A CSA (Cloud Security Alliance) ou Aliança de Segurança em Nuvem pode ser compreendida por ser uma organização que se remete a padrões de segurança na nuvem e define que o IaaS disponibilize infraestrutura de computador como um serviço, como ambiente de virtualização, por exemplo, assim como armazenamento e rede (VACCA, 2017). Neste sentido, ao invés de comprar servidores, software, espaço para armazenamento em data center ou equipamentos de rede, é mais vantajoso para o cliente adquirir estes recursos como um serviço terceirizado (VACCA, 2017). Através do IaaS, muitos dos recursos que são necessários em um data center físico para tarefas de gerenciamento e manutenção, assim como para infraestrutura física de servidores, como discos de armazenamento, manutenção de rede, entre outros, não são necessários na nuvem (VACCA, 2017). Todos os recursos disponibilizados na nuvem são disponibilizados como uma coleção de serviços, os quais podem ser acessados inclusive através de automatização, com scripts ou ainda a partir de aplicações de web services (VACCA, 2017). Neste sentido, os desenvolvedores possuem a tarefa de implementar os aplicativos necessários, assim como os administradores precisam realizar a instalação e gerenciamento de aplicações utilizadas de terceiros, e com isso não existe mais o ciclo de compra de hardware, em que teria que realizar a solicitação de compra, aguardar a chegada dos equipamentos, e então o trabalho de instalação e configuração (VACCA, 2017). UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING 20 Utilizando o modelo IaaS, toda a infraestrutura virtual necessária sob demanda pode ser disponibilizada em minutos, através da chamada de uma API (Application Programming Interface) ou ainda acessando um console de gerenciamento, cujo custo pode ser medido e é apenas aplicado se recursos estiverem sendo utilizados (VACCA, 2017). Com estas explicações, se pode dizer que o IaaS oferece recursos de data center virtual para atender a necessidades de consumidores, os quais podem se concentrar mais no desenvolvimento e gerenciamento de aplicativos e menos no gerenciamento de recursos de infraestrutura (JAMSA, 2013). Agora que você compreendeu o que é o IaaS, você pode avançar o estudo conhecendo alguns dos vários fornecedores de IaaS existentes no mercado. Um deles é o provedor de serviços em nuvem Amazon Web Services (AWS), assim como o Rackspace e GoGrid que também são pioneiros neste segmento. Outro fornecedor é o OpenStack, o qual é um projeto de código aberto que fornece recursos de IaaS para consumidores que desejam construir seu próprio IaaS com recursos internos, chamados de nuvem privada (VACCA, 2017). 5.1 PLATAFORMAS DE IAAS Existem vários e grandes provedores de serviços no mercado de tecnologia, sendo que muitos deles oferecem serviços de infraestrutura em nuvem. Como existem vários destes provedores de serviços IaaS, focaremos em alguns dos mais utilizados, os quais estão descritos a seguir. 5.1.1 DigitalOcean DigitalOcean é um provedor de serviços de computação em nuvem que obteve uma reputação positiva de muitas comunidades de desenvolvimento de software por ser rápido, confiável, além de ter um preço acessível para instâncias de máquinas virtuais (THOMPSON, 2015). TÓPICO 1 — INTRODUÇÃO AO CLOUD COMPUTING E O COTIDIANO 21 FIGURA 10 – CONSOLE DO DIGITALOCEAN FONTE: Thompson (2015, p. 297) A plataforma DigitalOcean possui uma API eficaz e simples para acesso às instâncias computacionais, o que torna a integração com o DigitalOcean mais simplificada, assim como seu console fácil de se utilizar, ilustrado na Figura 10 (THOMPSON, 2015). É uma plataforma de hospedagem de sites, a qual pode ser acessada pela URL https://www.digitalocean.com, sendo muito fácil de se utilizar, pois com a realização do cadastro, automaticamente são disponibilizados os nomes dos servidores, os quais devem ser configurados no domínio (BROWN, 2020). Assim como outros provedores de hospedagem, o internauta acessa o domínio, como www.uniasselvi.com.br por exemplo, e através da resolução do DNS, é chamado um dos servidores do DiditalOcean, onde está hospedado o site (BROWN, 2020). 5.1.2 Linode O Linode é um provedor de serviços IaaS que disponibiliza serviços parecidos com muitos dos serviços da Amazon, iste é, oferece diferentes níveis de servidores, sendo eles de 512 MB até 20 GB de RAM (MITCHELL, 2013). A diferença é que a Amazon cobra os serviços por hora, enquanto que o Linecode realiza a cobrança mensal de seus serviços, e, além disso, as instâncias dos computadores possuem recursos específicos para capacidade de armazenamento e recursos de CPU, possuindo data center nos Estados Unidos, Grã Bretanha e Japão (MITCHELL, 2013). UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING 22 Este provedor utiliza uma personalizada linguagem para implantação e gerenciamento de servidores, utilizando a plataforma de virtualização Xen (MITCHELL, 2013). Todos os recursos de serviços de computação disponibilizados pelo Linode possuem serviço de suporte premium, e oferecem backup automático e serviços de restauração, diferente de outros provedores, sendo que para estes serviços de backup e restauração, o Linode disponibiliza um fácil aprendizado para os usuários usufruírem de forma mais eficiente destes serviços (MITCHELL, 2013). Além de backups, o Linode oferece serviços adicionais com recursos extras, como RAM, espaço em disco, banda de velocidade da rede ou endereço IP, além de permitir clonagem de recursos internos dos servidores, como de configurações, permitindo ajudar no gerenciamento (MITCHELL, 2013). O Linode permite que vários usuários utilizem a mesma conta, permitindo que vários usuários utilizem a mesma conta, além de suportar várias versões de Linux, como Debian, Fedora, Ubuntu e CentOS (MITCHELL, 2013). Além disso, diferente de outros serviços IaaS, o Linode oferece a vantagem de permitir inicialização do Sistema Operacional em modo de recuperação, além de outros métodos, o que facilita o gerenciamento de máquinas (MITCHELL, 2013). 5.1.3 Rackspace O provedor Rackspace disponibiliza vários serviços de hospedagem dos modelos PaaS e IaaS, sendo que o Rackspace suporta algumas plataformas de servidores, como Windows e Linux, assim como a Amazon (MITCHELL, 2013). No Rackspace, podem ser alocados servidores de 256 MB até 30 GB de RAM, e espaço em disco de 256 MB até 10GB, os quais são pagos por hora, diferente do Linode que é mensal (MITCHELL, 2013). Outra característica do Rackspace é o oferecimento de instâncias de servidores gerenciáveis e não gerenciáveis, com serviços de suporte de TI premium, incluindo serviços PaaS de e-mail e hospedagem de sites, além de serviços em nuvem privados (MITCHELL, 2013). Além destas características,a questão de personalização, assim como no Linode, o Rackspace também oferece opções parecidas, assim como interface gráfica para gerenciamento e configuração de backup (MITCHELL, 2013). 5.1.4 Amazon Web Services (AWS) Amazon Web Services (AWS) é um dos provedores IaaS mais conhecidos, o qual suporta uma grande variedade de serviços em nuvem, como servidor de hospedagem (EC2), armazenamento em nuvem (S3, EBS), serviços de monitoramento, serviços de notificações (SES, SQS), serviços de banco de dados relacional (RDS), assim como serviço de DNS (Route 53) (MITCHELL, 2013). TÓPICO 1 — INTRODUÇÃO AO CLOUD COMPUTING E O COTIDIANO 23 O Amazon disponibiliza serviços em ambientes públicos, privados ou em comunidades através de serviço VPC, serviço GovCloud e instâncias de VPC dedicados (MITCHELL, 2013). O serviço EC2 suporta as plataformas Windows e Linux, assim como o serviço de importação e exportação de imagem do Sistema Operacional, além disso, os recursos disponibilizados de empresas parceiras, como Microsoft Windows, RedHat Linux e Oracle, por exemplo, são licenciados e são pagos por hora de utilização (MITCHELL, 2013). Amazon possui servidores em quase todos os continentes, como Ásia, Europa e Estados Unidos da América, liderando os servidores de infraestrutura em nuvem, além de permitir a integração com outras plataformas, como a Heroku que pode ser integrada a Amazon RDS, por exemplo (MITCHELL, 2013). A Amazon oferece várias opções de tamanhos de recursos de máquinas, várias funções para gerenciamento de servidores, serviços de banco de dados assim como serviço de armazenamento, oferecendo serviços públicos, privados, gratuitos e licenciados, incluindo uma comunidade completa para suporte (MITCHELL, 2013). Oferecendo pequenos servidores de 1.7 GB de RAM e 1 CPU, ou então os maiores servidores que são de 7.4 GB de RAM e até 4 CPUs (MITCHELL, 2013). Assim como outros provedores disponibilizam serviços gratuitos para novos usuários, a Amazon também oferece, sendo um recurso com micro EC2 e armazenamento para utilizar durante um ano (MITCHELL, 2013). O Amazon Web Services oferece várias configurações diferentes de configurações de servidores, isto é, várias capacidades de memória RAM e recursos de CPU para as várias necessidades dos clientes, mas os pequenos servidores, ou instâncias, servem para realizar testes na plataforma, e não para colocar aplicações em produção (MITCHELL, 2013). 5.1.5 Cisco Metapod De acordo com Santana (2016), devido à necessidade de algumas organizações, alguns provedores de nuvem disponibilizaram um serviço conhecido por PCaaS (Private Cloud as a Service), em que neste cenário, o provedor: • Disponibiliza uma nuvem privada e local em uma organização, utilizando operações automatizadas pré-testadas; • Opera, gerencia e disponibiliza suporte para nuvem privada; • Realiza a cobrança da organização de acordo com sua utilização de recursos. Neste sentido, a Cisco oferece PCaaS através da plataforma Cisco Metapod, a qual pode ser entendida por ser uma solução de plataforma aberta sendo remotamente instalada e opera 24 horas por dia durante o ano inteiro (SANTANA, 2016). O Cisco Metapod possui fácil e rápida instalação, sendo um UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING 24 provedor de nuvem privada que possui alta disponibilidade e um catálogo pré- construído de servidores virtuais e desktops quase prontos para utilização, além de permitir integração com outras organizações e suporte para APIs do AWS (SANTANA, 2016). 5.1.6 Microsoft Azure Outra plataforma deste modelo é o Microsoft Azure, o qual é desenvolvido pela Microsoft, e fornece uma variedade de serviços que se pode utilizar sem pagar, permitindo o desenvolvimento de soluções para realizar tarefas que não podem ser realizadas em um ambiente local de hardware, isso é, fazendo elas no servidor e não no computador do desenvolvedor (COPELAND et al., 2015). Neste sentido, o Microsoft Azure pode ser descrito como um servidor de processamento e armazenamento em nuvem, possibilitando ao desenvolvedor se preocupar com sua tarefa principal de implementar as aplicações, não sendo necessário se preocupar com instalação e configuração de infraestrutura (COPELAND et al., 2015). A plataforma Microsoft Azure oferece suporte para nuvem pública, privada, e híbrida, sendo que o Windows Azure Pack permite adicionar muitos dos serviços do Azure em data centers, oferecendo a experiência destes serviços aos usuários do servidor, podendo realizar esta integração através de uma rede virtual privada (COLLIER; SHAHAN, 2015). O Microsoft Azure possui data centers em 19 regiões do planeta, e com esta plataforma, podem ser adicionados novos servidores para satisfazer a necessidade de desempenho de uma determinada solução, além de facilitar para Startups, permitindo estas iniciarem com baixo custo (COLLIER; SHAHAN, 2015). O Microsoft Azure fornece serviços IaaS através de execução e gerenciamento de servidores com virtualização de software, permitindo criar VMs (Virtual Machines), ou máquinas virtuais, as quais rodam na infraestrutura de servidores e, dependendo do servidor, é possível rodar Sistema Operacional Windows ou Linux (COLLIER; SHAHAN, 2015). Nestas VMs, é possível configurar redes virtuais, balanceadores de carga de rede, armazenamento, assim como outros serviços que rodam nesta arquitetura, porém não se possui controle do hardware e do software de virtualização (COLLIER; SHAHAN, 2015). A migração de serviços para VMs do Microsoft Azure é facilitada, pois é possível criar VMs com mesmas configurações da infraestrutura atual dos serviços que se deseja migrar, podendo serem realizados ajustes quanto a URLs por exemplo, mas muitas aplicações poderão ser migradas desta forma e sem maiores problemas (COLLIER; SHAHAN, 2015). TÓPICO 1 — INTRODUÇÃO AO CLOUD COMPUTING E O COTIDIANO 25 5.1.7 Google Compute Engine (GCE) A plataforma Google Compute Engine (GCE) disponibiliza serviços em VMs, as quais rodam nos data centers do Google, podendo serem criadas VMs com as mais diversas configurações, conforme a necessidade, possuindo redundância e replicação dos dados armazenados, além de permitir que haja comunicação entre a rede privada interna com a rede da VM (COHEN; HURLEY; NEWSON, 2015). O Google Compute Engine disponibiliza várias ferramentas que facilitam o gerenciamento e configuração das instâncias das VMs, como por exemplo atribuir discos de armazenamento, configurar a rede de acesso às VMs, entre outros (COHEN; HURLEY; NEWSON, 2015). Segundo Cohen, Hurley e Newson (2015), dentre as ferramentas disponibilizadas, citam-se: • Google Developers Console: Interface web (UI); • GCloud Compute: Ferramenta em linha de comando que permite desenvolver scripts de automação; • Compute Engine API: API RESTFul que permite a integração e interação em código fonte para gerenciamento de aplicações. Para começar a utilizar o Google Compute Engine, é necessário criar um projeto Engine Compute na ferramenta Developers Console (COHEN; HURLEY; NEWSON, 2015). Um projeto do Engine Compute é uma coleção de recursos e configurações do projeto, como um container de recursos, no qual, disco, firewall, rede e todas as instâncias estão associadas ao projeto (COHEN; HURLEY; NEWSON, 2015). Uma característica interessante é nessa plataforma ser possível adicionar membros para a equipe do projeto, especificando determinadas permissões para acesso a determinados recursos (COHEN; HURLEY; NEWSON, 2015). 26 Neste tópico, você aprendeu que: • A computação em nuvem (cloud computing) pode ser entendida pela utilização de recursos de computação em um provedor na internet, isto é, quando se precisa de um servidor, por exemplo, é possível utilizar uma máquina virtual (virtual machine) que é disponibilizada por vários provedores na internet. • A computação em nuvem pode ser exemplificada também pelo armazenamento em nuvem, isto é, armazenar dados ou arquivos emum servidor na internet, permitindo que estes estejam disponíveis de qualquer local. • Com a utilização da computação em nuvem, recursos são melhores utilizados, deixando de existir recursos ociosos, como discos com grandes capacidades não sendo utilizados por exemplo, podendo ser alocado um disco com a capacidade necessária. O mesmo exemplo serve para processamento. • Dentre as vantagens da computação em nuvem, a escalabilidade, disponibilidade e a elasticidade são as principais. • O termo elasticidade para computação em nuvem indica que o cliente de um serviço pode aumentar ou diminuir a demanda por um serviço. • O termo disponibilidade para computação em nuvem indica que um serviço está disponível a qualquer momento do dia. • O termo escalabilidade para computação em nuvem significa que um serviço suporta o aumento da quantidade de usuários, sem perder eficiência. • No cotidiano, a computação em nuvem é largamente utilizada, atualmente, como para empresas incubadoras que possuem menos recursos e pagam estes serviços pelo que que utilizam. • A virtualização de data centers permite evitar uso ineficiente de recursos, como por exemplo ter um processador com alto poder de processamento, sem precisar utilizá-lo sempre. • A Big Data é muito utilizada na computação em nuvem para armazenamento desta quantidade enorme de dados, seno terabytes ou petabytes, cujo processamento é mais rápido na nuvem. • O modelo IaaS disponibiliza servidores físicos e virtualizados, assim como armazenamento de dados em nuvem, em que desenvolvedores instalam o sistema operacional, sistema gerenciador de banco de dados e os softwares necessários, podendo realizar o acesso de qualquer lugar. RESUMO DO TÓPICO 1 27 1 Algumas empresas possuem um setor de Tecnologia de Informação internamente, para sanar muitos problemas e apresentar soluções para o dia a dia dos negócios. Neste sentido, assinale a alternativa CORRETA referente à computação em nuvem: a) ( ) Computação em nuvem, ou cloud computing, é uma solução viável apenas para empresas que precisam hospedar sites e disponibilizar na internet. b) ( ) Computação em nuvem, ou cloud computing, é uma solução para uso de recursos na internet que existe a menos de três anos. c) ( ) Computação em nuvem, ou cloud computing, facilita o uso de recursos de computação, através da internet, aumentando a ociosidade dos recursos. d) ( ) Computação em nuvem, ou cloud computing, permite que recursos de computação sejam disponibilizados pela internet, e evita ociosidade destes. 2 Em data centers físicos, muitos recursos podem permanecer ociosos por horas ou dias, até alguma aplicação utilizá-lo conforme a necessidade. Neste sentido, assinale a alternativa CORRETA referente à computação em nuvem. a) ( ) A computação em nuvem começou a ser utilizada por volta da década de 1960, logo após ter sido publicado o primeiro artigo a respeito do tema. b) ( ) A computação em nuvem começou a ser utilizada com a disponibilização de armazenamento e hospedagem na internet. c) ( ) A computação em nuvem começou a ser utilizada com o recurso de armazenamento local de dados e arquivos. d) ( ) A computação em nuvem, para o NIST, significa o recurso computacional de processamento, armazenamento e disponibilização de serviços locais. 3 Com um pequeno esforço de provedores de serviços da internet, muitos recursos são disponibilizados para seus clientes. Referente à computação em nuvem, assinale a alternativa CORRETA: a) ( ) Uma das vantagens da computação em nuvem é a possibilidade de aumento da capacidade de armazenamento de um disco rapidamente, porém o custo deste serviço é mais caro que em um data center físico. b) ( ) Uma das desvantagens da computação em nuvem é a exigência de pilhas de equipamentos e implementações, como configuração de hardware, instalação de software e outras tarefas demoradas, as quais são de responsabilidade do cliente. AUTOATIVIDADE 28 c) ( ) Uma das desvantagens da computação em nuvem é a demora em solicitar um recurso novo, como aumento da capacidade de armazenamento, por exemplo. d) ( ) A computação em nuvem auxilia na economia financeira evitando compra de hardware e software, além de recursos para configuração e de data centers locais. 4 A virtualização de data center pode ser compreendida pela computação em nuvem, a qual disponibiliza qualquer recurso computacional pela internet. Referente à computação em nuvem, assinale a alternativa CORRETA que cita todas as vantagens deste tipo de computação: a) ( ) Aumento da ociosidade dos recursos, redução de custos para armazenamento e disponibilização dos recursos computacionais em qualquer local do planeta. b) ( ) Aumento da ociosidade dos recursos e redução de custos destes para o cliente. c) ( ) Armazenamento de Big Data, assim como o processamento destes dados de forma ociosa. d) ( ) São a elasticidade, disponibilidade e a escalabilidade. 5 O modelo IaaS (Infraesrtucture as a Service) pode ser compreendido pelo fornecimento de um data center em nuvem, como servidores físicos e virtualizados, por exemplo, os quais podem ser acessados de qualquer local do planeta. Referente ao modelo IaaS, assinale a alternativa CORRETA: a) ( ) Os desenvolvedores ou administradores precisam gerenciar o hardware e o software. b) ( ) O gerenciamento de recursos como hardware e software, assim como a instalação de software, não é necessário neste modelo. c) ( ) No modelo IaaS, não é possível realizar automatização para disponibilização de recursos. d) ( ) Dentre as plataformas que disponibilizam computação em nuvem, o Linode é um exemplo para o IaaS, diferente do Amazon Web Services e Rackspace que disponibilizam apenas serviços no modelo PaaS. 29 TÓPICO 2 — UNIDADE 1 SOFTWARE COMO SERVIÇO - SAAS 1 INTRODUÇÃO Entre os três modelos de Serviços, Software como um Serviço (SaaS), Plataforma como um Serviço (PaaS) e Infraestrutura como um Serviço (IaaS) apresentado no Tópico 1 desta unidade, o SaaS está no topo da pilha dos serviços, é um aplicativo completo entregue como um serviço aos consumidores. De acordo com Kavis (2014), no SaaS o consumidor do serviço precisa apenas configurar alguns parâmetros específicos do aplicativo e gerenciar os usuários, e por outro lado o provedor de serviços lida com toda a infraestrutura, toda a lógica do aplicativo, todas as implantações e tudo relacionado à entrega do produto ou serviço. Segundo Chandrasekaran (2015), o provedor SaaS oferece diferentes serviços como os serviços comerciais incluindo ERP (Enterprise Resource Planning), CRM (Customer Relationship Management), cobrança, vendas, recursos humanos, as redes sociais, para o gerenciamento de documentos eletrônicos, nos quais os provedores SaaS começaram a oferecer serviços para criar, gerenciar e rastrear esse tipo de documento e serviços eletrônicos como e-mail. Enfim, existem várias soluções SaaS que lidam com segurança, monitoramento, registro em log, testes e assim por diante como também na categoria de dados inclui business intelligence, banco de dados como serviço, visualização de dados, dashboards, data mining e muito mais (KAVIS, 2014). Segundo Chandrasekaran (2015), o SaaS muda a maneira como o software é entregue aos clientes. No modelo de software tradicional, o software é entregue como um produto baseado em licença que precisa ser instalado no dispositivo do usuário final. Como o SaaS é entregue como um serviço sob demanda pela nuvem, não há necessidade de instalar o software nos dispositivos do usuário final. Seus serviços podem ser acessados ou desconectados a qualquer momento, com base nas necessidades do usuário final a partir de qualquer navegador leve em qualquer dispositivo, como laptops, tablets e smartphones. Uma empresa deve usar o SaaS para terceirizar todos os aplicativos, recursos e serviços que não são sua competência essencial, assumindo que atenda às suas necessidadese seja acessível. Por exemplo, se uma empresa não está envolvida na elaboração de software de RH, folha de pagamento, gerenciamento de relacionamento com cliente (CRM) e contabilidade, não deve criar esses aplicativos. Comprar esses aplicativos e executá-los no local não é rentável com o 30 UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING surgimento de alternativas SaaS. Enfim, no SaaS a parte da categoria produtividade inclui ferramentas de colaboração, ferramentas de desenvolvimento, pesquisas, ferramentas de campanha por e-mail e muito mais. Um dos exemplos mais comuns e utilizados de uma aplicação SaaS é o e-mail, ou seja, a maioria das pessoas utiliza aplicações nesse modelo sem ter conhecimento disso. Um exemplo bem simples desse tipo de aplicação é o Gmail, o gerenciamento de e-mail do Google, em que basta o usuário acessar o site, inserir seu login e senha para se conectar com todas as suas informações ali guardadas (SOARES, 2020). Outro exemplo clássico de SaaS é a Netflix, que oferece diversas séries e filmes. O usuário paga um plano para assistir e, conforme for seu plano, um ou mais equipamentos podem ser acessados simultaneamente na casa do usuário, podendo o usuário alterar a qualquer momento, de maneira simples e rápida configurando sua conta. Como o Netflix é um aplicativo SaaS, o usuário final não é responsável por sua manutenção, e qualquer problema relacionado à aplicação é de responsabilidade exclusiva do provedor do serviço a solução ao problema. O SaaS vem em um crescimento no Brasil e no mundo, por ser adaptável às necessidades da empresa e/ou usuário final. Nos dias atuais as empresas e usuários tem uma necessidade cada vez maior de agilidade nos processos, exigindo que o usuário esteja conectado praticamente em tempo integral, desta forma, o modelo SaaS vem para facilitar esse processo (SOARES, 2020). Este mesmo autor nos traz que informações levantadas pela consultoria Gartner mostram que, nos últimos anos, cerca de 71% das empresas no mundo começaram a utilizar o SaaS. Enfim, o modelo SaaS é o modelo mais utilizado para entregar serviços para nuvem no Brasil, com 92% das empresas adotando pelo menos uma solução SaaS. A previsão de 2019 foi atingir US$ 113,1 bilhões em 2021 com crescimento de 32,9% em apenas dois anos. 2 CONCEITO DE SAAS Segundo Silva (2017), o modelo de entrega de serviço SaaS tem potencial para revolucionar a forma de como as empresas vão investir em sistemas de informação. Na perspectiva de adoção, esse modelo é ideal para empresas iniciantes, que não têm capital para entregar sistemas de grande porte, caso em que é necessário investir altas taxas em implantação e manutenção dos sistemas. Enfatiza o autor que com o SaaS, a pequena empresa poderá contratar sistemas de informação robustos e consagrados no mercado pagando apenas uma fatura mensal referente ao uso. Muitas vezes, será possível a utilização de software de diversos dispositivos ou locais pagando-se apenas um único contrato. Na perspectiva de venda de serviços computacionais e software, empresas que possuem sistemas de alto custo poderão se inserir em um novo segmento de TÓPICO 2 — SOFTWARE COMO SERVIÇO - SAAS 31 mercado, na medida em que poderão vender seus serviços de acordo com o volume de utilização. Os aplicativos SaaS também são chamados de softwares baseados na web, softwares sob demanda ou softwares hospedados (SALESFORCE, 2020). Para Furht e Escalante (2010), o SaaS é baseado no uso de software de licenciamento sob demanda que pode ter sido desenvolvido e implantado na camada PaaS ou IaaS de uma plataforma em nuvem. O SaaS substitui o uso tradicional de software por um modelo de aluguel, reduzindo os custos de implantação e gerenciamento de equipamentos físicos do usuário. As nuvens SaaS também podem permitir aos usuários compor serviços existentes para atender aos seus requisitos. As organizações optam por utilizar soluções SaaS para funções não essenciais, ou seja, tarefas que não fazem parte de seu escopo ou produto de desenvolvimento para que não precisem oferecer suporte à infraestrutura de aplicativos, fornecer manutenção e contratar pessoal para gerenciar tudo. Em vez disso, eles pagam uma taxa de assinatura e simplesmente usam o serviço pela rede da Internet como um serviço baseado em nuvem (KAVIS, 2014). O provedor SaaS pode fornecer serviços de negócios, redes sociais, gerenciamento de documentos e serviços de correio, como mostra a Figura 11. Segundo Chandrasekaran (2015), os Serviços Comerciais que incluem ERP, CRM, cobrança, vendas e recursos humanos, as Redes sociais que adotaram o SaaS por sua sustentabilidade, os gerenciamentos de documentos usados para criar, gerenciar e rastrear documentos eletrônicos e por fim os serviços de e-mail pessoais e organizacionais. FIGURA 11 – SERVIÇOS FORNECIDOS PELOS PROVEDORES SAAS FONTE: Chandrasekaran (2015, p. 86) 32 UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING Para Kavis (2014), os provedores de SaaS controlam totalmente a infraestrutura, o desempenho, a segurança, a escalabilidade, a privacidade e muito mais, e os fornecedores de SaaS geralmente oferecem duas maneiras para seus clientes usarem seus aplicativos. A primeira maneira é provê acesso em qualquer dispositivo que possa se conectar à Internet através uma interface de usuário baseada na Web amigável e a outra maneira é fornecer APIs para seus clientes, para que os consumidores de serviços possam integrar recursos aos aplicativos existentes ou com outras soluções SaaS. Do ponto de vista do desenvolvimento de sistemas, para Silva (2017), para adotar SaaS a equipe de desenvolvimento deve criar aplicações fazendo uso de PaaS e as implantam na IaaS da nuvem, ou seja, pensar em que tipo de modelo de serviço (IaaS, PaaS, SaaS) o arquiteto deve usar a solução e também detalhar conforme os requisitos de negócios qual tipo de modelo de implantação em nuvem (público, privado, híbrido) deve ser utilizado. Segundo Kavin (2014), se uma empresa estiver criando sites voltados para o consumidor, nos quais os usuários trocam voluntariamente seus dados pessoais por um serviço gratuito (Facebook, Twitter, Instagram etc.), a empresa pode facilmente justificar colocar tudo em uma nuvem pública. Se uma empresa está vendendo para outras empresas como estabelecimentos de varejo, hospitais e agências governamentais, há uma chance muito boa de alguns clientes exigirem que pelo menos alguns dos dados estejam em uma nuvem privada ou não saiam de suas instalações. Portanto para desenvolver um SaaS levando em consideração os requisitos de negócios e requisitos de sistemas, Kavin (2014) nos apresenta as seguintes recomendações: • Compreenda os requisitos de negócios e as expectativas dos clientes da computação em nuvem antes de selecionar modelos de serviço e tipos de nuvem. • Obter clareza da definição e os requisitos do produto, fazendo uma avaliação regulatória e de segurança dos requisitos e adicione o código mais importante em todo o log de produto. • Tenha à mão uma lista de perguntas frequentes que responde a todas as perguntas e preocupações que o cliente típico terá para a solução baseada em nuvem. Bhowmik (2017) define serviço como a abstração de muitas funcionalidades complexas, quanto mais acima a camada, maior o nível de abstração. O SaaS fica na primeira camada onde seu grau de abstração ainda é mais elevado, ou seja, os consumidores podem usar aplicativos sem se preocupar com nada subjacente, tendo sua responsabilidade limitada à utilização do aplicativo, visto que a infraestrutura, a plataforma, o desenvolvimento e o gerenciamento do aplicativo cabem aos fornecedores. TÓPICO 2 — SOFTWARE COMO SERVIÇO - SAAS 33 3 CARACTERÍSTICAS DO SAAS Os serviços SaaS são diferentes e oferecem mais benefícios aos usuários finais do que o software tradicional. A seguir, são apresentadas por Chandrasekaran (2015) às características essenciais dos serviços SaaS que o tornamúnico em relação ao software tradicional: • Um para muitos: os serviços SaaS são entregues como um modelo para muitos, no qual uma única instância do aplicativo pode ser compartilhada por vários ou múltiplos locatários ou clientes. • Acesso à Web: os serviços SaaS fornecem acesso à Web ao software, no qual o usuário final acessa o aplicativo a partir de qualquer local, se o dispositivo estiver conectado à Internet. • Gerenciamento centralizado: como os serviços SaaS são hospedados e gerenciados a partir do local central, o gerenciamento do aplicativo SaaS se torna mais fácil. Normalmente, os provedores de SaaS executam as atualizações automáticas que garantem que cada locatário esteja acessando a versão mais recente do aplicativo sem nenhuma atualização do lado do usuário. • Suporte a vários dispositivos: os serviços SaaS podem ser acessados a partir de qualquer dispositivo do usuário final, como desktops, laptops, tablets, smartphones e fino cliente (thin client). • Melhor escalabilidade: como a maioria dos serviços SaaS utiliza PaaS e IaaS para seu desenvolvimento e implantação, ela garante uma melhor escalabilidade do que o software tradicional. O dimensionamento dinâmico dos recursos subjacentes da nuvem faz com que os aplicativos SaaS funcionem com eficiência, mesmo com cargas variadas. • Alta disponibilidade: os serviços SaaS garantem a disponibilidade de 99,99% dos dados do usuário, à medida que os mecanismos adequados de backup e recuperação são implementados no back-end. • Integração de API: os serviços SaaS têm a capacidade de integração com outro software ou serviço por meio de APIs padrão. Destaca o portal SoftLine (2017) que qualquer um conhece o SaaS porque sites como o Facebook e o Twitter ou aplicativos como o Skype, OneDrive, Google Docs e o Office 365 funcionam dessa maneira. Então, o SoftLine enfatiza que o SaaS é bastante recomendado para pequenas empresas, que não podem gastar com a compra de licenças, trabalhos que durem apenas um curto período de tempo, quando tem a necessidade de acesso remoto aos aplicativos, como no caso de softwares de CRM ou de gestão de redes sociais. Vale destacar que só paga pelo que sua dos aplicativos SaaS, ou seja, consumido sob demanda e necessidade de cada empresa ou usuário. Para Chandrasekaran (2015), além dos benefícios relacionados aos custos, os serviços SaaS oferecem os seguintes benefícios: 34 UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING • Nenhuma instalação no lado do cliente: os serviços SaaS não exigem a instalação do software no lado do cliente. Os usuários finais podem acessar os serviços diretamente do centro de dados do provedor de serviços sem nenhuma instalação. Não há necessidade de hardware de ponta para consumir SaaS. • Serviços: Ele pode ser acessado a partir de qualquer dispositivo portátil, reduzindo assim o gasto inicial na compra de hardware de última geração. • Economia de custos: como os serviços SaaS seguem o faturamento com base em serviços públicos ou com o pagamento conforme o uso, é necessário que os usuários finais paguem pelo que usaram. A maioria dos provedores de SaaS oferece planos de assinatura diferentes para beneficiar clientes diferentes. Às vezes, os serviços SaaS genéricos, como processadores de texto, são oferecidos gratuitamente aos usuários finais. • Menos manutenção: os serviços SaaS eliminam a sobrecarga adicional de manter o software do lado do cliente. Por exemplo, no software tradicional, o usuário final é responsável por executar atualizações em massa. No entanto, no SaaS, o próprio provedor de serviços mantém as atualizações automáticas, o monitoramento e outras atividades de manutenção dos aplicativos. • Facilidade de acesso: os serviços SaaS podem ser acessados a partir de qualquer dispositivo, se estiver conectado à Internet. A acessibilidade dos serviços SaaS não se restringe a dispositivos específicos. É adaptável a todos os dispositivos, pois usa a interface de usuário da web responsiva. • Escala dinâmica: os serviços SaaS são conhecidos popularmente pela escala dinâmica elástica. É muito difícil para o software local fornecer capacidade de dimensionamento dinâmico, pois requer hardware adicional. Como os serviços SaaS aproveitam os recursos elásticos fornecidos pela computação em nuvem, ele pode lidar com qualquer tipo de carga variável sem interromper o comportamento normal do aplicativo. • Recuperação de desastres: com mecanismos adequados de backup e recuperação, as réplicas são mantidas para todos os serviços SaaS. As réplicas são distribuídas por muitos servidores. Se algum servidor falhar, o usuário final poderá acessar o SaaS de outros servidores. Elimina o problema do ponto único de falha. Também garante a alta disponibilidade do aplicativo. • Multilocação: Múltiplo Locatário é a capacidade dada aos usuários finais de compartilhar uma única instância do aplicativo. A multilocação aumenta a utilização de recursos do lado do provedor de serviços. Segundo Chandrasekaran (2015), o principal problema com os serviços SaaS é a segurança dos dados. Todas as empresas estão preocupadas com a segurança de seus dados hospedados no data center do provedor de serviços. A seguir, estão os principais problemas com os serviços SaaS de acordo com este autor: • Segurança: a segurança é a principal preocupação na migração para o aplicativo SaaS. Como o aplicativo SaaS é compartilhado entre muitos usuários finais, existe a possibilidade de vazamento de dados. Aqui, os dados são armazenados TÓPICO 2 — SOFTWARE COMO SERVIÇO - SAAS 35 no centro de dados do provedor de serviços. Não podemos simplesmente confiar em algum provedor de serviços terceirizado para armazenar nossos dados confidenciais e sensíveis à empresa. O usuário final deve ter cuidado ao selecionar o provedor SaaS para evitar perda de dados desnecessária. • Requisitos de conectividade: os aplicativos SaaS requerem conectividade com a Internet para acessá-lo. Às vezes, a conectividade com a Internet do usuário final pode ser muito lenta. Em tais situações, o usuário não pode acessar os serviços com facilidade. A dependência da conexão à Internet de alta velocidade é um grande problema nos aplicativos SaaS. • Perda de controle: como os dados são armazenados em um local externo e externo, o usuário final não tem controle dos dados. O grau de controle do aplicativo SaaS e os dados é menor que o aplicativo local. 4 APLICAÇÕES SAAS EM CENÁRIOS DE BIG DATA Perez (2018) explica que as plataformas de dados convencionais e as soluções de Big Data se esforçam para cumprir seu propósito fundamental que é de permitir que qualquer usuário trabalhe com quaisquer dados, sem limites de escala, desempenho ou flexibilidade. Percebendo que a realidade é bem outra, Perez nos faz o seguinte questionamento: A maioria dos dados da sua empresa, senão todos, já residem na nuvem? Neste caso, vamos supor que uma porcentagem considerável de seus dados esteja em sua solução de CRM. Há anos você utiliza um CRM baseado em nuvem, o que significa que seus dados de cliente, oportunidade e engajamento já estão armazenados on-line. Nesse cenário, faz pouco sentido extrair esses dados da nuvem para um sistema local - especialmente quando você considera que os dados têm massa, o que significa que também têm inércia e gravidade. Quanto mais os dados residem em um sistema em silos, menos viável a consulta cruzada se torna. Enfim, conclui o autor que uma abordagem melhor seria contar com uma ferramenta de análise SaaS construída para a nuvem, ou seja, uma solução SaaS moderna e instantaneamente elástica pode fazer flutuações em computação e armazenamento - por hora, minuto ou segundo - prática padrão e uma oportunidade viável para seu negócio (PEREZ 2018, s. p.). O uso de soluções SaaS envolvendo Big Data são utilizados para que todo o potencial de dados das empresas seja utilizado a favor delas. Através das técnicas em Big Data é possível entendendoo comportamento do consumidor e buscar entender de formas inteligentes as melhorias dos serviços e produtos. O conceito de amarrar SaaS com Big Data busca a revolução na produção de dados, na qual os dados passam a serem gerados em diversos formatos diferentes, sem estrutura ou associação entre eles, em alta velocidade, basicamente o tempo todo, em fontes como a internet e sistemas internos. https://www.snowflake.com/product/ 36 UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING Guerreiro (2020) destaca que as empresas Gainsight e Keen.io possuem uma ferramenta analíticas de Big Data que podem ser incorporadas e entregues no aplicativo SaaS a fim de ajudar a gerenciar os serviços do consumidor. Tem também o “Muoro”, uma ferramenta de ciência de dados que ajuda a gerar análises avançadas usando IA e aprendizado de máquina por meio do algoritmo proprietário do DataShelter. Seu foco é tornar o trabalho do SaaS colaborativo como uma tarefa contínua entre cientistas de dados e gerentes de negócios, tornando a análise avançada um processo sem complicações na organização. Big Data faz parte dos serviços do Google Cloud mais utilizados nas empresas para análise de dados, seus serviços permitem processar e consultar Big Data na nuvem para receber respostas rápidas para perguntas complicadas (GOOGLE CLOUD, 2020a). O Google BigQuery oferece serviços de “análise de dado”, em que se permite (GOOGLE CLOUD, 2020b): • Criar esquemas personalizados que organizam os dados em conjuntos de dados e tabela. • Carregar dados de uma grande variedade de fontes, como dados de streaming. • Usar comandos semelhantes aos do SQL para consultar conjuntos de dados enormes em um instante. O BigQuery foi projetado e otimizado para oferecer velocidade. • Usar a IU da Web, a interface de linha de comando ou a API. • Carregar, consultar, exportar e copiar dados usando Jobs. • Gerenciar e proteger dados usando permissões. Já o Dataflow oferece um serviço gerenciado e um conjunto de SDKs que você pode usar para realizar tarefas de processamento de dados em lote e streaming. É um recurso que funciona bem para computação de alto volume, especialmente quando as tarefas de processamento podem divididas facilmente e de forma clara em cargas de trabalho em paralelo. É excelente para tarefas de extração, transformação e carga, que são úteis para migrar dados entre diferentes mídias de armazenamento, fazer a transformação de dados para um formato mais desejável ou carregar dados em um novo sistema de armazenamento (GOOGLE CLOUD, 2020c). Por fim, o Pub/Sub é um “serviço de mensagens assíncronas”. O aplicativo pode enviar mensagens no formato de estruturas de dados JSON para uma unidade de publicação, chamada tópico. Como os tópicos do Pub/Sub são um recurso global, outros aplicativos nos seus projetos podem se inscrever no tópico para receber as mensagens na solicitação HTTP ou nos corpos de resposta. A utilidade de Pub/Sub não se limita ao Big Data. É possível usar o Pub/Sub em muitas situações em que um serviço de mensagens assíncrono é necessário. Para conferir um exemplo que usa Pub/Sub para coordenar o App Engine e o Compute Engine, consulte Programação de tarefas confiável no Compute Engine (GOOGLE CLOUD, 2020c). TÓPICO 2 — SOFTWARE COMO SERVIÇO - SAAS 37 Neste viés das possibilidades de aplicar Big Data para SaaS, devido ao fato de que como o aparato tecnológico se tornou mais robusto e também há uma constante diminuição de custos, com fornecedores de ferramentas e computação em nuvem cada vez mais especializados, as empresas começam a fazer um uso mais inteligente das informações de que dispõem. Estruturar, analisar e tomar decisões com dados gerados pelos clientes fica cada vez mais possível e, com isso, também fica mais fácil inovar em relacionamentos, produtos e serviços. Portanto, a interpretação rápida de informações para pautar a equipe de vendas ou para criar peças de comunicação mais assertivas só é possível graças às ferramentas criadas para lidar com o Big Data e com a infraestrutura oferecida por Cloud. Os gestores de TI agora passam a ter sob sua responsabilidade este domínio das possibilidades tecnológicas, tornando-se executivos que formam grandes parcerias e administram pessoas capazes de lidar com as demandas e as ambições corporativas (UDELCIO, 2014). O modelo de cobrança do SaaS funciona como um aluguel, sendo cobrado de diferentes formas, com semanais, mensais, semestrais, anuais ou apenas de acordo com seu uso. São vendidos em forma de assinaturas, nas quais a empresa ou o usuário paga uma taxa contínua, mas há casos de SaaS que disponibilizam uma versão gratuita com funcionalidades mais básicas contendo propagandas de anunciantes que mantêm essa versão. Soares (2020) explica que o cliente paga por um pacote, pelo que usar ou pela versão desejada para ter acesso a determinados recursos, números de logins, volume de tráfego suportado etc. 5 PLATAFORMAS DE SAAS Uma empresa deve usar o SaaS para terceirizar todos os aplicativos, recursos e serviços que não são sua competência essencial, assumindo que atenda às suas necessidades e seja acessível. São diversos os modelos de aplicação de SaaS. Nesta seção, apresentaremos alguns dos principais provedores de SaaS: 5.1 GOOGLE APPS Concorrendo diretamente com empresas como a Microsoft e seu Office, o Google App lançado em 2006 um pacote de aplicativos que oferece soluções para e-mail, calendário, armazenamento na nuvem, reuniões ou treinamentos pelo Meet e edição de arquivos (texto, planilhas e apresentações). Segundo o portal do Google Cloud (2020d), o SaaS é parte do seu DNA da Google App oferecendo soluções inovadoras que transformam as organizações. Seus produtos SaaS destacam-se da concorrência devido à moderna tecnologia de análise de dados e de recursos do machine learning. Soluções que permitem gerenciar usuários e realiza implantação de ferramentas integradas utilizando nuvem híbrida/ de várias nuvens como por exemplo a ferramenta Anthos (GOOGLE CLOUD, 2020d). 38 UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING Ao escolher o Google App é possível utilizar uma infraestrutura moderna que permite que o Google mostre bilhões de resultados de pesquisa em milissegundos, forneça 6 bilhões de horas de vídeo no YouTube por mês e disponibilize armazenamento para 1 bilhão de usuários do Gmail (GOOGLE CLOUD, 2020d, s.p.). Segundo Furht e Escalante (2010), o Google Apps fornece vários aplicativos da Web com funcionalidade semelhante ao software de escritório tradicional (processamento de texto, planilhas etc.), mas também permite comunicar, criar e colaborar com facilidade e eficiência. Esclarecem os autores que como todos os aplicativos são mantidos on-line e acessados por meio de um navegador da Web, os usuários podem acessar suas contas a partir de qualquer computador conectado à Internet sem a necessidade de instalação extra local. O Google Apps possui vários componentes. Os componentes de comunicação consistem no e-mail do Google e no Google Talk, que permitem a comunicação por e-mail, mensagens instantâneas e chamadas de voz. Os componentes do escritório incluem documentos e planilhas, através dos quais os usuários podem criar documentos on-line que também facilitam a pesquisa e a colaboração, pelo Google Agenda que é um aplicativo de calendário flexível para organizar reuniões e eventos e por fim outro recurso é as as páginas da web do Google App, os administradores podem publicar facilmente as informações fornecendo aos usuários uma rica variedade de conteúdo e aplicativos que podem ser personalizados (FURHT, ESCALANTE, 2010). O Google Apps possui vários recursos significativos (FURHT, ESCALANTE, 2010). Primeiro, ele fornece um painel de controle fácil de usar que facilita as tarefas administrativas mais comuns, como ativar / desativar aplicativos, gerenciar contas e personalizar interfaces. Segundo, embora hospedado no Google, o usuário pode controlar a marcaem todas as interfaces, ou seja, inclui e-mail profissional personalizado (completo com proteção contra spam), agendas compartilhadas e videoconferências (meet) ao lado do Google Drive, no qual os usuários poderão personalizar sua interface Web, layouts e cores das páginas. Terceiro, os administradores podem integrar-se às plataformas existentes e estender a funcionalidade dos principais aplicativos do Google Apps com as Interfaces de programação de aplicativos (APIs) oferecidas. Existem várias APIs disponíveis para provisionamento, reportar e migração, bem como de manipulação de dados de agenda e nas planilhas do Google integrado com sistemas Single Sign On (SSO) (FURHT, ESCALANTE, 2010). 5.2 ONEDRIVE OneDrive é um serviço de armazenamento em nuvem da Microsoft, uma plataforma suportada em iOS, Android e Windows, na qual todos os usuários do Office 365 têm direito a utilizar o serviço de armazenamento de forma ilimitada é totalmente gratuito. Serve para salvar fotos, vídeos, documentos, PDFs, apresentações em PowerPoint e outros arquivos. Nele, o usuário pode TÓPICO 2 — SOFTWARE COMO SERVIÇO - SAAS 39 definir arquivos públicos, para qualquer pessoa acessar e alterar os arquivos, ou privados, nos quais somente o próprio usuário que hospedou o arquivo tem direito de alteração. Segundo Strategic SaaS (2020), os benefícios para uma organização utilizar o armazenamento OneDrive é de manter o controle, a integridade e o desempenho dos dados; aumentar a utilização do armazenamento e o acesso aos dados; fornece uma plataforma central para velocidade e eficácia com backup mais rápido; e por fim, expandir a capacidade para atender aos crescentes requisitos de armazenamento. As dez vantagens de usar um serviço de armazenamento OnDrive apresentados por Celular Direto (2019) são: economia de espaço no seu computador; armazenamento mais seguro; liberdade de acesso; versão para computador e smartphones; senha no aplicativo; compartilhamento e edição colaborativa de arquivos e pastas; recuperar arquivos apagados; busca por palavras em documentos, imagens e arquivos em PDF; acesso off-line aos arquivos e inserir apresentações em PowerPoint em sites. Uma vantagem de trabalhar com OneDrive é a possibilidade de salvar uma pasta no seu computador e sincronizar automaticamente seus arquivos com a versão da nuvem, trabalhando de forma local (off-line) ou remota (on-line) com seus arquivos. O explorer de seu computador sinaliza se os seus arquivos já foram sincronizados com a versão on-line ou não, e para atualizar basta clicar com o botão direito do mouse sobre o arquivo e sincronizar. Para acessar o OneDrive, utilize o seguinte link: https://onedrive.live.com/ DICAS 5.3 DROPBOX O DropBox foi um dos primeiros serviços de hospedagem de arquivos em cloud mais popular da web e que nos últimos anos perdeu espaço para os serviços da Microsoft e Google. Segundo Tutida (2019), a grande vantagem do Dropbox é a sua acessibilidade em vários dispositivos e plataformas, é suportado pelas plataformas do Windows, iOS, Android e Linux. Funciona em um algoritmo de transferência de arquivos em nível de bloco, sincronizando com a nuvem no momento em que é alterado. Quanto ao aspecto de segurança, ele criptografa os dados em trânsito e em repouso e para não ocorrer invasão de hackers o Dropbox ativa um recurso de autenticação de dois fatores para efetuar login. Está disponível pelo endereço: https://www.dropbox.com/. 40 UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING 5.4 SALESFORCE Segundo Furht e Escalante (2010), o Salesforce é uma plataforma em nuvem SaaS comercial que fornece aplicativos personalizáveis, principalmente serviços de Gerenciamento de Relacionamento com o Cliente (Customer Relationship Management (CRM)), para os consumidores. Existem dois produtos principais apresentados pelo Salesforce. O Sales Cloud é um grupo de aplicativos abrangentes para melhorar a conveniência e a eficiência das atividades de negócios; e a Service Cloud é fornecida para integrar aplicativos de redes sociais como Facebook e Twitter, para construir a comunidade de atendimento ao cliente de um usuário (FURHT, ESCALANTE (2010). Esta mesma referência nos esclarece que os serviços do Salesforce CRM são implantados na plataforma em nuvem Force.com, que opera uma arquitetura orientada por metadados orientada para multilocação. A multilocação permite compartilhar a mesma versão de um aplicativo entre muitos usuários, mas cada usuário pode acessar apenas seus próprios dados privados, o que mantém suas atividades isoladas. Todas as funcionalidades e configurações dos aplicativos são descritas com metadados, para que os usuários possam personalizar os aplicativos como desejarem. Embora o modelo de aplicativo compartilhado possa causar interferência entre os usuários, a nuvem do Salesforce SaaS tem as seguintes vantagens (FURHT, ESCALANTE (2010): • Os provedores de serviços podem desenvolver apenas uma versão do aplicativo e não precisam se preocupar com ambientes de execução heterogêneos; • O compartilhamento do recurso de computação física, sistema operacional e ambiente de tempo de execução reduz o custo do serviço de aplicativo; e • Os consumidores de serviços são livres para escolher sua versão preferida do aplicativo e personalizá-lo para se adequar aos seus negócios. 5.5 CISCO WEBEX O Cisco WebEx e uma plataforma de comunicação que fornece aplicativos para realização de reunião on-line e aplicações de videoconferência. Segundo Lima (2019), o Cisco WebEx permite reunir funcionários ou clientes que se encontram geograficamente distantes, para discussões e colaborações no ambiente digital, em tempo real como se estivessem presentes na mesma sala. As duas principais ferramentas são o Cisco WebEx Meetings e o Cisco WeBex Teams. As principais vantagens estão em permitir muita colaboração nos negócios, melhorando seus processos empresariais e melhorarem os resultados das equipes de vendas, marketing, treinamento, gerenciamento de projeto e suporte. TÓPICO 2 — SOFTWARE COMO SERVIÇO - SAAS 41 Quanto ao aspecto de segurança, Lima (2019) destaca que a ferramenta oferece diversos recursos que tornam a sua implantação, a sua manutenção (rede, plataforma, entre outros) e o seu uso (do agendamento da reunião, autenticação de participantes, compartilhamento de documentos etc.) mais seguros. Destaca também que o Cisco Webex Meeting possui versões para os sistemas operacionais Windows, Mac Osx e sistemas operacionais mobile IOS e Android e que o aplicativo versão desktop permite que você realize agendamentos, inicie e entre em reuniões de forma rápida e fácil. Enfim, para Lima (2019), dentro da sua sala de reunião pessoal do Webex é possível utilizar diversos recursos dos quais os principais são a interação com os participantes via áudio e vídeo, a interação com os participantes via mensagem de texto, o compartilhamento de tela, a gravação da sua reunião no Webex e também disponibiliza seu endereço da empresa no Portal Webex onde o link sempre é disponível da seguinte forma: https://NOME_DA_SUA_EMPRESA.webex.com. 5.6 CONCUR Segundo Shapiro (2018), a partir de 2018, a Concur se tornou um produto da família SAP, agora é SAP Concur. É um SaaS utilizado para o gerenciamento de despesas, viagens e faturas para maior visibilidade e controle. Segundo Google Play (2020b), com o aplicativo SAP Concur, o usuário pode gerenciar todo o processo de viagem e despesa de negócios de onde estiver, pode tirar fotos dos recibos para nunca mais perdê-los, pode analisar e aprovar rapidamente relatórios, faturas e solicitações de viagem, também pode adicionar participantes a reuniões ou refeições de negócios, pode importar dados dos cartões de crédito, reservar um voo/hotel/automóvel rápida e facilmente de qualquer lugar, também pode visualizar sugestões de hotel personalizadas, especificar encargos de hotel por item, acessar e gerenciar seu itinerário enquantoviaja, pode integrar seu itinerário ao aplicativo TripIt, pode acompanhar e enviar facilmente a quilometragem do automóvel e muito mais. 5.7 GOTOMEETING Segundo o Google Play (2020a), no GoToMeeting permite-se: • Participar de uma reunião ou organize-a em qualquer telefone ou tablet com Android. • Áudio de VoIP de banda completa, totalmente claro, ou chamada telefônica. • Conferência de vídeo face a face, em que parte do mundo você estiver. • Compartilhar a tela completa do seu dispositivo com todos os que estão na reunião. • Transferir o controle da apresentação para outros participantes para ver apresentações, simulações, relatórios etc. 42 UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING • Ver todas as próximas reuniões e entre com um simples toque. • Receber alertas quando uma reunião estiver prestes a começar. • Usar o chat com cada participante em separado ou com todos os presentes na reunião. 5.8 GOOGLE BIGQUERY BigQuery é uma plataforma de armazenamento de dados corporativo que realiza consultas SQL super-rápidas utilizando a capacidade de processamento da infraestrutura do Google para facilitar e integrar a análise de uma quantidade muito grande de dados. Ou seja, é uma poderosa ferramenta de Big Data que ajuda as empresas em suas estratégias de negócio que permite acesso às informações em tempo real com o streaming e obter análises avançadas, preditivas e assertivas (SANTODIGITAL, 2020). Segundo Google Cloud (2020b), o BigQuery é totalmente gerenciado e acessado pelo Console do Cloud, pela UI clássica da Web, por uma ferramenta de linha de comando ou fazendo chamadas à API REST do BigQuery com diversas bibliotecas de cliente, como Java, .NET ou Python. O sistema de armazenado é baseado em NoSQL e não permite a remoção ou renomeação dos arquivos, além de não criar outros links para o mesmo projeto. A interação é feita por meio de navegador web próprio, uma linha de comando ou por chamadas para API do REST utilizando linguagens JAVA, .NET ou Phyton. Também é possível acessar cópias dos projetos na plataforma Google Cloud. O sistema permite o total gerenciamento de acesso de acordo com o perfil da empresa (GOOGLE CLOUD, 2020a). Recomendamos a leitura do artigo Entenda as principais técnicas para otimização de custos do BigQuery, disponível em: https://www.santodigital.com.br/ bigquery-entenda-as-principais-tecnicas-para-otimizacao-de-custos/. DICAS TÓPICO 2 — SOFTWARE COMO SERVIÇO - SAAS 43 5.9 O GOOGLE DRIVE O Google Drive é um exemplo de uma aplicação SaaS muito popular e utilizado para hospedar e compartilhar arquivos. Geralmente, esses serviços já incluem o gerenciamento de licenças, possíveis manutenções, atualizações e todo o suporte de que o usuário precisa (SOARES, 2020). O Google Drive é suportado pelas plataformas Windows, iOS e Android, porém segundo Tutida (2019), ele não oferece armazenamento ilimitado, vem com 15 GB de espaço de armazenamento de dados gratuito dividido em diferentes aplicativos do Google, como o Google Fotos, o e-mail e os semelhantes. O Google Drive está disponível em: https://www.google.com/drive/. Google Drive é simples e fácil de usar. Por exemplo, utilizando o Gmail, o usuário pode enviar arquivos grandes anexos pelo Google Drive disponibilizando o link para fazer o upload. Quanto ao aspecto de segurança, o Google criptografa seus arquivos em trânsito seguindo o protocolo criptográfico TLS. Assim como o Dropbox, o Google Drive também apresenta um sistema de verificação em duas etapas. Sobre os centros de dados, o Google Drive usa grades de laser e scanners biométricos para garantir segurança completa. Assim, seus dados ficarão bem seguros e protegidos (TUTIDA, 2019). 44 RESUMO DO TÓPICO 2 Neste tópico, você aprendeu que: • No SaaS o consumidor do serviço precisa apenas configurar alguns parâmetros específicos do aplicativo e gerenciar os usuários. • No SaaS o provedor de serviços lida com toda a infraestrutura, toda a lógica do aplicativo, todas as implantações e tudo relacionado à entrega do produto ou serviço. • Alguns exemplos de SaaS são os serviços comerciais, incluindo ERP (Enterprise Resource Planning), CRM (Customer Relationship Management), cobrança, vendas, recursos humanos, as redes sociais, para o gerenciamento de documentos eletrônicos, videoconferências, entre outros. • O Netflix é um exemplo clássico de SaaS, em que o usuário paga um plano para assistir séries e filmes, não se responsabilizando por sua manutenção, ficando o provedor responsável pela solução do problema. • Existem várias soluções SaaS que lidam com segurança, monitoramento, registro em log, testes e assim por diante como também na categoria de dados inclui business intelligence, banco de dados como serviço, visualização de dados, dashboards, data mining e muito mais bem como controlam totalmente a infraestrutura, o desempenho, a segurança, a escalabilidade, a privacidade e muito mais. • Às características essenciais dos serviços SaaS que os tornam único em relação ao software tradicional são que os serviços SaaS são entregues como um modelo para muitos, no qual uma única instância do aplicativo pode ser compartilhada por vários ou múltiplos locatários ou clientes com acesso a qualquer lugar e com gerenciamento centralizado suportado por vários dispositivas, com melhor escalabilidade e com alta disponibilidade e como integração de API. • Os principais benefícios dos serviços SaaS oferecidos são: Nenhuma instalação no lado do cliente, economia de custos, menos manutenção, facilidade de acesso, escala dinâmica, recuperação de desastres e multilocação. • Os principais problemas com os serviços SaaS são: segurança, requisitos de conectividade e perda de controle. • O uso de soluções SaaS envolvendo grande quantidade de dados são utilizados para que todo o potencial de dados das empresas seja utilizado a favor delas. Através das técnicas em Big Data, é possível entendendo o comportamento do consumidor e buscar entender de formas inteligentes as melhorias dos serviços e produtos. 45 • O modelo de cobrança do SaaS funciona como um aluguel, sendo cobrado de diferentes formas, com semanais, mensais, semestrais, anuais ou apenas de acordo com seu uso e assinatura obtida. • Os principais provedores de SaaS são: Google Apps, OneDrive, Dropbox, Salesforce, Cisco WebEx, Concur, GoToMeeting, Google BigQuery e Google Drive. 46 1 Na área de desenvolvimento de software, existem muitas tarefas que as equipes de desenvolvimento são responsáveis, sendo uma delas a infraestrutura de servidores para manter ou hospedar os serviços e aplicações desenvolvidas, trabalho este que pode ser evitado com uso de serviços em nuvem. Defina o que é e como funciona Software como um Serviço (SaaS). 2 Uma das preocupações de equipes de desenvolvimento de software é a configuração, acompanhamento e controle de infraestrutura de servidores para hospedar as aplicações desenvolvidas, assim como os dados em Sistemas Gerenciadores de Bancos de Dados. Qual é a importância da SaaS no cenário de Big Data? 3 Os SaaS são modelos de fornecimentos de algum software por meio da internet sem necessidade de algum download ou fidelidade. Cite três exemplos práticos de provedores SaaS e que serviços cada um oferecem. 4 O Software as a Service (SaaS) surgiu por volta de 1999 e suas aplicações são licenciadas como um serviço sob demanda com um modelo de distribuição do serviço. Com base no Software as a Service (SaaS), analise as sentenças a seguir. I- No SaaS os aplicativos rodam diretamente nos servidores do fornecedor. II- Os aplicativos são instalados na máquina do cliente e ficam disponíveis permanentemente. III- As aplicações SaaS são atualizadas com frequência pois são hospedadas em um único local em um servidor, o que evita que os clientes tenham que instalar as novas versões. Assinale a alternativa CORRETA: a) ( ) As sentenças I e II estão corretas. b) ( ) Somente a sentençaII está correta. c) ( ) As sentenças I e III estão corretas. d) ( ) Somente a sentença III está correta. 5 Os provedores SaaS oferecem serviços para criar, gerenciar e rastrear documento e serviços eletrônicos sendo utilizado para designar uma nova maneira de distribuição e comercialização de software, que possui como uma das suas características: a) ( ) Fornece serviço de suporte ao software no computador do cliente. b) ( ) Os serviços são hospedados e gerenciados a partir de vários locais na nuvem. c) ( ) Não precisar de licença para ser utilizado. d) ( ) Executam as atualizações automáticas garantindo que cada cliente acesse a versão mais recente do aplicativo sem nenhuma atualização do lado do usuário. AUTOATIVIDADE 47 TÓPICO 3 — UNIDADE 1 PLATAFORMA COMO SERVIÇO PAAS 1 INTRODUÇÃO Plataforma como um Serviço (PaaS), Software como um Serviço (SaaS) e Infraestrutura como um Serviço (IaaS) são os três principais modelos de serviços utilizados no ambiente de computação em nuvem. Através destes modelos, as empresas e usuários podem alugar sob demanda a capacidade de computação e armazenamento dos dados e informações de forma transparente para acessá-los a qualquer momento e em qualquer lugar independente de localização. Oliveira (2020) informa que atualmente muitas empresas desejam oferecer um nível maior de atendimento e suporte ao cliente usando aplicativos e soluções desenvolvidas na Web e nesse contexto, o PaaS torna-se atrativo e existem duas maneiras de se beneficiar de toda sua estrutura: utilizando PaaS público ou do tipo privado. O PaaS público é entregue por um provedor de serviços para a criação de aplicativos, enquanto o PaaS corporativo (privado) é fornecido pela TI central de uma organização para desenvolvedores e, possivelmente parceiros e clientes comerciais. Dessa forma, o PaaS permite que os desenvolvedores criem e implementem seus aplicativos de maneira on-line, não precisando se preocupar com a instalação de hardwares e softwares internos (OLIVEIRA, 2020). Enfim, podemos destacar que a computação em nuvem aumentou ainda mais o nível de eficiência e agilidade atingido pela virtualização dos data centers. Segundo Silva (2017), por meio da disponibilização de recursos em pool, diversidade geográfica e conectividade universal, a computação em nuvem facilita o fornecimento de software hospedados, plataformas e infraestruturas como um serviço e se tornarão cada vez mais comuns. Nesse modelo de nuvem, contrata-se um ambiente completo de desenvolvimento, no qual é possível criar, modificar e otimizar softwares e aplicações. 2 CONCEITOS DE PAAS O serviço da PaaS (Platform as a Service), ou Plataforma como Serviço, foi definido pelo Instituto Nacional de Padrões e Tecnologias (National Institute of Standards and Technology - NIST) como um modelo de serviço básico, assim como as tecnologias de IaaS (infraestrutura como serviço) e SaaS (software como serviço) (OLIVEIRA, 2020). Trata-se de uma plataforma para desenvolver 48 UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING aplicações sem que seja preciso instalar qualquer ferramenta de desenvolvimento e bibliotecas. Inclui ambientação, compreendendo o ciclo de desenvolvimento, teste e implementação, e até mesmo hospedagem de aplicações web como um serviço entregue por uma base em nuvem. Sousa et al. (2020) explicam que o modelo de PaaS fornece sistema operacional, linguagens de programação e ambientes de desenvolvimento para as aplicações, auxiliando a implementação de sistemas de software. Nele o usuário não administra ou controla a infraestrutura subjacente, mas tem controle das aplicações implantadas e, possivelmente, as configurações de aplicações hospedadas nesta infraestrutura. Ela é, ao mesmo tempo, uma nova plataforma tecnológica e uma nova arquitetura de TI (SILVA, 2017). A Figura 12, criada por Oliveira (2020), apresenta as características que compõem a PaaS, em que se pode notar três entidades, de cima para baixo: IaaS, PaaS e a interface de acesso ao PaaS, além de outros elementos, como escalabilidade, gerenciamento de recursos, gerenciamento de aplicação e qualidade de serviço (QoS). A PaaS na nuvem oferece um modelo de computação, armazenamento e comunicação para as aplicações acessado pelos clientes via navegador, por exemplo, App Engine do Goole, Azure da Microsoft, Force.com, Red Hal OpenShift, Heroku e Engine Yard. FIGURA 12 – MODELO DE REFERÊNCIA DA PLATAFORMA COMO SERVIÇO (PAAS) FONTE: Adaptada de Buyya, Vecchiola e Selvi (2013, p. 117) TÓPICO 3 — PLATAFORMA COMO SERVIÇO PAAS 49 Através do PaaS, os clientes (empresas ou usuários) conseguem facilmente realizar a implementação de serviços web com menor custo, gestão e complexidade. O cliente não precisa manipular a infraestrutura necessária para que uma aplicação seja desenvolvida, como servidores, sistemas operacionais, sistemas de armazenamento de dados e rede. Seu foco passa a ser apenas o desenvolvimento da aplicação, salvo uma ou outra configuração no ambiente em que está hospedada. Portanto, o PaaS está em cima do IaaS e abstrai muitas das funções padrões no nível de aplicativos fornecendo essas funções como um serviço para que os desenvolvedores possam concentrar na lógica de negócio e não reinventar a roda, pois, são serviços e ferramentas suportadas pelo provedor sem que o cliente gerencie ou controle a infraestrutura da nuvem subjacente. Os provedores de PaaS fornecem uma ampla variedade de linguagens de programação para os desenvolvedores de aplicativos, um framework de aplicativos, a comunicação dos aplicativos por bancos de dados e muitas outras ferramentas necessárias para desenvolver, testar e implantar um aplicativo como um serviço pela Internet. FIGURA 13 – SERVIÇOS FORNECIDOS POR PROVEDORES DE PAAS FONTE: Adaptada de Chandrasekaran (2015) As plataformas de desenvolvimento PaaS são diferentes das plataformas de desenvolvimento de aplicativos tradicionais. Portanto, segundo Chandrasekaran (2015) as principais características do PaaS está em: • Prover todos os serviços em um único local para se desenvolver, testar, implantar, hospedar e manter aplicativos no mesmo IDE. • Ter acesso da Web à plataforma de desenvolvimento. • Ter acesso off-line quando poderá sincronizar seu IDE local com os serviços de PaaS quando a internet estiver ativa. • Pela escalabilidade integrada e dinâmica para qualquer aplicativo desenvolvido para que seja capaz de lidar eficientemente com cargas variadas. • Plataforma colaborativa para que possamos trabalham em diferentes locais e coletivamente. • Fornecendo uma ampla variedade de ferramentas de cliente para ajudar o desenvolvedor. http://introduceti.com.br/blog/ti-na-gestao-de-empresas/?utm_source=blog&utm_campaign=rc_blogpost 50 UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING Nos destaca ArtSoft (2018) que o PaaS oferece toda uma plataforma completa para a hospedagem, criação e controle de um software, disponível em diversos provedores que estão na nuvem, no qual suas principais características são: • Ferramentas simples para lidar com gerenciamento e faturamento de assinaturas. • Integração de serviços web e com outras bases de dados sem conflitos no sistema. • Segurança. • Vários usuários podem utilizar o mesmo aplicativo (mesmo tipo de nuvem), sem quaisquer tipos de prejuízo ou lentidão nos serviços. Para Silva (2017), o público-alvo principal da PaaS são os desenvolvedores de sistemas, os quais adotam uma plataforma oferecida por alguma empresa e seguem suas tecnologias e padrões para criar seus sistemas. Nesse ambiente, comumente é disponibilizado um conjunto de bibliotecas que os desenvolvedores podem utilizar para desenvolver e hospedar suas aplicações. Inicialmente, a adoção de PaaS pode exigir algum treinamento dos desenvolvedores que irão trabalhar com a plataforma. No entanto, em um segundo momento tais tecnologias podem reduzir o tempo de desenvolvimento por prover funcionalidades,facilitar o desenvolvimento e distribuição de aplicações por nuvem (SILVA; LUCRÉDIO, 2012). Por exemplo: o Google App Engine (GAE) atualmente provê muitas funcionalidades, dentre elas API para processamento de imagens, armazenamento de dados de maneira não relacional, entre outros. Quando a organização adotar o uso da PaaS, sua equipe de desenvolvimento só precisa se preocupar com a programação do software, pois o gerenciamento, manutenção e atualização da infraestrutura ficam a cargo do fornecedor bem como oferece na plataforma web várias ferramentas de desenvolvimento de software dessa maneira, ela se torna completa, robusta, escalável e totalmente disponível em uma nuvem pública ou privada. O ideal é usar o PaaS quando a empresa tem um time de desenvolvedores disponíveis para trabalhar simultaneamente e precisa executar as tarefas ou se houver uma grande integração com o banco de dados (SOFTLINE, 2017). Segundo Veras (2015), a PaaS está vinculada ao uso de ferramentas de desenvolvimento de terceiros, nas quais rodam os aplicativos e se armazenam os dados. A grande diferença com relação a um modelo convencional de terceirização é que a plataforma roda em data centers de provedores externos como a Microsoft com seu Azure e é acessada via web. Os desenvolvedores estão do lado da rede. A Figura 14 ilustra a ideia de PaaS. TÓPICO 3 — PLATAFORMA COMO SERVIÇO PAAS 51 FIGURA 14 – PAAS DE NUVEM FONTE: Veras (2015, p. 150) Veras (2015) afirma que os servidores físicos apresentam altos custos de operação devido ao mau aproveitamento dos recursos e devido ao gerenciamento complexo. Máquinas ou servidores virtuais através da computação em nuvem surgiram como solução. A possibilidade de fazer várias máquinas virtuais rodarem em um mesmo servidor físico otimiza o uso de recursos, mas também pode causar problemas se as instâncias virtuais forem criadas de forma desordenada. Os custos de operação e gerenciamento nessa situação também são altos. A abstração no nível da nuvem permite melhorar o gerenciamento dos ambientes virtualizados. No caso de IaaS, ela permite que os usuários aloquem máquinas virtuais precisando assim estruturar e configurar estas máquinas virtuais quanto ao armazenamento de redes. Com PaaS, isso já está resolvido. Portanto, segundo Furht e Escalante (2010), os dois aspectos a serem considerados nas soluções PaaS são a abstração de recursos físicos e API de programação para dar suporte a novos serviços. Na Abstração de recursos físicos a camada da infraestrutura fornece aos usuários acesso isolado e direto à infraestrutura subjacente de forma que permita que os desenvolvedores criem novos softwares que não sejam suscetíveis ao número de máquinas provisionadas ou à sua configuração de rede, por exemplo. E referente a API de programação são bibliotecas de componentes para dar suporte a novos serviços que permite que os desenvolvedores construam/programem um novo software aproveitando os recursos disponíveis e compartilhados com o middleware (FURHT; ESCALANTE, 2010). 3 CARACTERÍSTICAS DO PAAS As plataformas de desenvolvimento PaaS são diferentes das plataformas de desenvolvimento de aplicativos tradicionais. A seguir, são apresentadas as características essenciais que tornam o PaaS exclusivo das plataformas de 52 UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING desenvolvimento tradicionais, segundo Chandrasekaran (2015): 1. Tudo em um: a maioria dos provedores de PaaS oferece serviços para desenvolver, testar, implantar, hospedar e manter aplicativos no mesmo IDE. Além disso, muitos provedores de serviços fornecem todas as linguagens de programação, frameworks, bancos de dados e outros serviços relacionados ao desenvolvimento que fazem os desenvolvedores escolher entre uma ampla variedade de plataformas de desenvolvimento (CHANDRASEKARAN, 2015). 2. Acesso da Web à plataforma de desenvolvimento: Uma plataforma de desenvolvimento típica usa quaisquer IDEs para desenvolver aplicativos. Normalmente, o IDE será instalado nas máquinas do desenvolvedor. O PaaS fornece acesso da web à plataforma de desenvolvimento. Usando a interface da web, qualquer desenvolvedor pode obter acesso à plataforma de desenvolvimento. A interface do usuário baseada na Web ajuda os desenvolvedores a criar, modificar, testar e implantar aplicativos diferentes na mesma plataforma (CHANDRASEKARAN, 2015). 3. Acesso off-line: um desenvolvedor pode não conseguir se conectar à Internet por um dia inteiro para acessar os serviços PaaS. Quando não há conectividade com a Internet, os desenvolvedores devem ter permissão para trabalhar off- line. Para habilitar o desenvolvimento off-line, alguns dos provedores de PaaS permitem que o desenvolvedor sincronize seu IDE local com os serviços de PaaS. Os desenvolvedores podem desenvolver um aplicativo localmente e implantá- lo on-line sempre que estiverem conectados à Internet (CHANDRASEKARAN, 2015). 4. Escalabilidade integrada: a escalabilidade é um requisito importante para os aplicativos da web ou SaaS da nova geração. É muito difícil habilitar a escalabilidade dinâmica para qualquer aplicativo desenvolvido usando plataformas de desenvolvimento tradicionais. No entanto, os serviços PaaS fornece escalabilidade interna para um aplicativo desenvolvido usando qualquer PaaS específico. Isso garante que o aplicativo seja capaz de lidar com cargas variadas com eficiência (CHANDRASEKARAN, 2015). 5. Plataforma colaborativa: Atualmente, a equipe de desenvolvimento é composta por desenvolvedores que trabalham em diferentes locais. Há uma necessidade de uma plataforma comum em que os desenvolvedores possam trabalhar em conjunto no mesmo projeto. A maioria dos serviços PaaS fornece suporte ao desenvolvimento colaborativo. Para permitir a colaboração entre desenvolvedores, a maioria dos provedores de PaaS fornece ferramentas para o planejamento e a comunicação do projeto (CHANDRASEKARAN, 2015). 6. Diversas ferramentas de cliente: Para facilitar o desenvolvimento, os provedores de PaaS fornecem uma ampla variedade de ferramentas de cliente para ajudar o desenvolvedor. As ferramentas do cliente incluem CLI, web CLI, web UI, REST API e IDE. Os desenvolvedores podem escolher qualquer ferramenta de sua escolha. Essas ferramentas clientes também são capazes de lidar com o gerenciamento de cobrança e assinatura (CHANDRASEKARAN, 2015). TÓPICO 3 — PLATAFORMA COMO SERVIÇO PAAS 53 Para Chandrasekaran (2015), além dos benefícios relacionados aos custos, os serviços PaaS são uma opção adequada para as seguintes situações: 1. Desenvolvimento colaborativo: para aumentar o tempo de comercialização e a eficiência do desenvolvimento, é necessário um local comum em que a equipe de desenvolvimento e outras partes interessadas do aplicativo possam colaborar entre si. Como os serviços PaaS fornecem um ambiente de desenvolvimento colaborativo, é uma opção adequada para aplicativos que precisam de colaboração entre desenvolvedores e outros terceiros para executar o processo de desenvolvimento (CHANDRASEKARAN, 2015). 2. Teste e implantação automatizados: o teste e a criação automatizados de um aplicativo são muito úteis ao desenvolver aplicativos em um período muito curto. As ferramentas de teste automatizadas reduzem o tempo gasto nas ferramentas de teste manual. A maioria dos serviços de PaaS oferece recursos automatizados de teste e implantação. A equipe de desenvolvimento precisa se concentrar mais no desenvolvimento, em vez de testar e implantar. Assim, os serviços de PaaS são a melhor opção onde há necessidade de teste e implantação automatizados dos aplicativos (CHANDRASEKARAN, 2015). 3. Tempo de lançamento no mercado: Os serviços de PaaS seguem as metodologias de desenvolvimento iterativas e incrementais que garantem que o aplicativo esteja no mercado conforme o prazo especificado. Por exemplo, os serviços PaaS são a melhor opção para o desenvolvimento de aplicativos que usa metodologias de desenvolvimentoágil. Se o fornecedor do software deseja que seu aplicativo esteja no mercado o mais rápido possível, os serviços PaaS são a melhor opção para o desenvolvimento (CHANDRASEKARAN, 2015). Conforme Raj e Sharma (2017 apud OLIVEIRA, 2020), as plataformas PaaS fornecem ambientes bem definidos, arquitetados, contínuos, sempre disponíveis, resilientes e escalonáveis, ajustados para as necessidades específicas de seus aplicativos e serviços. Para utilizá-la, o usuário paga conforme o uso, no entanto, alguns provedores cobram uma taxa mensal fixa pelo acesso à plataforma e aos seus aplicativos, em um modelo de pagamento baseado com frequência nas especificações do servidor, do número de projetos e do tempo de utilização. Enfim, parâmetros como a utilização de CPU, o uso de disco para transação e a largura de banda da rede podem determinar o custo do PaaS, sendo os principais parâmetros que definem o seu faturamento (RAJ; RAMAN, 2018), ou seja, o uso de CPU por hora; disponibilidade de serviço; cobrança por serviço utilizado e a largura da banda de rede de entrada e saída. Para estes autores, uma das métricas mais usadas para definir a cobrança do PaaS é a largura de banda consumida, e a dificuldade encontrada para este parâmetro se dá pela dificuldade de calcular exatamente qual usuário de transação está consumindo uma quantidade específica de recursos de utilização da CPU por solicitação. Uma alternativa é então cobrar calculando a quantidade de dados armazenados que um usuário específico está consumindo e realizar a cobrança adequada do serviço. Enfim, ainda existe uma forma mais simples de cobrar, cujo único critério reside no fato de ter requisitos de código seguros e sem transações 54 UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING demoradas na CPU. Ao levar estes fatores em consideração poderá cobrar o uso de PaaS de duas modos: conforme o uso de cada usuário e os serviços utilizados; e a partir de uma taxa mensal fixa pelo acesso à plataforma e seus aplicativos, independente da quantidade de serviço utilizada. 4 VANTAGENS E DESVANTAGENS DO USO DE PAAS Podemos destacar como vantagem da utilização da PaaS o fato de as suas plataformas se integrarem a inúmeras soluções de software de terceiros integradas através de uma arquitetura orientada a serviços (SOA), geralmente chamadas de plugins, complementos ou extensões. Portanto, diversos são os benefícios e contraindicações no uso de PaaS, conforme destacado no Quadro 1. Vantagens Desvantagens Fácil desenvolvimento e implantação (deployment) e após o desenvolvimento a maioria dos serviços executará automaticamente o processo de teste e implantação. Bloqueio de fornecedores pela falta de padrões, comum entre diferentes provedores de PaaS e as tecnologias proprietárias usadas pelos provedores de PaaS, que impedem de migração dos aplicativos de um provedor PaaS a outro. Custo reduzido: não é necessário a compra de ferramentas de desenvolvimento e teste se os serviços de PaaS foram selecionados. Basta alugar estes recursos, reduzindo o custo total de propriedade da empresa de desenvolvimento. Segurança: é um dos principais problemas, pois, normalmente os dados são armazenados em servidores de terceiros. Ao selecionar o provedor de PaaS, o desenvolvedor deve revisar as políticas de uso, de conformidade e de segurança do provedor de PaaS em relação aos seus próprios requisitos de segurança. Suporte a desenvolvimento ágil: a maioria dos aplicativos desenvolvidos na nova geração usa metodologias ágeis, cenários em que os provedores de PaaS se destacam. Pouca flexibilidade: infelizmente, os provedores de PaaS não fornecem aos desenvolvedores sua própria pilha de ferramentas. Em sua maioria, é oferecido suporte a várias linguagens de programação, além de serviços de banco de dados e ferramentas de suporte à programação. Trabalho em conjunto: os serviços PaaS oferecem suporte a desenvolvedores de diferentes locais para trabalharem juntos no mesmo projeto. QUADRO 1 – VANTAGENS E DESVANTAGENS DA PAAS TÓPICO 3 — PLATAFORMA COMO SERVIÇO PAAS 55 Fácil uso: alguns desenvolvedores podem não estar familiarizados com as interfaces fornecidas pela plataforma de desenvolvimento de aplicativos, o que dificulta o trabalho. Contudo, o PaaS fornece uma ampla variedade de ferramentas clientes, como CLI, CLI da web, UI da web, API e IDE. Despesas de manutenção: em aplicativos locais, empresas de desenvolvimento ou fornecedores de software são responsáveis por manter o hardware subjacente, criando a necessidade de ter administradores qualificados para manter os servidores. Essa sobrecarga é eliminada pelos serviços PaaS, pois a infraestrutura subjacente é mantida pelos provedores de infraestrutura. Isso dá liberdade aos desenvolvedores para trabalhar no desenvolvimento de aplicativos. Aplicativos escaláveis: a maioria dos aplicativos desenvolvidos usando serviços de PaaS são de web ou SaaS, com boa flexibilidade de acesso a recursos extras (conforme solicitado). Os serviços PaaS fornecem escalabilidade integrada ao aplicativo desenvolvido, usando a própria plataforma de PaaS. FONTE: Adaptado de Chandrasekaran (2015) 5 APLICAÇÕES PAAS EM CENÁRIOS DE BIG DATA As soluções da PaaS que causam um grande impacto são aquelas que se concentram em dispositivos móveis e Big Data. Segundo Silva (2020), quando se pensa em computação em nuvem, imagina-se grandes servidores em data centers de última tecnologia com grande quantidade de dados (Big Data) que vem provendo os mais variados serviços, como e-mail, armazenamento de arquivos e soluções em gerais. Contudo, objetivamente, a base da computação em nuvem é o fato de existir algum serviço disponível na internet, por meio de um computador interligado a outros pela internet para realizar um ou vários tipos de serviços. 56 UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING Construir aplicativos é uma tarefa desafiadora. Atualmente, muitas empresas surgiram oferecendo serviços de Big Data baseados em nuvem para ajudar outras empresas e organizações a resolver seus dilemas relacionados a dados. Existem muitos smartphones e celulares, além de tablets, com recursos que requerem personalizações para que a interface do usuário seja renderizada corretamente. As empresas e usuários costumam pagar para que os desenvolvedores criem uma versão para iOS, outra para Android, outra para iPad e assim por diante. Segundo Kavis (2014), com a Big Data, agora somos capazes de processar enormes quantidades de dados e produzir resultados acionáveis mais rapidamente do que nunca. Os avanços nessa área estão produzindo melhor conhecimento a respeito dos clientes e informações em tempo real dos dispositivos conectados à Internet, como a saúde de um carro ou um motor de avião, e facilitando a descoberta de padrões em dados como nunca antes. O desafio é que é bastante complicado configurar e gerenciar os bancos de dados e a infraestrutura necessários para solucionar problemas de Big Data. Estão surgindo soluções PaaS de Big Data que tiram a ciência da configuração e gerenciamento desses ambientes complexos. À medida que essas soluções da PaaS começam a amadurecer, qualquer empresa poderá implementar uma solução de Big Data aproveitando um serviço de nuvem pré-pago, em vez de investir muito tempo, dinheiro e recursos tentando descobrir por si próprios (KAVIS, 2014). Justifica então este mesmo autor que são essas soluções da PaaS que automatizam problemas específicos e complexos que farão uma enorme diferença no tempo de colocação no mercado no futuro. As empresas poderão aproveitar várias soluções de PaaS para criar rapidamente novos produtos e serviços com recursos limitados de funcionários e ilimitados. Portanto, o PaaS ainda está na fase de maturidade e ainda não é amplamente adotado. Cresce o número de empresas que utilizam PaaS disponibilizando aplicativos da nuvem e executando análises de Big Data. Por exemplo, naT-Systems (2020), o produto PaaS Big Data coleta e filtra dados de diferentes origens, como: [...] das redes sociais, Internet das Coisas, Internet Industrial, comunicação entre máquinas ou processos. Para o gerenciamento de dados, o AppAgile aposta em plataformas de Big Data como Hadoop, NoSQL ou In-Memory. Quantidades grandes de dados são agregadas em um Data Lake. A avaliação dos dados é realizada por meio de análises avançadas e preditivas, análise estatística ou mineração. PaaS Big Data está disponível na Open Telekom Cloud, DSI vCloud (VMware), assim como na plataforma Microsoft Azure. Dessa maneira, também é possível implementar cenários híbridos na área de Big Data. TÓPICO 3 — PLATAFORMA COMO SERVIÇO PAAS 57 [...] Com base na plataforma de contêiner Red Hat OpenShift, a plataforma como serviço gerenciada Azure Hybrid da T-System está disponível a partir da Microsoft Cloud da Alemanha e globalmente como oferta modular de plataforma como serviço. Na Microsoft Cloud Alemanha, os serviços Azure são disponibilizados de data centers alemães e os dados dos clientes são processados e armazenados exclusivamente no país. O acesso aos dados dos clientes fica nas mãos do administrador de dados de confiança, a T-Systems. Sem a autorização da empresa ou do cliente, a Microsoft não obtém acesso. Por meio da abordagem híbrida do AppAgile, os clientes podem combinar aplicativos privados e de dados críticos com ofertas da nuvem pública e, mesmo assim, manter o controle total sobre seus dados (T-SYSTEMS, 2020, s.p.). Assim como a Plataforma como um Serviço (PaaS), Software como um Serviço (SaaS) e Infraestrutura como um Serviço (IaaS) cresceram ao longo dos anos, o Big Data como Serviço (BDaaS) também cresceu nas empresas devido aos desafios envolvendo o aumento da geração de dados e a necessidade de fazer análises precisas para a tomada de decisão. Segundo 2Cloud (2018), algumas vantagens de adotar o Big Data as a Service além da simplicidade, segurança e produtividade está o baixo custo de implementação e gerenciamento e a escalabilidade que adapte a capacidade de armazenamento e processamento facilmente. 6 PLATAFORMAS DE PAAS O fornecedor de um PaaS, em geral, oferece uma variedade de ferramentas e utilitários para dar suporte ao design, à integração, ao teste, ao monitoramento e à implantação do aplicativo. Dão suporte para colaboração entre pessoas, gerenciamento de dados, teste, pilhas de serviços, autenticação, monitoramento de performance, serviços de mensagens e componentes de interface, tudo de forma on-line com uma mega infraestrutura tecnológica e de maneira transparente e flexível (OLIVEIRA, 2020). Em alguns casos, o provedor de PaaS é executado em cima da infraestrutura de outro provedor, por exemplo, Heroku e Engine Yard são executados na Amazon Web Services - AWS. Exemplos de serviços fornecidos como plataformas: são 1) Arcabouços de execução; 2) Gerenciadores de bancos de dados; 3) Servidores Web e 4) Ferramentas de desenvolvimento etc. Nesta seção, apresentaremos alguns exemplos de plataformas como Serviços utilizadas no mercado. 6.1 AWS ELASTIC BEANSTALK Segundo a Amazon Web Services (AWS), o AWS Elastic Beanstalk é um serviço de fácil utilização para implantação e escalabilidade de aplicações e serviços da web desenvolvidos com Java, .NET, PHP, Node.js, Python, Ruby, Go e Docker em servidores familiares como Apache, Nginx, Passenger e IIS. 58 UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING Os custos de manter um website utilizando Elastic Beanstalk podem variar de acordo com diversos fatores, tais como o número de instâncias do Amazon EC2 necessárias para controlar o tráfego de seu website, a largura de banda utilizada por seu aplicativo e qual banco de dados ou opções de armazenamento seu aplicativo utiliza (AWS, 2020a, s.p.). O AWS Elastic Beanstalk é um serviço que oferece ampla seleção de plataformas de aplicativos com uma variedade de opções de implantação do seu código por meio do Console de Gerenciamento da AWS, da interface da linha de comando do Elastic Beanstalk, do Visual Studio e do Eclipse (AWS, 2020b). Ele realiza monitoramento através de diversas métricas e atributos garantindo sua integridade, escalabilidade, personalização e conformidade com diversas normas internacionais a ISSO, entre outras. Recomendamos a leitura no tutorial completo com perguntas frequentes a respeito do AWS Elastic Beanstalk, disponível no endereço: https://aws.amazon.com/ pt/elasticbeanstalk/faqs/, bem como o Guia do desenvolvedor do AWS Elastic Beanstalk, disponível em: https://docs.aws.amazon.com/pt_br/elasticbeanstalk/latest/dg/awseb-dg. pdf#GettingStarted. DICAS 6.2 WINDOWS AZURE PLATFORM (WAP) A plataforma Windows Azure (WAP) da Microsoft foi apresentada em 2008, lançada em 2010 e renomeada para Microsoft Azure em 2014. É composto por um sistema operacional, um conjunto de serviços de suporte e integração com outros serviços como Dropbox, Google Apps e Salesforce. Esta plataforma fornece dimensionamento, balanceamento de carga e vários serviços de suporte, como identidade e autenticação, criptografia de mensagens, monitoramento e gerenciamento (OLIVEIRA, 2020). Segundo Oliveira (2020), o WAP é desenvolvido como um PaaS primário, no qual os usuários gerenciam suas hospedagens e a escala de aplicações web em data centers da corporação, o que inclui algumas características do módulo de IaaS. Ele utiliza uma combinação de tecnologia web, como REST, HTTP E XML, integrada à ferramenta Visual Studio, o que possibilita que os desenvolvedores criem serviços que contenham a framework .NET. Existem dois modelos de assinatura, um pré-pago e outro pós-pago, pagando somente pelo serviço que precisa, baseado na sua demanda de computação e armazenamento, além da capacidade de investimento que o cliente http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3.html http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3.html https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/dotnet-toolkit.html https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-eclipsetoolkit.html TÓPICO 3 — PLATAFORMA COMO SERVIÇO PAAS 59 quer fazer. Seus principais serviços são: máquinas virtuais, gerenciamento de redes, aplicações em nuvem, armazenamento e backup, storSimple (armazenamento simplificado), automatização de processos, Streamings de vídeo, ao vivo ou sob demanda, Contêineres, Bancos de dados SQL, Análise de dados com IA e Machine Learning, IoT (SOFTLINE, 2017). A WAP funciona como um apoio tecnológico ao negócio e sua estrutura serve para coleta e gerenciamento de dados, sendo uma fonte inesgotável de insights para novas estratégias. Segundo Softline (2017), sua capacidade de lidar com Big Data, data mining e data lake cria oportunidades de incluir Business Intelligence tanto no atendimento ao cliente quanto na otimização de custos e gestão financeira da empresa. O Azure possui várias opções para deploy de aplicações para desenvolvedores, incluindo App Services, Cloud Services, Service Fabric, Container Service, Functions, Batch, WebJobs e muito mais. Independentemente do tipo de aplicação que se está desenvolvendo, a Microsoft possui excelentes ferramentas para ajudar a implementá-lo e dimensioná-lo (COSTA, 2017). Para obter maiores informações das soluções e produtos de Azure, favor acessar o portal da Microsoft Azure pelo link: https://azure.microsoft.com/pt-br/. Recomendamos acessar o guia completo de tudo que você precisa saber sobre o WAP. Disponível no endereço: https://brasil.softlinegroup.com/sobre-a-empresa/ blog/microsoft-azure-o-guia-completo-de-tudo-que-voce-precisa-saber. DICAS DICAS 60 UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING 6.3 HEROKU Segundo Pacheco (2020, s.p.): “A Heroku é uma plataforma na nuvem que faz deploy de várias aplicações back-end seja para hospedagem, testes em produção ou escalar as suas aplicações, tem integração com o GitHub, deixando o uso maisfácil e com containers denominados Dyno”. É uma solução que abstrai o desenvolvedor dos detalhes de infraestrutura ao disponibilizar containers para instalação das aplicações, facilitando a manutenção, extensão e escalabilidade, além de oferecer maior agilidade para disponibilizar uma aplicação na web, com menor custo inicial. Atualmente, o Heroku suporta Ruby, Java, Clojure, Python, Scala e Node e possui um parque de mais de três milhões de aplicações instaladas (STORI, 2013). O Heroku é composto por mais de 140 complementos, que vão desde alertas e notificações a bancos de dados, ferramentas de análise ou serviços de segurança para monitoramento, cache, e-mail ou rede. Muitos desses complementos, inclusive, são hospedados na AWS (COSTA, 2017). Ele é muito prático, ele elimina toda a complexidade de preparação e configuração de infraestrutura e disponibiliza de forma prática tudo o que um desenvolvedor necessita, o desenvolvedor precisa apenas se preocupar em fazer o que foi contratado, ou seja, código. Segundo Costa (2017), a plataforma do Heroku remove todo o trabalho de instalar qualquer software disponível em seu ecossistema, não há preocupações por parte do desenvolvedor com aspectos relacionados à manutenibilidade, monitoramento e atualizações de versões necessárias para as tecnologias utilizadas em um projeto. Este é um dos motivos pelo qual o Heroku é sugerido em muitos tutoriais e artigos disponíveis na Internet. Ele simplesmente funciona e permite que tenhamos rapidamente uma aplicação web disponível para o mundo em poucos minutos. E eles também oferecem uma cota gratuita, com claras limitações, tornando-se uma ótima opção para testar seu aplicativo. Quer saber o que é e como funciona o Keruko? Acesse o endereço: https:// blog.geekhunter.com.br/heroku/. DICAS TÓPICO 3 — PLATAFORMA COMO SERVIÇO PAAS 61 Para não ficar apenas na teoria, acesse o site que demonstra como criar uma aplicação Java simples sem o auxílio de plugins, e como instalar, no Heroku, usando o Heroku Toolbelt baseado em templates e um plugin para o Eclipse. Disponível em: https:// www.devmedia.com.br/primeiros-passos-em-paas-com-heroku/29465 DICAS 6.4 FORCE.COM O Force.com é uma plataforma corporativa oferecida pelo Salesforce para ajuda os fornecedores de serviços a desenvolver e fornecer aplicativos estáveis, seguros e escaláveis. Duas principais tecnologias ativadoras do Force.com são multilocação e metadados (FURHT; ESCALANTE, 2010). Explicam estes autores que a abordagem de multilocação permite que diferentes usuários compartilhem modelos de aplicativos em um pool de recursos de computação física pública, enquanto as instâncias de aplicativos são independentes umas das outras. Para aplicativos personalizados, existe uma arquitetura orientada a metadados que gera componentes de aplicativos. Outras tecnologias e serviços da plataforma Force.com incluem infraestrutura de entrega de serviços, banco de dados, serviços lógicos, interfaces de usuário e ferramentas de desenvolvedor. Segundo Veras (2015), o Force.com foi a primeira plataforma PaaS desenvolvida para criar aplicações SaaS multilocação. Aplicações dedicadas único local requerem um conjunto de recursos para satisfazer a uma organização. Aplicações multilocação podem satisfazer às necessidades de múltiplos locatários (companhias, ou mesmo departamentos dentro das companhias) usando recursos de hardware e funcionários necessários para gerenciar uma instância única de software. Operar só uma instância da aplicação para múltiplas organizações dá uma grande economia de escala para o provedor. Somente um conjunto de hardware é necessário para atender às necessidades dos usuários. Um conjunto de hardware pode atender a todos os usuários, em um staff experimentado mais reduzido pode gerenciar todo montante de software. Os desenvolvedores podem construir um único código em uma só plataforma (VERAS, 2015). 62 UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING 6.5 GOOGLE APP ENGINE O Google App Engine (GAE) é uma PaaS que permite que sejam executados serviços na infraestrutura do Google. Possui ambiente de desenvolvimento para as linguagens Java™, PHP, Node.js, Python, C#, .Net, Ruby e Go em entre várias bibliotecas e frameworks conhecidos que fornecem uma máquina virtual, uma interface Servlets e serviços de armazenamento de dados (SILVA, 2017). O GAE mantém um ambiente de programação runtime (em tempo de execução), além de algumas APIs simples para acessar os serviços do Google onde os front-ends espalham solicitações HTTP com estratégias de balanceamento de carga e roteamento com base no conteúdo. Os sistemas runtime em execução nos servidores de aplicativos lidam com o processamento lógico dos aplicativos e fornecem conteúdo dinâmico da Web, enquanto as páginas estáticas são atendidas pela infraestrutura compartilhada do Google. Para dissociar os dados persistentes dos servidores de aplicativos, o GAE os coloca no armazenamento de dados em vez de em um sistema de arquivos local (FURHT; ESCALANTE, 2010). O portal Google Cloud (2020a) destaca que pelo GAE é possível criar aplicativos altamente escalonáveis em uma plataforma totalmente gerenciada e sem servidor, o que significa que faz o escalonamento sem interrupções em pequena ou grande escala sem se preocupar com o gerenciamento da infraestrutura subjacente utilizando linguagens e ferramentas open source conhecidas. O GAE permite criar e depurar o código-fonte na produção e executar, o back-ends de API com facilidade por meio das ferramentas mais usadas do setor, como o SDK do Cloud, Cloud Source Repositories, IntelliJ IDEA, Visual Studio e PowerShell. Proteja seus aplicativos contra ameaças usando os recursos de firewall do App Engine, regras de gerenciamento de identidade e acesso (IAM) e certificados gerenciador SSL/TLS. E por fim só pagando os serviços e recursos utilizados (GOOGLE CLOUD, 2020a). Sugiro uma boa leitura no artigo O que é o App Engine e como publicar uma aplicação nele disponível no endereço: https://www.treinaweb.com.br/blog/o--e-o-app- engine-e-como-publicar-uma-aplicacao-nele/ contendo uma boa explicação além dé ótimos vídeos de sua utilização. DICAS TÓPICO 3 — PLATAFORMA COMO SERVIÇO PAAS 63 No portal da DevMedia há um artigo que traz uma rápida introdução à cloud computing e as possibilidades de desenvolvimento neste modelo utilizando o Google App Engine e que apresenta um guia como fazer a criação de um aplicativo Java na “nuvem” utilizando esta plataforma. Disponível em: https://www.devmedia.com.br/introducao-ao- google-app-engine/24552. DICAS 6.6 APACHE STRATOS O Apache Stratos é uma estrutura PaaS altamente extensível que pode executar aplicativos Apache Tomcat, PHP e MySQL, oferece serviço, governança, segurança e desempenho de nível corporativo para nuvens privadas, públicas e híbridas (VAUGHAN-NICHOLS, 2014). A Apache afirma que "pode ser estendida para oferecer suporte a muito mais ambientes em todas as principais infraestruturas de nuvem. Para os desenvolvedores, fornece um ambiente baseado em nuvem para desenvolvimento, teste e execução de aplicativos escaláveis. Os provedores de TI se beneficiam de altas taxas de utilização, gerenciamento automatizado de recursos e informações em toda a plataforma, incluindo monitoramento e cobrança (VAUGHAN-NICHOLS, 2014). Segundo Haddad (2014), o Apache Stratos é usado pelas principais organizações que constroem ecossistemas conectados nas indústrias aeroespacial, de telecomunicações e de construção. Por exemplo, a iniciativa de linha aérea digital da Boeing, que está reinventando a logística da cadeia de suprimentos, é alimentada por Apache Stratos (incubadora). Os principais fornecedores de infraestrutura de rede estão integrando o Apache Stratos e fornecendo serviços avançados de telecomunicações à sua base de clientes, mantendo a confiabilidade e a disponibilidade da classe de telecomunicações sob carga máxima. Um fornecedorde equipamentos de construção e engenharia está construindo uma solução em nuvem com vários inquilinos que pode adaptar políticas e regras a nichos de mercado específicos (VAUGHAN-NICHOLS, 2014). A arquitetura Apache Stratos nativa da nuvem fornece técnicas e negócios exclusivos, incluindo, de acordo com Haddad (2014): • Modelo do cartucho: traz infraestrutura herdada para a nuvem e cria contêineres com reconhecimento de nuvem que hospedam serviços de infraestrutura e lógica de negócios. Criando um cartucho ou escolhendo opções pré-construídas, as equipes podem implantar facilmente o software tradicional da plataforma de aplicativos em um ambiente PaaS gerenciado. O modelo de cartucho permite a extensibilidade do tempo de execução e o suporte poliglota para qualquer linguagem de programação, estrutura de plataforma ou servidor desejado. 64 UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING • Multilocação no contêiner: o Apache Stratos oferece suporte à multilocação dentro do contêiner, que otimiza a utilização de recursos, reduz a área ocupada por inquilinos e oferece suporte eficiente às implantações de PaaS que atendem a bases de clientes em larga escala (centenas de milhares ou milhões de inquilinos). • Escalonamento automático de carga com base no tráfego http e não http: A arquitetura Apache Stratos suporta o dimensionamento automático baseado em http e não http. O Apache Stratos PaaS monitora a integridade da nuvem, analisa tendências de uso e provisiona dinamicamente os recursos da nuvem com base na carga atual e futura. • Integração personalizada do Load Balancer e roteamento de nuvem híbrida: O Apache Stratos (incubação) inclui um balanceador de carga nativo da nuvem e algoritmos de balanceamento de carga com reconhecimento de política que analisam o tráfego por inquilino, serviço e partição. A estrutura PaaS também se integrará a qualquer balanceador de carga de terceiros e balanceadores de tráfego em nuvem híbridos externos por meio de um componente do intermediário de mensagens. A estrutura PaaS escalará automaticamente as instâncias da nuvem em um ambiente híbrido diversificado, enquanto as respectivas políticas de qualidade de serviço. 6.7 OPENSHIFT Segundo Oveo (2020), o container Cloud OpenShift é uma solução PaaS baseada em Docker, na qual você contrata recursos computacionais e distribui em containers, selecionando as linguagens e bancos de dados necessários para a aplicação e escalando conforme a demanda de acessos de forma manual ou automatizada. Oferece suporte para Node.js, Ruby, Python, PHP, Perl e Java realiza solução mais inteligente para automatizar deploys de aplicações que rodam em máquinas (gears) compostas de serviços chamados de cartuchos (cartridges). É uma plataforma de utilização simples, poupando tempo e esforço de desenvolvimento em um ambiente virtual isolado para testar, distribuir, desenvolver e escalar aplicações (OVEO, 2020). Nextios (2017) afirma que containers são uma nova forma de abstração de infraestrutura que está conquistando muito espaço na comunidade desenvolvedora graças a sua praticidade, portabilidade e, especialmente, economia de recurso, ou seja, um container é semelhante a uma VM, sigla do inglês Virtual Machine, ou máquina virtual: uma abstração para encapsular aplicações em ambientes isolados. Nextios reforça ainda que uma grande vantagem dos containers no OpenShift é a portabilidade, que trata do serviço é encapsulado com tudo necessário para sua execução e, com isso, rodará tão bem no notebook do desenvolvedor quanto no ambiente de produção da empresa. Essa característica reduz o trabalho de reconfigurações e elimina incompatibilidades inconvenientes que poderiam retardar o lançamento de uma aplicação. TÓPICO 3 — PLATAFORMA COMO SERVIÇO PAAS 65 Muitas vezes durante o desenvolvimento de uma aplicação, os seus criadores utilizam tecnologias diferentes para os múltiplos serviços dela, especialmente quando é adotada uma arquitetura de microsserviços. Um exemplo prático é um site em PHP com base em MySQL. Do ponto de vista técnico, integrar essas duas tecnologias até que não é tão difícil assim, mas no OpenShift basta executar um conteiner com uma imagem com PHP e MySQL e pronto. Nenhum problema de compatibilidade, nenhuma configuração extra. Surgiu a necessidade de incluir algo como phpMyAdmin, por exemplo? Só carregar mais um conteiner (NEXTIOS, 2017). E para acelerar ainda mais o começo do desenvolvimento de um projeto, o OpenShift oferece uma ampla gama de Web Framework Quickstart Templates, que permitem que os desenvolvedores, em um clique, instalem frameworks como o cakePHP, o Rails, Django entre outros (NEXTIOS, 2017). Para saber O que é OpenShift e como ele funciona, acesse o endereço: http:// blog.locawebcorp.com.br/solucoes/o-que-e-openshift-e-como-ele-funciona/. NOTA 6.7.1 Red Hat OpenShift Segundo RedHat (2020), o Red Hat OpenShift é uma plataforma de aplicações em container que inclui um sistema operacional Linux para empresas, um ambiente de execução em container, rede, monitoramento, registros e soluções de autenticação e autorização. Clientes como a rede de hotéis Hilton, usam o Red Hat OpenShift para configurar soluções de PaaS para o uso por desenvolvedores internos. Enfim, o PaaS mais pesquisado no mercado é o Red Hat OpenShift, que combina os poderes do Docker e Kubernetes com um sistema de controle prático próprio para empresas. O Red Hat OpenShift no Azure oferece uma implantação de autoatendimento flexível de clusters OpenShift totalmente gerenciados. Mantenha a conformidade regulatória e o foco no desenvolvimento de aplicativos, enquanto o patch dos seus nós mestres, de infraestrutura e de aplicativo é aplicado e eles são atualizados e monitorados pela Microsoft e pela Red Hat. Permite escolher seu próprio Registro, rede, armazenamento ou soluções CI/CD. Ou comecar imediatamente usando soluções internas com gerenciamento de código-fonte automatizado, builds de contêiner e de aplicativo, implantações, dimensionamento, gerenciamento de integridade e mais (MICROSOFT AZURE, 2020). 66 UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING Com esta PaaS você pode automatizar o gerenciamento do ciclo de vida para ter mais segurança, soluções operacionais personalizadas e portabilidade de aplicações. Você também pode padronizar os fluxos de trabalho de desenvolvedor, otimizar a entrega, oferecer compatibilidade com vários ambientes e viabilizar a integração contínua com controle automático de versões. O Red Hat Marketplace oferece implantação automatizada de aplicações certificadas em qualquer cluster do Red Hat OpenShift. Além disso, o Red Hat OpenShift prioriza a segurança, conta com uma plataforma de Kubernetes com suporte e inclui consultoria e treinamento oferecidos por especialistas para os clientes que precisam de mais ajuda (REDHAT, 2020). Para saber mais a respeito do Red Hat OpenShift, disponibilizado no Azure da Microsoft acesse: https://www.infoq.com/br/news/2018/07/azure-openshift-managed-k8s/ DICAS 6.8 IBM Para Shinya (2018), a plataforma cloud da IBM une Platform-as-a- Service (PaaS), Infrastructure-as-a-Service (IaaS), Software-as-a-Service (SaaS) e Function-as-a-Service (FaaS) em um catálogo com mais de 170 serviços, da IBM e terceiros. Atualmente o serviço de Serverless na IBM Cloud suporta as seguintes linguagens: Node.js, Swift, Java, Python, Ruby, Golang, PHP, .NET e qualquer outra linguagem suportada pelo Docker (como Rust, C, C++ e outros). Os únicos pré-requisitos para obter este PaaS é ter uma conta na IBM Cloud e baixar e instalar como usuário Windows. Segundo IBM (2020), o IBM Cloud™ oferece suporte a mais de 1.000 clientes corporativos e mais de 19.000 clusters de produção que usam Kubernetes. É fácil de se conectar e migrar por meio da implementação sob demanda de um ambiente gerenciado Red Hat® OpenShift® e com o nosso comprometimento com o ecossistema Red Hat. A IBM Cloud Education (2019)informa que a PaaS oferecida pela IBM é rica e escalável para desenvolver aplicativos nativos de nuvem do zero ou modernizar aplicativos existentes para se beneficiar da flexibilidade e escalabilidade da nuvem. Os serviços incluem o IBM Cloud Kubernetes Service, uma solução de orquestração de contêiner totalmente gerenciada; Red Hat OpenShift no IBM Cloud; IBM Cloudant e IBM Cloud Databases para PostgreSQL; e muito mais. O IBM Cloud Foundry é a versão da IBM do PaaS de código aberto para construção, teste, implementação e dimensionamento de aplicativos. E a plataforma IBM Watson permite implantar aplicativos de IA onde quer que seus dados residam - em qualquer nuvem ou em sua própria plataforma de nuvem privada. TÓPICO 3 — PLATAFORMA COMO SERVIÇO PAAS 67 6.9 JELASTIC Segundo Oliveira (2020), a solução de hospedagem Jelastic compete diretamente com a Amazon, a Google e a Microsoft com uma plataforma sofisticada que fornece aos usuários finais uma poderosa PaaS com recursos que ultrapassaram os da concorrência. O Jalastc fornece aos desenvolvedores suporte à linguagem em Java, PHP, Ruby, Node.js e Python. O Jelastic é uma plataforma de fácil implementação com automação devOps para unificar e automatizar o gerenciamento da infraestrutura em nuvem sendo altamente escalável sob demanda das empresas e clientes. Possui capacidade de implantar e gerenciar cargas de trabalho em nuvem pública, privada e híbrida ou multi-nuvem em mais de 70 data centers locais e no topo de nuvens de hiperescala como AWS, Google Cloud, Azure ou Digital Ocean, portanto com alta disponibilidade nos níveis de aplicativos e infra bem como alta interoperabilidade multi-nuvem de fácil migração e digitalização para a nuvem. 68 UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING LEITURA COMPLEMENTAR CLOUD COMPUTING E SUA UTILIDADE PARA EMPRESAS EM TEMPOS DE PANDEMIA Adentro Por conta das medidas sanitárias recomendadas pela OMS, muitas empresas estão de portas fechadas por tempo indeterminado. Nesse contexto, o uso de tecnologias que permitam o trabalho remoto é fundamental. Uma delas é a cloud computing. De fato, o número de postos de trabalho em home office aumentou exponencialmente, levando a uma maior demanda de serviços de cloud. Somente a Microsoft relata um aumento de 775% na procura pelo serviço. Com o intuito de falar mais desse assunto, explicamos como a cloud computing para empresas pode ser útil no contexto da pandemia de COVID-19. Mais acessibilidade às informações com cloud computing Uma das utilidades mais evidentes da cloud computing para as empresas que aderiram ao home office durante a pandemia é a acessibilidade remota às informações, como contatos de clientes e fornecedores. Em um único local, todos os colaboradores podem acessar os dados que precisam para realizar suas rotinas e manter as atividades da empresa. Sem a cloud computing isso seria impossível, haja vista que as informações estariam centralizadas na empresa, não possibilitando o trabalho remoto. Ademais, os dados em cloud podem ser acessados a qualquer momento, de qualquer dispositivo conectado à internet. TÓPICO 3 — PLATAFORMA COMO SERVIÇO PAAS 69 Mais integração entre as equipes durante a pandemia Quando as ferramentas de comunicação via web começaram a surgir, muitos viram com maus olhos o que viria a ser um fator que contribuiria para a desumanização e o distanciamento das relações. Hoje em dia, vemos que é justamente o contrário. Por exemplo, as soluções de videoconferência em cloud computing permitem que sejam feitas reuniões com as equipes de trabalho, mantendo o contato entre os colaboradores. Dessa forma, torna-se possível comunicar novas orientações, dar feedbacks e compartilhar resultados, sem perder de vista a comunicação visual. Durante a pandemia, com a imposição do isolamento social, essa ferramenta se tornou fundamental. Por isso mesmo, houve um crescimento abrupto da procura por esse serviço. Para se ter uma ideia da adesão às ferramentas de videoconferência, somente o Google registrou um aumento de 60% do uso diário do Google Meet. Redução de custos com TI Manter uma estrutura de informações na empresa não somente impossibilita o trabalho remoto, como também pode ser muito oneroso. No contexto pelo qual passamos, isso significa, ainda, ter que manter os altos custos com TI, mesmo com a empresa de portas fechadas. Ao contrário, ao adotar a cloud computing, é possível cortar os gastos com a manutenção das estruturas e hardwares, além de evitar os custos com a contratação de equipes de TI. De acordo com uma pesquisa realizada pela IDC, 77% das empresas que investiram em cloud conseguiram diminuir os custos com sua estrutura de TI. “É importante dizer que uma das vantagens da cloud computing é o fato de a contratação desse serviço ter um custo bastante acessível, mesmo para empresas de menor porte”. Além disso, a manutenção de data center, hardware e equipe passam a ser de responsabilidade do serviço contratado. Cloud: mais flexibilidade para se adaptar a novas situações 70 UNIDADE 1 — FUNDAMENTOS DE CLOUD COMPUTING Escalabilidade Com certeza, as empresas que adotaram aplicações de cloud computing antes da pandemia saíram na frente quando a questão é adaptação ao novo contexto. De fato, sabemos que muitos empreendimentos podem ter sofrido com a diminuição da demanda e, consequentemente, das receitas. Nesse caso, a contração de um serviço de cloud possibilita a adaptação à estrutura utilizada em apenas alguns minutos. Redução de custos com flexibilização de estrutura Além disso, é possível reduzir ou aumentar a estrutura sem a necessidade de mobilizar uma equipe e investir em novos componentes de hardware. Em outras palavras, usar a cloud computing evita os custos da realização dessa operação pelos meios tradicionais, a qual exige dinheiro, tempo e um planejamento prévio. Planos sob medida A maioria dos serviços de cloud computing conta com planos que atendem a empresas de diversos portes. Há, ainda, alguns serviços de cloud que oferecem a seus clientes a possibilidade de personalizar pacotes, de maneira a pagar somente pelas soluções que desejam utilizar. Utilizando softwares na pandemia por meio de cloud computing A utilização de um software é fundamental para que se possa manter as operações de uma empresa por meio do trabalho remoto. Nesse sentido, a cloud computing permite o uso de softwares sem a necessidade de se adquirir uma licença. Explicando de outra forma, com o SaaS (“Software como Serviço”), é possível usar um software on-line, sem a necessidade de se fazer configurações ou instalações de programas. Cloud computing: uma tecnologia fundamental para empresas na pandemia Como você mesmo pôde perceber a partir da leitura desse artigo, contratar esse tipo de serviço têm diversas utilidades para as empresas que foram obrigadas a interromper suas atividades e adotar o home office. TÓPICO 3 — PLATAFORMA COMO SERVIÇO PAAS 71 Isso porque a cloud computing permite o acesso remoto a informações da empresa, além de possibilitar o contato com as equipes e a utilização de softwares para a realização das operações. FONTE: <https://adentrocloud.com.br/cloud-computing-utilidade-na-pandemia/>. Acesso em: 18 set. 2020. https://adentrocloud.com.br/cloud-computing-utilidade-na-pandemia/ 72 RESUMO DO TÓPICO 3 Neste tópico, você aprendeu que: • A PaaS trata-se de uma plataforma de computação integrada para desenvolver aplicações sem que seja preciso instalar qualquer ferramenta de desenvolvimento e bibliotecas. • Oferece um conjunto de soluções como um serviço, compreendendo o ciclo de desenvolvimento, teste, implantação, e até mesmo hospedagem de aplicações na nuvem. • Fornece uma ampla variedade de linguagens de programação para os desenvolvedores de aplicativos, um framework de aplicativos, a comunicação dos aplicativos por bancos de dados e muitas outras ferramentas. • O clientenão precisa manipular a infraestrutura necessária para que uma aplicação seja desenvolvida, como servidores, sistemas operacionais, sistemas de armazenamento de dados e rede. • As características essenciais que tornam o PaaS exclusivo são obter todos os recursos de em um só lugar, obter acesso da web à plataforma de desenvolvimento, obter acesso off-line, obter escalabilidade integrada, plataforma colaborativa e diversas ferramentas de cliente. • As três principais desvantagens da PaaS são o bloqueio de fornecedores pela falta de padrões comum entre diferentes provedores de PaaS, a falta de política de segurança em servidores de terceiros e a pouca flexibilidade e suporte a serviços de banco de dados e ferramentas de suporte à programação. • Uma das métricas mais usadas para definir a cobrança do PaaS é a largura de banda consumida, quantidade específica de recursos de utilização da CPU por solicitação e a quantidade de dados armazenados que um usuário específico está consumindo. 73 Ficou alguma dúvida? Construímos uma trilha de aprendizagem pensando em facilitar sua compreensão. Acesse o QR Code, que levará ao AVA, e veja as novidades que preparamos para seu estudo. CHAMADA • As soluções da PaaS que causam um grande impacto são aquelas que se concentram em dispositivos móveis e Big Data realizando a análises dos dados. • Os principais exemplos de Plataformas de PaaS são: AWS Elastic Beanstalk, Windows Azure Plataform (WAP), Heroku, Force.com, Google App Engine, Apache Stratos, OpenShift, IBM e Jelastic. 74 1 A Cloud Computing, ou computação em nuvem, pode ser entendida como um serviço, em que empresas não precisam possuir uma infraestrutura de datacenter local, podendo utilizar plataformas em nuvem. Defina o que é e como funciona Plataforma como um Serviço (PaaS). 2 A computação em nuvem permite que empresas deixem de possuir um datacenter para manter armazenar seus dados, evitando gastos com infraestrutura de servidor, permitindo que faça o mesmo com custo mais baixo. Qual é a importância da PaaS no cenário de Big Data? 3 A PaaS na nuvem oferece um modelo de computação, armazenamento e comunicação para as aplicações acessado pelos clientes na nuvem. Cite três exemplos práticos de provedores PaaS e que serviços cada um oferecem. 4 Entre os modelos de computação em nuvem, a PaaS é o mais indicado, pois, inclui infraestrutura de armazenamento e de rede e ferramentas de desenvolvimento. No que tange às definições de PaaS, analise as sentenças a seguir. I- Permite que uma aplicação seja implantada e distribuída sem que seja preciso se preocupar com as camadas de hardware e software necessárias. II- Seu ambiente de execução é controlado somente pelo fornecedor do serviço sem a colaboração entre desenvolvedores do cliente. III- Oferece um modelo arquitetural padronizado para as aplicações. IV- Não fornece um sistema operacional, linguagens de programação e ambientes de desenvolvimento para as aplicações. Referente à Plataforma como um serviço (PaaS), assinale a alternativa CORRETA: a) ( ) As sentenças II e III estão corretas. b) ( ) As sentenças I, II e IV estão corretas. c) ( ) As sentenças I e III estão corretas. d) ( ) As sentenças II, III e IV estão corretas. 5 A PaaS trata-se de uma plataforma para desenvolver aplicações sem que seja preciso instalar qualquer ferramenta de desenvolvimento e bibliotecas. Referente a computação em nuvem, analise as sentenças a seguir: I- O cliente não precisa manipular a infraestrutura necessária para que uma aplicação seja desenvolvida, como servidores, sistemas operacionais, sistemas de armazenamento de dados e rede. II- A falta de padrões comum entre diferentes provedores de PaaS e as tecnologias proprietárias usadas pelos provedores de PaaS não são motivos de bloqueio de fornecedores PaaS. AUTOATIVIDADE 75 III- A maioria dos serviços de PaaS não oferece recursos automatizados de teste e implantação. Assinale a alternativa CORRETA: a) ( ) As sentenças I e II estão corretas. b) ( ) As sentenças I e III estão corretas. c) ( ) Somente a sentença II está correta. d) ( ) Somente a sentença III está correta. 76 REFERÊNCIAS 2CLOUD. Big data e analytics: como a computação em nuvem pode ajudar? c2018. Disponível em: https://www.2cloud.com.br/big-data-e-analytics-como-a- computacao-em-nuvem-pode-ajudar/. Acesso em: 20 jul. 2020. APACHE STRATOS. Apache Stratos. c2017. Disponível: https://stratos.apache. org/. Acesso em: 22 jul. 2020. ARTSOFT SISTEMAS. IaaS, SaaS e PaaS no conceito de cloud computing. 2018. Disponível em: https://www.artsoftsistemas.com.br/blog/iaas-saas-e-paas- no-conceito-de-cloud-computing/. Acesso em: 13 jul. 2020. AWS. Definição de preço do AWS Elastic Beanstalk. c2020a. Disponível em: https://aws.amazon.com/pt/elasticbeanstalk/pricing/#:~:text=Os%20custos%20 de%20manter%20um,op%C3%A7%C3%B5es%20de%20armazenamento%20 seu%20aplicativo. Acesso em: 13 jul. 2020. AWS. Recursos do AWS Elastic Beanstalk. c2020b. Disponível em: https://aws. amazon.com/pt/elasticbeanstalk/details/. Acesso em: 13 jul. 2020. BAI, H. Zen of cloud: learning cloud computing by examples on microsoft azure. Boca Raton, FL: CRC Press, 2015. ISBN-13: 978-1-4822-1581-6. BHOWMIK, S. Cloud computing. Cabridge: Cambridge Univesity, 2017. BROWN, E. Programação web com node e express: beneficiando-se da stack JavaScript. São Paulo: Novatec Editora Ltda, 2020. ISBN: 978-65-86057-09-6. BUYYA, R.; VECCHIOLA, C.; SELVI, S. T. Mastering cloud computing: foundation and applications programming. Waltham: Morgan Kaufmann, 2013. Disponível em: https://1library.net/document/ozl74rry-mastering-cloud- computing-rajkumar-buyya-pdf.html. Acesso em: 13 ago. 2020. BUYYA, R.; BROBERG, J.; GOSCINSKI, A. Cloud computing: principles and paradigms. Hoboken: John Wiley & Sons, 2011. ISBN: 978-0-470-88799-8. Disponível em: http://dhoto.lecturer.pens.ac.id/lecture_notes/internet_of_things/ CLOUD%20COMPUTING%20Principles%20and%20Paradigms.pdf. Acesso em: 28 set. 2020. CELULAR DIRETO. 10 funções do OneDrive que vão facilitar seus trabalhos. Celular Direto, Saquarema, 13 fev. 2019. Disponível em: https://www. celulardireto.com.br/10-funcoes-do-onedrive-que-vao-facilitar-seus-trabalhos/. Acesso em: 13 ago. 2020. 77 CHANDRASEKARAN, K. Essentials of cloud computing. Boca Raton: CRC Press, 2015. seus-trabalhos/. Acesso em: 13 ago. 2020. Disponível em: https:// keyhannet.com/wp-content/uploads/2018/11/K.-Chandrasekaran-Essentials-of- Cloud-Computing-2014-Chapman-and-Hall_CRC.pdf. Acesso em: 13 ago. 2020. COHEN, M.; HURLEY, K.; NEWSON, P. Google compute engine: managing secure and scalable cloud computing. Sebastopol, USA: O’Relly Media Inc, 2015. ISBN: 978-1-449-36088-7. COLLIER, M.; SHAHAN, R. Essentials of cloud computing. Washington, USA: Microsoft Press, 2015. ISBN: 978-0-7356-9722-5. COPELAND, M. et al. Microsoft azure: planning, deploying, and managing your data center in the cloud. New York, USA: Springer Science+Business Media Network, 2015. ISBN-13: 978-1-4842-1043-7. HADDAD, C. Why to use apache stratos. DZone, Durham, 15 maio 2014. Disponível em: https://dzone.com/articles/why-use-apache-stratos. Acesso em: 22 jul. 2020. FAYNBERG, I.; LU, H.; SKULER, D. Cloud computing: business trends and technologies. Hoboken: John Wiley & Sons, 2016. ISBN: 9781118501214. FONSECA, N. L. S. da; BOUTABA, R. Cloud services, networking, and management. Hoboken: John Wiley & Sons, 2015. ISBN: 978-1-118-84594-3. FURHT, B.; ESCALANTE, A. Handbook of cloud computing. Miami, USA.: Springer Science & Business Media, 2010. GOOGLE CLOUD. App engine. c2020a. Disponível em: https://cutt.ly/wf0nSGi. Acesso em: 15 jul. 2020. GOOGLE CLOUD. Introdução ao BigQuery. c2020b. Disponível em: https:// cloud.google.com/bigquery/what-is-bigquery?hl=pt-br. Acesso em: 13 ago. 2020. GOOGLE CLOUD. Sobre os serviços do Google Cloud. c2020c. Disponível em: https://cloud.google.com/docs/overview/cloud-platform-services?hl=pt-br#big-data. Acesso em: 7 ago. 2020. GOOGLE CLOUD. Software as a service. c2020d. Disponível em: https://cloud. google.com/saas?hl=pt-br. Acesso em: 31 jul. 2020. GOOGLE PLAY. GoToMeeting. c2020a. Disponível em: https://play.google. com/store/apps/details?id=com.gotomeeting&hl=pt_BR. Acesso em: 13 ago. 2020. 78 GOOGLE PLAY. SAP Concur. c2020b. Disponível em: https://play.google.com/ store/apps/details?id=com.concur.breeze&hl=pt_BR. Acesso em: 13 ago. 2020. GUERREIRO, C. Top 20+ ferramentas de Big Data para se tornar cientista de dados (mesmo sem saber programar). Blog Tecnologia que interessa, [S. l.], mar. 2020. Disponível em: https://blog.tecnologiaqueinteressa.com/2020/03/top- 20-ferramentas-de-big-data-para-cientistas-de-dados-programadores-ou-nao/. Acesso em: 7 ago. 2020. IBM CLOUD. Nuvem Pública. c2020. Disponível em: https://www.ibm.com/br- pt/cloud/public. Acesso em: 7 jul. 2020. IBM CLOUD Education. PaaS (plataforma como serviço). IBM Cloud Learn Hub, New York, 29 out. 2019. Disponível em: https://www.ibm.com/cloud/ learn/paas. Acesso em: 7 ago. 2020. COSTA, M. Computação em nuvem - parte 1: o que contratar? InfoQ, São Paulo, 8 ago. 2017. Disponível em: https://www.infoq.com/br/articles/contratar- computacao-nuvem/. Acesso em: 22 jul. 2020. JAMSA, K. Cloud computing: SaaS, PaaS, IaaS, virtualization, business models, mobile, security, and more. Burlington, MA: Jones & Barlett Learning, 2013. JELASTIC. Jamazing PaaS Experience. c2020. Disponível em: https://jelastic. com/. Acesso em: 12 ago. 2020. KANNAN, R.; et al. Managing and processing Big Data in cloud computing. Hershey, PA: Information Science Reference, 2016. ISBN: 978-1-4666-9868-3. KAVIS, M. J. Architecting the cloud: designs decisions for cloud computing service models (SaaS, PaaS and IaaS). Hoboken: John Wiley & Sons, 2014. ISBN: 978-1-118-82627-0. KAVIS; M. J. Architecting the cloud: design decisions for cloud computing service models (SaaS, PaaS and IaaS). Hoboken: John Wiley & Sons, 2014. LIMA, L. O que é o Cisco Webex? Any Consulting, Belo Horizonte, 15 fev. 2019. Disponível em: https://www.anyconsulting.com.br/o-que-e-o-cisco-webex/. Disponível em: 13 ago. 2020. MICROSOFT AZURE, Red Hat OpenShift no Azure: serviço OpenShift totalmente gerenciado, operado conjuntamente com a Red Hat. c2020. Disponível em: https://azure.microsoft.com/pt-br/services/openshift/. Acesso em: 7 ago. 2020. 79 MARTINS, R. Computação em nuvem: entenda o que é e como aplicar na sua empresa. Microtel It Solutions, Curitiba, 15 jan. 2018. Disponível em: https:// www.microtelit.com.br/computacao-em-nuvem-entenda-o-que-e-e-como- aplicar-na-sua-empresa/. Acesso em: 14 jul. 2020. MISTRIK, I. et al. Software architecture for Big Data and the cloud. Cambridge, MA, USA: Elsevier Inc., 2017. ISBN: 978-0-12-805467-3. MITCHELL, E. T. Cloud-based services for your library. Chicago, US: American Library Association, 2013. ISBN: 978-1-55570-900-6. NEXTIOS. O que é OpenShift e como ele funciona? Blog Locaweb Corp, [S. l.], 6 jun. 2017. Disponível em: http://blog.locawebcorp.com.br/solucoes/o-que-e- openshift-e-como-ele-funciona/. Acesso em: 7 ago. 2020. OLIVEIRA, H. S. de. Infraestrutura de TI. Porto Alegre: SAGAH, 2020. Disponível em: https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/ impressao_ua/20655717. Acesso em: 10 ago. 2020. OVEO. Container Cloud OpenShift. c2020. Disponível em: https://www.eveo. com.br/container-cloud/?gclid=CjwKCAjw97P5BRBQEiwAGflV6U85RwHHa wV8enyGgz617ggb8XvmRya4iyLYCDXBVN5u1ENmfDW6nxoCZQYQAvD_ BwE. Acesso em: 7 ago. 2020. PACHECO, R. A. F. Heroku: o que é e como funciona. Geekhunter, Florianópolis, 28 fev. 2020. Disponível em: https://sagahcm.sagah.com.br/ sagahcm/sagah_ua_dinamica/impressao_ua/20655717. Acesso em: 10 ago. 2020. PATHAN, A.; MONOWAR, M. M.; FADLULLAH, Z. M. Building next- generation converged networks: theory and practice. Boca Raton, FL: CRC Press. 2013. ISBN-13: 978-1-4665-0764-7. PEREZ, R. Is SaaS data analytics right for you? Snowflake, San Mateo, 26 jun. 2018. Disponível em: https://www.snowflake.com/blog/is-saas-data-analytics- right-for-you/. Acesso em: 7 ago. 2020. QUERINO FILHO, L. C. Introdução ao Google App Engine. Devmedia, Marília, 2012. Disponível em: https://www.devmedia.com.br/introducao-ao-google-app- engine/24552#modulo-mvp. Acesso em: 15 jul. 2020. RAJ, P.; RAMAN, A. Software-defined cloud centers: operational and management technologies and tools. London: Springer, 2018. 242 p. REDHAT. Cloud computing: O que é a PaaS? c2020. Disponível em: https:// www.redhat.com/pt-br/topics/cloud-computing/what-is-paas. Acesso em: 7 ago. 2020. 80 SALESFORCE. O que é SaaS? c2020. Disponível em: https://www.salesforce. com/br/saas/. Acesso em: 12 ago. 2020. SANTANA, G. A. A. CCNA Cloud CLDFND 210-451 official cert guide. Indianapolis, IN, USA: Pearson Education. 2016. ISBN-13: 978-1-58714-700-5. SANTODIGITAL. BigQuery: entenda as principais técnicas para otimização de custos. Santo Digital, São Paulo, 10 jan. 2020. Disponível em: https://www. santodigital.com.br/bigquery-entenda-as-principais-tecnicas-para-otimizacao- de-custos/. Acesso em: 13 ago. 2020. SHAPIRO, J. Concur agora é SAP Concur. SAP Brasil, [S. l.], 4 jan. 2018. Disponível em: https://news.sap.com/brazil/2018/01/concur-agora-e-sap-concur/. Acesso em: 13 ago. 2020. SHARMA, S. The DevOps adoption playbook: a guide to adopting devops in a multispeed IT enterprise. Hoboken: John Wiley & Sons, 2017. 416 p. SHINYA, V. O que é a IBM Cloud e como subir a sua primeira aplicação na nuvem. IBM Developer Brasil, [S. l.], 7 nov. 2018. Disponível em: https:// medium.com/ibmdeveloperbr/o-que-%C3%A9-o-ibm-cloud-e-como-subir-a- sua-primeira-aplica%C3%A7%C3%A3o-na-nuvem-41bfd260a2b7. Acesso em: 6 ago. 2020. SILVA, K. C. N. da. Sistemas de Informações Gerenciais: Computação na Nuvem. Porto Alegre: SAGAH, 2020. SILVA, E. A. N. da. Uma abordagem dirigida por modelos para desenvolvimento de aplicações multi-paas. 2017, 178f. Tese (Doutorado em em Ciência de Computação e Matemática Computacional) – Instituto de Ciências Matemáticas e de Computação. Universidade de São Paulo, 2017. Disponível em: https://teses.usp.br/teses/disponiveis/55/55134/tde-08022018-103528/publico/ EliasAdrianoNogueiradaSilva_revisada.pdf. Acesso em: 7 ago. 2020. SILVA, E. A. N. da; LUCRÉDIO, D. Software engineering for the cloud: a research roadmap. In: BRAZILIAN SYMPOSIUM ON SOFTWARE ENGINEERING. 26., 2012, São Carlos. Anais […]. São Carlos: IEEE, Brazil; UFSCar, 2012. p. 71-80. Disponível em: https://www.researchgate.net/ publication/261039376_Software_Engineering_for_the_Cloud_A_Research_ Roadmap. Acesso em: 6 ago. 2020. SIQUEIRA, C. O que é o Red Hat OpenShift? Blog 4 Partner, [S. l.], 7 ago. 2017. Disponível em: https://blog.4partner.com.br/red-hat-openshift/. Acesso em: 7 ago. 2020. SOARES, J. A. Infraestrutura de TI. Porto Alegre: SAGAH, 2020. 81 SOFTLINE. IaaS, PaaS e SaaS: entenda os modelos de nuvem e suas finalidades. SoftLine, São Paulo, 31 out. 2017. Disponível em: https://brasil.softlinegroup. com/sobre-a-empresa/blog/iaas-paas-saas-nuvem. Acesso em: 13 jul. 2020. SOUSA, F. R. C. et al. Gerenciamento de dados em nuvem: conceitos, sistemas e desafios. In: SIMPÓSIO BRASILEIRO DE BANCO DE DADOS, 25., 2010. Belo Horizonte. Anais [...]. Belo Horizonte: UFMG, 2010.Disponível em: https://sol. sbc.org.br/livros/index.php/sbc/catalog/download/18/81/167-1?inline=1. Acesso em: 13 jul. 2020. STORI, D. Primeiros passos em PaaS com Heroku. Devmedia, Santo André, 2013. Disponível em: https://www.devmedia.com.br/primeiros-passos-em-paas- com-heroku/29465. Acesso em: 20 jul. 2020. STRATEGIC SAAS. Por que consolidar com armazenamento OneDrive é uma estratégia de negócios inteligente. c2020. Disponível em: https://www. strategicsaas.com/onedrive-storage-better-than-a-free-for-all/. Acesso em: 13 ago. 2020. SULLIVAN, D. The definitive guide to cloud computing. US: Realtime Publishers, 2010. T-SYSTEMS.Desenvolvimento de aplicativos com a plataforma como serviço. c2020. Disponível em: https://www.t-systems.com/br/pt/cloud-and- infrastructure/new-business-models/managed-paas-and-big-data. Acesso em: 28 set. 2020. TALBOT, C. Apache elevates stratos paas to top-level project. Channel Futures, Londres, 5 jun. 2014. Disponível em: https://www.channelfutures.com/cloud-2/ apache-elevates-stratos-paas-to-top-level-project. Acesso em: 22 jul. 2020. TAURION, C. Computação em nuvem: transformando o mundo da tecnologia da informação. Rio de Janeiro: Brasport, 2009. ISBN: 978-85-7452-423-8. THOMPSON, C. Vagrant virtual development environment cookbook. Birminghan: Packt Publishing Ltd., 2015. ISBN: 978-1-78439-374-8. TUTIDA, D. OneDrive, Google Drive ou Dropbox: 4 coisas a considerar ao fazer sua escolha. Encontre um Nerd, São Paulo, 18 set. 2019. Disponível em: https:// encontreumnerd.com.br/blog/onedrive-google-drive-ou-dropbox. Acesso em: 13 ago. 2020. UDELCIO. Cloud computing x Big Data: o que um tem a ver com o outro. Grupo Meta, [S. l.], 15 out. 2014. Disponível em: https://www.grupometa.com/ cloud-computing/cloud-computing-big-data/. Acesso em: 7 ago. 2020. 82 VACCA, John R. Computer and Information Security Handbook. US: Elsevier, 2017. VERAS, M. Computação em nuvem: novas arquiteturas de TI. Rio de Janeiro: Editora Brasport, 2015. Disponível em: https://docero.com.br/doc/n050c. Acesso em: 7 ago. 2020. VLADIMIRSKY, V. 10 exemplos populares de software como serviço (SaaS). Nerdio, [S. l.], 20 out. 2016. Disponível em: https://getnerdio.com/academy/10- popular-software-service-examples/. Acesso: 31 jul. 2020. VAUGHAN-NICHOLS, S. J. Apache makes Stratos PaaS cloud a top-level project. ZDNet, 3 jun. 2014. Disponível em: https://www.zdnet.com/article/ apache-makes-stratos-paas-cloud-a-top-level-project/. Acesso em: 22 jul. 2020. 83 UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) OBJETIVOS DE APRENDIZAGEM PLANO DE ESTUDOS A partir do estudo desta unidade, você deverá ser capaz de: • conhecer os fundamentos de Serverless; • compreender a utilização do Serverless como computação orientada a eventos; • compreender a diferença entre a arquitetura monolítica e uma arquitetu- ra de micro serviços; • conhecer os fundamentos de Back-end as a Service (BaaS); • conhecer os fundamentos de Function as a Service (FaaS). Esta unidade está dividida em três tópicos. No decorrer da unidade, você encontrará autoatividades com o objetivo de reforçar o conteúdo apresentado. TÓPICO 1 - SERVERLESS TÓPICO 2 - BACK-END AS SERVICE (BAAS) TÓPICO 3 - FUNÇÃO COMO SERVIÇO (FAAS) Preparado para ampliar seus conhecimentos? Respire e vamos em frente! Procure um ambiente que facilite a concentração, assim absorverá melhor as informações. CHAMADA 84 85 UNIDADE 2 1 INTRODUÇÃO Agora que você conhece o cloud computing ou computação em nuvem, assim como seus modelos de serviços, chegou o momento de conhecer mais um termo muito utilizado na área de computação, o serverless. Assim como muitos conceitos da computação, o serverless precisa ser bem compreendido antes de ser aplicado na prática, pois este conceito engloba muitas coisas e, nesse sentido, é importante entender seu conceito, como ele funciona, em quais casos pode ser aplicado, assim como quais os benefícios de sua utilização (STIGLER, 2018). Normalmente, quando se fala em serverless, na computação, as pessoas pensam que se trata apenas de back-ends que rodam em serviços de terceiros ou em contêiner temporário (STIGLER, 2018). Além disso, muitas pessoas que ingressam na computação serverless, terão a percepção de que são aplicações simplesmente hospedadas na nuvem (STIGLER, 2018). Aplicações serverless podem ser exemplificadas pelo Amazon Web Services (AWS) Lambda e pelas funções do Azure, por exemplo. Antes, vamos a um exemplo de um cenário utilizado, normalmente, no qual uma aplicação é desenvolvida e o próprio desenvolvedor realiza o deploy da aplicação, possuindo, neste caso, um determinado nível de controle de requisições Hypertext Transfer Protocol (HTTP) realizadas para o servidor (STIGLER, 2018). Neste cenário, com aplicações que rodam em um servidor, os desenvolvedores, ou algum administrador da empresa, se torna responsável pelo gerenciamento de recursos da máquina, mas, neste caso, existem alguns problemas, como: • a empresa ou organização possui a despesa do serviço de hospedagem do servidor, e seu gerenciamento, mesmo que o software não estiver sendo executado; • a empresa ou organização precisa manter recursos para a manutenção de servidores, assim como manter o servidor funcionando (on-line); • a empresa ou organização deste cenário, possui responsabilidade por manter e gerenciar a segurança do servidor. Ainda no cenário da empresa possuir um servidor para hospedagem de aplicações, caso a demanda para uso de aplicações aumentar, os recursos do servidor também devem ser expandidos, e caso diminuir a quantidade de demanda do servidor, recursos ficarão ociosos, consumindo energia elétrica. TÓPICO 1 — SERVERLESS UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) 86 De acordo com o cenário de servidor local comentado, esse gerenciamento de servidor pode se tornar caro, trabalhoso e ocupar muito tempo, principalmente se tratando de pequenas empresas, diferente de uma empresa grande que normalmente possui uma equipe de suporte de Tecnologia de Informação (TI) para realizar estas tarefas de servidor. No entanto, de qualquer forma, se for uma empresa de grande porte com uma equipe de suporte de TI para gerenciar o servidor, o desenvolvedor terá de ocupar um pouco de seu tempo para repassar processos e manuais para a equipe de suporte. Para resolver a este problema, atualmente, temos a arquitetura Serverless. 2 CONCEITOS DE SERVERLESS Serverless computing, ou computação sem servidores, pode ser compreendida por ser uma tecnologia, a qual também é conhecida por Function as a Service (FaaS), em que o provedor de nuvem possui o gerenciamento completo do contêiner no qual as funções são executadas, conforme necessário para atender às solicitações (STIGLER, 2018). Com o modelo dessa arquitetura, a necessidade de continuar executando sistemas pode ser extinguida, passando a execução a ser baseada em eventos, e, com isso, se aumenta a possibilidade de criação de aplicações escalonáveis dentro desta arquitetura (STIGLER, 2018). Arquitetura serverless pode ser descrita como uma arquitetura de computação orientada a eventos, sendo sua principal finalidade permitir que empresas de desenvolvimento de software realizem a criação e possam manter suas aplicações web sem se preocupar com infraestrutura de servidores (MISHRA, 2020). Nesse sentido, o trabalho de desenvolvimento de software pode ser simplificado, sendo apenas escrito o código fonte da aplicação, sem se preocupar no entendimento e trabalho de instalação, configuração, assim como manutenção da infraestrutura do servidor para rodar a aplicação (STIGLER, 2018). Dessa forma, o trabalho de desenvolvimento de software possui a vantagem de se tornar mais rápido, se levando a metade do tempo para implementação de uma aplicação, ao ser utilizada a arquitetura serverless (STIGLER, 2018). Computação serverless é uma das tecnologias de hospedagem na nuvem mais recentes disponibilizadas por provedores, sendo altamente recomendado e adaptado para o desenvolvimento de soluções altamente escalonáveis (MISHRA, 2020). Ainda segundo Mishra (2020), esse modelo de computação em nuvem é barato e disponibiliza vários recursos úteis que não são disponibilizados na computação em nuvem normal, sendo o Serverless computing utilizado por gigantes do mundo da nuvem para construir suas soluções, como a Microsoft e Amazon. TÓPICO 1 — SERVERLESS 87 2.1 SERVERLESS COMO COMPUTAÇÃO ORIENTADA A EVENTOS O serverless como computação orientada a eventos pode ser compreendidopor ser um padrão de arquitetura baseada na ação de resposta ou ainda de recepção de eventos, além disso, esse padrão de arquitetura serve para garantir que uma função seja executada somente quando for disparada (STIGLER, 2018). Por isso esse modelo de arquitetura induz os desenvolvedores de software a pensar antecipadamente nos tipos de eventos e respostas que serão necessários para uma solução antes de começar a programar (STIGLER, 2018). Nesse modelo de computação orientada a eventos, as funções de um software são consideradas consumidoras, pois aguardam quando um evento ocorre e são responsáveis pelo seu processamento (STIGLER, 2018). Ainda segundo Stigler (2018), seguem alguns exemplos disparados por funções serverless: • Requisições por Application Programming Interface (API). • Envios e recuperações de objetos no repositório. • Alterações em bancos de dados. • Agendamentos de cronogramas de eventos. • Comandos de voz. • Robôs com processamento de linguagem natural. A Figura 1 apresenta um exemplo de computação orientada a eventos, em que a Amazon Lambda é um método invocado pela API Gateway. FIGURA 1 – REQUISIÇÃO REALIZADA PARA API GATEWAY FONTE: Stigler (2018, p. 2) UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) 88 No exemplo apresentado na Figura 1, um dispositivo móvel, como um smartphone, realiza uma requisição para a API Gateway, sendo esta última um serviço da API Amazon, a qual permite facilmente realizar uma requisição RESTful HTTP. Por sua vez, a API Gateway possui uma função Lambda que a trata como um ponto de integração, sendo a função Lambda configurada para receber eventos da API Gateway. Nesse sentido, quando uma requisição é realizada, a função Lambda é disparada e a função executada (STIGLER, 2018). É possível exemplificar com a situação de um usuário que, ao clicar em um botão em uma tela, o qual realiza a requisição para buscar filmes de um determinado ator, cuja requisição é a chamada para a API Gateway, sendo que esta dispara a função Lambda, retornando a lista de todos os filmes cadastrados no banco de dados (STIGLER, 2018). IMPORTANT E Na arquitetura serverless, uma função Lambda pode ser criada separadamente para realizar uma função de atualizar uma informação no banco, por exemplo, sendo, neste caso, criada uma simples função para um único evento, mantendo assim, uma aplicação leve, de fácil manutenção e escalável (MISHRA, 2020). 2.2 ESTRUTURA DA ARQUITETURA SERVERLESS De maneira geral, serverless pode ser descrito como um modelo de execução, em que o provedor da computação em nuvem, como AWS, Microsoft Azure ou Google Cloud por exemplo, é o responsável pela execução de algum pedaço de código ou uma função, cujos recursos são alocados dinamicamente, e sendo cobrados desta forma (MISHRA, 2020). Nesse sentido, o código (aplicação no servidor) é executado dentro de containers stateless, os quais podem ser ativados de várias maneiras, como exemplificado pela Figura 2. TÓPICO 1 — SERVERLESS 89 FIGURA 2 – MANEIRAS DE ATIVAÇÃO FONTE: O autor Conforme já mencionado, na arquitetura serverless o código fonte é executado sem a necessidade de um usuário criar, manter e entender a infraestrutura de servidor, sendo que geralmente, o código enviado ao provedor é implementado em forma de função (MISHRA, 2020). Devido ao código no servidor ser normalmente uma função, a arquitetura serverless é referenciada por Function as a Service (FaaS) ou Funções como Serviço (STIGLER, 2018). O Microsoft Azure é uma das plataformas que disponibiliza soluções fáceis e rápidas de se implementar serverless, disponibilizando uma lista de classes, permitindo facilmente integração de serviços de mensagem, auxiliando componentes serverless a conseguirem interagir com outros (MISHRA, 2020). No serverless, o código de uma aplicação é executado em um servidor na nuvem, mas a questão de infraestrutura do servidor não é mais responsabilidade da equipe de desenvolvimento da aplicação, sendo construído o código fonte da aplicação e este, é enviado para o servidor (deploy), sendo realizado o build e execução da aplicação (STIGLER, 2018). Nesse caso, a aplicação hospedada na arquitetura serverless, é executada sob demanda, em que algum evento dispara a execução, para que a aplicação rode no ambiente de servidores serverless, sendo a cobrança realizada enquanto a aplicação estiver rodando no servidor e os recursos que ela consumiu (MISHRA, 2020). Além disso, aplicações serverless podem ser escalonadas sob demanda, sendo responsabilidade do provedor de hospedagem este recurso, sendo assim, se tem menos controle dos serviços do servidor neste modelo de arquitetura. UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) 90 2.3 SERVERLESS: FUNÇÃO COMO UM SERVIÇO Conforme foi mencionado que a arquitetura serverless segue o modelo FaaS, é interessante compreender o básico desse tipo de modelo, que envolve executar códigos de aplicações back-end sem o trabalho de desenvolver e realizar o deploy da aplicação no próprio servidor, mas sim utilizando um servidor de terceiros, na nuvem (MISHRA, 2020). Na Figura 3, você pode analisar as configurações ou recursos que são gerenciáveis pelo cliente do provedor de computação em nuvem, sendo a cor alaranjada, gerenciáveis pelo cliente e, azul, não gerenciáveis pelo cliente. Note que a última coluna da Figura 3 é o FaaS, o qual permite gerência apenas da aplicação pelo cliente. FONTE: Stigler (2018, p. 3) FIGURA 3 – DIFERENÇAS ENTRE OS MODELOS DE SERVIÇOS NA NUVEM 3 FUNÇÕES E OBJETIVOS Conforme já mencionado, uma das grandes mudanças com relação a outras metodologias de desenvolvimento de software é o fato de aplicações serem executadas em forma de funções, as quais são disparadas por eventos, porém, neste modelo de arquitetura serverless, são utilizados micro serviços. Nesse sentido, quanto menor for desenvolvida a função e menos operações esta função realizar, melhor será, visando as boas práticas (STIGLER, 2018). As funções, na computação serverless, são executadas dentro de contêineres serverless, conforme já mencionado, o que significa que não é possível realizar a execução de funções que estejam sendo executadas, depois que o principal evento for concluído, assim como também não é possível utilizar uma execução anterior TÓPICO 1 — SERVERLESS 91 para atendimento de uma requisição. Isso porque, após a função ser executada, isto é, a requisição estar completa, o contêiner serverless, no qual ela foi hospedada, será eliminado (STIGLER, 2018). Para que você possa compreender melhor vamos exemplificar. Usaremos um exemplo de sistema tradicional de três camadas com lógica do lado do servidor e mostraremos como seria diferente usando a arquitetura sem servidor. Digamos que temos um site, no qual podemos pesquisar e comprar livros didáticos. Em uma arquitetura tradicional, você pode ter um cliente, um servidor com balanceamento de carga e um banco de dados para livros didáticos. A Figura 4 ilustra essa arquitetura tradicional para uma loja on-line de livros didáticos (STIGLER, 2017). FIGURA 4 – ARQUITETURA TRADICIONAL PARA UMA LOJA ON-LINE DE LIVROS DIDÁTICOS FIGURA 5 – ARQUITETURA SERVERLESS PARA UMA LOJA ON-LINE DE LIVROS DIDÁTICOS FONTE: Stigler (2017, p. 337) FONTE: Stigler (2017, p. 348) A configuração de uma arquitetura tradicional na qual o servidor é provisionado e gerenciado pelo desenvolvedor. Em uma arquitetura computação serverless, podemos mudar várias características, incluindo o servidor e o banco de dados. Um exemplo dessa mudança seria a criação de uma API provisionada em nuvem e o mapeamento de solicitações de métodos específicos para funções diferentes. Em vez de ter um servidor, as aplicações agora têm funções para cada parte da funcionalidade e servidores provisionados em nuvem que são criados com base na demanda. Poderíamos ter uma função para pesquisar um livro e uma funçãopara comprar um livro. Ainda podemos escolher dividir nosso banco de dados em dois bancos de dados separados, correspondendo às duas funções. A Figura 5 ilustra uma arquitetura sem servidor para uma loja on-line de livros didáticos (STIGLER, 2017). UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) 92 A configuração de uma arquitetura tradicional na qual o servidor é provisionado e gerenciado pelo desenvolvedor. Já a configuração de uma arquitetura serverless em que os servidores aumentam e diminuem de acordo com a demanda. Existem algumas diferenças entre os dois diagramas de arquitetura para a livraria on-line apresentado na Figura 4 e na Figura 5 (STIGLER, 2017). A Figura 4 traz a arquitetura tradicional, na qual temos um servidor que precisa ter balanceamento de carga com escalonamento automático pelo desenvolvedor. Já no exemplo apresentado na Figura 5, com a solução em nuvem, a aplicação é executada em contêineres, em que são colocados sem estado, e são ativados e desativados por funções acionadas. Outra diferença é a separação dos servidores apresentados na Figura 5 (STIGLER, 2017). 4 SERVERLESS E CLOUD COMPUTING Os termos serverless computing e cloud computing, são muito próximos, pois cloud computing, ou computação em nuvem, pode ser compreendido pela disponibilização de serviços na Internet a partir de um computador remoto, em vez do disco rígido de um computador local (CHANDRASEKARAN, 2015). Além disso, computação em nuvem pode ser descrita pelos recursos na nuvem, como armazenamento, processamento ou disponibilização de serviços, como APIs, em um provedor de serviços na internet. Nesse sentido, o serverless computing pode ser compreendido como sendo a evolução do cloud computing, na qual, para determinados serviços, como APIs ou processamentos de funções, utilizando a infraestrutura na nuvem, embora ainda possa existir servidores internos na empresa para determinados serviços. No serverless computing, esta nomenclatura – computação sem servidor – é utilizada devido à gerência e planejamento da infraestrutura de servidor serem ocultadas para a equipe de desenvolvimento de software, o que já foi comentado que é Back-end as a Service. Se os desenvolvedores não precisam se preocupar com gerenciamento, provisionamento e manutenção de infraestrutura de servidores, ao ter que implantar ou realizar o deploy de algum código-fonte ou serviço, estes podem apoiar mais seu tempo ao trabalho de desenvolvimento. Serverless computing pode ser ainda compreendido por ser um modelo de execução de computação em nuvem, no qual o provedor de nuvem mantém o servidor e realiza o gerenciamento dinâmico de alocação de recursos de servidores (STIGLER, 2018). Sendo assim, o valor cobrado nesse modelo, se baseia na quantidade de recursos consumidos pela aplicação, e não a quantidade de recursos pré- alocadas como no modelo cloud computing. De acordo com Stigler (2018) e Mishra (2020) existem algumas diferenças entre os modelos Cloud computing e Serverless computing (Quadro 1), apesar deste último ser a evolução do primeiro modelo. TÓPICO 1 — SERVERLESS 93 Cloud computing • Modelo de computação em nuvem no qual a gerência e alocação de recursos normalmente é realizada pelo cliente (organização, empresa) do provedor de recursos em nuvem. • Muitas vezes, a equipe de desenvolvedores precisa disponibilizar um certo tempo para questões de infraestrutura, assim como configurações de recursos no provedor de recursos em nuvem. • Garante, desta forma, que sempre que necessário, existirá disponibilidade de recursos de computação, mas podendo haver necessidade de se preocupar com infraestrutura (configuração). Serverless computing • Modelo de computação em nuvem mais maduro, no qual a gerência e alocação de recursos é realizada pelo provedor de recursos em nuvem. • Permite que equipe de desenvolvedores ocupe seu tempo com sua principal atividade: o desenvolvimento de aplicações. • Garante, desta forma, que sempre que necessário, existirá disponibilidade de recursos de computação, sem preocupação com infraestrutura (manutenção e configuração). QUADRO 1 – PRINCIPAIS DIFERENÇAS DE CLOUD COMPUTING E SERVERLESS COMPUTING FONTE: O autor Você pode estar se perguntando qual a diferença entre computação serverless e construir uma infraestrutura a partir do zero. Sabemos que a principal diferença é depender de fornecedores terceirizados para manter seus servidores, mas como isso faz diferença no processo de desenvolvimento de sua aplicação? 4.1 PRINCIPAIS DIFERENÇAS ENTRE COMPUTAÇÃO SERVERLESS E CONSTRUIR A INFRAESTRUTURA DO ZERO As duas principais diferenças que você provavelmente verá estão no desenvolvimento de aplicações e nos processos independentes que são usados para criá-los (STIGLER, 2017). 4.1.1 Desenvolvimento de aplicações O processo de desenvolvimento da computação serverless muda consideravelmente em relação à maneira como se desenvolveria um sistema tradicional. Para Stigler (2017), aspectos do ambiente do desenvolvimento, incluindo Integrated Development Environment (IDEs), controle de código fonte, controle de versão e opções de implantação podem ser utilizados pelo desenvolvedor de forma local ou na nuvem. UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) 94 Ao se trabalhar com desenvolvimento contínuo é comum escrever funções na computação serverless utilizando um IDE, como Visual Studio, Eclipse e IntelliJ. A implantação é realizada em entregas menores que são disponibilizadas na nuvem, fazendo uso de uma interface de linha de comando do próprio provedor de nuvem, também conhecida como Comand-Line Interface (CLI). Se as funções forem pequenas o suficiente, elas podem ser desenvolvidas dentro do portal do provedor de nuvem real. Entretanto, a maioria tem um limite no tamanho da função antes que de fato seja realizado o upload compactado, em zip, do projeto. A CLI é uma ferramenta de desenvolvimento dita como “poderosa” porque possibilita que funções computação serverless e seus serviços seja implantado de maneira fácil e deixa livre a escolha das ferramentas para escrever e gerar o código. A ferramenta Serverless Framework é outra opção de desenvolvimento que pode ser instalada usando o Node Package Manager (NPM), que é o gerenciador de pacotes do Node. NOTA 4.1.2 Processos independentes Outra maneira de pensar em funções na computação serverless é como micro serviços. Aqui, cada função atende a seu propósito e completa um processo independentemente das outras funções. A computação serverless é sem estado e baseada em eventos, portanto, é assim que as funções também devem ser desenvolvidas. Por exemplo, em uma arquitetura tradicional com operações de API Create, Read, Update and Delete (CRUD) básicas, ou seja, as operações envolvendo GET, POST, PUT, DELETE. Portanto, você pode ter modelos baseados em objetos com esses métodos definidos em cada objeto. A ideia de manter a modularidade também se aplica na computação serverless. Cada função pode representar um método API e executar um processo (STIGLER, 2017). As funções devem ser leves, escalonáveis e servir a um único propósito. Para ajudar a explicar por que a ideia de processos independentes é preferida, apresentaremos diferentes estilos arquitetônicos e as mudanças que foram feitas a eles ao longo do tempo. Agora, veja a Figura 6 que apresenta o projeto de uma arquitetura monolítica. TÓPICO 1 — SERVERLESS 95 FONTE: Stigler (2017, p. 377) FIGURA 6 – ARQUITETURA MONOLÍTICA A Figura 6 demonstra a dependência existente dos aspectos de funcionalidades. Portanto, uma aplicação monolítica é construída como uma única unidade entrelaçada com uma aplicação do lado do servidor que lida com todas as solicitações e lógicas associadas a aplicação. Existem várias preocupações com esse modelo de arquitetura. Uma das preocupações existentes se refere que, durante o período dedesenvolvimento, pode ser que nenhum desenvolvedor tenha uma compreensão completa do sistema, porque todas as funcionalidades são empacotadas em uma unidade. Cabe destacar também as preocupações referentes a incapacidade de escalar, a reutilização limitada e a dificuldade de implantação repetida. Na abordagem de micro serviços, se rompe o padrão de arquitetura monolítica separando os serviços em componentes independentes que são criados, implantados e mantidos separados uns dos outros. A Figura 7 exemplifica a arquitetura de micro serviços, sendo possível observar os serviços independentes que compõem uma arquitetura de micro serviços. Muitas das preocupações existentes na arquitetura monolítica são abordadas por meio desta solução. Os serviços são construídos como componentes individuais com um único propósito. Isso permite que a aplicação seja consumida e usada por outros serviços de maneira eficiente e fácil. Além disso, é mais fácil tratar a escalabilidade na arquitetura de micro serviços. UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) 96 FONTE: Stigler (2017, p. 385) FIGURA 7 – ARQUITETURA DE MICRO SERVIÇOS Cabe destacarmos que, na arquitetura de micro serviços, se diminui a chance de ter um único ponto de falha em seu código. Esses micros serviços também são mais rápidos de construir e implantar, pois é possível o fazer de maneira independente, sem construir a aplicação por inteiro. Isso torna o tempo de desenvolvimento mais rápido e eficiente e permite que tanto o desenvolvimento quando os testes sejam realizados de forma rápida e fácil. A cultura DevOps surgiu com o intuito de aproximar a equipe de desenvolvimento com a equipe de operações. Os profissionais de DevOps estão cada vez mais gerenciando vários servidores, cada um executando diversos sistemas operacionais, aplicações, versões e requisitos dos mais variados. Para lidar com as tarefas específicas de cada aplicação e projeto, a indústria e a comunidade propuseram um conjunto de ferramentas de gestão. Com o advento desse conceito, diversas ferramentas de automação, configuração e gerenciamento de ambientes foram propostas. IMPORTANT E TÓPICO 1 — SERVERLESS 97 • Recursos de DevOps da AWS. Confira, no link a seguir, informações das soluções da Amazon AWS para a área de DevOps. Navegue na página que se encontra disponível em: https://aws.amazon.com/pt/devops/resources/#guides. • O que é o Azure DevOps? Aqui você verá o que é o Azure DevOps, como criar sua conta e os primeiros passos para utilizar o provedor de serviços. Acesse o seguinte link: https://www.youtube.com/embed/4BYlkYtHNus. • Quais são os benefícios do DevOps na nuvem? A discussão aqui é sobre quais são os benefícios que a cultura DevOps pode trazer para clientes de nuvem. Navegue no link: https://blogbrasil.westcon.com/quais-os-beneficios-do-devops-na-nuvem. DICAS 5 POR QUE USAR SERVERLESS Dentre os benefícios da serverless computing, podem ser citados desenvolvimento e implantação rápida, baixo custo, escalabilidade sob demanda, redução de recursos utilizados pela aplicação não estar utilizando recursos, aplicação sempre disponível, separação de preocupações, os quais serão descritos a seguir (MISHRA, 2020). 5.1 DESENVOLVIMENTO E IMPLANTAÇÃO RÁPIDA Como toda a infraestrutura, manutenção e escalonamento automático são gerenciados pelo provedor de nuvem, com isso, o tempo de desenvolvimento é muito mais rápido e a implantação mais fácil do que na cloud computing normal. Aqui, no serverless computing, o desenvolvedor é responsável somente pelo desenvolvimento da própria aplicação, eliminando a necessidade de planejar o tempo a ser gasto na configuração do servidor. Assim como outros provedores de nuvem, podem ser citados o AWS, o Azure e o Google, os quais também fornecem modelos de função, isto é, permitem que seus recursos possam utilizados para a criação de funções executáveis que rodam imediatamente (STIGLER, 2017). Stigler (2017) também destaca que a implantação se torna muito mais simples, tornando o processo mais rápido. Esses provedores de nuvem possuem um ambiente integrado para os desenvolvedores usarem para trabalhar e implantar em diferentes ambientes. UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) 98 5.2 BAIXO CUSTO Provedores de nuvem alugam infraestrutura barata na nuvem para hospedar aplicações ou códigos fonte e executá-los, sendo cobrado o ambiente utilizado. No modelo serverless computing, conforme já mencionado, o cliente paga apenas pelos recursos que suas aplicações consumiram, e não pela alocação antecipada de recursos de computação, ou pela quantidade de aplicações, isto é, sendo pago exatamente o que se está utilizando, sem ociosidade de recursos (MISHRA, 2020). Com isso, os recursos de servidores de aplicações são gerenciados, alocados e desalocados, conforme necessidades das aplicações, pelos provedores de nuvem, sendo mais baratos do que se fossem servidores locais (STIGLER, 2018). Veja no Quadro 2 os preços cobrados por três provedores de nuvem que fornecem serverless computing, de acordo com Stigler (2018). AWS Lambda Azure Functions Google Cloud Functions Primeiro milhão de requisições por um mês grátis Primeiro milhão de requisições por um mês grátis Primeiros dois milhões de requisições por um mês grátis $ 0,20 por milhão de requisições $ 0,20 por milhão de requisições $ 0,40 por milhão de requisições $ 0,00001667 para cada GB-segundo usado $ 0,000016 para cada GB- segundo usado $ 0,000025 para cada GB- segundo usado FONTE: Stigler (2018, p. 7) QUADRO 2 – PREÇOS DE EXECUÇÃO DE FUNÇÃO POR PROVEDOR DE NUVEM A PARTIR DA PUBLICAÇÃO 5.3 ESCALONABILIDADE SOB DEMANDA No serverless computing, conforme aumentam as demandas de requisições para as aplicações, automaticamente se aumentam os recursos para suportar a demanda, da mesma forma que caso caia a demanda, automaticamente recursos de servidor são desalocados, gerenciado pelos provedores de nuvem (STIGLER, 2018). Nesse sentido, as aplicações desse modelo de computação, podem sofrer massivamente uma sobrecarga de requisições sem afetar no seu funcionamento, pois recursos são alocados automaticamente, para que não seja prejudicada a eficiência da aplicação, ocorrendo um balanceamento de requisições por servidores, por exemplo (MISHRA, 2020). TÓPICO 1 — SERVERLESS 99 Para compreender melhor esta característica, saiba que as soluções serverless são distribuídas de forma automática e consistem em vários componentes que podem ter escalonamento independente (MISHRA, 2020). Nesse contexto, se um determinado serverless receber uma carga pesada de tráfico, então este terá escalonamento independente. 5.4 REDUZIR O TEMPO DE ATIVAÇÃO DA APLICAÇÃO Com esse modelo de serverless, não é necessário adquirir uma infraestrutura interna de servidores ou ambiente de hospedagem para hospedar o código fonte, podendo utilizar, ao invés disso, recursos de serverless, algo realizado em poucos minutos, e a aplicação já pode estar sendo executada (MISHRA, 2020). No serverless computing, desenvolvedores focam na implementação das aplicações, isto é, o trabalho de codificação, e não necessita focar seu tempo na análise da infraestrutura do ambiente de hospedagem. Ainda sobre esse modelo de computação, as aplicações, assim que jogadas no serverless, são executadas muito mais rapidamente do que em outros modelos de computação (MISHRA, 2020). 5.5 ALTA DISPONIBILIDADE DA APLICAÇÃO Aplicações ou funções hospedadas em serverless computing possuem alta disponibilidade, sendo que os provedores de nuvem realizam acordo em contrato que garantem esta característica e benefício (MISHRA, 2020). Com isso, não importa quantas requisições a aplicação receberá, nesse modelo, a disponibilidade está garantida. 5.6 SEPARAÇÃO DE PREOCUPAÇÕES POR COMPONENTES As aplicações estão livres de as preocupações de um serviço afetar outro, devidoao simples padrão de responsabilidade existente no serverless (MISHRA, 2020). Para compreender melhor, você deve ter em mente que uma solução serverless é composta por vários componentes serverless, e cada um deles é responsável por uma tarefa de curta duração, sendo uma tarefa com uma única responsabilidade. Nesse sentido, um dos componentes realiza a leitura do banco de dados, outro componente prepara os dados e os envia para uma fila, e um terceiro componente processa os dados (MISHRA, 2020). Esses componentes não executam várias tarefas, realizando apenas a única tarefa que são responsáveis, sendo ela um simples padrão de responsabilidade que torna a separação de preocupações por componentes mais um dos benefícios do serverless. 100 Neste tópico, você aprendeu que: • Existem problemas ao se ter aplicações rodando em servidores, sendo elas: (i) a empresa ou organização possui a despesa do serviço de hospedagem do servidor, e seu gerenciamento, mesmo que o software não estiver sendo executado; (ii) a empresa ou organização precisa manter recursos para a manutenção de servidores, assim como manter o servidor funcionando (on- line); (iii) a empresa ou organização deste cenário, possui responsabilidade por manter e gerenciar a segurança do servidor. • Serverless computing, ou computação sem servidores, também é conhecida por Function as a Service (FaaS). • Em serverless computing, o provedor de nuvem possui o gerenciamento completo do contêiner no qual as funções são executadas, conforme necessário para atender às solicitações. • Com o modelo da arquitetura serverless computing, a necessidade de continuar executando sistemas pode ser extinguida, passando a execução baseada em eventos, e, com isso, se aumenta a possibilidade de criação de aplicações escalonáveis dentro desta arquitetura. • Arquitetura serverless pode ser descrita como uma arquitetura de computação orientada a eventos, sendo sua principal finalidade, permitir que empresas de desenvolvimento de software realizem a criação e possam manter suas aplicações web sem se preocupar com infraestrutura de servidores. • Serverless como computação orientada a eventos pode ser compreendido por ser um padrão de arquitetura baseada na ação de resposta ou ainda de recepção de eventos. • Serverless computing é a evolução do cloud computing; • Diferente do cloud computing, no modelo serverless computing, a gerência e alocação de recursos é realizada pelo provedor de nuvem, poupando o tempo de trabalho da equipe de desenvolvimento. • Alguns exemplos disparados por funções serverless são: requisições por Application Programming Interface (API), envios e recuperações de objetos no repositório, alterações em bancos de dados, agendamentos de cronogramas de eventos, comandos de voz e robôs com processamento de linguagem natural. RESUMO DO TÓPICO 1 101 • O surgimento da cultura DevOps surgiu com o intuito de aproximar a equipe de desenvolvimento com a equipe de operações. • Os profissionais de DevOps estão cada vez mais gerenciando vários servidores, cada um executando diversos sistemas operacionais, aplicações, versões e requisitos dos mais variados. • Tanto o desenvolvimento quanto a implantação são rápidos devido a toda infraestrutura, manutenção e escalonamento automático gerenciados pelo provedor de nuvem, com isso, o tempo de desenvolvimento é muito mais rápido e a implantação mais fácil do que antes. • As aplicações no serverless computing, podem sofrer massivamente uma sobrecarga de requisições sem afetar no seu funcionamento, pois recursos são alocados automaticamente, para que não seja prejudicada a eficiência da aplicação, ocorrendo um balanceamento de requisições por servidores, por exemplo. • As aplicações, ou funções hospedadas em serverless computing, possuem alta disponibilidade, sendo que os provedores de nuvem realizam acordo em contrato que garantem esta característica e benefício, não importa quantas requisições a aplicação receberá, nesse modelo, a disponibilidade está garantida. • Um dos componentes realiza a leitura do banco de dados, outro componente prepara os dados e os envia para uma fila, e um terceiro componente processa os dados. Esses componentes não executam várias tarefas, realizando apenas a única tarefa que são responsáveis, sendo este simples padrão de responsabilidade que torna a separação de preocupações por componentes mais um dos benefícios do serverless. 102 1 A computação sem servidor (serverless computing) diz respeito a toda a infraestrutura, manutenção e escalonamento automático, os quais são gerenciados pelo provedor de nuvem e, com isso, o tempo de desenvolvimento é muito mais rápido e a implantação mais fácil do que antes. Aqui, o desenvolvedor é responsável somente pela própria aplicação, eliminando a necessidade de planejar o tempo a ser gasto na configuração do servidor. A qual benefício da computação serverless estamos nos referindo? a) ( ) Desenvolvimento e implantação rápida. b) ( ) Baixo custo. c) ( ) Escalabilidade sob demanda. d) ( ) Separação de preocupações por componentes. 2 Na computação sem servidor (serverless computing) um dos benefícios está relacionado aos provedores de nuvem que alugam infraestrutura barata para hospedar aplicações ou códigos fonte e executá-los, sendo cobrado o ambiente utilizado. Aqui, o cliente paga apenas pelos recursos que suas aplicações consumiram, e não pela alocação antecipada de recursos de computação ou pela quantidade de aplicações, isto é, sendo pago exatamente o que se está utilizando, sem ociosidade de recursos. A qual benefício da computação serverless estamos nos referindo? a) ( ) Desenvolvimento e implantação rápida. b) ( ) Baixo custo. c) ( ) Escalabilidade sob demanda. d) ( ) Separação de preocupações por componentes. 3 Na computação sem servidor (serverless computing) um dos benefícios se refere às aplicações neste modelo de computação, as quais podem sofrer massivamente uma sobrecarga de requisições sem afetar no seu funcionamento, pois recursos são alocados automaticamente para que não seja prejudicada a eficiência da aplicação, ocorrendo um balanceamento de requisições por servidores, por exemplo. A qual benefício da computação serverless estamos nos referindo? a) ( ) Desenvolvimento e implantação rápida. b) ( ) Baixo custo. c) ( ) Escalabilidade sob demanda. d) ( ) Separação de preocupações por componentes. AUTOATIVIDADE 103 4 As aplicações ou funções hospedadas em serverless computing possuem alta disponibilidade, sendo que os provedores de nuvem realizam acordo em contrato que garantem esta característica e benefício, não importando quantas requisições a aplicação receberá. A qual benefício da computação serverless estamos nos referindo? a) ( ) Alta disponibilidade da aplicação. b) ( ) Baixo custo. c) ( ) Escalabilidade sob demanda. d) ( ) Separação de preocupações por componentes. 5 Um dos componentes realiza a leitura do banco de dados, outro componente prepara os dados e os envia para uma fila, e um terceiro componente processa os dados. Esses componentes não executam várias tarefas, realizando apenas a única tarefa que são responsáveis, sendo este simples padrão de responsabilidade que torna a separação de preocupações por componentes mais um dos benefícios do serverless computing. A qual benefício do serverless computing estamos nos referindo? a) ( ) Desenvolvimento e implantação rápida. b) ( ) Baixo custo. c) ( ) Escalabilidade sob demanda. d) ( ) Separação de preocupações por componentes. 104 105 UNIDADE 2 1 INTRODUÇÃO O aumento crescente do uso de aplicativos causa uma procura, bem como uma exigência no processo de implementação e desenvolvimento com qualidade e na distribuição ágil (WU, 2008). O efeito disso é o aumento na complexidade dos aplicativos em relação aos custos da sua implementação e no número de funcionalidades, sendo preciso infraestrutura que suportemessas funcionalidades (NG, 2017). Portanto, de acordo com Wu (2008) e Creese (2011), uma infraestrutura mal projetada cria diversos obstáculos, tais como: • usabilidade limitado; • escalabilidade e evolução; • custos elevados. O que se percebe é que atualmente é cada vez menos frequente que as empresas tenham sua própria infraestrutura antes de conquistas um alto número de usuários e transações (WU, 2008; CREESE, 2011). Isso ocorre já que a oferta de serviços de infraestrutura disponível em nuvem se tornou confiável. Consequentemente, a implementação e o design das aplicações se tornam o foco principal, e, com isso, se tornou primordial ter um serviço de back-end (CREESE, 2011). Todavia, esse tipo de serviço causa custos de criação, tanto financeiro quanto de tempo. TÓPICO 2 — BACK-END AS SERVICE - BAAS Back-end consiste na lógica de negócio da aplicação e no processamento e gestão de dados dela. NOTA 106 UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) Desse modo, cada vez mais são analisadas soluções que possibilitam direcionar o foco do desenvolvimento para o design da aplicação. Isso significa encontrar soluções que diminuam o esforço na implementação e desenvolvimento. De modo a solucionar esta necessidade, uma abordagem possível passa por ignorar o desenvolvimento do back-end e focar no esforço do desenvolvimento no front-end das aplicações, originando o conceito MBaaS-Mobile Back-end as a Service ou somente BaaS - Back-end as a Service (TAURION, 2009; BATSCHINSKI, 2016). Agora vamos compreender o cenário atual e o que é necessário no momento de selecionar o melhor modelo para seu projeto (GODSE e MULIK, 2009). 2 APLICAÇÕES Com relação a aplicações de BaaS, vejamos um exemplo. Vamos supor que você tenha um aplicativo de corrida de carros, e ele implementa muitas funcionalidades, tais como: velocidade, distância percorrida, rotas, entre outros. E ainda, seu aplicativo poderá mostrar o mapa com o trajeto percorrido. O aplicativo desenvolvido teria um alto custo para ter uma base de dados de mapas e ainda mantê-la atualizada, por isso, esses aplicativos utilizam serviços que estão disponíveis na nuvem para atender a essa demanda (WU, 2008; GODSE e MULIK, 2009; CREESE, 2011). No entanto, você pode não querer que seu aplicativo calcule a velocidade utilizando os recursos do usuário, então, algumas empresas começaram a disponibilizar o BaaS (Back-end as a Service). Desse modo, existe a possibilidade de transferir para a nuvem qualquer processamento que for preciso para executar as funcionalidades do seu aplicativo. Muitas empresas estão apostando nesse mercado, o que denota uma tendência em investir na arquitetura que use Back-end as a Service (MULIK, 2009; CREESE, 2011). Então, agora vamos entender os conceitos sobre BaaS e mBaaS. 3 CONCEITOS DE BACK-END AS A SERVICE - BAAS Um Back-end como Serviço – BaaS ou mBaaS – é considerada uma plataforma que automatiza o desenvolvimento de back-end, bem como atende à infraestrutura de nuvem. Isso significa que Back-end as a Service é um modelo de arquitetura em que o desenvolvedor implementa a interface e possibilita que uma parte ou todo o processamento seja atendido por meio de um serviço disponível na nuvem (cloud computing) (WU, 2008; GODSE e MULIK, 2009; CREESE, 2011). Isso acarreta a simplificação dos aplicativos (WU, 2008; CREESE, TÓPICO 2 — BACK-END AS SERVICE - BAAS 107 2011). A utilização de um BaaS possibilita a terceirização das responsabilidades vinculadas à manutenção e ao gerenciamento de servidores para um terceiro, e com isso consegue focar no desenvolvimento do front-end (FIGURA 8). Ainda, um BaaS provê as ferramentas para auxiliá-lo a desenvolver um código de back-end e acelerar o processo de desenvolvimento (TAURION, 2009; BATSCHINSKI, 2016). FIGURA 8 – NÍVEL DE APLICAÇÃO BaaS FONTE: https://www.linkedin.com/pulse/iaas-vs-PaaS-saas-BaaS-vaquar-khan-/. Acesso em: 24 set. 2020. Nesse sentido, BaaS e MBaaS são praticamente as mesmas coisas, já que você pode utilizar um back-end como um serviço para projetos web ou projetos para dispositivos móveis (MBaaS) (TAURION, 2009; CREESE, 2011; BATSCHINSKI, 2016). Outro ponto importante é que o BaaS é considerado como um modelo mais abrangente, já que oferece soluções modulares para as funções mais usuais que necessitam estar disponíveis na infraestrutura. Alguns exemplos são: autenticação, armazenamento, push notifications (serviço de notificações), integração com serviços externos, escalabilidade automática e analytics estão entre os básicos. Cada provedor de infraestrutura BaaS pode oferecer estes e muitos outros serviços (BATSCHINSKI, 2016). A estrutura BaaS pode auxiliar na solução de problemas, tais como: gerenciar e dimensionar a infraestrutura em nuvem, e acelerar o desenvolvimento de back-end. Portanto, uma plataforma BaaS é considerada como um serviço técnico e criado para desenvolvedores. Isso significa que um usuário sem habilidades terá dificuldades para usá- lo, sendo os usuários mais comuns, de acordo com Batschinski (2016); Batschinski (2019): https://www.linkedin.com/pulse/iaas-vs-paas-saas-baas-vaquar-khan-/ 108 UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) • Engenheiros de front-end com pouco conhecimento em desenvolvimento de back-end. • Engenheiros de back-end que querem acelerar o desenvolvimento. • Engenheiros que precisam terceirizar tarefas de repetitivas ou de baixo valor. Alguns exemplos de recursos BaaS (Back-end as a Service): autenticação, banco de dados, blockchain e API Gateways – neste modelo, o fornecimento e a gestão destes serviços são automáticos e imperceptíveis para o desenvolvedor que os usa em suas aplicações. ATENCAO Agora vamos compreender a arquitetura BaaS, os conceitos de front-end e back-end e qual a diferença entre estes dois conceitos. 4 ARQUITETURA DE BAAS Um back-end, de um modo geral, é considerado como um serviço segmentado em três camadas (BATSCHINSKI, 2016), sendo: • Primeira camada: possui os servidores de banco de dados, sendo que um cluster de banco de dados terá ao menos dois servidores para replicar dados e uma rotina de backup para possibilitar que os dados possam ser recuperados. • Segunda camada: possui muitos servidores para processar as solicitações. A quantidade de servidores muda ao longo do dia, e os procedimentos de escalonamento automático são essenciais para atender o grupo com a quantidade adequada de servidores. • Terceira camada: conecta os servidores de aplicativos à Internet e é composto por balanceadores de carga e CDNs. 5 DIFERENÇA ENTRE FRONT-END E BACK-END De modo geral, os aplicativos possuem uma parte que o usuário visualiza, denominada de front-end, já o back-end, representa a parte que o usuário não vê (FIGURA 9). Sendo que as duas partes se combinam através de APIs. Um dos primeiros modos de aplicação da arquitetura em nuvem é o back-end como serviço. Ele faz parte da evolução da aplicação da arquitetura serverless, sobretudo por estas aplicações estarem conectadas a algum banco de dados em TÓPICO 2 — BACK-END AS SERVICE - BAAS 109 nuvem e serem hospedadas em determinados serviço cloud. Considerando o BaaS, não existe preocupação com o Back-end, somente é consumido esse serviço através do provedor de computação em nuvem (TAURION, 2009; CREESE, 2011; BATSCHINSKI, 2016; BATSCHINSKI, 2019). FIGURA 9 – BAAS X BACK-END CUSTOMIZADO FONTE: <https://blog.back4app.com/wp-content/uploads/2019/07/backend-frontend-768x384. png>. Acesso em: 29 set. 2020. Vamos analisar dois exemplos para você compreender as diferenças entre o código personalizado e o uso de um BaaS, sendo eles: BaaS x AWS EC2: imagine que você precise criar um projeto de software e não utilizará um BaaS. O primeiro passo para começar a desenvolver um back-end é configurar os ser- vidores, depois: Faça o login na AWS ou em qualquer outra nuvem. Vápara instâncias. Inicie uma Instância. Selecione o sistema operacional. Selecione o tamanho da instância. Configure detalhes da instância. Número de instâncias. Rede IP. Monitoramento. Outras configurações como Auto Scaling, IAM etc. Adicionar armazenamento. Configurações de segurança. IMPORTANT E https://blog.onedaytesting.com.br/backend-as-a-service/ https://blog.back4app.com/wp-content/uploads/2019/07/backend-frontend-768x384.png https://blog.back4app.com/wp-content/uploads/2019/07/backend-frontend-768x384.png 110 UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) Tudo bem, sua instância está funcionando e agora você pode iniciar a codificação! Na verdade, não! Esta é somente a primeira etapa do processo, e você ainda precisará instalar o servidor da Web, o banco de dados, a estrutura etc. Depois você poderá iniciar a codifi- cação. O tempo para executar esse processo pode variar de algumas horas até dias para ambientes grandes. Este mesmo processo utilizando um back-end como um serviço será realizado com alguns cliques e não levará mais do que alguns minutos. Configurações de segurança do LGPD ou GDPR: os requisitos de privacidade da LGPD – Lei Geral Brasileira de Dados ou da GDPR (Genereal Data Privacy Requirements) – são bastante complexos e a implementação exigirá muito esforço de engenharia. Os requisitos vão desde a implementação de HTTPS para dados de trânsito como criptografar dados do lado do servidor em repouso (e várias outras condições). A quantidade exata de horas de engenharia para atender a todos os elementos dependerá do tamanho e complexidade do projeto, mas pode facilmente ultrapassar 100 horas de implementação. Terceirizar esta im- plementação para uma empresa de back-end como serviço faz muito sentido em especial para projetos pequenos e de médio porte. Digo isto, visto que as plataformas de back-end podem diluir o investimento feito para implementar configurações de LGBD ou GDPR entre centenas ou milhares de aplicativos, e o custo por aplicativo será mínimo. Uma empresa com um único projeto terá que compensar todo o investimento em apenas uma aplicação. Mesmo que o aplicativo seja bem-sucedido, ele demandará muito mais tempo para ter o retorno do investimento. FONTE: <https://blog.back4app.com/pt/backend-as-a-service/>. Acesso em: 28 jul. 2020. 6 RAZÕES PARA USAR BAAS As razões para utilizar uma plataforma de Back-end as Service podem ser comerciais ou técnicas. Agora vamos entender cada uma delas! 6.1 RAZÕES COMERCIAIS As vantagens de um back-end como serviço estão atreladas aos ganhos de produtividade e terceirização de responsabilidades de gerenciamento de servidores. Considerando projetos de pequeno a médio porte, existe mais benefícios utilizando uma plataforma de back-end com serviço (BATSCHINSKI, 2016; BATSCHINSKI, 2019). Outra vantagem é a redução do Time to Market de um projeto de software, já que a espera de meses para fornecer um produto de software pode acabar com a oportunidade de mercado ou fazer com que a empresa tenha mais concorrência (TAURION, 2009; CREESE, 2011; BATSCHINSKI, 2016). Sendo assim, as vantagens de um BaaS são: • Reduzir o Tempo entre a análise de um produto e sua disponibilização para o mercado. • Reduzir o custo de desenvolvimento. • Utilizar menos desenvolvedores de back-end. • Terceirizar o gerenciamento da infraestrutura de nuvem. %3c TÓPICO 2 — BACK-END AS SERVICE - BAAS 111 6.2 RAZÕES TÉCNICAS Os desenvolvedores capacitados de back-end são complicados de se achar disponíveis no mercado. Por isso, se a empresa tiver um profissional com essas qualificações é preciso utilizar seu tempo com sabedoria. Então, atividades repetitivas e boiler plate code é um desperdício de recursos (TAURION, 2009; CREESE, 2011; BATSCHINSKI, 2016). Além disso, um serviço de back-end permite que os desenvolvedores de front-end se concentrem em atividades produtivas. Então, as vantagens técnicas são: • Foco no desenvolvimento de front-end. • Exclui stack redundante de código. • Padronização do código fonte. • Permitir que o desenvolvedor de back-end programar código de alto valor. • Permitem clonar aplicativos e executar ambientes de teste de modo automatizado. • Configurações de segurança e procedimentos de backup pré-configurados. 7 QUANDO UTILIZAR UM BAAS? Conforme Batschinski (2016), existem casos mais usuais para se usar Back- end as a Service, sendo: • Criação de um MVP (Produto Mínimo Viável). • Aplicativos que exigem um pequeno número de integrações. • Aplicações corporativos que não são de missão crítica. • Para os presentes casos de uso, é uma boa escolha e economizará muito dinheiro e tempo. O MVP (Minimum Viable Product), que traduzindo significa “produto mínimo viável”, é a versão simplificada de um produto final de um startup. Através desta versão, o empreendedor vai oferecer o mínimo de funcionalidades do produto com o objetivo de testar o produto para o mercado. NOTA 112 UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) 7.1 VANTAGENS DE UM BAAS O benefício é a redução do investimento de tempo e recursos financeiros na infraestrutura da aplicação. Os SDKs e APIs fornecidos podem ser mais simples de uso e bem documentados. As soluções de autenticação, notificações push multiplataforma e analytics representam uma vantagem considerável do serviço. A maioria dos BaaS que estão disponíveis no mercado trabalham com o modelo freemium. Isso significa que permitem a utilização limitada, mas sem custo por usuários ou acessos. Esse acesso sem custos pode ser suficiente para pequenas empresas por alguns meses. Os aplicativos possuem um front-end, um back-end e APIs conectando ambos os lados. Um back-end como um serviço – BaaS ou mBaaS – auxilia o desenvolvedor a automatizar parte do trabalho de desenvolvimento de código de back-end. Os back-end as a Service terão, ainda, a responsabilidade de implantar, gerenciar e escalar aplicativos. Portanto, as vantagens primordiais para utilizar um back-end como serviço são: • Redução do tempo de lançamento de um aplicativo, em função da velocidade de desenvolvimento. • Redução de custos de desenvolvimento, maior velocidade de desenvolvimento reduzindo custo de hora de profissionais. • Muito importante, em especial, para startups. • Terceirização do gerenciamento da infraestrutura. • É serverless e não é necessário gerenciar a infraestrutura. • Esforço de desenvolvimento, já que um desenvolvedor pode economizar semanas em relação à criação de um back-end. • Escalabilidade, a quantidade de usuários pode ser escalada sem interrupções ou perda de performance. • Segurança, as empresas de BaaS fornecem protocolos de segurança de qualidade. 7.2 DESVANTAGENS DE UM BAAS As desvantagens de um BaaS, conforme Batschinski (2016), são: • Menor flexibilidade em comparação com a codificação customizada. • Menor grau de personalização em comparação com um back-end personalizado. • Os desenvolvedores apresentam menor controle do código fonte e o acesso ao back-end é mais restrito. • O usuário deve ser cauteloso e avaliar os fornecedores, sendo uma decisão de longo prazo e deve ter cuidado em selecionar fornecedores que permitam a migração de dados. TÓPICO 2 — BACK-END AS SERVICE - BAAS 113 8 BAAS E SEUS RECURSOS Um back-end é considerado um serviço que fornece recursos que podem ser implantados em aplicativos de vários segmentos, sendo: • Gestão de dados. • Autenticação de usuário. • Integração Social (Facebook, LinkedIn, Twitter etc.). • Verificar de e-mail. • Notificações. • Funções de código de nuvem. • Geolocalização. • Logs. • Cache. • Infraestrutura (configurações de segurança, dimensionamento automático, backup de dados, otimização de banco de dados). 8.1 IAAS X PAAS X BAAS De acordo com Batschinski (2016) e Batschinski (2019), quando um desenvolvedor passa de IaaS para PaaS e de PaaS para BaaS, este irá adicionar camadas de serviço a seu aplicativo.Vamos analisar da seguinte maneira, conforme a Figura 10. • IaaS = Data Center + Servidores + Armazenamento + Rede. • PaaS = IaaS + Implantar + Gerenciar + Escalar. • BaaS = PaaS + Recursos para construir back-end. 114 UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) FIGURA 10 – IAAS X PAAS X BAAS FONTE: <https://miro.medium.com/max/268/0*MvwMIGaAgfx0jgwS.png>. Acesso em: 29 set. 2020. Segundo Batschinski (2019), o maior representante BaaS até 2016 era o “Parse.com” com mais de um milhão de aplicativos instalados em sua plataforma, e ainda com mais de 600 mil usuários. O Parse foi adquirido pelo Facebook em 2013, porém, em 2016, a rede social tomou a decisão de fi nalizar as operações. Com isso, milhões de aplicações tiveram que buscar alternativas de migração (BATSCHINSKI, 2016). INTERESSA NTE TÓPICO 2 — BACK-END AS SERVICE - BAAS 115 De acordo com Godse e Mulik (2009), Taurion (2009), Creese (2011), Batschinski (2016) e Batschinski (2019), estas são algumas opções de BaaS: 8.1.1 Azure Mobile Apps A Azure Mobile Apps A Microsoft integra-se ao Xaramim (front-end cross- platform) e ao Azure. As vantagens são: • Protocolos de segurança: fornece segurança de nível corporativo para criar aplicativos. • Sincronização off-line: permite que os usuários sincronizem dados automaticamente. • Integrações AD: permite o login da empresa. 8.1.2 Back4App O Back4App possui banco de dados em tempo real, graphQL, notificações push, autenticação, integração de SDK, gerenciamento de usuários, entre outros. Essa tecnologia é baseada em código aberto, então isso significa que envolve Parse Server, MongoDB ou Postgrees e NodeJS. Outro ponto relevante que precisa ser comentado é que essa plataforma cuida da escala, já que possui aplicativos consideravelmente grandes rodando e, ainda, tem uma arquitetura bem projetada que oferece desempenho e confiabilidade. Os planos iniciam com uma camada gratuita indicada para aplicações em desenvolvimento. O nível gratuito foi planejado para fins de desenvolvimento e aprendizado, já os aplicativos em produção precisam de um plano pago. As vantagens de utilizar o Back4App são: • Facilidade de utilização: a plataforma é simples de utilizar, e em apenas poucos minutos pode se iniciar a codificação de um aplicativo simples. • Flexibilidade: gerencia as versões de código-fonte, e o código-fonte pode ser alterado conforme a necessidade da empresa. • Hospedagem: muitas opções de hospedagem disponíveis, e ainda é um serviço confiável. • Content Delivery Network (CDN): os aplicativos hospedados no Back4App distribuirão automaticamente o conteúdo de modo global. • GraphQL: nova implementação e fornece a linguagem de consulta mais avançada. • Suporte: suporte 24/7. Os diferentes níveis de suporte disponíveis de acordo com o orçamento do cliente. 116 UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) 8.1.3 Firebase O Firebase é uma plataforma de código fechado adquirida pelo Google, em 2014. O Firebase possui recursos como análise, autenticação, banco de dados em tempo real e hospedagem. O Firebase abrange três pilares: • Recursos de desenvolvimento: contempla ferramentas para aumentar o desenvolvimento de aplicativos móveis, e ainda possui autenticação do usuário, armazenamento, banco de dados em tempo real, aprendizado de máquina e funções de nuvem. • Serviços do analytics: fornece um conjunto de serviços de análise para dispositivos móveis que melhoraram o desempenho do aplicativo. • Crescimento: integra um serviço chamado Ad Mob, que possibilita a veiculação de anúncios no aplicativo. As vantagens de utilizar o Firebase são: • Banco de dados em tempo real: permite a criação de aplicativos de mensagens como o WhatsApp, que usa dados em dispositivos quase que instantaneamente. • Aprendizado de máquina: recurso disponível no Firebase e não disponível em outros back-ends como serviço. • Ad Mob: permite gerar receita com seu aplicativo e integrá-lo a uma rede global de anúncios gerenciada pelo Google. 8.1.4 Parse O Parse é um framework de código aberto suportado por uma grande comunidade de desenvolvedores, tendo mais de 30k estrelas e 15 forks no Github. O Parse proporciona aos desenvolvedores uma maneira de elaborar aplicativos ágeis. A estrutura fornece aos desenvolvedores uma stack tecnológica que abrange um módulo de servidor de API para o Node.JS, um painel para gerenciar aplicativos, SDK e bibliotecas, adaptadores e documentação. As alternativas ao self-hosting do Parse são os provedores de nuvem, como AWS, Azure ou Digital Ocean. O Parse é gratuito, sendo que o único custo está atrelado à hospedagem. As vantagens de utilizar o Parse são: • Gerenciamento de dados: armazena tipos de dados essenciais, consultas, locais, imagens com algumas linhas de código. • Simplicidade: o framework é simples e a curva de aprendizado é menos de uma hora, considerando pequenos projetos. • Flexibilidade: trabalha com uma estrutura de código aberto leva a versatilidade para o próximo nível. • Código personalizado: o Parse fornece um recurso chamado Cloud Code. • Multiplataforma: há muitos SDKs disponíveis, podendo utilizar o Parse em quase todas as plataformas. TÓPICO 2 — BACK-END AS SERVICE - BAAS 117 • GraphQL: fornece a linguagem de consulta mais avançada. 8.1.5 CloudKit A CloudKit é considerada uma plataforma de back-end de código fechado e gerenciada pela Apple. Sua utilização é para desenvolver aplicativos para iOS e possui SDK nativo. A plataforma disponibiliza serviços de banco de dados, autenticação e armazenamento. Isso permite que os desenvolvedores se concentrem no desenvolvimento necessário ao cliente. Desse modo, o CloudKit é considerado como um repositório de dados com suporte de autenticação de identificação iCloud essencial e uma API na frente dele. Quando comparado com outros serviços, ele apresenta menos recursos, sendo a principal vantagem de usar o CloudKit é o SDK nativo para iOS. Os back-endless são considerados um dos primeiros players disponíveis no mercado e atuam sem investimento de fundos de capital de risco. A empresa pode utilizar o serviço on-line ou rodar a estrutura de modo local. Existe um nível gratuito limitado para hospedagem on-line, bem como planos pagos. As vantagens de usar são: • Versão local: executa esta versão de modo local em seu servidor ou em qualquer outra plataforma de nuvem. • Recurso de cache: disponível em hospedagem local ou em nuvem. • Suporte: fornecem suporte 24/7 aos usuários. 8.1.6 Kinvey O Kinvey é um back-end direcionado em grandes corporações, permitindo a operação em aplicativos corporativos utilizando um ambiente serverless. Nos planos estão inclusas hospedagem e operação, e a versão grátis tem um limite de 100 usuários. As vantagens são: • Integrações empresariais populares: adequada para grandes empresas. O serviço abrange integrações como Salesforce, SAP, Workday, Microsoft Active Directory e Oracle. • Ferramentas de inteligência operacional: relatórios de conformidade e análise. Ele fornece aplicativos compatíveis com HIPAA para empresas de saúde. • Suporte: 24/7 disponível. 118 UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) 8.1.7 AWS Ampify O AWS Ampify é considerado uma biblioteca de código aberto funcionando em conjunto com o Amazon Web Services. Ele disponibiliza suporte a desenvolvedores para elaborar aplicativos escalonáveis sem servidor, e ainda integra de modo suave com iOS, Android, React Native e outros front-ends da web. Os recursos disponíveis englobam o Google Analytics, Notificações, AR/VR, armazenamento e APIs. O serviço possui um plano Pay as You Go para ambientes de produção. As vantagens são: • CDN (Content Delivery Network): fácil de integrar com o CloudFront e implantar conteúdo globalmente. • GraphQL: o Amplify fornece um recurso chamado GraphQL Transform, que auxilia noprocesso de desenvolvimento. • Implantações atômicas: permite que seu aplicativo continue funcionando mesmo se o processo de construção falhar em novos lançamentos. 8.1.8 Kii O Kii é considerado como uma plataforma de desenvolvimento de back- end para jogos, IoT e aplicativos de modo geral. O seu funcionamento é tanto em nuvens públicas quanto privadas. Os recursos possuem notificações push, gerenciamento de dados e usuários, testes A/B, geolocalização e análises. As vantagens são: • Várias opções de implantação: executa a solução em qualquer nuvem ou localmente. • Internet of Things (IoT): usa recursos para interações de IoT. • Soluções de nicho: possui soluções específicas para agricultura, gestão de ativos, beacons, entre outros. 8.1.9 Kumulos O Kumulos é uma definida como plataforma de back-end desenvolvida para empresas de desenvolvimento de aplicativos móveis e agências digitais. Auxilia essas empresas a criar aplicativos para seus clientes. Os valores são diferenciados conforme os níveis das empresas, sendo: startups, agências digitais e empresas. As vantagens são: TÓPICO 2 — BACK-END AS SERVICE - BAAS 119 • Relatórios e diagnósticos de falhas: auxilia os desenvolvedores a encontrar problemas de modo rápido e a tomar medidas para solucionar. • Otimização de App Store: uma característica única entre todos os BaaS e disponível apenas na Kumulos. • Console da agência: permite que uma empresa de desenvolvimento de software gerencie vários aplicativos em uma conta corporativa. Conforme Taurion (2009), alguns outros provedores de back-end como serviços, são: • Playfab. • Appcelerator. • BaaSBox. • MongoDB Stich. • Oracle Mobile Hub. • Game Sparks. • Baqend. • Convertigo. • Kuzzle. • Hoodie. ATENCAO 9 MERCADO Conforme Batschinski (2019), o mercado de BaaS tem previsão de crescimento superior a 80% ao ano, podendo atingir 28 bilhões de dólares agora em 2020. Esse crescimento é motivado em função das economias orientadas a aplicativos ao redor do mundo (WU 2008; GODSE; MULIK, 2009; NG, 2017) O impacto dos aplicativos também é sentido nas indústrias, trazendo mudanças disruptivas tanto nos negócios quanto nos processos. Isso é em decorrência da mobilidade empresarial que gira em torno de aplicativos, e, ainda, as organizações estão investindo em aplicações mobile para ampliar a mobilidade (CREESE, 2011; NG, 2017). A previsão é de que, em 2020, poderão existir aproximadamente 20 milhões de desenvolvedores ao redor do mundo, sendo este o profissional que mais será requisitado (BATSCHINSKI, 2019). 120 RESUMO DO TÓPICO 2 Neste tópico, você aprendeu que: • A utilização de um BaaS possibilita a terceirização das responsabilidades vinculadas à manutenção e ao gerenciamento de servidores para um terceiro. • MBaaS se refere ao back-end como um serviço para projetos web ou projetos para dispositivos móveis. • Uma plataforma BaaS é considerada como um serviço técnico e criado para desenvolvedores. • Um back-end é considerado como um serviço segmentado em três camadas. • As razões para utilizar uma plataforma de Back-end as Service podem ser: comerciais ou técnicas. • Algumas opções de plataforma BaaS são: Azure Mobile Apps, Back4App, Firebase, Parse, CloudKit, Kinvey, AWS Ampify, Kii, Kumulos. 121 1 Back-end como Serviço (BaaS ou mBaaS) é considerada uma plataforma que automatiza o desenvolvimento de back-end, bem como atende a infraestrutura de nuvem (WU, 2008; GODSE; MULIK, 2009; CREESE, 2011). Então, sobre o ato de jogar, assinale a alternativa CORRETA: a) ( ) Back-end as a Service é um modelo de arquitetura em que o desenvolvedor implementa a interface. b) ( ) Back-end as a Service possibilita que somente uma parte do processamento seja atendido por meio de um serviço disponível na nuvem. c) ( ) BaaS possui as ferramentas para garantir desenvolver um código fonte e reduzir o processo de implementação. d) ( ) A utilização de um BaaS não possibilita a terceirização das responsabilidades vinculadas a manutenção e ao gerenciamento de servidores para um terceiro. 2 Um dos primeiros modos de aplicação da arquitetura em nuvem é o Back- end como Serviço. Ele faz parte da evolução da aplicação da arquitetura Serverless, sobretudo por estas aplicações estarem conectadas a algum banco de dados em nuvem e serem hospedadas em determinados serviço cloud. Considerando o BaaS não existe preocupação com o Back-end, somente é consumido esse serviço através do provedor de computação em nuvem (TAURION, 2009; CREESE, 2011; BATSCHINSKI, 2016; BATSCHINSKI, 2019). Considerando esta afirmação, assinale a alternativa CORRETA: a) ( ) As vantagens de um back-end como serviço estão atreladas somente à terceirização de responsabilidades de gerenciamento de servidores. b) ( ) A vantagem é gerenciar a infraestrutura de nuvem. c) ( ) A vantagem de um BaaS é utilizar mais desenvolvedores de back-end. d) ( ) A vantagem de um BaaS é reduzir o tempo entre a análise de um produto e sua disponibilização para o mercado. 3 Ao se utilizar uma estrutura BaaS, dividido em algumas camadas, é possível resolver alguns problemas, como o gerenciamento e dimensionamento da infraestrutura em nuvem, assim como a aceleração do desenvolvimento de back-end. Considerando esta afirmação, assinale a alternativa CORRETA: a) ( ) BaaS é segmentado em duas camadas, sendo uma a que possui servidores de bancos de dados e a outra a que possui servidores para processamento de requisições. b) ( ) BaaS é segmentado em três camadas e oferece vários serviços disponíveis na própria infraestrutura. AUTOATIVIDADE 122 c) ( ) BaaS é considerada uma plataforma exclusiva para administradores de servidores. d) ( ) BaaS disponibiliza muitos serviços, exceto autenticação e push notifications. 4 Plataformas BaaS oferecem muitos benefícios para equipes de desenvolvimento de software, permitindo que mais tempo seja voltado para atividades do projeto de software, e não para infraestrutura de servidores. Considerando esta afirmação, assinale a alternativa CORRETA: a) ( ) São muitas as vantagens de se utilizar uma plataforma BaaS, a qual é indicada apenas para projetos de grande porte. b) ( ) Uma desvantagem de se utilizar o BaaS é o aumento do time to market de um projeto de software. c) ( ) O BaaS pode reduzir o tempo de análise de um projeto de software. d) ( ) Apesar da aceleração do processo de desenvolvimento de software, uma das desvantagens de se utilizar o BaaS é o aumento do número de desenvolvedores. 5 O BaaS pode ser definido por uma plataforma que acelera o desenvolvimento de back-end de uma aplicação, atendendo a infraestrutura de nuvem. Nesse sentido, o Back-end as a Service pode ser considerado um modelo de arquitetura no qual o desenvolvedor implementa a interface e possibilita que o processamento seja atendido por meio de um serviço disponível na nuvem. Considerando esta afirmação, assinale a alternativa CORRETA: a) ( ) A minoria dos BaaS que estão disponíveis no mercado trabalha com o modelo freemium. b) ( ) Modelo freemium de BaaS significa que permite uma utilização limitada, porém sem custo por usuários ou acessos. c) ( ) Aplicativos possuem um front-end, um back-end e APIs, sendo o front- end, a parte da aplicação que lida diretamente com regras de negócios e com o banco de dados. d) ( ) Uma das vantagens principais do BaaS é o menor grau de personalização em comparação com um back-end personalizado. 123 UNIDADE 2 TÓPICO 3 — FUNÇÃO COMO SERVIÇO (FAAS) 1 INTRODUÇÃO As Funções como Serviço (FaaS) podem ser descritas como um modelo de execução computacional orientado a eventos. As funções gerenciam a lógica e o estado no lado do servidor usado como serviços (REDHAT, 2020). É um serviço de computação em nuvem que permite executar código em resposta a eventos sem a infraestrutura complexa, normalmente associada à criação e publicação de softwares (IBM, 2019). Usualmente, a publicaçãode um software na internet requer provisionamento e gerenciamento de um servidor virtual ou físico, gerenciamento de processos de hospedagem de sistemas operacionais e servidores da web. Com a utilização do FaaS, o hardware físico, o sistema operacional da máquina virtual e o gerenciamento de software do servidor são gerenciados pelo provedor da nuvem (IBM, 2019). A implantação de funções como serviço são muito diferentes das formas tradicionais e com reserva de recurso, pois não temos aplicações de servidor para executar por conta própria. Em um ambiente FaaS, carregamos o código da função no provedor e ele faz todo o necessário para provisionar recursos, instanciar as máquinas virtuais e gerenciar os processos, por exemplo (ROBERTS, 2018). A computação sem servidor é um contexto em que os desenvolvedores escrevem a lógica de negócios, que é executada em contêineres Linux, totalmente gerenciados por uma plataforma, por exemplo na Amazon Web Services ou Microsoft Azure. As funções estão na nuvem, no entanto, algumas implementações on-premise e híbridas podem ser concebidas (REDHAT, 2020). Por que ficar sem servidor para a minha aplicação? As vantagens começam por garantir que não haja nenhuma sobrecarga de infraestrutura, atividades de manutenção reduzidas, o custo eficiente mais adequado à real necessidade do negócio, e, por fim, a escala é facilmente e rapidamente implementada, permitindo que o produto seja amplamente distribuído, gerando resultados financeiros mais rápido para o negócio (IBM, 2020a). 124 UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) A função dentro de uma estrutura FaaS, normalmente concebida sob a lógica de um micro serviço, é um algoritmo que entrega uma lógica de negócios, o que faz com que normalmente as aplicações sejam compostas de muitas funções (REDHAT, 2020). A utilização do FaaS traz alguns benefícios para o desenvolvimento de software, seja para o desenvolvedor, principal beneficiado, seja para o usuário, que vai ter uma experiência mais fluida e com maior disponibilidade e produtividade (REDHAT, 2020). Em um primeiro momento, pode-se destacar o aumento da produtividade dos desenvolvedores e do tempo de desenvolvimento, assim os programadores de software colhem os benefícios do FaaS (REDHAT, 2020). Outro aspecto positivo é não ter a responsabilidade pelo gerenciamento de servidores, pois a solução está nas plataformas dos provedores, assim, os analistas de infraestrutura saem, também, beneficiados (REDHAT, 2020). Do ponto de vista do usuário, a possibilidade de a aplicação ser escalada facilmente e escalada horizontalmente de forma gerenciada pela própria plataforma provedora do serviço, faz com que o software tenha melhor desempenho e disponibilidade (REDHAT, 2020). E o melhor do FaaS é que quase qualquer software pode ir para a estrutura de função como serviço, pois estas podem ser escritas em quase todas as linguagens de programação (REDHAT, 2020). Por exemplo, as funções do AWS Lambda podem ser implementadas em JavaScript, Python, Go, qualquer linguagem JVM ou .NET (ROBERTS, 2018). Assim como os serviços de computação em nuvem, a infraestrutura pode se comportar de forma inteligente. Logo, em tendo a demanda de solicitação de função caindo, a aplicação reduz a escala da infra automaticamente. O (REDHAT, 2020). 2 CONCEITOS Podemos simplificar a definição do conceito de FaaS como sendo a execução de código de back-end sem gerenciar seus próprios sistemas de servidor ou aplicativos de servidor de longa duração, o qual possui a principal diferença quando comparada com outras tendências da arquitetura moderna, como os Platform as a Service (PaaS), que o desenvolvedor precisa alocar o servidor por um longo período, mesmo que não tenha toda essa necessidade (ROBERTS, 2018). TÓPICO 3 — FUNÇÃO COMO SERVIÇO (FAAS) 125 Na Figura 11 são apresentadas as camadas que são gerenciadas de acordo com cada tipo de serviço de computação em nuvem, sendo possível perceber a tendência de diminuição da responsabilidade de manutenção da infraestrutura conforme a evolução da esquerda para a direita vai ocorrendo, ou seja, de totalmente gerenciável até nada gerenciável. FIGURA 11 – CAMADAS GERENCIAIS POR TIPO DE SERVIÇOS FONTE: <https://www.smartspate.com/deploy-an-apps-in-aws-serverless/>. Acesso em: 29 set. 2020. As infraestruturas on premise, conforme Figura 11, necessitam de total controle por parte da equipe de desenvolvimento de software, até mesmo do hardware. Na IaaS, a preocupação passa a ser apenas das questões de sistemas operacionais e seus níveis superiores, simplifi cando as questões de hardware, redes, armazenamento e virtualização. Na coluna seguinte, os PaaS simplifi cam ainda mais, delegando ao desenvolvedor apenas a necessidade de gerenciar aspectos relacionados a recursos que precisam servir a aplicação e ao código propriamente dito. Na sequência, o FaaS simplifi ca ao máximo, fazendo o desenvolvedor se preocupar apenas com código fonte. Os SaaS já são considerados, do ponto de vista do usuário, onde não há preocupação com codifi cação, mas apenas com o uso do software propriamente dito. O FaaS pode substituir um servidor de processamento de cliques, por exemplo, que seja possivelmente uma máquina física, mas defi nitivamente um aplicativo específi co, por algo que não precisa de um servidor provisionado, nem um aplicativo que esteja executando 24/7 (ROBERTS, 2018). 126 UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) A computação sem servidor e as funções como serviço são normalmente vistas como análogas, mas o FaaS é uma parte da computação serverless, o qual é focado em qualquer categoria de serviço, seja computação, armazenamento, banco de dados, mensagens, gateways da API, dentre outros, nos quais o gerenciamento é transparente para o usuário final. O FaaS, por outro lado, talvez seja a tecnologia mais central em arquiteturas sem servidor, concentra-se no paradigma da computação orientada a eventos em que o código do software é executado apenas em resposta a eventos ou solicitações (IBM, 2019). De acordo com a IBM (2019) o FaaS se difere de outros modelos comuns de computação no mercado: • Tempo de provisionamento: milissegundos, comparado a minutos e horas para os outros modelos. • Administração contínua: nenhuma, comparada a uma escala móvel de fácil a difícil para PaaS, contêineres e VMs. • Escala elástica: cada ação é sempre instantânea e escalada, em comparação com outros modelos que oferecem escalonamento automático, mas lento, os quais requerem ajustes cuidadosos das regras de escalonamento automático. • Planejamento de capacidade: não é necessário no FaaS, em comparação com outros modelos que exigem uma mistura de alguns dimensionamentos automáticos e algum planejamento de capacidade. • Manutenção: toda a manutenção é gerenciada pelo provedor FaaS. No entanto, o PaaS, contêineres e VMs requerem manutenção significativa, que inclui a atualização e gerenciamento de sistemas operacionais, imagens de contêineres, conexões, dentre outros. • Alta disponibilidade e recuperação de desastre: a alta disponibilidade é inerente ao modelo FaaS sem esforço ou custo extra. Os outros modelos exigem custos adicionais e esforço de gerenciamento. • Utilização de recursos: os recursos nunca estão ociosos, são invocados somente mediante solicitação. Todos os outros modelos apresentam pelo menos algum grau de capacidade ociosa. • Limites de recursos: o FaaS é o único modelo que possui limites de recursos em tamanho de código, ativações simultâneas, memória e duração da execução, por exemplo. • Granularidade e cobrança de carregamento: por blocos de 100 milissegundos, comparados à hora e, as vezes, aos minutos de outros modelos. 3 FUNÇÕES COMO SERVIÇO Em uma arquitetura orientada, as funções, ou eventos, como vimos anteriormente, é preciso se atentar a alguns aspectos críticos para queos benefícios da FaaS sejam possíveis de serem alcançados. Por exemplo, o limite de tempo de execução de uma função, sendo necessário que uma função seja algo que possa ser iniciado e executado rapidamente (REDHAT, 2020). TÓPICO 3 — FUNÇÃO COMO SERVIÇO (FAAS) 127 Por parte do provedor do serviço em nuvem, as funções iniciam em questão de milissegundos e processam solicitações individuais. O ponto de destaque para essa arquitetura é, caso haja várias solicitações simultâneas por parte da aplicação solicitante a serem processadas por uma função, o sistema criará um número de cópias suficientes da instância de processamento das funções para atender à demanda (REDHAT, 2020). As funções são normalmente acionadas por eventos definidos pelo provedor, no caso da Amazon Web Services, esses acionamentos podem ser atualizações no servidor de arquivos S3, passagem de tempo, como tarefas agendadas, e mensagens adicionadas a um barramento de mensagens (ROBERTS, 2018). Quando existem transações de alto volume, ou seja, cargas de trabalho que ocorrem de tempos em tempos, os FaaS são muito adequados. Em caso de geração de relatórios, processamento de imagens ou quaisquer tarefas programadas, por exemplo (REDHAT, 2020). No entanto, as funções normalmente são limitadas em quanto tempo cada chamada é executada. Segundo Roberts (2018), o tempo limite para uma função do AWS Lambda – serviço FaaS da AWS – responder a um evento é de no máximo cinco minutos. O Microsoft Azure e o Google Cloud Functions têm limites semelhantes (ROBERTS, 2018). Contudo, certas tarefas – as de longa duração – não são adequadas a serem desenvolvidas no modelo FaaS. É necessário criar várias funções coordenadas, enquanto, em um ambiente tradicional você pode ter uma tarefa de longa duração executando coordenação e execução (ROBERTS, 2018). A implementação e eficácia dos FaaS depende de algumas práticas recomendadas, por exemplo, cada função deve executar apenas uma ação, as funções do FaaS devem ser projetadas para executar uma única lógica em resposta a um evento. Torne seu escopo de código limitado, eficiente e leve, para que as funções sejam carregadas e executadas rapidamente. Não é aconselhável que as funções chamem outras funções, o grande diferencial do FaaS está no isolamento de funções. Evitar a utilização de bibliotecas em funções é altamente benéfico, pois o uso de muitas bibliotecas pode diminuir a velocidade das funções e torná-las mais difíceis de dimensionar (IBM, 2019). 128 UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) 4 ESCALABILIDADE A escala horizontal é totalmente automática, elástica e gerenciada pelo provedor. Se o seu sistema precisar processar 100 solicitações em paralelo, o provedor cuidará disso sem nenhuma configuração extra de sua parte. Os “contêineres de computação” que executam suas funções são efêmeros, com o provedor FaaS criando e destruindo-os puramente orientados pela necessidade de tempo de execução. Com o FaaS, o fornecedor lida com todo o provisionamento e alocação de recursos subjacentes – nenhum gerenciamento de cluster ou VM é necessário para o usuário (ROBERTS, 2018). A escalabilidade é fundamental do ponto de vista de negócios. Digamos que estávamos tendo um bom dia de vendas em uma loja virtual, e os clientes estavam clicando em dez vezes mais anúncios do que o costumeiro para a loja em questão. Em uma arquitetura tradicional, o sistema on-line da loja teria que ser capaz de lidar com isso. Por exemplo, o site teria que saber lidar com várias mensagens ao mesmo tempo, provisionando recursos para crescimentos esporádicos. Com a abordagem do FaaS, todas essas dificuldades são resolvidas de princípio, é necessário apenas escrever a função para que entenda o paralelismo em escala horizontal, mas, a partir desse momento, o provedor do FaaS lida automaticamente com todas as necessidades de dimensionamento (ROBERTS, 2018). 5 SEGURANÇA A aplicação em FaaS exige uma análise profunda na questão de segurança, cada caso deve ser explorado da forma mais adequada ao que diz respeito ao projeto. Cada fornecedor sem servidor que você usa, aumenta o número de diferentes implementações de segurança adotadas. Essa situação aumenta potencialmente a área para ataques maliciosos (ROBERTS, 2018). 6 CUSTOS RELACIONADOS A empresa que desenvolve o software paga pelo que consumir do provedor, sendo a cobrança apenas do uso de recursos efetivamente entregues ao usuário, por exemplo, não pagando por servidor quando em sua ociosidade (REDHAT, 2020). Além disso, o usuário não paga, nem se preocupa, com a memória, CPU e demais recursos relacionados. E, ainda, não se preocupa com instalação e configuração, muito menos com administração contínua da infraestrutura (IBM, 2020c). TÓPICO 3 — FUNÇÃO COMO SERVIÇO (FAAS) 129 Não se preocupar com a infraestrutura inclui não precisar fazer o planejamento da capacidade, pois o FaaS fornece automaticamente a capacidade adequada de acordo com a demanda da função (IBM, 2020c). Quando o FaaS não está em uso, ele não custa nada. O código somente é executado quando há uma requisição ao serviço, mudança de estado do banco de dados ou outro tipo de evento que aciona a execução do código. No caso da IBM, o faturamento é por milissegundo de tempo de execução arredondado até o 100 MS mais próximos (IBM, 2020a). 7 CASOS DE APLICAÇÕES Os micros serviços ainda necessitam de grande complexidade na concepção da infraestrutura usando tecnologias de nuvem tradicionais, as quais necessitam uma variedade de controles relacionados a ferramentas complexas e pipelines de construção e operações. Equipes pequenas e ágeis utilizam muito tempo criando infraestruturas complexas e operacionais, com recursos de tolerância a falhas, balanceamento de carga, ajustes automáticos de escala e criação de logs (IBM, 2020b). A capacidade modular e escalável dos FaaS fazem com que ele se torne ideal para implementar lógicas de ações, as ações são independentes uma das outras e podem ser implementadas usando várias linguagens diferentes que são suportadas pelo provedor, tendo a capacidade de acessar vários sistemas back- end. As ações podem ser implementadas e gerenciadas independentemente, além de ser escalada de forma separada de outras ações (IBM, 2020b). Até mesmo aplicações web voltadas para usuário final podem ter os benefícios das FaaS, nas quais as requisições do navegador do usuário servem como eventos. As solicitações são processadas apenas a partir da interação do usuário, não existindo tempo de espera, tornando o FaaS menos caro quando comparado com contêineres tradicionais (IBM, 2020b). Aplicações voltadas para internet das coisas também podem usufruir dos benefícios dos eventos disparados ao FaaS. Por exemplo, uma ação poderá ser acionada quando precisar reagir a um sensor que excede uma temperatura específica. As interações IoT são geralmente sem estado e com o potencial de alta carga em grandes eventos espontâneos, como desastres naturais, tempestades climáticas significativas ou engarrafamentos. Uma necessidade é criada para um sistema elástico em que a carga de trabalho normal pode ser pequena, mas precisa escalar rapidamente com tempo de resposta previsível. 130 UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) Portanto, a capacidade de manipular vários eventos simultâneos sem aviso prévio no sistema é desejável. É difícil construir um sistema para atender esses requisitos que usam arquiteturas de computação em nuvem com servidores tradicionais. Essas infraestruturas tendem a ser subdesenvolvidas e incapazes de manipular a carga de pico no tráfego ou ser excessivamente provisionados e altamente custosos (IBM, 2020b). Uma aplicação prática e adequada à estrutura de FaaS é a montagem de APIs sem servidores. O FaaS pode chamar uma ação com métodos do HTTP. Esse recurso é útil não apenas para expor APIs a consumidoresexternos, mas também para construir aplicativos de micro serviços (IBM, 2020b). 8 APLICAÇÕES EM CENÁRIOS DE BIG DATA As arquiteturas sem servidor, como FaaS, tem um grande potencial em auxiliar as aplicações de software que trabalham com big data. A alta disponibilidade das funções e alta tolerância a falhas e disponibilidade permitem que o desenvolvimento se concentre mais no desenvolvimento da solução big data. O tempo de colocação no mercado reduzido é essencial para as soluções de big data, pois levam apenas alguns minutos para iniciar. No entanto, antes de implementar sua solução de big data na arquitetura sem servidor, há algumas coisas que precisam ser consideradas, pois nenhuma solução é perfeita. É necessário descobrir se o servidor está sendo uma solução barata para o sistema de big data ou não. Em segundo lugar, se a equipe é capaz de implementá-la ou será obrigada a contratar novos profissionais para a concepção dessa solução específica. Além disso, precisa-se descobrir se a estratégia para o gerenciamento de pipelines de big data. A segurança dos dados também é uma grande preocupação quando avança para as soluções centradas em dados (AKIWATKAR, 2018). Um aspecto negativo é que os dados são buscados em várias fontes, o que aumenta significativamente o tempo de execução. E como as funções sem servidor têm vida curta, isso entra em conflito com as melhores práticas. É viável fazer a implementação neste modelo, contudo, foge dos padrões e boas práticas, e também aumentará o custo geral da solução de big data (AKIWATKAR, 2018). Se trata de tecnologia em plena evolução, logo as possíveis soluções para os problemas apresentados estarão dispostas para a comunidade. Contudo, o a computação sem servidor entregará bons benefícios quando os problemas forem compreendidos completamente e o software for construído de acordo com normas e boas práticas (AKIWATKAR, 2018). TÓPICO 3 — FUNÇÃO COMO SERVIÇO (FAAS) 131 9 DESVANTAGENS Assim como a maioria das tecnologias, principalmente as que estão em fases mais iniciais, os FaaS possuem algumas desvantagens, e estão associadas à forma pela qual as plataformas são implementadas. Alguns exemplos são a duração de execução, latência de inicialização e limites de função cruzada. A latência de inicialização pode ser possivelmente atenuada, permitindo que um cliente solicite ao provedor que duas instâncias de uma função FaaS estejam sempre disponíveis em baixa latência, com o cliente pagando por essa disponibilidade (ROBERTS, 2018). 10 PLATAFORMAS DE FAAS As plataformas são responsáveis por entregar o serviço ao desenvolvedor e gerenciar toda a infraestrutura necessária para o desenvolvedor ter um ambiente pronto e apenas implementar e focar na regra de negócio da solução que busca implementar. Um provedor de nuvem torna uma função sempre disponível e gerencia a alocação de recursos. Como as funções são orientadas a eventos, e não a recursos, elas podem ser escaladas com facilidade. 10.1 AWS LAMBDA O principal provedor de computação em nuvem entrega sua ferramenta de função como serviço já consolidada e muito utilizada por grandes corporações. FIGURA 12 – AMAZON WEB SERVICES FONTE: <https://aws.amazon.com/pt/lambda/>. Acesso em: 29 set. 2020. O serviço Lambda da AWS entrega as funcionalidades do FaaS, permitindo a execução de código sem provisionar ou gerenciar servidores, bem como as facilidades de pagar apenas pelo tempo de execução consumido pelas funções. Com o Lambda é possível executar o código para variados tipos de aplicativo ou serviços de back-end, tudo sem precisar de administração da infraestrutura. A quase que única tarefa é fazer a inserção do código, que o Lambda se encarrega de todos os procedimentos necessários para executar e alterar a escala do código e deixar a infraestrutura com alta disponibilidade. Você pode 132 UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) confi gurar seu código para que ele seja acionado automaticamente por outros serviços da AWS ou chamá-lo diretamente usando qualquer aplicação móvel ou da web (AWS, 2020). A Figura 13 apresenta como funciona passo-a-passo o serviço de FaaS da AWS, do upload do código ao pagamento do serviço. FIGURA 13 – COMO FUNCIONA O AWS LAMBDA FONTE: <http://twixar.me/Xrlm>. Acesso em: 29 set. 2020. Após estar logado no painel dos serviços de computação da Amazon, basta acessar o Lambda e fazer o upload do código dentro do próprio editor de códigos da AWS. Posteriormente, é necessário confi gurar como a função será disparada, podendo ser disparada por outros serviços da AWS ou APIs HTTP e atividades do usuário dentro de softwares. Feito isso, a AWS irá executar o código apenas quando for disparado o evento e você pagará apenas pelas frações de tempo de execuções da sua função, torando o aplicativo altamente disponível. Um exemplo de uso é no caso de um fotógrafo, quando retira uma foto e precisa redimensionar a imagem para ser distribuída em desktop, tablets e smartphones. FIGURA 14 – CASO DE USO PARA REDIMENSIONAMENTO DE IMAGEM FONTE: <http://twixar.me/trlm>. Acesso em: 29 set. 2020. TÓPICO 3 — FUNÇÃO COMO SERVIÇO (FAAS) 133 Quando a imagem é enviada ao repositório de arquivos da AWS, o Amazon S3, automaticamente é disparado um evento ao Lambda para que recupere essa imagem e faça seu redimensionamento deixando a imagem disponível e adequada para ser exibida em quaisquer dispositivos. Utilizar o Lambda para aplicativos web é uma abordagem muito interessante, pois pode aumentar a performance do serviço e até mesmo reduzir custos. Assim, sua API Rest terá a infraestrutura totalmente supervisionada pela equipe de engenharia da AWS. Veja a Figura 15 como acontece o passo a passo para executar um aplicativo na Web usando Lambda. FIGURA 15 – APLICATIVO WEB UTILIZANDO LAMBDA FONTE: <http://twixar.me/8rlm>. Acesso em: 29 set. 2020. A Figura 15 apresenta o fl uxo desde a interação do usuário no front-end da aplicação, neste caso, hospedada nos serviços Amazon S3 até a consulta dos dados persistidos no DynamoDB, também da Amazon. Quando o usuário interage com a interface para recuperar as informações da temperatura, imediatamente após este momento é requisitada a API da aplicação que dispara um evento para o Lambda acessar a base de dados no DynamoDB e retornar para a própria a API as informações do clima, a qual exibe na interface do usuário a informação completa. Para colocar em prática a criação de uma função Lambda na AWS você pode criar uma conta gratuita, mas sempre prestando atenção ao seu painel de faturamento para evitar a utilização de recursos que estejam fora da camada gratuita. Na Figura 16 está o painel inicial do AWS Lambda, sendo, dentro dele, que você pode começar a criação de funções. Perceba que não existe a necessidade de confi guração de nenhuma infraestrutura de servidor, apenas da criação da função. 134 UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) FIGURA 16 – TELA INICIAL PARA CRIAÇÃO DE FUNÇÕES NA AWS FONTE: O autor Ao clicar em “Criar função” é possível avançar para a tela da Figura 17, em que você pode criar suas funções de diversas maneiras, seja criar uma função do zero, utilizar um esquema a partir de um exemplo da AWS com base em casos de uso comum e, por fi m, utilizar algum repositório criado por terceiros. Na Figura 17 você pode ver a tela que é utilizada para escolher estas opções. FIGURA 17 – CRIANDO UMA FUNÇÃO NA AWS FONTE: O autor TÓPICO 3 — FUNÇÃO COMO SERVIÇO (FAAS) 135 Ao escolher a opção “Explorar o repositório de aplicativos sem servidor” você vai ter uma série de opções, conforme exemplo na Figura 18. São exemplos que vão de um “hello world” básico até mais complexos, nos quais o FaaS chega a ter interações e tarefas junto à Alexa®, a assistente virtual da Amazon. FIGURA 18 – EXPLORANDO O REPOSITÓRIO DE FAAS DA AWS FONTE: O autor Grandes corporações, como aCoca Cola, Thomson Reuters, Netfl ix e T-Mobile utilizam o FaaS da Amazon, e você também pode utilizar. • A AWS possui uma camada gratuita, e você pode consultar os serviços gra- tuitos no link a seguir: https://aws.amazon.com/pt/free/?all-free-tier.sort-by=item.additio- nalFields.SortRank&all-free-tier.sort-order=asc. • No caso do AWS Lambda, você tem 1 milhão de solicitações gratuitas por mês, durante 1 ano, veja no link a seguir: https://aws.amazon.com/pt/lambda/?did=ft_card&trk=ft_card. • Conheça todos os recursos do AWS Lambda no link a seguir: https://aws.amazon.com/ pt/lambda/resources/. • Que tal criar a sua primeira função no Lambda com um tutorial desenvolvido pela própria AWS? Veja o link a seguir: https://aws.amazon.com/pt/getting-started/hands-on/ run-serverless-code/. DICAS 136 UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) 10.2 GOOGLE CLOUD FUNCTIONS O Google oferece uma série de funcionalidades de computação em nuvem, e oferece também o serviço função como serviço. FIGURA 19 – GOOGLE CLOUD FONTE: <http://twixar.me/Prlm>. Acesso em: 29 set. 2020. A forma Google de desenvolver suas tecnologias favorece o aprendizado e a facilidade de uso, como a própria empresa se defi ne: a maneira mais simples de executar seu código. O Cloud Functions é a plataforma. A possibilidade de iniciar diretamente da etapa de código até implantação com entrega contínua e ferramentas de monitoramento. O Google oferece a possibilidade de conectar-se a serviços do Google Cloud, ou de terceiros, para criar cenários de desenvolvimento complexos com facilidade. Conforme mencionado anteriormente, a experiência simplifi cada do Google confere maior velocidade para o desenvolvedor, o Cloud Functions, o qual oferece uma experiência de desenvolvedor simples e intuitiva. Seguindo as bases do FaaS, basta escrever o código e deixar que o Google Cloud gerencia a infraestrutura operacional. Inferindo num desenvolvimento com mais rapidez, basta escrever e executar snippets de código pequenos que respondam a eventos (GOOGLE, 2020). Empresas consolidadas, como a Natura, Hurb, Resultados Digitais, Mercado Livre e SBT utilizam a nuvem do Google para potencializar seus negócios. Podemos utilizar as mesmas estruturas que essas grandes corporações utilizam, podendo levar soluções em software para a nuvem em até quatro meses. Alguns casos de uso comuns que podem-se aplicar a estrutura do Google Cloud são apresentados a seguir. Por exemplo, back-ends de aplicativos, nos quais é possível executar o código dentro do Google Cloud ou diretamente de qualquer aplicativo web, móvel ou de back-end. O Cloud Functions fornece uma camada de lógica conectiva que permite integrar e estender os serviços do Google Cloud e de terceiros, possibilitando a criação rápida de aplicativos sem servidor altamente disponíveis, seguros e com boa relação custo-benefício (GOOGLE, 2020). TÓPICO 3 — FUNÇÃO COMO SERVIÇO (FAAS) 137 A integração com serviços e APIs de terceiros também pode ser implementada com o Cloud Functions, seja para publicar microsserviços por meio de APIs HTTP ou integrar a serviços de terceiros que oferecem integrações de webhook para estender rapidamente o aplicativo com recursos efi cientes, seja para enviar e-mail de confi rmação ou responder a eventos de mensagem. Na Figura 20, é apresentado o fl uxo de execução após um commit no Github, gerando um evento no serviço FaaS do Google. FIGURA 20 – DISPARO DE EVENTO APÓS COMMIT FONTE: <https://cloud.google.com/images/products/functions/third-party-services-graphic. svg?hl=fr>. Acesso Em: 29 set. 2020. Na Figura 20, após ser efetuado um push num repositório GitHub, integrado com o Cloud Functions do Google por intermédio dos webhoocks do GitHub, é possível disparar uma função que envie uma mensagem automaticamente para uma equipe de desenvolvimento em um grupo do aplicativo Slack. A vantagem disso é que os push no GitHub não são constantes, o que não justifi ca possuir uma infraestrutura disponível 24/7 para esse tipo de situação, o que acabaria resultando numa grande ociosidade de computação e um custo elevado e constante desnecessário. A simplicidade das interfaces do Google é perceptível também na ferramenta de nuvem da empresa. A criação de funções como serviço dentro da plataforma é orientada passo a passo dentro de telas que facilitam muito a conceber funções. Na Figura 21, é apresentado o painel do Google, no qual basta escolher um nome da função, selecionar a memória adequada a ser alocada para a execução do código, apresentar a forma como será disparada a função, neste caso por requisições HTTP. Depois disso, escolhe a forma em que o código será inserido no provedor, a facilidade é tão grande que pode ser editado dentro do painel mesmo, ou um ZIP, ou até mesmo um repositório específi co. Ao fi nal, basta escolher a linguagem de programação que vai ser utilizada e colocar a função no ar. 138 UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) FIGURA 21 – CRIAR FUNÇÕES NO GOOGLE CLOUD FONTE: O autor A função “function-1”, criada anteriormente, já pode ser visualizada na tela de listagem das funções. Conforme a Figura 22, é possível ver as informações mais relevantes. TÓPICO 3 — FUNÇÃO COMO SERVIÇO (FAAS) 139 FONTE: O autor FONTE: O autor FIGURA 22 – LISTAR FUNÇÕES NO GOOGLE CLOUD FIGURA 23 – TESTAR FUNÇÃO NO GOOGLE CLOUD A simplicidade para fazer a publicação de uma função como serviço pode ser traduzida pela Figura 23, em que, após o cadastro, é possível, através do menu de contexto, executar um teste da função por dentro da própria plataforma. Nesse menu, também é possível verifi car a execução e resultados por meio da opção de logs da função. Além da facilidade das funções como serviço, ganhamos agilidade e redução de custos. Agora que já conhecemos plataformas intuitivas para a criação dela, basta escrever o código e enviar para a plataforma. É fundamental destacar que o Google possui uma camada gratuita. No link htt ps://cloud.google.com/functions/pricing, você pode consultar o preço atualizado dos serviços do Google Cloud Functions, sendo que, assim como em outros provedores, é possível criar uma conta e ter 12 meses de acesso a uma camada gratuita, na qual você ganha 300 dólares em créditos, sendo, desta forma, possível testar a plataforma e compreender se a demanda atenderá as necessidades do software. 140 UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) Para colocar um FaaS do Google no ar é simples e prático. Veja como, acessando o link: https://cloud.google.com/functions/docs/quickstart-console. DICAS 10.3 MICROSOFT AZURE FUNCTIONS A Microsoft oferece seus serviços de FaaS pelo Azure Functions, permitindo acelerar e simplifi car o desenvolvimento de software com a computação sem servidor orientada a eventos que também pode resolver problemas complexos de orquestração. É possível criar e depurar localmente e sem confi gurações adicionais, implantar e operar em escala na nuvem e integrar serviços usando acionadores e associações (MICROSOFT, 2020). FONTE: <https://ocaradoti.com.br/wp-content/uploads/2020/01/logo-transparente-Microsoft- -Azure.png>. Acesso em: 29 set. 2020. FIGURA 24 – MICROSOFT AZURE A Azure Functions possui uma experiência de desenvolvimento, indo desde a criação e a depuração local nos principais sistemas operacionais, seja Windows, macOS ou Linux, até a implantação e o monitoramento na nuvem. É possível utilizar as extensões e modelos do Functions no Visual Studio e no Visual Studio Code, editor de código amplamente utilizado pela comunidade, para obter um desenvolvimento mais rápido e efi ciente em seu computador local, mas completamente integrado com a plataforma do Azure (MICROSOFT, 2020). No entanto, é possível desenvolver utilizando o editor de código favorito do desenvolvedor e o Azure Functions Core Tools. Para agilizar aindamais o desenvolvimento é possível confi gurar a CI/CD (integração contínua e entrega contínua) com o Azure Pipelines e obter sugestões proativas e inteligentes do desempenho de aplicativos na produção pelo Azure Monitor (MICROSOFT, 2020). TÓPICO 3 — FUNÇÃO COMO SERVIÇO (FAAS) 141 O Azure possui um painel de monitoramento completo, no qual você pode verifi car a quantidade de vezes que a função foi executada com ou sem sucesso, bem como um log de todas as execuções com seu respectivo sucesso e duração da execução dela. Na Figura 25, é possível perceber a execução de uma determinada tarefa, clicando no botão Refresh, o painel é atualizado com as possíveis novas execuções da função, que neste caso se chama “Htt pTrigger1” e pertence ao aplicativo “myfunctionaap”. FONTE: O autor FIGURA 25 – AZURE FUNCTION MONITOR O Azure Functions permite que você escreva funções com as linguagens C#, JavaScript, F#, Java, PowerShell, Python e TypeScript. Você pode consultar os preços do Azure Functions no link https://azure. microsoft.com/pt-br/pricing/details/functions/. A Microsoft também possui um nível gratuito. Então, você pode criar sua conta Azure e começar hoje mesmo a testar o Functions. Aproveite e escreva sua primeira função na Microsoft seguindo o roteiro a seguir, utilizando a linguagem de programação Java Script. Acesse: https://docs.microsoft.com/pt-br/azure/ azure-functions/functions-create-fi rst-function-vs-code?pivots=programming-language- javascript. DICAS 142 UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) 10.4 IBM CLOUD FUNCTIONS A IBM tem sua tecnologia FaaS com base no Apache OpenWhisk, que é uma plataforma sem servidor distribuída de código aberto, ele gerencia a infraestrutura, os servidores e o dimensionamento usando contêineres para que seja possível focar na construção do software (IBM, 2020b). FONTE: <https://cloud.ibm.com/functions/>. Acesso em: 29 set. 2020. FIGURA 26 – IBM CLOUD FUNCTIONS A IBM destaca o potencial do FaaS com a possibilidade de executar código sem servidores, a possibilidade de escalar sem complicação e automaticamente e não pagar nada quando não estiver usando os recursos (IBM, 2020b). Aplicar esse conceito na prática para back-end de aplicativos móveis é interessante. Diante disso, a IBM apresenta um caso de uso da empresa Weather Gods. Conforme a Figura 27, o cliente faz uma requisição ao Gateway de API do provedor e logo após acessa o Cloud Functions para executar o código fonte e enviar uma notifi cação ao dispositivo móvel do usuário. FONTE: <https://cloud.ibm.com/functions/>. Acesso em: 29 set. 2020. FIGURA 27 – FLUXO DE USO DO IBM FAAS EM PRA BACK-END MÓVEL O painel da IBM é bem completo para a criação das funções como serviço, veja na Figura 28 com é possível cadastrar uma função, basta escolher o nome da função, o pacote e o ambiente em que o código vai rodar. TÓPICO 3 — FUNÇÃO COMO SERVIÇO (FAAS) 143 FONTE: <https://www.codechain.com.br/wp-content/uploads/2019/02/image-42.png>. Acesso em: 29 set. 2020. FONTE: <https://www.codechain.com.br/wp-content/uploads/2019/02/image-43.png>. Acesso em: 29 set. 2020. FIGURA 28 – CADASTRANDO UMA FUNÇÃO NO IBM CLOUD FUNCTIONS FIGURA 29 – CODIFICANDO UMA FUNÇÃO NO IBM CLOUD FUNCTIONS Na Figura 29 é apresentada a tela com a codifi cação de uma função node. js em uma função que envia uma mensagem via WhatsApp. A simplifi cação do processo de construção da infraestrutura é muito relevante. 144 UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) Ao criar uma conta na IBM Cloud você tem acesso ao recurso de FaaS. A precificação pode ser consultada no link a seguir: https://cloud.ibm.com/functions/learn/ pricing. E adocumentação completa você pode consultar no link: https://cloud.ibm.com/ docs/openwhisk. DICAS https://cloud.ibm.com/functions/learn/pricing https://cloud.ibm.com/functions/learn/pricing TÓPICO 3 — FUNÇÃO COMO SERVIÇO (FAAS) 145 LEITURA COMPLEMENTAR SAAS, BAAS, FAAS… O QUE VEM A SEGUIR? Henrique Augusto Como parte das ações que integram a transformação digital, grandes empresas buscam diminuir os gastos com infraestrutura migrando a que possuem localmente (on-premise) para aquela que é entendida como um serviço - realidade proporcionada pela computação em nuvem. Como consultor na área, é possível afirmar que esse processo elimina toda a ociosidade dos sistemas locais, que normalmente costuma ser de 30% a 50% da capacidade instalada. A cloud computing que me refiro não é a mais comumente conhecida e adotada, embarcada em um servidor. Uma nova tendência para otimizar ainda mais a base tecnológica, principalmente para empresas que possuem oscilação no uso - como é o caso de grandes redes de e-commerce e startups que precisam de escalabilidade global - é a adoção do serverless (sem servidor, em inglês). Em 2017, a novidade já tinha sido destacada em pesquisas do Gartner como uma das realidades a serem empregadas no segmento enterprise na próxima década. O futuro chegou mais rápido do que se esperava e hoje grandes organizações já adotam esse tipo de estrutura, como Snapchat, Netflix e Spotify. A evolução da nuvem não é só a de Infrastructure as a Service (IaaS), mas Back-end as a Service (BaaS) e Function as a Service (FaaS). Ao adotar esses dois últimos conceitos, conseguimos otimizar ao extremo a base tecnológica de empresas que estão em processo de escalabilidade e veem a demanda por recursos oscilar bastante. Se sua empresa for iniciar hoje o desenvolvimento de uma solução nova, não há dúvida que o conceito serverless é a melhor alternativa, inclusive se ela não precisa de escalabilidade nem sofre variação de consumo. Dessa forma, o desenvolvimento sem servidor é mais rápido, já que os programadores só precisam focar em codificar sua solução, e não mais com infraestrutura. Um ponto muito importante de ressaltar é que estamos falando de desenvolvimento serverless, mas entre a "antiga" virtualização on-premise e o serverless ainda existe um grande passo: o de migrar a infraestrutura virtualizada para a nuvem. Em seguida avançamos para automatização da gestão dessa infra virtualizada, ou seja, ao mesmo tempo que já temos novas tecnologias totalmente automatizadas 95% da infraestrutura das grandes empresas ainda estão virtualizadas on-premise. 146 UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) Se a sua organização já desenvolveu o produto com tecnologia antiga, ela precisará ser redesenhada para possuir o conceito serverless. Ou seja: invariavelmente haverá, no futuro, um investimento de recursos financeiros e humanos que ficarão dedicados a refactory (refazer) sua solução com essa nova tecnologia. FONTE: <https://administradores.com.br/noticias/iaas-baas-faas-o-que-vem-a-seguir>. Acesso em: 24 set. 2020. 147 RESUMO DO TÓPICO 3 Neste tópico, você aprendeu que: • As Funções como Serviço (FaaS) podem ser compreendidas como sendo um modelo de execução computacional orientado a eventos, no qual, funções gerenciam a lógica e o estado no lado do servidor, utilizado como serviços. • FaaS é um modelo de serviço de computação em nuvem, o qual permite a execução de código em resposta a eventos, sem necessidade da infraestrutura que normalmente é utilizada para criação e publicação de softwares. • No modelo do FaaS, o hardware físico, o sistema operacional da VM e o gerenciamento de software do servidor são todos gerenciados pelo provedor da nuvem e não pelo cliente (desenvolvedor). • O desenvolvimento de lógica de negócios, sem servidor, é realizado através da execução em contêineres Linux gerenciados pela plataforma, como a Amazon Web Services (AWS) ou Microsoft Azure, por exemplo. • A possibilidade de as aplicações serem escaladas horizontalmente e gerenciadas pela própria plataforma provedora de serviço possibilita um melhor desempenho e disponibilidade do software. • Na arquitetura orientadaa funções ou eventos, é importante analisar o limite de tempo de execução de uma função, pois é necessário que uma função seja algo que possa ser iniciado e executado rapidamente. • Na arquitetura FaaS, caso existam várias solicitações simultâneas por parte da aplicação solicitante a serem processadas por uma determinada função, automaticamente são criadas novas instâncias para processamento das funções, atendendo à demanda. 148 Ficou alguma dúvida? Construímos uma trilha de aprendizagem pensando em facilitar sua compreensão. Acesse o QR Code, que levará ao AVA, e veja as novidades que preparamos para seu estudo. CHAMADA • Um dos benefícios da arquitetura FaaS é a escalabilidade, em que caso o sistema necessite executar 100 solicitações em paralelo, quem cuidará disso é o provedor, sem nenhuma configuração por parte do desenvolvedor. • Outro benefício da arquitetura FaaS é a empresa que desenvolve o software pagar apenas pelo que consumir do provedor, não sendo pago recursos ociosos de servidor. 149 1 O desenvolvimento de software possui muitos requisitos e trabalho por parte da equipe de desenvolvimento, porém, existem tecnologias que facilitam o trabalho. Uma destas tecnologias é a arquitetura FaaS, modelo de execução computacional orientado a eventos. Referente a Funções como Serviço (FaaS), assinale a alternativa CORRETA: a) ( ) Através da utilização de FaaS, o hardware físico, o sistema operacional da máquina virtual e o software do servidor são gerenciados pelo provedor da nuvem. b) ( ) É um serviço de computação física que permite a execução de código em resposta a eventos com infraestrutura de servidor física, a qual fica sob gerenciamento da equipe de desenvolvimento. c) ( ) É um serviço de computação física que permite a execução de código em resposta a requisições de softwares de terceiros, no qual existe a exigência de infraestrutura de servidor física para publicação de softwares. d) ( ) Através da arquitetura FaaS, é possível realizar a execução de código fonte no servidor, sem necessidade de gerenciamento de software do servidor pelo desenvolvedor, porém não existe escalabilidade automática para altas demandas do software. 2 Através da computação sem servidor, desenvolvedores escrevem a lógica de negócios, que é executada em contêineres Linux, gerenciados por uma plataforma, como Amazon Web Services (AWS) ou o Microsoft Azure, por exemplo. Nesse sentido, assinale a alternativa CORRETA: a) ( ) Uma das desvantagens da arquitetura FaaS é a empresa desenvolvedora pagar o custo de recursos ociosos, não utilizados por suas aplicações. b) ( ) Uma das principais vantagens da arquitetura FaaS é garantir que não haja sobrecarga por altas demandas de requisições. c) ( ) Uma das desvantagens da arquitetura FaaS é a não existência de alta escalabilidade. d) ( ) Apesar das várias vantagens em se utilizar a arquitetura FaaS, a desvantagem é a redução da produtividade gerada por parte da equipe de desenvolvimento de software, pois esta precisa gerenciar softwares no servidor em nuvem. 3 O desenvolvimento de software possui várias tarefas e, em muitos casos, uma delas é a configuração e gerenciamento de softwares no servidor, para acompanhamento dos softwares desenvolvidos. A arquitetura FaaS facilita o trabalho da equipe de desenvolvimento. Nesse sentido, assinale a alternativa CORRETA: AUTOATIVIDADE 150 a) ( ) No FaaS, com a demanda de solicitações para a aplicação sendo reduzida, os recursos de infraestrutura de servidor permanecem em uso, isto é, não são reduzidos. b) ( ) O escalamento dinâmico não é um benefício do FaaS, mas provedores de nuvem podem oferecer serviços deste tipo e cobrar por eles. c) ( ) O FaaS permite o escalamento horizontal, promovendo eficiência para as aplicações. d) ( ) Com o FaaS, a equipe de desenvolvimento se preocupa apenas com os softwares do servidor, os quais executam as aplicações. 4 Na arquitetura em nuvem de computação, muitos recursos que, no desenvolvimento de software, dependiam de uma infraestrutura de servidor local, não são mais necessários, assim como o gerenciamento desses recursos por parte da equipe de desenvolvimento. Nesse sentido, assinale a alternativa CORRETA: a) ( ) Nos modelos de arquitetura IaaS e PaaS, a equipe de desenvolvimento de software é apenas na questão de sistemas operacionais e questões de armazenamento e virtualização. b) ( ) No modelo de arquitetura IaaS, a equipe de desenvolvimento de software é responsável apenas pelo código fonte da aplicação, não sendo responsável por gerenciamento de recursos de servidor. c) ( ) No modelo de arquitetura PaaS, a equipe de desenvolvimento de software é responsável apenas pelo código fonte da aplicação e pelo gerenciamento de sistema operacional e questões de armazenamento. d) ( ) No modelo de arquitetura FaaS, a equipe de desenvolvimento de software é responsável apenas pelo código fonte da aplicação, não sendo responsável por gerenciamento de recursos de servidor. 5 Através do FaaS, a plataforma de nuvem disponibiliza todos os recursos necessários para que a equipe de desenvolvimento de software tenha um ambiente pronto, focando apenas nas regras de negócio da solução a ser desenvolvida. Apesar disso, assim como outras arquiteturas de computação, existem vantagens e desvantagens. Nesse sentido, assinale a alternativa CORRETA: a) ( ) Dentre as desvantagens da utilização do FaaS, podem ser citadas a duração do tempo de execução, a falta de escalabilidade e a latência de inicialização. b) ( ) Dentre as vantagens da utilização do FaaS, podem ser citadas a escalabilidade e os custos de servidor, sendo pagos apenas os recursos utilizados, não havendo pagamento de recursos ociosos. c) ( ) Dentre as desvantagens da utilização do FaaS, podem ser citadas a duração do tempo de execução, a falta de escalabilidade e a falta de recursos de segurança. d) ( ) Dentre as vantagens da utilização do FaaS, podem ser citadas a duração do tempo de execução, a escalabilidade, embora a desvantagem seja a falta de recursos de segurança. 151 REFERÊNCIAS AKIWATKAR, R. How serverless will facilitate the growth of big data applications? Datafloq, Haia, 12 dez. 2018. Disponível em: https://datafloq.com/ read/how-serverless-will-facilitate-growth-big-data/5824. Acesso em: 31jul. 2020. AWS. AWS lambda. c2020. Disponível em: https://aws.amazon.com/pt/lambda/. Acesso em: 31 jul. 2020. BATSCHINSKI, G. Back-end as a service: prós e contras. InfoQ, São Paulo, jul. 2016. Disponível em: https://www.infoq.com/br/news/2016/07/backend-pros-e- contras/. Acesso em: 25 set. 2020. BATSCHINSKI, G. BaaS vs PaaS: qual é a melhor opção? Back4App Blog, [S. l.], 3 nov. 2019. Disponível em: https://medium.com/@george_51059/BaaS-vs-PaaS- bce0079232ec. Acesso em: 25 set. 2020. CHANDRASEKARAN, K. Essentials of cloud computing. Boca Raton: CRC Press, 2015. seus-trabalhos/. Acesso em: 13 ago. 2020. Disponível em: https:// keyhannet.com/wp-content/uploads/2018/11/K.-Chandrasekaran-Essentials-of- Cloud-Computing-2014-Chapman-and-Hall_CRC.pdf. Acesso em: 13 ago. 2020. CREESE, G. SaaS vs. software: the release cycle for saas is usually (not always) faster. Gartner Blog, [S. l.], 18 maio 2010. Disponível em: https://blogs.gartner. com/guy-creese/2010/05/18/saas-vs-software-the-development-cycle-for-saas-is- usually-not-always-faster/. Acesso em: 13 ago. 2020. GODSE, M., MULIK, S. An approach for selecting software-as-a-service (SaaS) product. In: IEEE INTERNATIONAL CONFERENCE ON CLOUD COMPUTING, 2., 2009, Bangalore. Proceedings […]. Bangalore: IEEE Computer society, 2009. Disponível em: http://barbie.uta.edu/~hdfeng/CloudComputing/ cloud/cloud29.pdf. Acesso em: 13 ago. 2020. GOOGLE. Cloud Functions. c2020. Disponível em: https://cloud.google.com/ functions. Acesso em: 31 jul. 2020. IBM. Introdução ao IBM Cloud Functions. IBM, [S. l.], 23 jun. 2020a. Disponível em: https://cloud.ibm.com/docs/openwhisk.Acesso em: 31 jul. 2020. IBM. IBM Cloud Functions. c2020. Disponível em: https://cloud.ibm.com/ functions/. Acesso em: 31 jul. 2020. IBM Cloud Education. FaaS (function-as-a-service). IBM Cloud Learn Hub, New York, 30 jul. 2019. Disponível em: https://www.ibm.com/cloud/learn/faas. Acesso em: 14 ago. 2020. https://datafloq.com/read/how-serverless-will-facilitate-growth-big-data/5824 https://datafloq.com/read/how-serverless-will-facilitate-growth-big-data/5824 https://cloud.google.com/functions https://cloud.google.com/functions https://cloud.ibm.com/docs/openwhisk?topic=openwhisk-faas&locale=pt-BR https://www.ibm.com/cloud/learn/faas 152 UNIDADE 2 — SERVERLESS, BACK-END AS SERVICE (BAAS) E FUNÇÃO COMO SERVIÇO (FAAS) JUNIOR, C. V. Whatsapp com Twilio e IBM Functions – parte 1. Codechain, Rio de Janeiro, 20 fev. 2019. Disponível em: https://www.codechain.com. br/2019/02/20/ibm-cloud-alem-do-watson-whatsapp-gateway-100-serverless/. Acesso em: 31 jul. 2020. MAISON, A. How to deploy an apps in AWS serverless infrastructure with FaaS? SMARTSPATE, [S. l.], 30 ago. 2018. Disponível em: https://www. smartspate.com/deploy-an-apps-in-aws-serverless/. Acesso em: 31 jul. 2020. MICROSOFT. Funções do Azure. c2020. Disponível em: https://azure.microsoft. com/pt-br/services/functions/. Acesso em: 31 jul. 2020. MISHRA, A. Mastering azure serverless computing: design and implement end- to-end highly scalable azure serverless solutions with ease. New Delhi, India: BPB Publications. 2020. ISBN: 978-93-89898-163. NG, D. SaaS, PaaS and IaaS explained in one graphic. Oursky, [S. l.], 12 jul. 2017. Disponível em: https://m.oursky.com/saas-PaaS-and-iaas-explained-in- one-graphic-d56c3e6f4606. Acesso em: 25 set. 2020. REDHAT. O que é função como serviço (FaaS). Red Hat, Aplicações Nativas em nuvens, [S. l.], c2020. Disponível em: https://www.redhat.com/pt-br/topics/ cloud-native-apps/what-is-faas. Acesso em: 31 jul. 2020. ROBERTS, M. Serverless architectures. MartinFowler.com, Boston, 22 maio 2018. Disponível em: https://martinfowler.com/articles/serverless.html. Acesso em: 31 jul. 2020. STIGLER, M. Beginning serverless computing: developing with amazon web services, microsoft azure, and google cloud. Virginia, USA: Springer Science, 2018. ISBN: 978-1-4842-3084-8. STIGLER, M. Beginning serverless computing: developing with amazon web services, microsoft azure, and google cloud. Virginia, USA: Springer Science, 2017. TAURION, C. Computação em nuvem: transformando o mundo da tecnologia da informação. Rio de Janeiro: Brasport, 2009. WU, C. Web services: software-as-a-service (SaaS), communication, and beyond. In: CONGRESS ON SERVICES, 2., 2008, Beijing. Proceedings […]. Beijing: IEEE, Computer Society, 2008. https://www.smartspate.com/deploy-an-apps-in-aws-serverless/ https://www.smartspate.com/deploy-an-apps-in-aws-serverless/ 153 UNIDADE 3 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO OBJETIVOS DE APRENDIZAGEM PLANO DE ESTUDOS A partir do estudo desta unidade, você deverá ser capaz de: • expressar a diferença entre contêiner e imagem; • avaliar as vantagens em utilizar um contêiner em seu projeto; • conhecer o conceito das plataformas de CaaS; • entender o conceito de versionamento e sua aplicação em desenvolvi- mento e recursos em nuvem. Esta unidade está dividida em três tópicos. No decorrer da unidade você encontrará autoatividades com o objetivo de reforçar o conteúdo apresentado. TÓPICO 1 – CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO TÓPICO 2 - CONTÊINER COMO SERVIÇO - (CAAS) TÓPICO 3 – VERSIONAMENTO E DEPLOY EM NUVEM Preparado para ampliar seus conhecimentos? Respire e vamos em frente! Procure um ambiente que facilite a concentração, assim absorverá melhor as informações. CHAMADA 154 155 UNIDADE 3 1 INTRODUÇÃO Dando continuidade aos nossos estudos, vamos apresentar o conceito de Contêiner e como ele suporta o desenvolvimento de aplicações, bem como a ferramenta Docker e boas práticas para a criação de contêineres. Talvez, poucas áreas de estudos tenham tanta evolução em tão pouco tempo quanto a área de tecnologia. Essas mudanças acabam ditando o ritmo de trabalho em diversos setores. Graças a essas evoluções, foram permitidas mudanças nas formas de trabalho, como a mudança para o cenário de trabalho remoto, conhecido como home office. Agora, imagine quanto trabalho o setor de tecnologia das organizações teria para configurar as máquinas de todos os funcionários que tiveram que se adequar a essa nova realidade, ou baixar uma nova versão de um produto que acabou de ser desenvolvido. Vamos conhecer algumas ferramentas que podem auxiliar nessa tarefa, começando com os contêineres. 2 CONCEITOS É bem provável que você já tenha visto um contêiner, eles são uma caixa de metal bastante resistente, utilizados, normalmente, para transporte de produtos em navios ou em caminhões. Semelhante aos contêineres que são utilizados para transporte de produtos, os contêineres na área de tecnologia agem como uma unidade de software padrão, e que, segundo a Microsoft (2018, s.p.), “pode conter diferentes dependências e códigos”. Inserir o software em contêineres permite que desenvolvedores e profissionais de TI os implantem em diferentes ambientes com pouca ou sem nenhuma modificação. TÓPICO 1 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO Na literatura existe o uso das duas formas, do inglês container ou do português contêiner. ATENCAO UNIDADE 3 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO 156 2.1 INTRODUÇÃO AOS CONTÊINERES Você pode estar curioso e se perguntando, por que o nome Contêiner? Se Contêiner nada mais é do que um ambiente isolado contido em um servidor que, diferentemente das máquinas virtuais, divide um único host de controle. Para contextualizar melhor, vamos imaginar um navio cargueiro com vários contêineres dentro. Se um dos recipientes se danificar, não afetará os outros ou o navio, pois cada um está isolado e protegido. FIGURA 1 - CONTÊINER FONTE: Adaptado de <https://m.media-amazon.com/images/I/51M7z3fWLTL.jpg>. Acesso em: 20 out. 2020. Esse isolamento de contêiner, trazendo de volta para o mundo do desenvolvimento, possibilita uma utilização limitada do HD, memória RAM e processador. Ao utilizar um tipo de compartilhamento de kernel, os contêineres apresentam uma capacidade de economia de recursos maior do que as máquinas virtuais. Apenas para lembrar como era o trabalho desenvolvido pelas equipes de tecnologia, antes das máquinas virtuais, o processo era um pouco mais complicado: Por muitos anos, o software corporativo tem sido implantado em “bare metal” (instalado em um sistema operacional que possui controle total sobre o hardware subjacente) ou em uma máquina virtual (instalada em um sistema operacional que compartilha o hardware subjacente com outros sistemas operacionais “guest”). Naturalmente, instalar em hardware simples tornou o software dolorosamente difícil de movimentar e difícil de atualizar - duas restrições que dificultaram que a TI reagisse com agilidade às mudanças nas necessidades de negócios (YEGULALP, 2018, s.p.). https://m.media-amazon.com/images/I/51M7z3fWLTL.jpg TÓPICO 1 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO 157 FIGURA 2 - MÁQUINAS VIRTUAIS X CONTÊINER QUADRO 1 - COMPONENTES DA ARQUITETURA DOCKER FONTE: <http://javaquan.com/file/image/20190321/2019032110000878710908.PNG>. Acesso em: 20 out. 2020. Agora que vimos um breve comparativo entre os Dockers e as máquinas virtuais, vamos conhecer alguns componentes que fazem parte da sua arquitetura. Componente Utilização Docker para Mac, Linux e Windows Versões que permitem instalar e executar contêineres nos sistemas operacionais de forma isolada. Docker Daemon Software que roda na máquina onde o Docker está instalado. Usuário não interage diretamente com o daemon. Docker Client CLI ou REST API que aceita comandos do usuário e repassa estes comandos ao Docker daemon. Docker Image É um template. Uma imagemcontém todos os dados e metadados necessários para executar contêineres a partir de uma imagem. Docker Contêiner Detém tudo que é necessário para uma aplicação ser executada. Cada contêiner é criado a partir de uma imagem. Cada contêiner é uma aplicação isolada independente. Docker Engine Usado para criar imagens e contêineres. Docker Registry Uma coleção de imagens hospedadas e rotuladas que juntas permitem a criação do sistema de arquivos de um contêiner. Um registro pode ser público ou privado. http://javaquan.com/file/image/20190321/2019032110000878710908.PNG UNIDADE 3 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO 158 Docker Hub Este é um registro usado para hospedar e baixar diversas imagens. Pode ser visto como uma plataforma SAAS de compartilhamento e gerenciamento de imagens. Dockerfile Um arquivo texto contendo uma sintax simples para criação de novas imagens. Docker Compose Usado para definir aplicações usando diversos contêineres. Docker Swarm É uma ferramenta que permite o agrupamento (clustering) de Contêineres Docker FONTE: Adaptado de Moll (2019) Moll (2019) apresenta é um breve resumo do que pode ser realizado. Para conhecer melhor cada um deles, acesse: https://docs.docker.com/engine/. DICAS 2.2 QUANDO USAR DOCKER Semelhante a todas as áreas de sistemas, não existe uma bala de prata que irá resolver todos os problemas. Gomes (2020) aponta alguns bons motivos para sua utilização. Como no caso de ambientes semelhantes, Gomes (2020, p. 11) afirma que “uma vez que sua aplicação seja transformada em uma imagem Docker, ela pode ser instanciada como contêiner em qualquer ambiente que desejar”. Ou seja, ela poderá ser utilizada tanto em notebook do desenvolvedor ou no servidor de produção. Outra indicação de uso é no caso da aplicação como pacote completo, conforme define Gomes (2020, p. 11): Utilizando as imagens Docker é possível empacotar toda sua aplicação e dependências, facilitando a distribuição, pois não será mais necessário enviar uma extensa documentação explicando como configurar a infraestrutura necessária para permitir a execução, basta disponibilizar a imagem em repositório e liberar o acesso para o usuário e, ele mesmo pode baixar o pacote, que será executado sem problemas. Essa vantagem, não se aplica somente no momento da aplicação ou instalação, ela também pode ser vantajosa na atualização, “pois a estrutura de camadas do Docker viabiliza que, em caso de mudança, apenas a parte modificada seja transferida e assim o ambiente pode ser alterado de forma mais rápida e simples” (GOMES, 2020, p. 12). TÓPICO 1 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO 159 Conheça mais a respeito do termo bala de prata, muito utilizado em engenharia de software, em: https://iopub.org/n%C3%A3o-h%C3%A1-bala-de-prata-para- o-desenvolvimento-de-software-5c6e73ecd28c. DICAS 3 TRABALHANDO COM OS CONTÊINERES Como vimos, existem inúmeras vantagens para trabalharmos com contêiner, e você já deve estar ansioso para pôr a mão na massa. Antes de começar, é importante ressaltar que para a execução do modelo apresentado são necessárias algumas confi gurações mínimas, e que isso pode variar e mudar conforme as versões dos produtos evoluem. Segundo Damaceno (2019), para a execução desse exemplo precisamos do Windows 10, versão Pro, Enterprise ou Education e X64. Você também precisa que a Virtualização da sua máquina esteja habilitada, para isso você deve ir ao gerenciador de tarefas, clicar na aba “desempenho”, que por padrão já aparece habilitada, conforme vemos na Figura 3, indicado pelas setas. FIGURA 3 - CONFIGURANDO FONTE: O autor UNIDADE 3 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO 160 Veja como criar no Ubuntu: https://woliveiras.com.br/posts/Criando-uma- imagem-Docker-personalizada. Para o download do Docker para Windows, acesse o endereço: https:// download.docker.com/win/beta/InstallDocker.msi. DICAS DICAS Você pode estar curioso com relação às diferenças entre um e outro. Damaceno (2019, s.p.) explica a diferença entre o “Docker for Windows” e o “Docker toolbox”: É que, no primeiro caso, utilizamos o terminal nativo do Windows. Já no segundo, ele instalará o Docker machine que deverá ser utilizado no lugar do terminal nativo. Para instalar, é necessário criar uma conta no docker hub e seguir os passos para a instalação, autorize o instalador. Depois de fazer o login, habilite o Hyper-v clicando em “Ok” e, com isso, o computador será reiniciado. Continuando com nosso exemplo, após a instalação do seu Docker, vamos confirmar se está mesmo instalado, abra seu terminal do windows (powershell ou cmd) e escreva o seguinte comando: docker - -version Depois de entender a arquitetura e ter realizada a instalação, vamos entender como funciona a estrutura da linha de comando. Para utilizar o docker, deve-se informar a ele as opções e argumentos da seguinte forma: $ docker [option] [command] [arguments] E para conhecer as opções adicionais com relação a um comando específico, basta digitar: $ docker subcomando –help Vejamos a lista dos comandos mais utilizados: https://download.docker.com/win/beta/InstallDocker.msi https://download.docker.com/win/beta/InstallDocker.msi TÓPICO 1 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO 161 Comando O que executa info Exibir informações de todo o sistema inspect Retorne informações de baixo nível sobre um contêiner ou imagem kill Mate um contêiner em execução load Carregar uma imagem de um arquivo tar ou STDIN login Faça login em um registro do Docker logout Saia de um registro do Docker logs Buscar os registros de um contêiner network Gerenciar redes Docker pause Pausar todos os processos em um contêiner port Listar mapeamentos de portas ou um mapeamento específico para o CONTÊINER ps Contêineres de lista pull Extraia uma imagem ou repositório de um registro push Envie uma imagem ou repositório para um registro rename Renomear um contêiner restart Reinicie um contêiner rm Remova um ou mais recipientes rmi Remova uma ou mais imagens run Execute um comando em um novo contêiner save Salve uma ou mais imagens em um arquivo tar search Pesquise imagens no Docker Hub start Inicie um ou mais contêineres parados stats Exibir uma transmissão ao vivo de estatísticas de uso de recursos de contêineres stop Pare um contêiner em execução tag Marque uma imagem em um repositório top Exibir os processos em execução de um contêiner unpause Retome todos os processos em um contêiner update Atualizar configuração de um ou mais contêineres version Mostra as informações da versão do Docker volume Gerenciar volumes Docker wait Bloqueie até que um contêiner pare e imprima seu código de saída attach Anexar a um contêiner em execução build Construir uma imagem de um Dockerfile commit Crie uma nova imagem a partir das alterações de um contêiner cp Copie arquivos / pastas entre um contêiner e o sistema de arquivos local create Crie um novo contêiner diff Inspecione as alterações no sistema de arquivos de um contêiner QUADRO 2 - LISTA DE COMANDOS UNIDADE 3 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO 162 events Obtenha eventos em tempo real do servidor exec Execute um comando em um contêiner em execução export Exportar o sistema de arquivos de um contêiner como um arquivo tar history Mostra a história de uma imagem images Listar imagens import Importe o conteúdo de um tarball para criar uma imagem do sistema de arquivos FONTE: Adaptado de Moll (2019) É importante lembrarmos, antes de prosseguir com a criação do nosso primeiro contêiner, que, conforme Damaceno (2019, s.p.) explica, “o Docker utiliza uma ‘receita de bolo’, sendo chamada de ‘imagem’, ou seja, uma série de instruções que o Docker faz para criar um contêiner”. Caso você queira uma pronta, pode acessar o repositório open source chamado Docker hub. Continuando com o exemplo, sempre que formos criar um contêiner, utilizaremos a sintaxe: docker run imagem (imagem que queremos que ele utilize) Exemplo,se eu quiser criar um contêiner com Node: >> docker run node Depois, podemos conferir se ele foi criado com sucesso: >> docker ps -a Além disso, existem dois tipos de comandos que podem ser utilizados para listar os contêineres: • docker ps: que irá exibir todos os contêineres ativos; • docker ps -a: que irá exibir todos os contêineres criados. Chegou o momento, e vamos começar a criar uma aplicação, segundo modelo proposto por Moll (2019). Suponhamos que você queira criar uma aplicação que possua todas as dependências do Node.js já instalados, sem instalar as dependências manualmente ou diretamente em sua máquina. Usando Docker, você pode fazer isso de maneira isolada com alguns comandos declarados no arquivo de configuração. Isso se chama “Dockerfile”. TÓPICO 1 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO 163 Leia o artigo O que é Kubernets?Tudo o que você precisa aprender sobre!. Disponível em: https://blog.geekhunter.com.br/kubernetes-a-arquitetura-de-um-cluster/. DICAS Vamos começar vendo o exemplo de conteúdo de um Dockerfile: FIGURA 4 - DOCKFILE FIGURA 5 - ARQUIVO APP.JS FONTE: Moll (2019, s.p.). FONTE: Moll (2019, s.p.). Se olharmos para o arquivo app.js que define uma aplicação básica em Node.js e express, nós teremos: UNIDADE 3 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO 164 Agora que já defi nimos nossa aplicação em app.js e já temos nosso Dockerfi le, vamos criar uma imagem para poder rodar nossa aplicação e realizar o deploy na imagem que será carregada no contêiner. Vamos criar uma imagem executando o comando, em que a opção -t serve para informarmos uma tag para a imagem que estamos criando: $ docker build -t vmoll/nodejs-image-demo Feito isso, seguindo o modelo proposto por Moll (2019), já será possível rodar a aplicação utilizando o seguinte comando: $ docker run -it -p 3000:3000 -h instance-hostname --rm --name nodejs- image-demo vmoll/nodejs-image-demo:latest Perceba que no comando que acabamos de executar informamos -p . 3000:3000. Esse comando, segundo Moll (2019, s.p.), “é responsável por realizar o bind ou vinculação da porta local para uma porta externa do serviço, que será disponibilizado na máquina que está hospedando a aplicação”. Agora já podemos ver a aplicação funcionando, basta inserir htt p://localhost:3000 e receberá a mensagem “Hello Geeks!”, conforme Figura 6: FIGURA 6 - PRIMEIRO EXEMPLO FONTE: Moll (2019, s.p.). Você pode criar uma conta no GitHub e ter acesso a vários outros exemplos, como o código da aplicação de exemplo, juntamente ao seu Dockerfi le. Acesse: • https://github.com/vmoll/geekhunter-docker-nodejsapp; • https://github.com/docker/labs; DICAS TÓPICO 1 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO 165 O exemplo apresentado por Moll (2019) é uma aplicação bem simples, para ilustrar como é possível realizar o deploy na imagem que criamos. Agora, vamos ao nosso foco principal, que é a criação e execução de contêineres usando Docker. Se você deseja criar uma aplicação completa, você pode utilizar algum gerador, como o express-generator. Para isso, execute os seguintes comandos e após abra uma janela do browser em: http://localhost:3000. $ npm install express-generator -g $ express minhaAplicacao $ cd minhaAplicacao $ npm install $ npm start Como todo desenvolvimento, é necessário seguirmos algumas dicas de boas práticas para aumentar a qualidade do nosso trabalho. Vejamos algumas propostas pelo site Docker (2020). BOAS PRÁTICAS NA CONSTRUÇÃO O Docker constrói imagens automaticamente lendo as instruções de um Dockerfile, que nada mais é do que um arquivo de texto que irá armazenar todos os comandos necessários para a criação da determinada imagem. Um Dockerfile segue um formato específico e um conjunto de instruções que você pode encontrar na referência do Dockerfile. Detalhando um Dockerfile Comando Significado FROM ubuntu:18.04 FROM cria uma camada da ubuntu:18.04imagem Docker. COPY. /app COPY adiciona arquivos do diretório atual do seu cliente Docker. RUN make /app RUN constrói seu aplicativo com make. CMD python /app/app.py CMD especifica qual comando executar dentro do contêiner. QUADRO – ANALISANDO UM DOCKERFILE FONTE: Adaptado de Docker (2020) UNIDADE 3 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO 166 Ao executar uma imagem e gerar um contêiner, você adiciona uma nova camada gravável (a “camada do contêiner”) no topo das camadas subjacentes. Todas as alterações feitas no contêiner em execução, como gravar novos arquivos, modificar arquivos existentes e excluir arquivos, são gravadas nesta camada de contêiner gravável. Por isso, a imagem definida por seu Dockerfile deve gerar contêineres tão efêmeros quanto possível. Por "efêmero", queremos dizer que o contêiner pode ser interrompido e destruído e, em seguida, reconstruído e substituído com um mínimo absoluto de instalação e configuração. Essas recomendações foram elaboradas para ajudá-lo a criar um ambiente eficiente e sustentável Dockerfile. FROM: sempre que possível, use imagens oficiais atuais como base para suas imagens. Recomendamos a imagem Alpine (https://hub.docker.com/_/ alpine/) porque é rigidamente controlada e pequena em tamanho (atualmente menos de 5 MB), embora ainda seja uma distribuição Linux completa. LABEL: você pode adicionar rótulos a sua imagem para ajudar a organizar imagens por projeto, registrar informações de licenciamento, para auxiliar na automação ou por outros motivos. Para cada rótulo, adicione uma linha começando com LABEL e com um ou mais pares de valores-chave. Os exemplos a seguir mostram os diferentes formatos aceitáveis. Como as Strings com espaços, que devem ser colocados entre aspas ou os espaços devem ser escapados. Caracteres de aspas internas (“) também devem ser escapados. Vejamos os exemplos: Com um ou vários Labels simples: LABEL com.example.version="0.0.1-beta" LABEL vendor1="ACME Incorporated" LABEL vendor2=ZENITH\ Incorporated LABEL com.example.release-date="2015-02-12" LABEL com.example.version.is-production="" A imagem pode ter mais de um rótulo composto, pode ser feito de duas formas, sendo que a primeira era obrigatória até a versão 1.1: LABEL com.example.version="0.0.1-beta" com.example.release- date="2015-02-12" Nas novas versões, o texto citado também pode ser escrito com a utilização de quebras de linha: https://hub.docker.com/_/alpine/ https://hub.docker.com/_/alpine/ TÓPICO 1 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO 167 LABEL vendor=ACME\ Incorporated \ com.example.is-beta= \ com.example.is-production="" \ com.example.version="0.0.1-beta" \ com.example.release-date="2015-02-12" RUN: ele serve para dividir instruções longas ou complexas em várias linhas separadas por barras invertidas, o que servirá para deixar o Dockerfile mais legíveis, compreensíveis e fáceis de manter. APT-GET: provavelmente, o caso de uso mais comum para RUN é um aplicativo de apt-get para a instalação de pacotes. Entretanto, o comando tem várias dicas a serem observadas, como evitar o uso de RUN apt-get upgrade e dist-upgrade. Esso acontece porque muitos dos pacotes "essenciais" das imagens pai não podem atualizar dentro de um contêiner sem privilégios. Se um pacote contido na imagem pai estiver desatualizado, entre em contato com o responsável. Se você souber que existe um pacote específico foo, que precisa ser atualizado, use apt-get install -y foo para atualizar automaticamente. Outra dica é sempre combine RUN apt-get update com apt-get install na mesma RUN, como no exemplo: RUN apt-get update && apt-get install -y \ package-bar \ package-baz \ package-foo Usar apt-get update sozinho em uma instrução RUN causa problemas de cache e as instruções apt-get install subsequentes falham. Por exemplo, digamos que você tenha um Dockerfile: FROM ubuntu:18.04 RUN apt-get update RUN apt-get install -y curl USANDO PIPES Alguns comandos RUN dependem da capacidade de canalizar a saída deum comando para outro, usando a barra vertical ( | ), como no exemplo a seguir: RUN wget -O - https://some.site | wc -l > /number O Docker executa esses comandos usando o interpretador /bin/ sh -c, que avalia apenas o código de saída da última operação no pipe para determinar o sucesso. No exemplo, essa etapa de construção é bem-sucedida e produz uma nova imagem, desde que o comando wc -l seja bem-sucedido, mesmo se o comando wget falhar. UNIDADE 3 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO 168 Se você quer que o comando falhe devido a um erro em qualquer estágio do pipe, inclua o prefixo set -o pipefail &&. Isso irá garantir que um erro inesperado evite que a construção seja acidentalmente concluída. Vejamos o exemplo: RUN set -o pipefail && wget -O - https://some.site | wc -l > /number CMD: a instrução CMD deve ser usada para executar o software contido em sua imagem, junto a quaisquer argumentos. Esse comando quase sempre deve ser usado na forma de CMD ["executable", "param1", "param2"…]. Portanto, se a imagem for para um serviço, como Apache e Rails, você executaria algo como CMD ["apache2","-DFOREGROUND"]. Na verdade, essa forma de instrução é recomendada para qualquer imagem baseada em serviço. Na maioria dos outros casos, o CMD deve ser recebido um shell interativo, como bash, python e perl. Por exemplo, CMD ["perl", "-de0"], CMD ["python"], ou CMD ["php", "-a"]. Ao utilizar desta forma, significa que, ao executar algo como docker run -it python, você será colocado em um shell utilizável, pronto para usar. Os CMD raramente deve ser usado na forma de CMD ["param", "param"] em conjunto com o ENTRYPOINT, a menos que você e seus usuários esperados já estejam bastante familiarizados com o funcionamento ENTRYPOINT. EXPOSE: A instrução EXPOSE indica as portas nas quais um contêiner escuta as conexões. Por exemplo, uma imagem contendo o servidor da web Apache usaria EXPOSE 80, enquanto uma imagem contendo MongoDB usaria EXPOSE 27017 e assim por diante. Já para acesso externo, os usuários podem executar docker run com um sinalizador indicando como mapear a porta especificada para a porta de sua escolha. Para a vinculação do contêiner, o Docker fornece variáveis de ambiente para o caminho do contêiner do destinatário de volta à origem (ou seja, MYSQL_PORT_3306_TCP). ENV: para tornar o novo software mais fácil de ser executado, você pode usar ENV para atualizar a variável de ambiente PATH para o software que seu contêiner instala. Por exemplo, ENV PATH /usr/local/nginx/bin:$PATH garante que CMD ["nginx"] simplesmente funcione. A instrução ENV também é útil para fornecer variáveis de ambiente específicas exigidas para serviços que você deseja armazenar em contêiner, como Postgres PGDATA. Por último, o ENV também pode ser usado para definir os números de versão que comumente são usados para que as variações de versão sejam mais fáceis de manter, conforme visto no exemplo a seguir: TÓPICO 1 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO 169 ENV PG_MAJOR 9.3 ENV PG_VERSION 9.3.4 RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && … ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH Semelhante a ter variáveis constantes em um programa, ao invés de ter os valores definidos no código, essa abordagem permite alterar uma única instrução ENV, e com isso alterar automaticamente a versão do software em seu contêiner, onde cada linha ENV cria uma nova camada intermediária, assim como os comandos RUN. Isso significa que mesmo se você remover a configuração da variável de ambiente em uma camada futura, ela ainda persistirá nessa camada e seu valor não poderá ser descarregado. Você pode testar isso criando um Dockerfile como o seguinte e, em seguida, compilando-o. FROM alpine ENV ADMIN_USER="mark" RUN echo $ADMIN_USER > ./mark RUN unset ADMIN_USER $ docker run --rm test sh -c 'echo $ADMIN_USER' Mark Para evitar isso e realmente remover a definição da variável de ambiente, use um comando RUN com comandos shell para definir, usar e remover a definição da variável, tudo em uma única camada. Você pode separar seus comandos com ; ou &&. Se você usar o segundo método e um dos comandos falhar, o docker build também falhará. Geralmente é uma boa ideia usar \ como um caractere de continuação de linha para Dockerfiles Linux, isso melhora a legibilidade. Você também pode colocar todos os comandos em um script de shell e fazer com que o comando RUN apenas execute esse script de shell. FROM alpine RUN export ADMIN_USER="mark" \ && echo $ADMIN_USER > ./mark \ && unset ADMIN_USER CMD sh $ docker run --rm test sh -c 'echo $ADMIN_USER' ADD ou COPY: ADICIONE ou COPIE embora esses comandos sejam funcionalmente semelhantes, em geral, COPY é o preferido. Isso porque é mais transparente do que ADD. O comando COPY suporta apenas a cópia básica de arquivos locais no contêiner, embora ADD tenha alguns recursos. Consequentemente, o melhor uso para ADD é a extração automática do arquivo tar local para a imagem, como em ADD rootfs.tar.xz /. UNIDADE 3 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO 170 Se você tiver várias etapas no seu Dockerfile que usam arquivos diferentes do seu contexto, use o COPY individualmente, em vez de todos de uma vez. Isso garante que o cache de construção de cada etapa só seja invalidado (forçando a etapa a ser executada novamente) se os arquivos especificamente necessários forem alterados. Como no exemplo: COPY requirements.txt /tmp/ RUN pip install --requirement /tmp/requirements.txt COPY . /tmp/ Isso resulta em menos invalidações de cache para a etapa RUN, do que se você colocasse o COPY . /tmp/ antes dela. Como o tamanho da imagem é importante, usar ADD para buscar pacotes de URLs remotos é desaconselhado. Você deve usar curl ou wget em vez disso. Dessa forma, você pode excluir os arquivos de que não precisa mais depois de extraídos e não precisa adicionar outra camada à imagem. Veja o exemplo do que evitar e o que preferir: Evite Prefira ADD http://example.com/big.tar.xz /usr/src/things/ RUN tar -xJf /usr/src/things/big.tar. xz -C /usr/src/things RUN make -C /usr/src/things all RUN mkdir -p /usr/src/things \ && curl -SL http://example.com/ big.tar.xz \ | tar -xJC /usr/src/things \ && make -C /usr/src/things all Para outros itens (arquivos, diretórios) que não requerem ADD o recurso de extração automática do tar, você deve sempre usar COPY. VOLUME: a instrução VOLUME deve ser usada para expor qualquer área de armazenamento de banco de dados, armazenamento de configuração ou arquivos/pastas criados por seu contêiner docker. É muito recomendado que se use VOLUME para quaisquer partes mutáveis e/ou que possam ser reparadas pelo usuário de sua imagem. USER: se um serviço puder ser executado sem privilégios, utilize USER para mudar para um usuário não root. Comece criando o usuário e o grupo no Dockerfile, como o exemplo: RUN groupadd -r postgres && useradd --no-log-init -r -g postgres postgres. TÓPICO 1 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO 171 Considere um UID / GID explícito: Usuários e grupos em uma imagem são atribuídos a um UID / GID não determinístico em que o “próximo” UID / GID é atribuído independentemente das reconstruções da imagem. Portanto, se for crítico, você deve atribuir um UID / GID explícito. WORKDIR: Para maior clareza e confiabilidade, você deve sempre usar caminhos absolutos para o seu WORKDIR. Além disso, você deve usar em vez WORKDIR de proliferar instruções como RUN cd … && do-something, que são difíceis de ler. ONBUILD: esse comando é executado após a conclusão da compliação do Dockerfile atual. Ele executa em qualquer imagem filha derivada da imagem FROM atual. Pense no comando ONBUILD como uma instrução que o pai Dockerfile dá ao filho Dockerfile. Uma compilação do Docker executa comandos ONBUILD antes de qualquer comando em um filho Dockerfile. Ele é útil para imagens que serãoconstruídas a partir de FROM em uma determinada imagem. Por exemplo, você usaria ONBUILD para uma imagem de pilha de linguagem que constrói software de usuário arbitrário escrito nessa linguagem dentro do Dockerfile. As imagens criadas com ONBUILD devem receber uma tag separada, por exemplo: ruby:1.9-onbuild ou ruby:2.0-onbuild. Tenha cuidado ao colocar ADD ou COPY em ONBUILD. A imagem “onbuild” falhará catastroficamente se o contexto da nova construção não incluir o recurso adicionado. Adicionar uma tag separada, conforme recomendado, ajuda a mitigar isso, permitindo que o autor do Dockerfile faça uma escolha. FONTE: Adaptado de <https://docs.docker.com/develop/develop-images/dockerfile_best- -practices/#dockerfile-instructions>. Acesso em: 14 out. 2020. Veja mais dicas de como usar o RUN em: https://docs.docker.com/develop/ develop-images/dockerfile_best-practices/#dockerfile-instructions. DICAS 172 Neste tópico, você aprendeu que: • Contêiner nada mais é do que um ambiente isolado contido em um servidor, diferentemente das máquinas virtuais. • O isolamento de contêiner possibilita uma utilização limitada do HD, memória RAM e processador. • Os componentes de uma arquitetura Docker são: Docker para Mac, Linux e Windows; Docker Daemon; Docker Client; Docker Image; Docker Contêiner; Docker Engine; Docker Registry; Docker Hub; Dockerfile; Docker Compose; Docker Swarm. RESUMO DO TÓPICO 1 173 1 (DPE-RS, 2017) Considere, por hipótese, que a equipe de analistas da Defensoria Pública tenha optado pelo uso do Docker. Essa decisão foi motivada por qual fato apresentado pelo Docker? FONTE: <https://www.qconcursos.com/questoes-de-concursos/questoes/56657761-a0>. Acesso em: 20 out. 2020. a) ( ) Estar ganhando espaço como um gerenciador de máquinas virtuais no ambiente GNU/Linux e não ter bibliotecas próprias, mantendo as bibliotecas nativas utilizadas para gerenciar o LXC. b) ( ) Não utilizar Namespaces do Linux, o que permite prover espaços de trabalho isolados para os contêineres. Desta forma, quando um contêiner é criado, automaticamente é criada uma camada de isolamento para grupos de processos. c) ( ) Permitir portabilidade de contêineres. É possível criar uma imagem de toda a configuração e aplicativos instalados em um contêiner e transferi-lo para outro host que tenha um Docker previamente instalado. d) ( ) Obter o mesmo desempenho da virtualização baseada em hypervisor, em que cada contêiner é executado em seu próprio sistema operacional, o que reduz a utilização de recursos de disco, embora os contêineres utilizem mais memória. 2 (PRODEB, 2018) Atualmente, várias empresas têm utilizado a contêinerização de aplicações. Dentro dessa plataforma, como pode ser definido o termo contêiner? FONTE: <https://www.qconcursos.com/questoes-de-concursos/questoes/c0069605-8f>. Acesso em: 20 out. 2020. a) ( ) É uma estrutura para armazenamento de dados não estruturados. b) ( ) É uma forma de virtualização a nível de sistema operacional, que proporciona a capacidade de executar múltiplas aplicações (sistemas) isoladas em um único sistema operacional real. c) ( ) É uma linguagem de programação que proporciona a aplicabilidade da plataforma Docker dentro de um sistema. d) ( ) Pode ser definido como uma estrutura secundária para armazenamento das redundâncias dentro do processo de desenvolvimento de software. e) ( ) É uma estrutura de banco de dados relacionais, utilizado para o armazenamento de informações que são compartilhadas entre os projetos de uma mesma equipe. 3 (TJ-RN, 2020) Uma imagem de contêiner do Docker é um pacote de software leve, independente e executável que inclui tudo o que é necessário para executar uma aplicação. Na criação de um arquivo Dockerfile, o que faz a instrução EXPOSE? FONTE: <https://www.qconcursos.com/questoes-de-concursos/questoes/f51c785a-c6>. Acesso em: 20 out. 2020. AUTOATIVIDADE 174 a) ( ) Mapeia uma porta externa para uma porta interna à rede Docker. b) ( ) Divulga uma porta (TCP ou UDP) para os hosts externos à rede Docker. c) ( ) Expõe um serviço do contêiner para a rede Docker default. d) ( ) Documenta quais portas se pretende publicar. 4 (UFC, 2019) Dockerfile é um arquivo de texto que contém todos os comandos, em ordem, necessários para construir uma determinada imagem Docker. Sobre as instruções contidas em um Dockerfile, assinale a alternativa CORRETA: FONTE: <https://www.qconcursos.com/questoes-de-concursos/questoes/2f4ea7a3-7e>. Acesso em: 20 out. 2020. a) ( ) A instrução ENV adiciona metadados para uma imagem. b) ( ) A instrução WORKDIR permite a criação de um diretório no host em que ficam armazenados os dados do contêiner. c) ( ) A instrução EXPOSE informa ao Docker que o contêiner escuta nas portas de rede especificadas em tempo de execução. d) ( ) A instrução FROM configura qual será a aplicação principal do contêiner, sendo executada após a inicialização do contêiner. 175 UNIDADE 3 1 INTRODUÇÃO Os Containers as a Service (CaaS) são serviços em nuvem que permitem desenvolvedores de software construir, organizar, executar, dimensionar e gerenciar contêineres usando virtualização com base em contêiner (BUCHANAN, 2020). Esse tipo de serviço tem a hospedagem e implantação automatizadas de software em contêineres. Quando não é utilizado o CaaS, as equipes de desenvolvimento de software precisam implantar, gerenciar e monitorar a infraestrutura em que os contêineres são executados (BUCHANAN, 2020). É muito caro configurar e executar um PaaS ou IaaS para entrega profissional de sistemas. Eles são grandes ferramentas para evitar o custo e o tempo necessários para configurar um servidor dedicado. É realmente um pesadelo administrar um servidor dedicado não gerenciado (GHOSH, 2018). Os CaaS permitem que as equipes de desenvolvimento pensem em mais alto nível, em vez de se preocupar com o gerenciamento de infraestrutura básica. Isso proporciona às equipes de desenvolvimento mais clareza para o produto final e permite um desenvolvimento mais ágil e com maior valor entregue ao cliente (BUCHANAN, 2020). 2 CONCEITOS Um contêiner é um software empacotado com as dependências de código, tempo de execução, configuração e bibliotecas do sistema para que possa ser executado em qualquer ferramenta de hospedagem. O CaaS permite que as equipes de software implantem e escalonem rapidamente aplicativos em contêineres para infraestruturas de nuvem de alta disponibilidade (BUCHANAN, 2020). Os CaaS se diferem das Platform as a Service (PaaS), pois dependem do uso de contêineres. No entanto, o PaaS se preocupa com implantações da linguagem de programação explícita, como JAVA ou C#, enquanto os CaaS podem implantar várias pilhas por contêiner, sendo independente de amarrações técnicas (BUCHANAN, 2020). Vejamos, na Figura 7, as camadas que cada tipo de serviço oferece e a diferença entre cada uma delas. TÓPICO 2 — CONTÊINER COMO SERVIÇO (CAAS) 176 UNIDADE 3 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO FIGURA 7 – CAMADAS POR TIPO DE SERVIÇOS FONTE: <https://thecustomizewindows.com/wp-content/uploads/2018/04/PaaS-Versus-Contai- ner-Docker-CaaS.png>. Acesso em: 20 out. 2020. O PaaS é um serviço de hospedagem em nuvem que se concentra na implantação de código com possibilidade de confi guração a nível codifi cação do software. Os provedores de PaaS oferecem ambientes hospedados automatizados que se concentram em dependências de infraestrutura de aplicativos de nível superior, como tempos de execução de linguagem e bancos de dados (BUCHANAN, 2020). Estruturas como Docker e PaaS resolvem problemas diferentes. O PaaS é uma boa opção para desenvolvimento em equipes menores. A implantação de microsserviços é fácil em uma plataforma de gerenciamento de contêiner como o Kubernetes, mas nem sempre é necessária para o desenvolvimento de software web (GHOSH, 2018). As Plataformas como Serviço (PaaS), que jáestudamos na disciplina, preocupam-se com infraestrutura de nível de pilha de código. Ao usar um PaaS, um projeto não tem controle do sistema operacional em que está rodando. Os tempos de execução do contêiner oferecem confi guração e virtualização do sistema operacional, permitindo personalização e controles muito mais avançados. Os contêineres podem ser essenciais para o desenvolvimento de software altamente personalizado e especializado (BUCHANAN, 2020). Os CaaS tendem a serem mais adequados para microsserviços, pois cada contêiner implantado no CaaS pode ter seu próprio sistema operacional encapsulado e pilha de idiomas. O PaaS ainda sofre do problema de depender do ambiente local de cada máquina. Pode haver pequenas diferenças entre o ambiente TÓPICO 2 — CONTÊINER COMO SERVIÇO (CAAS) 177 de desenvolvimento e o ambiente de produção de um sistema PaaS. O objetivo principal de um sistema de contêiner é evitar e garantir um comportamento consistente em ambientes de implantação e de produção (BUCHANAN, 2020). Os contêineres tornam muito mais fácil o desenvolvimento de sistemas distribuídos ou arquiteturas de microsserviços. Durante o desenvolvimento, um conjunto de contêineres pode gerenciar diferentes responsabilidades ou diferentes ecossistemas de linguagem de código. A promessa do CaaS é que essas arquiteturas de contêiner definidas e comprometidas podem ser implementadas rapidamente para hospedagem em nuvem (BUCHANAN, 2020). O objetivo de uma abordagem orientada a serviços para fornecer recursos de software é ajudar os usuários a se concentrarem completamente nas funcionalidades do sistema. Um desenvolvedor que usa PaaS para testar softwares, por exemplo, só precisa carregar seu próprio código na nuvem. Todos os requisitos técnicos para o processo de construção, bem como o gerenciamento e implantação do aplicativo, são fornecidos pelo provedor da plataforma PaaS (IONOS, 2019). Para seguir o modelo clássico de computação em nuvem, o CaaS pode ser colocado entre IaaS e PaaS. No entanto, desses modelos de serviço, o CaaS se distingue por uma abordagem fundamentalmente diferente da virtualização, que é o uso da tecnologia de contêiner (IONOS, 2019). O CaaS também fornece aos usuários o gerenciamento completo do ciclo de vida do software. Ao contrário de IaaS e PaaS, o fornecimento de recursos virtualizados não se baseia na virtualização de máquinas separadas com seu próprio sistema operacional. Em vez disso, as funções nativas dos kernels Linux são usadas, o que permite o isolamento de processos individuais dentro do mesmo sistema operacional. A tecnologia de contêiner cria um nível abstrato, que encapsula aplicativos, incluindo o sistema de arquivos, do sistema subjacente, permitindo assim a operação em qualquer plataforma que suporte a tecnologia de contêiner (IONOS, 2019). Os desenvolvedores de software que desejam fazer uso de um ambiente de desenvolvimento baseado em nuvem devem contar com as tecnologias fornecidas pelo fornecedor, como linguagens de programação restritas ou estruturas no modelo PaaS. O Container as a Service, por outro lado, fornece aos usuários uma plataforma de programação relativamente livre, na qual aplicativos encapsulados em contêineres podem ser escalados em infraestruturas de TI heterogêneas, independentemente de seus requisitos técnicos (IONOS, 2019). 178 UNIDADE 3 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO 3 CASOS DE APLICAÇÕES Vamos imaginar um software organizado em uma arquitetura de microsserviços, em que o sistema de serviços é estruturado pela propriedade do domínio de negócios. Os domínios dos serviços podem ser os de pagamentos, autenticação e carrinho de compras. Cada um desses serviços possui sua própria base de código e são armazenados em contêineres. Usando CaaS, esses contêineres de serviço podem ser implantados instantaneamente em um sistema sem requerer configurações específicas (BUCHANAN, 2020). A implantação de softwares em contêineres permite a transparência no desempenho de um sistema por meio de ferramentas como agregação de log e monitoramento. O CaaS também inclui funcionalidade integrada para escalonamento automático e gerenciamento de orquestração. Ele permite que as equipes criem rapidamente sistemas distribuídos de alta disponibilidade. Além disso, o CaaS aumenta a velocidade de desenvolvimento da equipe, permitindo implementações rápidas. O uso de contêineres garante um objetivo de implantação consistente, enquanto o CaaS pode reduzir os custos operacionais de engenharia, reduzindo os recursos DevOps necessários para gerenciar uma implantação (BUCHANAN, 2020). 4 O FUNCIONAMENTO O Container as a Service é um grupo de computadores que está disponível por meio da nuvem e é usado por usuários para fazer upload, criar, gerenciar centralmente e executar aplicativos baseados em contêiner na plataforma de nuvem. A interação com o ambiente de contêiner baseado em nuvem ocorre por meio da interface gráfica com o usuário (GUI) ou na forma de chamadas de API. O provedor determina quais tecnologias de contêiner estão disponíveis para os usuários (IONOS, 2019). No entanto, o núcleo de cada plataforma CaaS é uma ferramenta de orquestração, também conhecida como orquestrador, que permite o gerenciamento de arquiteturas de contêiner complexas (IONOS, 2019). Os aplicativos de contêiner usados em ambientes produtivos geralmente consistem em um cluster de vários contêineres distribuídos em diferentes sistemas físicos e virtuais, isso é conhecido como um sistema de vários contêineres. Usar ferramentas de orquestração é uma boa opção, pois organizam a interação entre os contêineres executados e permitem funções de operação automatizada. Segundo Ionos (2019), as seguintes funções são importantes: TÓPICO 2 — CONTÊINER COMO SERVIÇO (CAAS) 179 • distribuição de contêineres em vários hosts; • agrupando contêineres em unidades lógicas; • dimensionamento de contêineres; • balanceamento de carga; • alocação de capacidade de armazenamento; • interface de comunicação entre contêineres; • descoberta de serviço. O orquestrador usado na estrutura CaaS tem uma influência direta nas funções disponibilizadas aos usuários do serviço em nuvem. O mercado de virtualização baseada em contêiner é atualmente dominado por três ferramentas de orquestração: Docker Swarm, Kubernetes e Mesosphere DC/OS (IONOS, 2019). O Docker Swarm é uma ferramenta de gerenciamento e orquestração de cluster de código aberto projetada por Docker como uma ferramenta nativa para gerenciar clusters Docker e operações de contêiner. O orquestrador é a base para Docker On-Premises CaaS Product Docker Datacenter (DDC), permitindo que as empresas usem um ambiente de contêiner como serviço autogerenciado em seu próprio data center, como parte do Docker Enterprise Edition (EE) Nuvens privadas (Docker Datacenter em AWS/Azure). O autodesenvolvimento do Docker é conhecido por sua fácil instalação e manuseio e é totalmente integrado ao ambiente de tempo de execução do contêiner do líder. A ferramenta de orquestração usa a API Docker padrão, fornecendo compatibilidade com outras ferramentas Docker que se comunicam usando a API Docker. A administração de clusters e contêineres é feita usando comandos clássicos do Docker (IONOS, 2019). O Kubernetes é uma ferramenta de código aberto para provisionamento, dimensionamento e administração automatizados de aplicativos de contêiner em infraestruturas de TI distribuídas. A ferramenta foi desenvolvida originalmente pelo Google e agora está sob os auspícios da Cloud Native Computer Foundation (CNCF). Em contraste com o Swarm, o Kubernetes não oferece suporte apenas a contêineres Docker. Por meio de uma interface de tempo de execução de contêiner (CRI), o orquestrador faz interface com vários ambientes de tempo de execução de contêiner em conformidade com OCI e baseados em hipervisor, bem como com concorrentescomo CoreOS. Comparado ao Docker Swarm, a instalação e configuração do Kubernetes é significativamente mais complexa (IONOS, 2019). O DC/OS (Sistema Operacional de Data Center) é um desenvolvimento adicional de um gerenciador de cluster de código aberto chamado Apache Mesos, que é fornecido pela Mesosphere, uma inicialização do Vale do Silício, como um sistema operacional para data centers sob uma licença de código aberto (IONOS, 2019). 180 UNIDADE 3 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO 5 DESVANTAGENS Os contêineres da Docker e de outros fornecedores são soluções excelentes, mas eles não são a solução perfeita para todo tipo de desafio de infraestrutura de servidores. Como qualquer outra tecnologia, eles têm suas desvantagens (TOZZI, 2016). Os contêineres podem parecer a resposta perfeita para todos os problemas. Porém, como a nuvem, os contêineres vêm com alguns aspectos negativos. Não são considerados uma tecnologia nova, mas só recentemente eles se tornaram populares. Poucos desenvolvedores aprenderam a usar contêineres em cursos ou afins, e as certificações de contêiner ainda são raras. Como resultado, nem todas as equipes estão preparadas para implantar e gerenciar infraestrutura em contêineres. Se não estiver preparado, é interessante pensar em ignorar os contêineres até que tenha profissionais que estejam prontos para eles, mas uma solução de Contêiner como Serviço (CaaS) pode terceirizar a maior parte do gerenciamento e facilitar a implantação dos mesmos (TOZZI, 2016). A necessidade segurança fez com que os contêineres ficassem mais seguros do que costumavam ser. Se existem necessidades muito altas de conformidade de segurança ou privacidade de dados, os contêineres provavelmente ainda não são uma boa ideia (TOZZI, 2016). Quando existe a necessidade da virtualização tradicional, poder pegar um aplicativo e colocá-lo em um contêiner é legal e torna as implantações portáteis e escalonáveis. Entretanto, simplesmente, não há substituto para o VMware. Rede e armazenamento persistentes são mais complicados em contêineres do que em máquinas virtuais completas, por exemplo (TOZZI, 2016). 6 PLATAFORMAS DE CAAS Um serviço de contêiner é fornecido por um provedor de computação em nuvem e permite que os usuários desenvolvam, testem, executem ou distribuam software nos chamados contêineres de aplicativos em infraestruturas de TI. Os contêineres de software são um conceito da região do Linux. A tecnologia permite a virtualização no nível do sistema operacional. Sistemas de informação individuais, incluindo todas as dependências, como bibliotecas, arquivos de configuração, entre outros, são executados como instâncias encapsuladas. Isso permite a operação paralela de vários aplicativos com requisitos diferentes no mesmo sistema operacional, bem como a implantação em sistemas diferentes (IONOS, 2019). TÓPICO 2 — CONTÊINER COMO SERVIÇO (CAAS) 181 A tecnologia de contêineres está crescendo, tornando a variedade de serviços CaaS correspondentes grande. Os serviços de virtualização no nível do sistema operacional são encontrados em quase todos os portfólios de provedores de nuvem pública. Amazon, Microsoft e Google – que estão atualmente entre os jogadores mais infl uentes no mercado de CaaS – expandiram suas plataformas em nuvem com uma solução de contêiner baseada em Docker nos últimos dois anos (IONOS, 2019). Ao escolher um serviço CaaS para uso na empresa, os usuários devem levar em consideração as seguintes questões: • Quais ferramentas de orquestração estão disponíveis? • Quais formatos de arquivo os aplicativos de contêiner suportam? • É possível operar aplicativos com vários contêineres? • Como os clusters são gerenciados ao operar um contêiner? • Quais redes e funções de armazenamento são suportadas? • O provedor emite um registro privado para imagens de contêiner? • O ambiente de tempo de execução do contêiner está bem integrado a outros serviços em nuvem? • Quais modelos de faturamento estão disponíveis? 6.1 AMAZON EC2 CONTAINER SERVICE (ECS) O principal provedor de computação em nuvem entrega sua ferramenta de função como serviço já consolidada e muito utilizada por grandes corporações. FONTE: <https://upload.wikimedia.org/wikipedia/commons/thumb/9/93/Amazon_Web_Servi- ces_Logo.svg/150px-Amazon_Web_Services_Logo.svg.png>. Acesso em: 20 out. 2020. FIGURA 8 – AMAZON WEB SERVICES Desde abril de 2015, a Amazon fornece soluções para virtualização baseada em contêiner sob o nome Amazon EC2 Container Service, como parte do framework da plataforma de computação em nuvem AWS (Amazon Web Service). 182 UNIDADE 3 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO FIGURA 9 – SITE AMAZON ELASTIC CONTAINER SERVICE FONTE: <https://aws.amazon.com/pt/ecs/>. Acesso em: 20 out. 2020. O Amazon ECS fornece aos usuários várias interfaces que permitem aplicativos isolados no Amazon Elastic Compute Cloud (EC2) em contêineres Docker. O serviço CaaS é tecnicamente baseado nos recursos de nuvem a seguir (IONOS, 2019). Amazon EC2 (instâncias de nuvem do Amazon Elastic Compute Cloud): Amazon EC2 é a capacidade de computação escalonável do serviço de computação em nuvem da Amazon, que é alugado na forma das chamadas “instâncias”. Amazon S3 (Amazon Simple Storage): Amazon S3 é uma plataforma de armazenamento de objetos baseada em nuvem. Amazon EBS (Amazon Elastic Block Store): o Amazon EBS fornece volumes de armazenamento em bloco de alta disponibilidade para instâncias EC2. Amazon RDS (Amazon Relational Database Service): Amazon RDS é um serviço de banco de dados para gerenciar os mecanismos de banco de dados relacional Amazon Aurora, PostgreSQL, MySQL, MariaDB, Oracle e Microsoft SQL Server. O gerenciamento de contêineres é feito pelo ECS por padrão, usando um orquestrador proprietário, que atua como mestre e se comunica com um agente em cada nó do cluster que precisa ser gerenciado. Como alternativa, um módulo de código aberto é oferecido com o Blox, o que torna possível conectar “agendadores” desenvolvidos por eles mesmos, bem como ferramentas de terceiros como o Mesos no ECS (IONOS, 2019). TÓPICO 2 — CONTÊINER COMO SERVIÇO (CAAS) 183 A Amazon fornece aos usuários da AWS repositórios Docker privados como parte do EC2 Container Registry (ECR) para realizar uma administração central de suas imagens de contêiner. O acesso ao registro pode ser gerenciado usando AWS IAM no nível do recurso (IONOS, 2019). Uma desvantagem do serviço de contêiner Amazon EC2 é que ele restringe as instâncias do EC2. O serviço CaaS da Amazon não fornece suporte para infraestruturas de TI fora da AWS – nem fi sicamente, nem virtualmente. Os cenários de nuvem híbrida, em que vários aplicativos de contêiner às vezes são operados no local, são, portanto, tão impossíveis de executar como uma combinação dos recursos de tecnologia de diferentes provedores de nuvem pública. Isso, provavelmente, se deve ao modelo de negócios da Amazon para o serviço CaaS é essencialmente gratuito por meio da AWS. Os usuários pagam apenas pelo fornecimento da infraestrutura em nuvem, como grupos de instâncias EC2, que formam a base para a operação de aplicativos de contêiner (IONOS, 2019). FIGURA 10 – PAINEL AMAZON ELASTIC CONTAINER SERVICE FONTE: O autor Vamos ver como é o passo a passo para implantação de contêineres na Amazon utilizando apenas a camada gratuita dos serviços do provedor. 184 UNIDADE 3 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO Iniciamos confi gurando o Amazon ECS. Para isso, o assistente de primeira execução do Amazon ECS orientará durante a criação de um cluster e a execução de um sistema web de exemplo. Nesta etapa, é só acessar o console do Amazon ECS e executar o assistente. Para isso, é só acessar este link: htt ps:// console.aws.amazon.com/ecs/home#/fi rstRun. Após ter criado o Amazon ECS, você pode usar o Amazon Elastic Container Registry (Amazon ECR) conseguindo criarum repositório de imagens e enviar uma imagem para ele como parte do assistente de primeira execução. FIGURA 11 – INICIANDO AMAZON ELASTIC CONTAINER SERVICE FONTE: O autor Depois disso, cria-se uma defi nição de tarefa, que é uma espécie de esquema do seu aplicativo. Será especifi cada uma defi nição de tarefa para que o Amazon ECS saiba qual imagem de Docker usar para os contêineres, quantos contêineres usar na tarefa e a alocação de recursos para cada contêiner. A defi nição de tarefa vem pré-carregada com valores de confi guração padrão. Revise os valores padrão e selecione o comando para a próxima etapa. Se preferir modifi car as confi gurações ou quiser saber mais, consulte os parâmetros de defi nição de tarefa. TÓPICO 2 — CONTÊINER COMO SERVIÇO (CAAS) 185 FIGURA 12 – CRIANDO O AMAZON ELASTIC CONTAINER SERVICE FONTE: O autor Nesse momento precisa ser confi gurado o serviço. Após a criação de uma defi nição de tarefa, confi gure o serviço do Amazon ECS. Um serviço executa e mantém cópias da defi nição de tarefa no cluster. Por exemplo, ao executar um aplicativo como um serviço, o Amazon ECS recuperará automaticamente qualquer tarefa interrompida e manterá o número de cópias que for especifi cada. Após isso, confi gure as opções de serviço. Primeiro o nome do serviço, que é o valor padrão sample-webapp, um aplicativo de exemplo com base na web disponibilizado pela AWS. Ele foi projetado para ser executado indefi nidamente, portanto, quando executado como um serviço, ele será reinicializado caso a tarefa apresente problemas de integridade ou caso seja interrompida inesperadamente. O número desejado de tarefas, para permanecer no nível gratuito da AWS, mantenha o valor padrão 1. Isso criará uma cópia da sua tarefa. 186 UNIDADE 3 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO FIGURA 13 – CONFIGURANDO O AMAZON ELASTIC CONTAINER SERVICE FONTE: O autor Logo após, é necessário confi gurar o Elastic load balancing, tendo a opção de usar um load balancer com seu serviço. O Amazon ECS pode criar um load balancer do Elastic Load Balancing (ELB) para distribuir o tráfego entre as instâncias de contêiner onde sua tarefa está sendo executada. No nome do contêiner e porta do host selecione Simple- app:80. Os valores padrão de ELB listener protocol (protocolo do listener do ELB), ELB listener port (porta do listener do ELB) e de ELB health check (verifi cação de saúde do ELB) são confi gurados para o sistema de exemplo. TÓPICO 2 — CONTÊINER COMO SERVIÇO (CAAS) 187 FIGURA 14 – CONFIGURANDO O ELASTIC LOAD BALANCING FONTE: O autor Antes de poder anexar um load balancer a um Amazon ECS Service, é necessário criar uma função do Identity and Access Management (IAM) a ser usada pelos serviços. Isso permitirá que o Amazon ECS faça chamadas para as APIs do Amazon EC2 e do Elastic Load Balancing para registrar e cancelar o registro de instâncias nos load balancers. Depois de tudo confi gurado, selecione a próxima etapa. 188 UNIDADE 3 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO FIGURA 15 – CONFIGURANDO O ELASTIC LOAD BALANCING FONTE: O autor Agora é necessário confi gurar o cluster. As defi nições de confi guração para um sistema web de exemplo devem seguir com o nome do cluster sendo sample-cluster, o tipo de instância do EC2 será padrão t2.micro para fi car no nível gratuito. Os tipos de instância com mais recursos de CPU e memória podem realizar mais tarefas. O número de instâncias fi ca com o valor padrão 1 para executar uma instância do Amazon EC2 no cluster, no qual as tarefas serão inseridas. Será necessário usar um par de chaves para utilizar o SSH nas instâncias mais tarde, podendo manter a seleção padrão de nenhuma — não habilitado para SSH, selecionar um par de chaves existente ou criar um par no console do Amazon EC2. No security group, deixar o valor padrão. Selecionar o seu container instance IAM role. Depois disso, é só revisar e executar. TÓPICO 2 — CONTÊINER COMO SERVIÇO (CAAS) 189 FIGURA 16 – INICIANDO O AMAZON ECS FONTE: O autor Na tela seguinte deverá ser iniciado o serviço. 190 UNIDADE 3 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO FIGURA 17 – INICIANDO O AMAZON ECS FONTE: O autor Para abrir o sistema de exemplo, é só ir até a página do aplicativo web de exemplo (sample-webapp), clicar no nome do Load Balancer e copiar o DNS ou o endereço do Load Balancer e colar na URL do navegador. Pronto, depois disso seu ECS está rodando. Na Amazon é sempre aconselhável estar atento aos recursos que estão sendo escolhidos e excluir os recursos criados para não gerar nenhuma cobrança indesejada. CUIDADO! Sempre exclua todos os recursos que criou nos provedores após ter realizado seus estudos. ATENCAO TÓPICO 2 — CONTÊINER COMO SERVIÇO (CAAS) 191 6.2 GOOGLE CONTÊINER ENGINE (GKE) O Google oferece uma série de funcionalidades de computação em nuvem e oferece também o serviço de CaaS. FIGURA 18 – GOOGLE CLOUD FONTE: <http://twixar.me/Ffbm>. Acesso em: 20 out. 2020. O Google também integrou um serviço de contêiner hospedado com o Google Container Engine (GKE) na nuvem. O principal componente do serviço CaaS são as ferramentas de orquestração Kubernetes. FIGURA 19 – SITE GOOGLE KUBERNETS ENGINE FONTE: <https://cloud.google.com/kubernetes-engine?hl=pt-br>. Acesso em: 20 out. 2020. O GKE depende dos recursos do Google Compute Engine (GCE) e permite que os usuários executem aplicativos baseados em contêiner em clusters do Google Cloud Platform (GCP). No entanto, os usuários que têm GKE não estão limitados apenas à infraestrutura do Google Cloud: o sistema de federação de cluster do Kubernetes possibilita combinar diferentes recursos de cluster de computador em uma federação de computação lógica e, se necessário, criar ambientes híbridos de várias nuvens (IONOS, 2019). Cada cluster criado com o GKE consiste em um endpoint mestre do Kubernetes no qual o servidor da API do Kubernetes é executado e qualquer número de nós de trabalho que atendem às solicitações REST para os servidores da API, que oferecem suporte a contêineres Docker (IONOS, 2019). 192 UNIDADE 3 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO Enquanto o nó mestre monitora como os recursos são usados e o status do cluster, os aplicativos contidos são executados no nó de trabalho. Se um nó de trabalho falhar, o mestre distribui as tarefas necessárias para a operação do aplicativo para outros nós (IONOS, 2019). O GKE também oferece suporte ao formato de contêiner Docker amplamente usado. Para fornecer imagens Docker, os usuários têm um registro de contêiner privado. Uma sintaxe baseada em JSON oferece a opção de defi nir serviços de contêiner como modelos (IONOS, 2019). Semelhante ao ECS na AWS, o GKE é integrado diretamente à plataforma Google Cloud para que os usuários do contêiner tenham acesso a vários recursos da nuvem pública, além do intervalo de funções de orquestração (IONOS, 2019). Google e Amazon têm planos diferentes em termos de preços de seus serviços CaaS. Um gerenciamento de contêiner para clusters com até cinco instâncias de mecanismo de computador (nós) está disponível para os usuários gratuitamente. Existem apenas custos para fornecer serviços em nuvem (CPU, memória etc.). Se os usuários desejam executar contêineres em clusters maiores (seis ou mais instâncias), o Google também cobra uma taxa de uso para o mecanismo de contêiner: o preço é por hora para um cluster (IONOS, 2019). FIGURA 20 – PAINEL GOOGLE KUBERNETS ENGINE FONTE: O autor 6.3 SERVIÇO DE CONTÊINER DO AZURE (ACS) A Microsoft possui na plataforma Azure um serviço de Contêineres. TÓPICO 2 — CONTÊINER COMO SERVIÇO (CAAS) 193 FIGURA 21 – MICROSOFT AZURE FONTE: <https://ocaradoti.com.br/wp-content/uploads/2020/01/logo-transparente-Microsoft- -Azure.png>. Acesso em: 20 out. 2020. O Azure Container Service (ACS) é um ambiente de hospedagem preparado para a plataforma de computação em nuvem da Microsoft Azure,que permite aos usuários desenvolver aplicativos baseados em contêiner e implantá- los em clusters de computador escalonáveis. O ACS depende de uma versão otimizada do Azure das ferramentas de contêiner carregadas na origem e permite a operação de contêineres Linux no formato Docker. Os contêineres do Windows são atualmente suportados apenas em uma versão de visualização (IONOS, 2019). O principal componente do serviço CaaS da Microsoft é o Azure Contêiner Engine, cujo código-fonte está disponível sob a licença de código aberto no GitHub. O Azure Container Engine atua como um gerador de modelos que cria modelos para o Azure Resource Manager (ARM). Eles podem ser gerenciados usando uma API com uma das seguintes ferramentas de orquestração: Docker Swarm, DC / OS e Kubernetes (IONOS, 2019). FIGURA 22 – SITE MICROSOFT AZURE CONTAINER SERVICES FONTE: <https://azure.microsoft.com/pt-br/product-categories/containers/>. Acesso em: 20 out. 2020. 194 UNIDADE 3 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO A escolha do orquestrador depende principalmente dos recursos disponíveis para usuários ACS ao operar aplicativos de contenção na nuvem do Azure. FIGURA 23 – PAINEL MICROSOFT AZURE CONTAINER SERVICES FONTE: O autor A Microsoft Azure possui muitos recursos que podem agilizar o desenvolvimento de CaaS para o seu sistema de informação. 195 RESUMO DO TÓPICO 2 Neste tópico, você aprendeu que: • Os CaaS diferem das Platform as a Service (PaaS), pois dependem do uso de contêineres. • O objetivo de uma abordagem orientada a serviços para fornecer recursos de software é ajudar os usuários a se concentrarem completamente em seus negócios. • O CaaS fornece aos usuários o gerenciamento completo do “ciclo de vida” de um software. • Os principais provedores de CaaS são a Amazon, a Microsoft e o Google. 196 1 (TRT-PE, 2018) Para organizar os diferentes tipos de serviço disponibilizados na nuvem, foram estabelecidas algumas categorias de serviços como o SaaS, IaaS, PaaS, CaaS, dentre outros. Qual dos itens a seguir é um exemplo de CaaS? FONTE: <https://www.qconcursos.com/questoes-de-concursos/questoes/b11360d0-4f>. Acesso em: 20 out. 2020. a) ( ) Google Docs. b) ( ) Amazon ECS. c) ( ) Amazon Beanstalk. d) ( ) Google App Engine. 2 O Amazon Elastic Container Service (Amazon ECS) é um serviço gerenciado de orquestração de contêineres na nuvem da Amazon Web Services (AWS). Assinale a alternativa CORRETA que apresenta o nome da ferramenta que precisamos utilizar juntamente ao ECS no serviço da AWS. a) ( ) Elastic Compute Cloud. b) ( ) Elastic load balancing. c) ( ) Simple Storage Service. d) ( ) Elastic Beanstalk. AUTOATIVIDADE 197 UNIDADE 3 1 INTRODUÇÃO A evolução tecnológica vem auxiliando a humanidade em suas tarefas diárias, através das comodidades e proporcionando agilidade e entretenimento (ARMBRUST et al., 2009; CORRÊA; ARAUJO; MEDINA, 2016). No entanto, todos esses aplicativos possuem em comum um código-fonte independente da linguagem de programação ou plataforma usada. O surgimento da tecnologia e a necessidade de transmitir a informação de modo simultâneo exige o desenvolvimento de um sistema de transmissão ágil, e a plataforma em nuvem é um grande aliado neste processo (CAETANO, 2004; CORRÊA; ARAUJO; MEDINA, 2016). Desse modo, o processo de controle das versões (versionamento) e o deploy (disponibilização do aplicativo) em nuvem se tornou essencial no processo de desenvolvimento e disponibilização de sistema para usuário. Atualmente, existem sistemas de controle de versões que auxiliam na segurança e na qualidade do código-fonte. As empresas de software geralmente usam um sistema de controle de versão para controlar seus softwares. Com isso, rastreiam as alterações efetuadas. Agora, vamos conhecer os principais conceitos do controle de versão e detalhar os principais modelos presente no mercado. 2 CONCEITOS DE VERSIONAMENTO A gerência de configuração de software é responsável pelo controle da evolução de sistemas de software e ainda abrange técnicas de versionamento usadas em grandes projetos de desenvolvimento de software (CAETANO, 2004; DIAS, 2009; FARLEY; HUMBLE, 2014). As vantagens do gerenciamento de software são: • Facilitar as mudanças. • Controlar os produtos. • Economizar o tempo no desenvolvimento. • Facilitar a geração de versões diferenciadas. • Manter o histórico do software. • Facilitar a recuperação das versões anteriores. TÓPICO 3 — VERSIONAMENTO E DEPLOY EM NUVEM 198 UNIDADE 3 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO Durante o processo de desenvolvimento é essencial que haja o gerenciamento de configuração, que conforme Farley e Humble (2014, p. 90) é definido como “a gerência de configuração se refere ao processo pelo qual todos os artefatos relevantes ao seu projeto e as relações entre eles são armazenados, recuperados, modificados e identificados de maneira única”. Em 1972, nos Estados Unidos, no laboratório Bell Labs, foi criado, por Marc. J. Rochkind, o primeiro sistema de controle de versões. Esse sistema foi chamado de Source Code Control System (SCCS) e foi o principal sistema de controle de versão. A sua contribuição foi a técnica de armazenamento interleaved deltas, que é considerada como precursora para o surgimento de técnicas de junção (HOFFMAN, 2002). IMPORTANT E O controle de versão é definido como uma prática da Engenharia de Software, que atua no gerenciamento de distintas versões de um documento. Atualmente, há inúmeras equipes de trabalho atuando em diferentes locais ao mesmo tempo, então, nestes casos, o controle de versões é visualizado como uma extensão natural do processo de desenvolvimento colaborativo (HOFFMAN, 2002; DIAS, 2009; FARLEY; HUMBLE, 2014). Entretanto, para garantir o controle do processo existem três métodos, conforme o Quadro 3. MÉTODO DESCRIÇÃO BLOQUEIO Possibilita que a operação de entrega de um arquivo torne restrita ao usuário que efetuou o bloqueio (“admin”). Com isso, impedindo que outros usuários façam modificações deste mesmo arquivo ao repositório, enquanto ele estiver em alteração. BLOQUEIO FRACO Utilizado para observar um arquivo (“watch”), ou seja, o usuário que estiver vigiando o arquivo será comunicado quando o arquivo tiver alguma alteração. No entanto, quando outro usuário retirar o arquivo, ele será somente para leitura, evidenciado desta forma que o arquivo não pode ser alterado. Mas, caso ele deseje alterar o arquivo, poderá fazê-lo (“edit”). SINCRONIZAÇÃO O método mais usado para aceitar alterações paralelas em um mesmo arquivo. É efetuada através de uma operação de atualização (“update”), que confirma se alguma outra atualização foi realizada ao repositório. QUADRO 3 – TIPOS DE MÉTODOS FONTE: Adaptado de Hoffman (2002) TÓPICO 3 — VERSIONAMENTO E DEPLOY EM NUVEM 199 O controle de versões está ligado às técnicas e ferramentas usadas para controle da evolução de arquivos de computador, isso significa que concede a recuperação de dados históricos, semelhanças e diferenças entre versões, e ainda detalhes da evolução de algum conteúdo controlado (HOFFMAN, 2002; FARLEY; HUMBLE, 2014). Portanto, o controle de versões é uma ferramenta de gerenciamento de configuração de software que facilita as empresas a dominarem ou controlarem os problemas existentes nas equipes de desenvolvimento (FARLEY; HUMBLE, 2014). Então, para finalizar, o sistema de controle de versões engloba: • Obtenção de uma cópia de um repositório remoto. • Realização de alterações nos arquivos do repositório. • Realização de um commit. • Confirmação das alterações e inserção de uma mensagem. • Envio de suas alterações de volta para o servidor remoto. Um modelo de versão determina os objetos a serem versionados, identificação da versão e organização, e ainda as operações para recuperação de versões atuais e a elaboração de novas versões (HOFFMAN, 2002; FARLEY; HUMBLE, 2014). Segundo Farleye Humble (2014), um controle de versão tem os seguintes objetivos: • Guardar cada versão de cada arquivo garantindo o acesso a ele. • Fornecer uma maneira de associar metadados. • Permitir a colaboração de equipes distribuídas no tempo e no espaço. Agora, vamos compreender os principais conceitos do funcionamento do controle de versões (Quadro 4). Commit (ou check-in) Criação de uma versão nova. Check-out Recuperação de uma determinada versão do arquivo. Repositório de versões Armazenamento de todas as versões dos arquivos sob controle de versões. Repositório de versões centralizados Cada área de trabalho local contém apenas uma versão específica da árvore de versões do repositório central e todos os usuários realizam as operações de controle de versões no repositório central. QUADRO 4 – CONCEITOS PRINCIPAIS 200 UNIDADE 3 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO Repositório de versões distribuídos Cada área local possui um repositório acoplado, de forma que o usuário tem um repositório próprio para realizar o controle de versões. As operações realizadas a respeito dos arquivos são feitas no repositório local do usuário, e operações específi cas dos repositórios distribuídos são utilizadas para sincronizar repositórios diferentes. Árvore de revisões ou de versões Estrutura lógica que mapeia todas as versões armazenadas no repositório para determinado arquivo ou conjunto de arquivos. FONTE: Adaptado de Junqueira (2007) Os sistemas de controle de versão podem ser divididos em dois modelos, sendo o modelo centralizado e o modelo distribuído (HOFFMAN, 2002; JUNQUEIRA, 2007; FARLEY; HUMBLE, 2014). Agora, vamos descrever estes dois modelos. No modelo centralizado há somente um repositório central e muitas cópias de trabalho (Figura 24). Isso signifi ca que existe um servidor central responsável pelo versionamento, sendo, deste servidor, que os outros computadores acessarão os arquivos e suas versões (JUNQUEIRA, 2007; FREITAS, 2010). Nesse sentido, as operações de commit e update são responsáveis por consolidar as modifi cações e atualização da cópia local que estão entre o cliente e o servidor (FREITAS, 2010). FONTE: Adaptado de Dias (2009) FIGURA 24 – MODELO VERSÃO CENTRALIZADO TÓPICO 3 — VERSIONAMENTO E DEPLOY EM NUVEM 201 O Subversion é um sistema de controle de versão centralizado, tanto o cliente como o servidor trabalham com os principais sistemas operacionais: Unix, Windows e Mac OS X, e sua portabilidade se deve ao subversion abstrair todas as diferenças entre os Sistemas operacionais para que sua utilização seja homogênea em todos eles (JUNQUEIRA, 2007). NOTA No modelo de versão distribuído (ou descentralizado), há inúmeros repositórios autônomos e independentes, sendo um para cada colaborador, e cada um desses repositórios tem uma área de trabalho conectada a ele (Figura 25) (JUNQUEIRA, 2007; FREITAS, 2010). No modelo distribuído as operações de “commit” e “update” ocorrem de maneira local. Esse modelo é considerado mais avançado, sendo recomendado para grandes equipes e projetos de grande porte (JUNQUEIRA, 2007; DIAS, 2009; FREITAS, 2010). As vantagens desse sistema são: • Facilitar o compartilhamento de dados e dispositivos. • Melhorar e facilitar a comunicação das equipes. • Melhora na distribuição de tarefas. Entretanto, como desvantagens têm o alto custo devido à melhoria da rede e proteção de dados sigilosos. FONTE: <https://blog.pronus.io/images/controle_versao/conceitos_basicos/repositorio_desen- volvedor.png>. Acesso em: 20 out. 2020. FIGURA 25 – SISTEMA DE CONTROLE DISTRIBUÍDO https://blog.pronus.io/images/controle_versao/conceitos_basicos/repositorio_desenvolvedor.png https://blog.pronus.io/images/controle_versao/conceitos_basicos/repositorio_desenvolvedor.png 202 UNIDADE 3 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO Os modelos distribuídos são adotados para o desenvolvimento do kernel do sistema operacional Linux, projeto Mozilla e os sistemas GIT. Os sistemas de controle de versão Bazaar e o Mercurial também são exemplos de sistemas de controle de versão distribuídos (JUNQUEIRA, 2007; DIAS, 2009; FREITAS, 2010; MORAES, 2013). O sistema de controle de versão distribuído GIT possui como características: velocidade, simples design, suporte robusto a desenvolvimento não linear e capacidade de lidar de maneira eficiente com grandes projetos como o kernel do Linux (MORAES, 2013). IMPORTANT E 2.1 O SISTEMA DISTRIBUÍDO GIT O GIT é considerado um software livre open source que utiliza a linguagem C, Shell Script e Perl, sendo distribuído sob a licença GNU GPLv2. Portanto, o GIT é definido como um sistema de controle de versão distribuído tendo como características: velocidade, simples design, suporte robusto e capacidade de atuar de modo eficiente com projetos de grande porte (exemplo: kernel do Linux) (JUNQUEIRA, 2007; DIAS, 2009; FREITAS, 2010; MORAES, 2013). O modo distribuído do GIT possibilita maior flexibilidade no modo como os desenvolvedores colaboram em projetos. Desse modo, cada desenvolvedor contribui para outros repositórios, e ainda pode ter um repositório público para que outros desenvolvedores possam se basear em seu trabalho e com a possibilidade de contribuir com informações (JUNQUEIRA, 2007; DIAS, 2009; FREITAS, 2010; MORAES, 2013; CORRÊA; ARAUJO; MEDINA, 2016). Portanto, a utilização do GIT possibilita um fluxo de trabalho para equipes com perfil colaborativo. O GIT pode ainda ser usado para registrar o histórico de edições de vários tipos de arquivo, isso significa que cada alteração no arquivo estará registrada e ainda será possível identificar o autor da alteração. Portanto, o GIT auxilia na resolução de problemas independentemente da quantidade de envolvidos no processo, já que é considerado um sistema inteligente sendo responsável em notificar e unir as informações adicionadas do arquivo (FREITAS, 2010; MORAES, 2013; CORRÊA; ARAUJO; MEDINA, 2016). A realização do controle dessas permissões ocorre através do protocolo ssh, que permite a criação de chaves para controle da autenticação ou por meio do protocolo HTTP, que define as permissões de escrita e leitura para cada arquivo ou diretório (CORRÊA; ARAUJO; MEDINA, 2016). Um ponto importante é que no GIT a operação de commit é atômica, ou sejam quando uma TÓPICO 3 — VERSIONAMENTO E DEPLOY EM NUVEM 203 operação é interrompida, ela é desprezada e o repositório não mantem em um estado inconsistente (MOTAHARI-NEZHAD; STEPHENSON; SINGHAL, 2009; MORAES, 2013). Uma outra característica importante do GIT é a sua capacidade de garantir a ordem impedindo problemas para os desenvolvedores. Desse modo, no GIT existe a possibilidade de elaborar muitos snapshots do projeto. Isso signifi ca que a cada ação de salvar o projeto ( “commit”), é como se fosse tirado uma foto (snapshots) dos seus arquivos naquele momento e ainda, armazenasse uma referência para essa captura (JUNQUEIRA, 2007; DIAS, 2009; FREITAS, 2010; MORAES, 2013; CORRÊA; ARAUJO; MEDINA, 2016). Entretanto, se nenhum arquivo foi modifi cado, a informação não será armazenada (Figura 26). FONTE: Palestino (2015, p. 43) FIGURA 26 – TRATAMENTO DOS DADOS GIT As principais seções de um projeto GIT são (Figura 27): • diretório do GIT (GIT directory, repository); • diretório de trabalho (working directory); • área de preparação (staging area). De modo resumido, o workfl ow do GIT é do seguinte modo (PALESTINO, 2015): • Modifi car os arquivos em um diretório de trabalho. • Selecionar os arquivos, adicionando snapshots deles para uma área de preparação. • Commit que leva os arquivos, como eles estão, na área de preparação e os armazena permanentemente no diretório GIT. ATENCAO 204 UNIDADE 3 — CONTÊINERES COMO SUPORTE AO DESENVOLVIMENTO FONTE: Palestino (2015, p. 44) FIGURA 27– SEÇÕES PRINCIPAIS DE UM PROJETO GIT De acordo com Palestino (2015), os principais comandos do GIT estão atrelados ao seu fl uxo básico de trabalho que pode