Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

2
AULA 1 – FUNDAMENTO DA COMPUTAÇÃO EM NUVEM
Definição
A computação em nuvem como tendência de migração do fornecimento de serviços pela internet.
Propósito
Conhecer a evolução da infraestrutura até chegar à computação em nuvem, compreendendo suas vantagens e desvantagens, sua aplicabilidade e a segurança envolvida nessa nova tecnologia.
Objetivos
· Módulo 1: Compreender o modelo de tecnologia de computação em nuvem
· Módulo 2: Definir os conceitos fundamentais da computação em nuvem e seus modelos
· Módulo 3: Identificar as tecnologias habilitadoras da computação em nuvem
· Módulo 4: Categorizar os fundamentos da segurança em nuvem
Introdução
Computação em nuvem é o resultado da evolução da virtualização, do modelo orientada a serviços e do processamento de aplicativos. Informações como o local das instalações ou dos tipos de servidores utilizados são desconhecidas para a maioria dos usuários finais, que não precisam mais compreender ou controlar completamente os recursos de inovação tecnológica. As alternativas de nuvem e armazenamento fornecem aos clientes e empresas vários modelos para armazenar e processar seus dados em data centers de terceiros.
Nos primórdios da computação, as empresas adquiriam um terminal, cuja única função era acessar o mainframe. Devido aos custos de aquisição e manutenção dos servidores mainframe, era inviável para as empresas de médio e pequeno porte manter essa infraestrutura. Além disso, a empresa também não precisava de grande espaço de armazenamento (na época) e do poder de computação que um mainframe oferecia. Oferecer acessibilidade distribuída a uma única fonte foi a solução que fazia sentido em termos de custo-benefício para essa inovação tecnológica.
O termo computação em nuvem ou cloud computing é um novo paradigma na área da tecnologia da informação, pois, basicamente, esse novo paradigma tende a migrar a infraestrutura computacional para a nuvem, isto é, para a internet. Dessa maneira, os custos de software e, principalmente, de hardware são consideravelmente reduzidos.
Nesse tema, iremos conhecer, definir, descrever e identificar a tecnologia de computação em nuvem apresentando seus fundamentos distribuídos em quatro módulos. O primeiro módulo apresenta uma breve história do surgimento da rede de computadores até esse novo paradigma da computação em nuvem. O segundo módulo apresenta os conceitos fundamentais da computação em nuvem e os seus modelos de implementação e serviços da nuvem. O penúltimo módulo descreve as tecnologias habilitadoras da computação em nuvem. E por último, o quarto módulo identifica os fundamentos da segurança em nuvem, apresentando os problemas e soluções ao se migrar para essa tecnologia.
Módulo 1
Compreender o modelo de tecnologia de computação em nuvem
Evolução do Hardware e do Software
Ao acompanhar a evolução do hardware e do software, além das necessidades das empresas ao redor do mundo de processamento de dados, as empresas foram criando seus próprios CPDs – Centros de Processamento de Dados – como eram chamados na época. Na imagem a seguir, podemos ver um típico Centro de Processamento de Dados da época (anos 50).
Os CPDs eram basicamente constituídos por equipamentos de grande porte, os mainframes. Eram constituídos por uma CPU do mainframe e seus diversos periféricos, tais como: os terminais, discos, unidades de fita, impressoras e suas respectivas controladoras.
	1964
	Em 1964, nasce o primeiro mainframe, o System/360. Um investimento de US$ 750 milhões em engenharia e US$ 4,5 bilhões em fábricas e equipamentos. (CANALTECH, 2014). Esse colosso da computação foi utilizado inclusive pelo programa Apollo, da NASA, que levou o homem à Lua.
	1965
	Em 1965, foram lançados os primeiros System/360 no Brasil. Eram máquinas enormes, faziam muitos ruídos, além de um elevado consumo de energia e grande tempo de processamento de dados. No Brasil, foi lançado em 1965 e, no ano seguinte, passou a ser utilizado pelo INCRA (Instituto Brasileiro de Reforma Agrária) na realização do recenseamento da propriedade rural e cálculo do imposto territorial em todo o país.
O mainframe se antecipou às tendências e descobertas da tecnologia. A virtualização, um dos temas mais atuais em termos de infraestrutura de TI, está disponível no mainframe há mais de 30 anos.
Após essa fase, chegamos aos anos 80. Nessa época, surgem os primeiros computadores pessoais, os PCs, que se popularizaram tanto no ambiente doméstico, como corporativo (nas empresas, agora, de forma individual).
Dessa forma, surgem as primeiras redes de computadores nas empresas. Momento em que ainda não se falava de terceirização de TI, mas já se começava a relacionar conceitos, como cliente-servidor.
A figura anterior ilustra um bom exemplo do modelo cliente-servidor nos CPDs da época. Nesse período, concentrava-se praticamente a alma da empresa nos data centers, o servidor gerenciava todos os serviços da empresa. Dessa forma, as informações eram compartilhadas e, assim, sincronizadas, porém, se o servidor ficasse fora do ar, a empresa parava de funcionar.
Com a evolução da Tecnologia da Computação, o servidor central foi substituído por vários servidores, cada um com um serviço específico. Nessa época, o CPD recebeu diversos servidores, tais quais: o servidor de arquivos, servidor de impressão, servidor de aplicações web, servidor de banco de dados, servidor de domínio, entre outros. Porém, essa infraestrutura agrega como desvantagens o custo em manter vários servidores na empresa e o valor a ser investido no caso de acréscimo de serviço. Uma outra desvantagem dessa tecnologia é a capacidade de processamento ociosa, pois não se usava a capacidade máxima dos servidores, os quais permaneciam ociosos quando não estavam sendo acessados. Nesse cenário, surgiu um novo conceito: a virtualização de servidores.
	Virtualização
	A virtualização é um conceito que descreve a utilização de mais de um sistema operacional em um único servidor. Isto é, uma técnica que usa múltiplos sistemas operacionais em um único servidor, simulando a estrutura de um servidor físico.
O servidor físico torna-se hospede de vários servidores virtuais, que são configurados de acordo com a demanda de serviços da empresa, com sistemas operacionais e recursos independentes — memória, processamento, armazenamento etc. Dessa forma, é possível a utilização da capacidade máxima dos servidores de um data center, com maior densidade no uso de hardwares e armazenamento.
	Hypervisor
	Sendo assim, surge a figura do hypervisor. O hypervisor é um software com a funcionalidade de prover ao servidor físico a capacidade de se dividir. Com a virtualização, é possível acrescentar novos serviços sem a necessidade de adquirir servidores individuais, aproveitando toda a potencialidade de um único servidor.
	Computação em Nuvem
	Com o passar dos anos, as tecnologias foram mudando a forma de trabalho e relacionamento das empresas com os clientes, fornecedores, colaboradores. Dessa forma, surge o conceito de computação em nuvem ou cloud computing - nova tecnologia que vem revolucionando as atividades empresariais e conquistando cada vez mais espaço no mercado.
A virtualização é um software que manipula o hardware, enquanto a computação em nuvem é o resultado dessa manipulação. Portanto, podemos concluir que a computação em nuvem depende da virtualização de servidores, sendo essa técnica a essência do funcionamento do cloud computing.
Segundo Mike Adams, diretor de marketing de produtos na VMware, uma das empresas pioneiras em virtualização e computação em nuvem: "a virtualização é um elemento fundamental à computação em nuvem [...] A computação em nuvem é a entrega de recursos, software ou dados de computadores compartilhados. É um serviço sob demanda executado através da internet".
(CANALTECH, 2014)
Com a computação em nuvem, os serviços virtuais de armazenamento, processamento e acesso às informações que estavam alocados dentro da empresa, agora podem ser acessados em qualquer lugar do mundo, de qualquer dispositivocom acesso à internet.
O provedor de nuvem fornece infraestrutura física necessária para executar os serviços contratados e tem a responsabilidade de mantê-los sempre em funcionamento. Entre os serviços fornecidos, dois são mais comuns por todos os provedores de nuvem: capacidade de computação e armazenamento.
A capacidade de computação de um provedor de nuvem significa que seu serviço será executado por uma máquina virtual em algum servidor físico em um dos data centers do provedor, geralmente, compartilhando-o com outras máquinas virtuais isoladas e seguras.
Em relação ao armazenamento, normalmente, os provedores de nuvem oferecem serviços que podem lidar com todos os tipos de dados, desde comprar um ingresso para um filme, como uma foto, ou uma mensagem de voz. Além disso, é possível escalar para atender às necessidades, expandindo ou contraindo com o objetivo de o custo ser exatamente pelo que foi usado, em qualquer momento do contrato.
Entretanto, o modelo de disponibilizar serviços na internet não é algo novo. Na década de 60, Joseph Carl Robnett Licklider, um dos responsáveis pelo desenvolvimento da ARPANET (Advanced Research Projects Agency Network), apresentou o modelo de uma rede de computadores intergaláctica. Assim, todos estariam conectados entre si, acessando programas e dados de qualquer site e de qualquer lugar, conforme ilustrado a seguir. Nesse contexto, nasce o modelo de computação em nuvem.
Diante do que foi exposto, podemos construir a seguinte linha do tempo da evolução da tecnologia até a computação em nuvem:
Em resumo, a computação em nuvem representa o aluguel de recursos ao fornecer espaço de armazenamento ou servidores localizados em diversas partes do mundo. Uma outra característica dessa tecnologia é que se paga apenas pelo que usar. A empresa que fornece esse serviço é conhecida por provedor de nuvem, por exemplo: Google, Microsoft e Amazon.
Módulo 2
Definir os conceitos fundamentais da computação em nuvem e seus modelos
Com a evolução da sociedade humana moderna, os serviços básicos e essenciais, como água, eletricidade, telefone passaram a ser cobrados pelo modelo de pagamento baseado no consumo. O mesmo modelo tem sido aplicado nos serviços de Tecnologia da Informação. A computação em nuvem é uma tendência recente de tecnologia com o objetivo de proporcionar serviços sob demanda com pagamento baseado no uso. Com a proposta de prover serviços para todos, desde o usuário final que hospeda seus documentos pessoais na internet até empresas que terceirizam toda a parte de Tecnologia da Informação para outras empresas.
História da Computação em Nuvem
De acordo com Flor (2019), apesar de ser uma tendência recente, o conceito de computação em nuvem é antigo, tendo iniciado nos anos 1960, atrelado ao surgimento da internet. Na época, o cientista da computação norte-americano, John McCarthy, inventor do termo “Inteligência Artificial”, defendeu a proposta de time-sharing ou computação por tempo compartilhado. McCarthy defendia que, na computação, é possível o computador ser utilizado simultaneamente por dois ou mais usuários, sendo possível realizar tarefas aproveitando o período disponível dos recursos. Na visão do cientista, o compartilhamento, além de reduzir gastos, permitiria pagamento somente do que foi usado.
Esse modelo foi apresentado por McCarthy durante um discurso no Massachusetts Institute of Technology (MIT), nos EUA, em 1961. Ele sugeriu a criação da utility computing ou computação como serviço de utilidade pública, no mesmo modelo do fornecimento de água, luz ou telefone.
Em 1962, Joseph Carl Robnett Licklider, americano, físico, matemático, psicólogo e cientista da computação, durante sua pesquisa para desenvolver uma tecnologia que permitisse que um computador fosse usado por duas ou mais pessoas simultaneamente, encontrou uma maneira de compartilhar dados de forma global.
Dessa forma, o cientista americano do MIT propôs pela primeira vez uma rede global de computadores. Licklider começou a discutir o conceito de “Rede Galáctica”. Essa rede previa vários computadores distribuídos globalmente, ligados entre si. Por meio do sistema de computadores em rede, era possível acessar os dados e os programas a partir de qualquer desses computadores, rapidamente. Agindo como uma nuvem, o modelo fornecia acesso a no máximo 3 pessoas por conexão.
Comentário: Na época, por volta 1969, Licklider participou do projeto ARPANET (Rede de Agências de Projetos de Pesquisa Avançada). A rede ARPANET, conhecida também como a “mãe” da internet, para a agência americana Advanced Research and Projects Agency (ARPA), na época, tinha o objetivo de interligar bases militares com os departamentos de pesquisa do governo americano.
Nesse contexto, Licklider avançou em sua visão, denominada Intergalactic Computer Network, na qual qualquer pessoa no mundo pode ser interconectada por meio de computadores e acessar informações de qualquer lugar e a qualquer momento. O seu trabalho além de levar a ARPANET como a precursora da internet atual, também proporcionou uma introdução à técnica de Computação em nuvem que conhecemos nos dias de hoje.
No ano de 1970, surge o termo virtualização, agregando uma grande inovação tecnológica para época. Por volta de 1972, a IBM lança um sistema operacional (SO) chamado sistema operacional de Máquina Virtual (VM).
A virtualização descreve um computador virtual que age exatamente como um computador real, com um sistema totalmente operacional. O conceito evoluiu com a internet e as empresas começaram a oferecer redes privadas “virtuais” como um serviço alugável, levando ao desenvolvimento da moderna infraestrutura de Computação em nuvem nos anos 90. Entretanto, a origem do termo “nuvem” é de 1997, quando o doutor Ramnath Chellappa utilizou pela primeira vez no mundo em uma palestra em Dallas o termo cloud computing.
Dentro de apenas alguns anos, as empresas começaram a trocar o hardware por serviços em nuvem, pois foram atraídas pelos benefícios como a redução nos custos e a simplificação em questões de pessoal de TI.
Atualmente, com o crescimento do uso da internet e de tecnologias complementares, como celulares inteligentes (smartphones), tablets e chips orientados para a comunicação e o desenvolvimento da infraestrutura de banda larga com e sem fio, resultou-se em uma revolução no setor. O modelo de negócios tornou-se menos intensivo em hardware e software e passou a se apoiar na prestação de serviços aos usuários e na venda de propaganda dirigida a clientes específicos. A possibilidade de separar o equipamento do serviço executado, aliada à tendência organizacional de terceirização de serviços de TIC (Tecnologia da Informação e Comunicação), permitiu o surgimento de novos líderes globais.
	
	Em meados da década de 2000, provavelmente, em 2006, a Amazon criou a AWS (Amazon Web Services) e a Elastic Computing Cloud (EC2). Esse modelo é um web service que disponibiliza capacidade computacional segura e redimensionável na nuvem. Ele foi projetado para facilitar a Computação em nuvem na escala da web para os desenvolvedores.
	
	A Google começou a oferecer seus pacotes de nuvem (Google Cloud Platform) em meados de 2008. A versão inicial do provedor ocorreu com o anúncio do Google App Engine, uma plataforma de desenvolvimento e hospedagem de aplicações nos data centers gerenciados da empresa. No ano de 2012, o mecanismo de computação em nuvem da Google foi lançado, mas disponibilizado ao público somente no final de dezembro de 2013.
	
	Anunciado pela Microsoft em 2008, também foi lançado o serviço de computação em nuvem chamado Microsoft Azure, enquanto teste, implantação e gerenciamento de aplicativos e serviços.
Em resumo, a computação em nuvem ou cloud computing simboliza a tendência de colocar toda a infraestrutura e informação disponível de forma digital na internet. Isso inclui software aplicativo, ferramentas de busca, redes de comunicação, provedores, centros de armazenamento e processamento de dados, conforme ilustração.
Conceitos da Computaçãoem Nuvem
A computação em nuvem ou cloud computing é uma tecnologia que permite, em qualquer lugar e independente de plataforma, o acesso a aplicativos, arquivos e serviços por meio da internet, sem a necessidade de instalação de programas ou armazenamento de dados, apenas utilizando um simples navegador.
O uso do termo nuvem tem sua origem nos diagramas das antigas redes de dados ISDN (Services Digital Network ou rede de serviços digitais) e Frame Relay, que eram projetadas pelas operadoras de telefonia. Os desenhos de nuvem mostravam a interligação entre ambas e sinalizava algo que estava fora do alcance das empresas. Por essa razão, não é possível saber em que computador ou computadores estão as aplicações em cloud computing.
Outro conceito para justificar o termo computação em nuvem vem do entendimento de que as informações e dados estão remotamente na nuvem, que nada mais é do que espaço virtual. Os usuários da nuvem podem armazenar arquivos, dados e aplicativos em servidores remotos e acessar esses dados com a ajuda da internet. Assim, os usuários não precisam estar em um determinado local para acessar os dados, podendo recuperá-los de qualquer lugar.
Cloud computing é a evolução dos serviços e produtos de tecnologia da informação sob demanda, chamado de utility computing. Esse tipo de serviço tem o objetivo de fornecer os componentes básicos como armazenamento, processamento e largura de banda de rede através de provedores especializados com um baixo custo. Os usuários desses serviços baseados em utility computing não se preocupam com escalabilidade, pois a capacidade de armazenamento fornecido é praticamente infinita ou, pelo menos, aparenta ser.
Com o objetivo de auxiliar na compreensão da utility computing, considere o seguinte exemplo:
Suponha que você tenha um requisito para operar 100 servidores por três anos. Uma opção seria alugar esses servidores por R$ 0,40 por instância/horas. Isso custaria aproximadamente 100 servidores * R$ 0,40 por instância/horas * 3 anos 8760 horas/ano = R$ 1.051.200.
Outra opção seria comprar os servidores e administrá-los. Suponha que o custo para comprar cada servidor seja de R$ 750 e que sejam necessários dois funcionários para realizar a administração, pagando R$ 100.000 por ano. Suponha ainda que os servidores consumam 150 watts cada e o custo da eletricidade é de $ 0,10 por quilowatt-hora. Assim, o custo anual para operar os 100 servidores seria de R$ 13.140 e a opção de comprar e administrá-los seria de aproximadamente 100 servidores * R$ 750 + 3 anos * R$ 13.140 eletricidade/ano + 3 anos * 2 funcionários * R$ 100.000 salários/ano = R$ 714.420.
Portanto, se a utilização dos servidores fosse de 100%, a opção de comprar 100 servidores seria mais barato, sem considerar a depreciação dos equipamentos ao longo dos três anos, enquanto, com a cloud, os equipamentos estarão sempre atualizados. Por outro lado, se a utilização dos servidores fosse de 68% ou menos, a opção de alugar um serviço seria mais interessante. Mesmo considerando que os números apresentados acima são apenas estimativas e que nem todos os custos foram considerados, pode-se verificar que modelo de utility computing é preferível em muitos casos.
A computação em nuvem é baseada na utilização da infraestrutura computacional de terceiros como uma solução inteligente e eficiente para os usuários. Essa infraestrutura de TI complexa é um ambiente redundante e resiliente, pois pode ser definida como a capacidade de um sistema de informação continuar em operação, mesmo com o mau funcionamento de um ou mais dos seus componentes. Com isso, os serviços podem ser acessados de maneira remota, de qualquer lugar do mundo e a qualquer hora.
Dessa maneira, para realizarmos determinada tarefa, bastaria nos conectarmos ao serviço on-line, acessar as ferramentas, salvar o trabalho e depois acessá-lo de qualquer outro lugar. A partir de qualquer computador e em qualquer lugar, podemos acessar informações, arquivos e programas num sistema único. Com a computação em nuvem, os seus dados não estão salvos em um disco rígido do seu computador, mas, sim, disponíveis na web. O requisito mínimo deste conceito é um computador conectado à internet e a um navegador.
O National Institute of Standards and Technology (NIST) define a computação em nuvem como um modelo que possibilita acesso, de modo conveniente e sob demanda, a um conjunto de recursos computacionais configuráveis (redes, servidores, armazenamento, aplicações, serviços etc), os quais podem ser rapidamente adquiridos e liberados com mínimo esforço gerencial ou interação com o provedor de serviços. Esse modelo de nuvem é composto por cinco características essenciais (autoatendimento sob demanda, amplo acesso à rede, acesso a um pool de recursos, elasticidade dinâmica e serviço mensurável); três modelos de serviço (Infraestrutura como um Serviço – IaaS, Plataforma como um Serviço (PaaS), Software como um Serviço (SaaS)); e quatro modelos de implantação (nuvem privada, nuvem comunitária, nuvem pública, nuvem híbrida) (NIST, 2018).
Características Essenciais da Computação em Nuvem
Segundo NIST, a computação em nuvem tem cinco características essenciais e determinantes para a tecnologia, são elas:
	On Demand Self-Service
	Autoatendimento (self-service) sob demanda, isto é, acesso direto e sob demanda, garantindo que a alocação e a liberação de recursos ocorram sem a necessidade de interação humana entre o usuário e o provedor.
	Broad Network Access
	Acesso à rede, isto é, os recursos devem estar acessíveis através de mecanismos de acesso à rede, por exemplo, a internet, sem a necessidade de qualquer infraestrutura especializada.
	Resource Pooling
	Compartilhamento de serviço que oferece recursos computacionais compartilhados entre diversos usuários, os quais não precisam ter conhecimento acerca da localização dos recursos utilizados. Esses recursos devem ser abstraídos por dispositivos físicos reais, o que é alcançado, na maioria das vezes, por meio de virtualização.
	Rapid Elasticity
	Elasticidade dinâmica, ou seja, a capacidade de ampliar e reduzir de acordo com o necessário, seja automática ou manualmente, sem a necessidade de lead times. Dessa forma, a rápida alocação e liberação de recursos da nuvem a qualquer momento e conforme a demanda de aplicação proporciona ao usuário a não preocupação com a quantidade de recursos a que tem direito. Além disso, proporciona a sensação de capacidade de armazenamento infinita, podendo a qualquer momento requisitar recursos.
	Measured Service
	Serviço mensurável é a capacidade de medir exatamente quais recursos estão sendo usados, monitorar e controlar esses serviços para podermos, posteriormente, apresentar esses dados ao cliente ou ao usuário final. O conceito de serviço mensurável contribuiu para o surgimento do modelo pay-as-you-go.
Modelo de Implantação da Computação em Nuvem
Na computação em nuvem, existem três modelos principais de diferentes implantações. Exploraremos aqui os três mais relevantes e ainda alguns outros existentes, os quais definem o local em que os dados são armazenados e como os usuários interagem com eles.
Public cloud – nuvem pública
As nuvens públicas são aqueles provedores de serviços que disponibilizam recursos como computação, armazenamento e aplicativos para o público em geral pela internet. Qualquer usuário pode efetuar login e usar esses serviços, em que se paga pelo número de recursos que usa. Nesse caso, os usuários têm menos controle sobre seus dados.
Vantagens desse modelo:
	Preço
	A divisão da infraestrutura entre vários clientes acaba diluindo o custo de aquisição e manutenção dos servidores e data centers.
	Facilidade de contratação, configuração e infraestrutura
	É simples a contratação dos serviços, implementação na empresa e a disponibilidade de todos os recursos disponíveis.
	Escalabilidade
	A divisão dos recursos entre clientes é feita de maneira dinâmica, sua empresa pode, em instantes, dobrar ou até mesmo triplicar a quantidade de computação e armazenamentopara atender a um pico de demanda.
	Performance
	Embora a performance do modelo público dificilmente chegue ao nível da nuvem privada, esse tipo de cloud ainda é muito eficiente até para o uso corporativo. Quanto mais as nossas infraestruturas de comunicação e internet avançam, menor é o gap entre a resposta de um servidor on premises e um remoto.
Algumas desvantagens são: segurança, controle feito por terceiros e os requisitos legais. Pode existir algum requisito de segurança específico que não seja atendido pela nuvem pública. Como você não é o proprietário do hardware, nem dos serviços, não poderá gerenciá-los como deseja. Por último, podem existir requisitos legais que a nuvem pública não cumpre.
Entre as desvantagens, a segurança é a mais impactante. O risco de invasão entre vizinhos em uma rede pública é praticamente inexistente, mas a má utilização da infraestrutura contratada por outra empresa pode colocar a sua em risco, já que um ataque feito com êxito ao servidor principal abre uma brecha para o sistema de cada cliente.
Dica: É importante lembrar que isso dificilmente acontece quando o provedor é de confiança e qualidade. Por isso, quando você decide pela nuvem pública, é bom partir para as marcas mais consolidadas e que oferecem mais dispositivos de segurança. Existem muitos provedores de serviços de nuvem, por exemplo: AWS – Amazon, Microsoft Azure e Google Cloud Platform. Alguns exemplos de serviços oferecidos na nuvem pública são: O Microsoft Office 365 e o Dropbox.
Private cloud – nuvem privada
As nuvens privadas são ambientes de nuvens construídos exclusivamente para um único usuário ou uma única empresa, normalmente localizados por trás do firewall do usuário.
Tradicionalmente, as nuvens privadas são on premise (dentro da empresa), porém, atualmente, as organizações estão construindo esse tipo de nuvem em data centers de terceiros, de propriedade do provedor, em locais off premise (fora da empresa). Esse ambiente oferece todos os benefícios da nuvem pública, como flexibilidade, escalabilidade, provisionamento, automação, monitoramento, entre outros, com a diferença de não ser dividida com outras empresas.
Normalmente, esse tipo de nuvem é usado por organizações com foco na segurança e gerenciamento de dados muito sensíveis, como transações financeiras. Além disso, pode ser empregado por empresas que possuam um controle rígido de segurança.
Algumas vantagens desse modelo:
	Disponibilidade
	No modelo privado, a disponibilidade pode ser bem maior, pois a nuvem pública precisa lidar com uma grande quantidade de clientes simultâneos, por isso é mais comum que aconteçam períodos de instabilidade e queda, interrompendo a produtividade de toda a empresa.
	Customização de infraestrutura
	A nuvem privada permite a construção da infraestrutura junto ao parceiro tecnológico, terminando com exatamente o que você precisa para garantir eficiência máxima e produtividade.
	Suporte exclusivo
	A provedora conhece a fundo a sua operação e o seu sistema, por isso identifica mais rapidamente onde está a falha e como corrigi-la. Em uma relação mais próxima, você também consegue entrar em contato diretamente com quem interessa e resolve dúvidas e ajustes em muito menos tempo.
	Segurança
	Com um monitoramento desenhado exclusivamente para o seu uso, existem menos brechas e qualquer anomalia (uma tentativa de invasão ou a instalação de um malware) fica muito evidente, dando tempo para que a TI reaja imediatamente e evite um comprometimento mais sério.
Algumas desvantagens desse modelo:
	Custo inicial
	O custo inicial é elevado, pois será necessário compra do hardware, instalação e configuração.
	Necessidade de equipe de TI própria
	É necessário manter uma equipe de TI na organização para que possa administrar a infraestrutura e serviços.
Hybrid cloud - nuvem híbrida
As nuvens híbridas, como o nome já indica, são aquelas constituídas pelos serviços da nuvem pública e privada. Alguns serviços são hospedados na nuvem privada, enquanto outros na nuvem pública. Dessa forma, a empresa pode manter dados cruciais na nuvem privada e outros dados na nuvem pública, aproveitando o melhor dos dois mundos. A imagem a seguir ilustra a nuvem pública e a privada com a nuvem híbrida, tendo as características de cada uma.
Ao optar pela nuvem híbrida, a empresa agrega uma solução que mescla características da nuvem privada e da nuvem pública. Isto é, um modelo de computação em nuvem híbrido é aquele que integra duas infraestruturas de cloud computing. Dessa maneira, é possível aproveitar as funcionalidades de ambos os modelos sem comprometer a performance, os custos operacionais ou mesmo a privacidade.
A nuvem híbrida atende perfeitamente à necessidade de se criar um ambiente de alta performance e controle para as rotinas internas de qualquer empresa. Nesse caso, ao mesmo tempo em que todas as soluções terão sua escalabilidade comparável com a de ambientes públicos, o gestor de TI poderá definir políticas de segurança de acordo com as demandas internas.
A adoção da nuvem híbrida pode beneficiar a empresa de diferentes formas. A união da cloud computing em ambientes públicos com a cloud computing em ambientes privados traz mais flexibilidade e versatilidade para a empresa.
A principal vantagem da nuvem híbrida está na redução do tempo necessário para efetivamente escalar os recursos, uma vez que a criação de uma infraestrutura mesclada é feita em um prazo menor que a aquisição e a integração de novos dispositivos a uma infraestrutura já existente.
Community cloud – nuvem comunitária
As nuvens comunitárias são compartilhadas por diversas empresas que têm interesses comuns, como missão, requisitos de segurança, políticas, entre outros. Nesse modelo, a nuvem comunitária pode ser administrada tanto pela própria organização, ou por terceiros, e pode existir tanto dentro (on premises), quanto fora (off premises) da organização.
A nuvem comunitária funciona de forma semelhante à nuvem pública, mas com um número de usuários reduzido. Assim como na nuvem pública, os custos com manutenção, troca de equipamentos e atualização do hardware nesse tipo de infraestrutura são divididos entre diferentes usuários. No entanto, ao contrário da nuvem pública, essa infraestrutura pode ser configurada de acordo com os objetivos das organizações.
Distributed cloud – nuvem distribuída
A nuvem distribuída se caracteriza com a possibilidade de ser acionada em diferentes localidades, mas com servidores conectados a uma única rede ou hub de serviços. Optando por essa solução, a empresa garante o máximo de disponibilidade de seus recursos, além de uma baixa latência.
Modelos de Serviço da Computação em Nuvem
A computação em nuvem distribui os recursos na forma de serviços. Com isso, em relação aos serviços oferecidos, podemos dividir em três modelos.
	
	Infraestrutura como serviço (IaaS) – nesse modelo, os serviços de virtualização e rede são fornecidos pelo provedor, enquanto o usuário cuida do sistema operacional, aplicativos e dados. Exemplos desse tipo de serviço incluem Amazon Web Services (AWS) e o serviço de Virtual Machines do Windows Azure.
	
	Plataforma como serviço (PaaS) – nesse modelo, o usuário gerencia os aplicativos junto com os dados. Muitas vezes, o usuário deseja iniciar e manter seus próprios aplicativos na nuvem, e assim, o PaaS entra em cena. Todas as necessidades de hardware, rede e SO (Sistema Operacional) são atendidas pelo provedor de serviços. Exemplos desse tipo de serviço incluem o Google App Engine e o Windows Azure.
	
	Software como serviço (SaaS) – nesse modelo, as necessidades de computação e armazenamento são atendidas pelo provedor de serviços em nuvem, o usuário só precisa fazer upload e baixar dados. Manutenção, tempo de inatividade, atualização e segurança são atendidos pelo provedor de serviços. Exemplo desse tipo de serviço é o Dropbox, Google APPS, Pipedrive e Shopify.
No quadro a seguir, você verá uma lista de recursos gerenciados pelo usuário e pelo provedor de acordo com cada categoriade serviço em nuvem.
Resumindo:
· IaaS – requer o máximo de gerenciamento do usuário entre os serviços da nuvem;
· PaaS – requer menos gerenciamento do usuário;
· SaaS – requer o mínimo de gerenciamento.
 A’A computação em nuvem estreou oferecendo a SaaS, depois, acrescentou ao seu portfólio soluções IaaS e PaaS, entregues pela nuvem privada, pública e híbrida. Como a nuvem tem capacidade infinita de prover serviços, estão surgindo diversas soluções em outros modelos de serviços como:
	DRaaS
	(Recuperação de desastres como serviço), voltada para segurança da informação, responsável pela replicação dos servidores, dados e aplicações;
	CaaS
	(Comunicação como serviço), quando as soluções de comunicação, tais como, VoIP, mensagens e streaming de vídeos são oferecidas como serviço;
	FaaS
	(Função como Serviço), DBaas (Banco de Dados como Serviço), MaaS (Malware como Serviço) entre outras.
Vantagens da Computação em Nuvem
Uma das vantagens da computação em nuvem é a possibilidade de utilizar os recursos de hardware e software disponíveis de forma mais eficiente, permitindo reduzir a capacidade ociosa em armazenamento e processamento de dados, por meio do compartilhamento de computadores e servidores interligados pela internet. Além dessa vantagem relatada no parágrafo anterior, o modelo oferece várias vantagens para os usuários, apesar de apresentar também alguns riscos. Vamos analisar algumas das principais vantagens da computação em nuvem:
	Modelo econômico
	Não existe a necessidade de se investir em software e hardware, pois são fornecidos pela nuvem. Assim, são economizados custos como aluguel de escritórios, eletricidade, ar condicionado, manutenção e despesas operacionais. Além disso, paga-se apenas pelos serviços que consumiu. Sendo assim, não há custos iniciais com a infraestrutura, possibilidade de pagar para obter recursos adicionais, se necessário, assim como a possibilidade de parar de pagar pelos recursos que não são mais necessários
	Modelo escalável
	É possível alterar os recursos da nuvem solicitando mais serviços ou diminuindo conforme a demanda. A computação em nuvem é compatível com o escalonamento vertical e horizontal. No escalonamento vertical, há a adição de recursos para aumentar a potência do servidor, como, por exemplo, a adição de CPUs ou memória. No escalonamento horizontal, há a adição de mais servidores que funcionarão juntos
	Modelo elástico
	Na computação em nuvem, é possível alterar a carga de trabalho à medida que se aumenta ou diminui a demanda, adicionando ou removendo recursos automaticamente. Por exemplo, imagine um site que, em um determinado momento, divulga um furo de notícia, o que gera um aumento no tráfego de visitas ao site. Por causa da elasticidade da computação em nuvem, serão alocados mais recursos de computação para lidar com esse aumento. Quando o tráfego voltar ao normal, os recursos adicionais serão deslocados e assim, minimizam-se os custos
	Modelo atual
	A tendência atual das empresas em adotar a computação em nuvem permite que o foco seja concentrado no negócio, ao invés de modelos passados nos quais as empresas alocavam recursos humanos, tempo, investimento e esforço para gerenciar o data center local. Na computação em nuvem, não existe essa preocupação, pois esses recursos estão disponíveis para a empresa na nuvem, além de manter os serviços e aplicativos sempre atualizados
	Modelo com implantação rápida
	Os serviços solicitados pela empresa podem estar em funcionamento em apenas alguns minutos. Isso fornece uma grande vantagem inicial às empresas que usam a abordagem tradicional ou convencional
	Modelo global
	Os serviços em nuvem estão disponíveis 24 horas por dia, 7 dias na semana. Mesmo se a empresa estiver fechada, o trabalho poderá continuar. Além de ser possível trabalhar a qualquer momento e em qualquer local, desde que tenha um dispositivo habilitado para internet
	Modelo confiável
	Os provedores de computação em nuvem oferecem serviços de backup de dados, recuperação de desastre e replicação de dados garantindo que seus dados estejam sempre seguros
	Modelo seguro
	A computação em nuvem lida com a responsabilidade de segurança, garantindo a segurança física ao controlar quem tem acesso ao prédio e operação dos servidores; e a segurança lógica ao controlar quem pode se conectar aos seus sistemas e dados pela rede
Desvantagens da Computação em Nuvem
As desvantagens da computação em nuvem estão associadas, principalmente, à segurança e à manutenção do sigilo dos dados armazenados na nuvem. Embora a nuvem seja uma tecnologia recente e tenha muitos benefícios e vantagens, é importante não negligenciar suas falhas. A seguir, citamos as principais:
	Perda de controle
	Ao optar por serviços em nuvem, você está entregando seus dados e aplicativos ao provedor. Você depende do provedor de nuvem caso ocorram problemas de hardware ou software. A velocidade e a qualidade do serviço nessas situações podem não corresponder às suas expectativas
	Interrupção dos serviços em nuvem
	Em caso de um ataque cibernético, falta de energia ou perda de conectividade com a internet pelo provedor de nuvem, sua empresa pode sofrer períodos de inatividade indesejados
	Ameaça potencial à segurança
	Atualmente, os hackers estão direcionando sites de alto perfil, como o de provedores de serviços em nuvem proeminentes. Você não tem controle sobre a segurança de seus dados, aplicativos e software. Além disso, você pode sofrer perdas e tempo de inatividade se a segurança do seu provedor de serviços em nuvem for violada
Módulo 3
Identificar as tecnologias habilitadoras da computação em nuvem
A computação em nuvem é resultado da evolução natural e da união de várias outras tecnologias da área de TI, sendo que a definição dessa computação é ter como foco a transformação da rotina tradicional de como empresas e usuários finais utilizam e adquirem os recursos da Tecnologia da Informação (TI). Isto é, toda a infraestrutura de TI (hardware, software e gestão de dados e informação), até então tratada como um ativo das empresas, passa a ser administrada pelos provedores da computação em nuvem e acessada por empresas e usuários através da internet.
O acesso remoto é possível de ser realizado de qualquer tipo de equipamento – celulares, notebooks, tablets, computadores etc. Dessa forma, os provedores de nuvem passam a prover a infraestrutura e os serviços capacitados para atender a essa demanda. Trata-se de um modelo eficiente para utilizar softwares, acessar, armazenar e processar dados por meio de diferentes dispositivos e tecnologias web.
O formato proposto pela computação em nuvem reúne conceitos, tendências e recursos trabalhados na área de TI, como: virtualização, conteinerização, computação sem servidor (serverless computing), application service provider (ASP), grid computing, utility computing e software como serviço. Essas tecnologias habilitam a computação em nuvem, tornando-se parte fundamental da arquitetura dos provedores de nuvem.
Virtualização
O termo virtualização tem origem no conceito “virtual”, ou seja, algo abstrato que simula as características de algo real. Esse conceito surgiu na década de 1960, sendo mais divulgado na década posterior, porém as limitações tecnológicas da época impediram maiores avanços dessa inovadora tecnologia para a época. Após a chegada da internet, a possibilidade de processar informações e executar operações com o acesso remoto impulsionaram a virtualização e seus recursos.
A virtualização é a tecnologia que permite que diversas aplicações e sistemas operacionais sejam processados em uma mesma máquina. Dessa maneira, foi possível o data center das empresas trabalhar com inúmeras plataformas de sistemas operacionais, sem a necessidade do aumento no número de servidores físicos. Ou seja, a virtualização permite um alto nível de portabilidade, sendo muito mais flexível.
Esse tipo de tecnologia permite compartilhamento dos recursos de hardware - processador, memória, interface de rede, disco rígido - da máquinafísica com todas as máquinas virtuais ali presentes. Todo o gerenciamento e alocação de recursos de hardware de uma máquina virtual é feito pelo hypervisor ou monitor de máquina virtual (VMM – virtual machine monitor). O hypervisor é uma camada de software localizada entre a camada de hardware e o sistema operacional. Exemplo:
Um usuário utiliza o sistema operacional Windows em seu computador, mas deseja utilizar um software que está disponível apenas para o Linux. Com a virtualização, esse usuário pode executar uma versão de qualquer sistema operacional e seus aplicativos em seu próprio computador, sem ter que instalar fisicamente.
A virtualização pode ser dividida em paravirtualização e virtualização completa. Na figura a seguir, você verá a diferença entre as duas. Na virtualização completa, o hypervisor emula todo o hardware da máquina física para as máquinas virtuais, nesse caso, o sistema operacional executa como se não estivesse em um ambiente virtual. A paravirtualização entrega para as máquinas virtuais um hardware igual ao real, com isso, o sistema a ser virtualizado pode sofrer alterações no decorrer do tempo. Essa funcionalidade não é permitida na virtualização completa, pois, nela, o hardware é entregue de forma virtual. Na paravirtualização, o sistema operacional da máquina virtual precisa ser modificado para saber que está rodando em um ambiente virtualizado e as instruções privilegiadas não são executadas diretamente, mas através do hypervisor.
Em resumo, a virtualização é um tipo de tecnologia, a qual permite que diversas aplicações e sistemas operacionais sejam processados em uma mesma máquina física. Vejo o exemplo:
Conteinerização
A conteinerização, também conhecida como virtualização baseada em containers, é um método utilizado na implantação e execução de aplicativos distribuídos sem a necessidade de configuração de uma VM completa para cada um deles. Em vez disso, vários sistemas isolados, chamados de containers, são executados em um host de controle, acessando um único kernel, conforme ilustrado no esquema a seguir.
A tecnologia de conteinerização permite a entrega de uma determinada aplicação dentro de uma estrutura virtual (contêiner) que se assemelha a uma VM (virtual machine). Além disso, consome menos recursos e possui uma estrutura de portabilidade mais simples entre diferentes ambientes, tanto físicos, como virtuais. Isto é, um contêiner é a versão enxuta de uma VM padrão, que necessita de um hypervisor para ser executada.
Os contêineres são virtualizados no nível do sistema operacional, sendo executados diretamente acima do kernel. Isso significa que são muito mais leves, iniciam muito mais rápido e usam apenas uma pequena parte da memória, em comparação com a inicialização de um sistema operacional completo. Exemplo:
Para entendermos melhor, vamos imaginar um navio cargueiro com vários contêineres. Se um desses danificar, não afetará os outros ou o navio, pois cada um está isolado e protegido. Ao contrário do que muitos pensam, essa tecnologia não é tão nova. Na década de 1970, durante o desenvolvimento do Unix V7, foi introduzido o system call, ou chamada de sistema, também conhecido como chroot, alterando o diretório raiz de um processo para um novo local no sistema de arquivos, recurso muito utilizado até hoje para eventuais manutenções. Essa evolução trouxe o conceito de isolamento do processo, segregando assim, o acesso a arquivos para cada etapa.
 Clique nas datas para ver as informações.
	2000
	No mesmo período, é lançado o Linux VServer “old-school", a primeira versão do Solaris Container, além do projeto OpenVZ (Open Virtuozzo) e do Process Container, pelo Google
	2008
	Em 2008, surge a primeira e mais completa implementação do gerenciador de contêiner do Linux, o projeto LXC (Linux Contêiner), que serviu de base para outras tecnologias como o Warden, em 2011, e o Docker, em 2013, que levou a tecnologia de contêiner a um novo patamar
O Docker é uma plataforma open source escrito em Go, que é uma linguagem de programação de alto desempenho desenvolvida dentro da Google, que facilita a criação e administração de ambientes isolados. Isto é, o Docker é uma implementação de virtualização de contêineres que vem conquistando cada vez mais espaço devido à computação em nuvem.
Surge o conceito de cloud containers ou contêineres na nuvem, isto é, virtualização baseada em contêiner - modelo de virtualização na nuvem em nível de sistema operacional, com o objetivo de implantar e executar aplicativos distribuídos. Dessa forma, aciona-se em um único host, acessando um único kernel, diversos sistemas isolados.
Apesar do uso do termo virtualização baseada em contêiner, não podemos confundir com virtualização em si. Isso porque, nessa última, o servidor é configurado para atuar como se fosse uma máquina física, com sistema operacional próprio, garantindo um ambiente funcional. Essencialmente, um conjunto de SO é instalado em um único equipamento físico. No caso de cloud containers, não há uso de sistemas operacionais; os contêineres são independentes e executam a aplicação, sendo só ela a instalada, o que facilita o processo.
Computação sem Servidor (Serverless Computing)
Inicialmente, nossas aplicações estavam hospedadas em servidores físicos. Com a evolução da tecnologia, surgiram as máquinas virtuais — e as soluções PaaS (Platform as a service).
Essas últimas virtualizavam a entrega de servidores, mas a preocupação em manter os sistemas operacionais virtuais do servidor ainda persistia.
O próximo passo foi a chegada da tecnologia dos containers, contudo ainda era necessário mantê-los por pessoas especializadas nesta solução. Com o objetivo de retirar essa carga de trabalho do profissional de desenvolvimento de software, surgiu a arquitetura serverless.
Computação sem servidor ou serverless computing é a tecnologia que permite hospedar funções (Plataforma de Função como Serviço - FaaS) sem a preocupação de configuração do servidor, pois todo o ambiente (hardware e software) já está pronto para execução da função desenvolvida.
Por volta de 2006, foi lançada uma plataforma com o objetivo de fazer todo o trabalho rotineiro para o desenvolvimento e implantação de uma aplicação javascript, cobrando apenas pelo código que fosse executado. Assim, nascia a plataforma Zimki, que, na época, não obteve aceitação, mas representa o nascimento de um novo conceito de serviço de computação em nuvem, function as a service (FaaS). Isto é, uma plataforma de função como serviço e, consequentemente, um novo modelo de arquitetura, o serverless computing.
O serverless é orientado a eventos e se diferencia das outras tecnologias de servidores físicos, virtuais e contêineres por sua infraestrutura, sendo um modelo focado na entrada, execução e saída. Essa solução permite ao desenvolvedor criar e executar suas aplicações e serviços sem se preocupar com os servidores. Uma aplicação serverless não exige qualquer tipo de gerenciamento de servidor.
Dentre os diferenciais dessa solução, podemos destacar o baixo custo, pois, nesse caso, as soluções serverless são cobradas por uso, isto é, você só pagará aquilo que realmente está utilizando. Outro diferencial é a redução de código, pois é uma solução menos complexa neste sentido, sem a necessidade de ter um sistema back-end de várias camadas. Além de ser escalável e flexível, pois não é necessário configurações adicionais para aproveitar a escalabilidade que a arquitetura proporciona.
Atualmente, existem três principais fornecedores de soluções serverless: Amazon AWS, Microsoft Azure e Google Cloud. Apesar de o conceito serverless ter tomado maior visibilidade atualmente devido às funções e capacidade de executar código sem um servidor, há algum tempo, já estamos consumindo diferentes serviços que também abordam o conceito.
Na imagem abaixo, podemos visualizar de forma mais didática a diferença entre as três tecnologias estudadas até o momento: máquinas virtuais, contêineres e computação sem servidor.
Provedor de Serviços de Aplicação
Provedorde serviços de aplicação ou application service provider, no inglês (ASP), é um formato de terceirização que fornece software e aplicações através da internet para usuários finais, pequenas e médias empresas ou até grandes organizações. Em vez de as organizações arcarem com os encargos financeiros, os requisitos de hardware e os conhecimentos técnicos necessários para ter o software, esses aplicativos são alugados de terceiros. Nesse modelo, os provedores alugam aplicações e serviços de acordo com a necessidade dos clientes, que, por sua vez, pagam um valor para usufruir desse serviço como uma assinatura. Exemplo:
Alguns exemplos de ASP são os webmails, como correio do Yahoo, correio do Google, além do armazenamento de documentos e planilhas no Google Docs. Esses são serviços ASP gratuitos.
Através do sistema de identificação e autenticação é possível acessar os documentos, planilhas, vídeos, ou seja, todos os arquivos armazenados remotamente no servidor. Algumas características dessa solução são os baixos custos em relação a ter acesso a recursos tecnológicos de ponta, eliminando a necessidade de realizar investimentos em uma infraestrutura própria ou mesmo melhorias nos sistemas já existentes. Os ASPs fornecem uma configuração e instalação rápidas, pois não é necessário na implementação de um software fazer estudos de viabilidades, demonstrações, testes. O aplicativo já está operacional para o uso.
Grid Computing
A grid computing ou computação em grade é a tecnologia que agrupa servidores com o objetivo de trabalhar em conjunto, formando uma grande infraestrutura. Esse modelo requer o uso de softwares responsáveis em dividir e distribuir partes de um programa como uma imagem grande do sistema para milhares de computadores.
O termo grid foi usado inicialmente nos anos 90, no meio acadêmico. Foi originalmente proposto para denotar um sistema de computação distribuída que provia serviços computacionais sob demanda, da mesma forma que os fornecedores de energia elétrica e de água.
Portanto, podemos definir grid computing como um tipo de sistema paralelo e distribuído. Esse sistema permite o compartilhamento, a seleção e o agregar de recursos geograficamente distribuídos de forma dinâmica e tempo de execução dependendo da sua disponibilidade, capacidade, performance, custo e requerimentos dos usuários. Exemplo:
Por exemplo, imaginamos duas empresas localizadas em países distantes e com fusos horários diferentes. Essas empresas poderiam formar um grid ao combinar seus servidores, dessa maneira, cada empresa utiliza os ciclos de processamento ocioso da outra em seus horários de pico, já que, com horários diferentes, os picos de acesso aos servidores de cada empresa ocorrerão também em horários diferentes.
Entre as características dessa solução, podemos citar a possibilidade de explorar recursos subutilizados e recursos adicionais, como ciclos de CPU, espaço em disco, conexões de rede, equipamentos científicos.
Destaca-se também pela capacidade de processamento paralelo, pois uma aplicação utilizando-se de algoritmos e técnicas de programação paralela pode ser dividida em partes menores, em que essas partes podem ser separadas e processadas independentemente. Cada uma dessas partes de código pode ser executada em uma máquina distinta no grid, melhorando a performance. Com essa tecnologia, os recursos e máquinas são agrupados formando uma organização virtual.
Por último, a confiabilidade é uma característica baseada em máquinas espalhadas por lugares diferentes, em que, quando uma falha atinge uma parte do grid, as demais podem continuar sua operação normalmente.
É comum que as tecnologias grid e cluster se confundam, porém, existe uma diferença na maneira como os recursos são gerenciados. No cluster, há um gerenciador de recursos centralizado e responsável pela alocação de todos os recursos e, dessa maneira, todos os nós trabalham em conjunto. No grid, cada nó tem seu próprio gerenciador de recursos e não existe a responsabilidade de prover a visão de que faça parte de um só sistema.
Em resumo, computação em grade, ou grid computing, é uma rede na qual os membros estão conectados em forma de sistema distribuído. Nessa rede, trabalha-se cooperativamente para se atingir um objetivo, com o diferencial de uma gerência mais eficiente e justa dos recursos, como: processadores e utilização da largura de banda da internet.
Utility Computing
Utility computing ou computação de utilidade pública é um modelo classificado como computação sob demanda, pois o usuário pode contratar software, hardware e serviços conforme sua necessidade de utilização e em função de fatores como picos, quedas e conforme o período de uso. Assim, podemos fazer um comparativo com os serviços de fornecimento de água, luz ou telefone, conforme a demanda do cliente.
O termo utility computing resulta das chamadas utilities, que, em inglês, são as empresas públicas que têm como modelo de negócios a cobrança pelo que é consumido. Ao permitir a aquisição de capacidade temporária no processo e armazenamento de dados, essa tecnologia potencializa a otimização da infraestrutura de hardware, software e serviços com redução dos custos fixos por capacidade não utilizada.
Algumas características importantes da utility computing são: escalabilidade, preço sob demanda e serviços padronizados.
· A escalabilidade é uma métrica importante que deve ser garantida na computação de utilidade para fornecer recursos de TI disponíveis a qualquer momento. Se a demanda for estendida, o tempo de resposta e a qualidade não deverão ser afetados.
· O preço sob demanda é programado de forma eficaz, pagando de acordo com o uso do hardware, software e serviços contratados.
· O catálogo é produzido com serviços padronizados por diferentes contratos de nível de serviço para os clientes. Os serviços web e outros recursos são compartilhados pelo provedor, usando tecnologias de automação e virtualização.
Murch (et. al. 2004) confirma que a utility computing já está sendo implementada em diversas áreas. Vamos considerar alguns exemplos:
Exemplo 1
Uma empresa de energia canadense está economizando cerca de US$ 500.000 por ano usando notebooks com aplicativos hospedados na nuvem, para seus 400 trabalhadores de campo. O objetivo desse projeto de computação móvel na Hydro One Networks em Toronto é substituir o papel propenso a erros por dados digitais mais rápidos e precisos. Os resultados são economias nos custos de processamento e levantamento de dados muito mais precisos.
Exemplo 2
O varejista de roupas masculinas Ahlers criou um site de autoatendimento, através do qual seus varejistas podem obter rapidamente informações sobre produtos e rastrear pedidos.
Exemplo 3
A Harry & David Holdings, Inc. (Harry & David), especialista em presentes de Natal, contratou grandes mainframes IBM, servidores UNIX e servidores Intel para lidar com um aumento de tráfego anual antes da temporada de presentes. Cerca de 65% das vendas anuais ocorrem entre meados de novembro e final de dezembro; eles pagam os custos mais altos durante esse período e não antes - um exemplo de "pagamento conforme o uso".
Exemplo 4
A empresa de transporte russa Mostransagentstvo implementou um novo sistema que permite que os clientes façam reservas de viagens imediatamente.
Exemplo 5
A Swets Information Services é um parceiro de terceirização que facilita o acesso e gerenciamento de informações acadêmicas, comerciais e profissionais. São distribuídos links entre 60.000 fornecedores e 65.000 bibliotecários, compradores e usuários finais. A Swets Blackwell criou um sistema on-line para permitir que os clientes vejam respostas imediatas às pesquisas por coleções de periódicos da biblioteca.
Módulo 4
Categorizar os fundamentos da segurança em nuvem
A computação em nuvem tem sido vista como crescente solução para as demandas dos usuários dos serviços de Tecnologia da Informação, garantindo serviços confiáveis e de melhor desempenho. Além disso, proporciona disponibilidade e acesso de diferentes lugares via internet,bem como de diferentes dispositivos - computadores, celulares e tablets.
Nesse cenário, os dados ficam submetidos às vulnerabilidades de uma rede como a internet, sofrendo interceptações, ataques e modificações. Ou seja, por mais que a computação em nuvem agregue uma série de benefícios para as empresas e usuários, ela também proporciona alguns perigos na mesma proporção.
Essa solução traz inúmeros desafios de segurança dos serviços e dos dados armazenados na infraestrutura dos provedores. O cuidado com as questões de segurança é primordial, pois pode trazer reflexos negativos para as empresas e para os usuários que fazem uso de tais serviços. Exemplo:
Um exemplo dessa situação foi a falha do serviço AWS (Amazon Web Services) em abril de 2011, que afetou a grande maioria dos sites que utilizavam sua infraestrutura, localizada na Costa Leste dos EUA. Entre os afetados estão sites famosos que utilizam os recursos da AWS para oferecer os seus serviços, tais quais: Quora, Reddit, FourSquare e Everyblock (GILBERTSON et al 2011).
Outro exemplo de problema de segurança associado à computação em nuvem foi o vazamento das senhas do Evernote em fevereiro de 2013, cujo impacto foi percebido pelos 50 milhões de usuários registrados no serviço, que tiveram que trocar sua senha (CLULEY at al 2013).
Princípios da Segurança da Informação
A segurança da informação consiste em garantir a integridade e proteção dos dados. Entretanto, seu conceito não se baseia apenas na proteção dos dados dentro de um computador, mas também dentro de um sistema, desde o ambiente externo à infraestrutura da empresa.
Os três pilares da segurança da informação são: confidencialidade, integridade e disponibilidade, conforme você poderá ver na figura a seguir.
Esses pilares representam o que o provedor de nuvem deve garantir ao usuário.
	Confidencialidade
	Significa oferecer um serviço garantindo que as informações armazenadas na infraestrutura do provedor estejam disponíveis apenas para os usuários e processos autorizados. Podemos resumir que a confidencialidade está relacionada com o sigilo das informações
	Integridade
	Significa oferecer um serviço com a garantia de que os dados não irão sofrer nenhuma alteração, mantendo sempre suas características originais na infraestrutura do provedor
	Disponibilidade
	A disponibilidade refere-se à informação que está habilitada para acesso no momento desejado, disponível 24/7 (24 horas por dia, 7 dias por semana) ou sob demanda
Alguns autores adotam mais 2 princípios, totalizando 5 princípios básicos para a segurança da informação, são eles: autenticidade e legalidade, formando a sigla CIDAL.
· C – Confidencialidade
· I – Integridade
· D – Disponibilidade
· A – Autenticidade
· L – Legalidade
Além desses, também é possível incluir a irretratabilidade ou não repúdio ao garantir que o autor não negue a informação que se criou ou que foi assinada em algum documento ou arquivo. Dessa forma, mantém-se o controle do autor daquela informação.
Papéis da Segurança na Computação em Nuvem
Os papéis são importantes para definir responsabilidades, acesso e perfil aos diferentes usuários que fazem parte e estão envolvidos em uma solução de computação em nuvem.
O provedor é responsável por disponibilizar, gerenciar e monitorar toda a estrutura para a solução de computação em nuvem, além de fornecer serviços nos três modelos. Os usuários utilizam os recursos fornecidos pelo provedor e, em alguns casos, disponibilizam serviços para outros usuários finais. Essa organização em papéis ajuda a definir os atores e os seus diferentes interesses. Os atores podem assumir vários papéis ao mesmo tempo, sendo que apenas o provedor fornece suporte a todos os modelos de serviços.
A segurança dos serviços executados na computação em nuvem está de acordo com o tipo de serviço e recursos oferecidos pelo provedor. Contudo, a responsabilidade pela segurança é dividida tanto por parte do provedor, como do usuário, dessa maneira, nenhuma das partes fica desprovida de responsabilidades.
Ao se optar por um determinado modelo de serviço, ocorre a delimitação dessas responsabilidades. O esquema ilustra uma visão genérica da delimitação de controle dos recursos de computação em relação ao usuário e provedor com base na notação comum de modelos de serviço do National Institute of Standards and Technology (NIST): IaaS – Infrastructure as a Service, PaaS – Platform as a Service e SaaS – Software as a Service.
Veja a seguir um exemplo de responsabilidade compartilhada entre o usuário e o provedor.
Ao observar o exemplo acima, é possível identificar os diferentes papéis entre os serviços oferecidos pela computação em nuvem.
	
	No caso do serviço IaaS, o provedor é responsável pela infraestrutura física de TI, bem como pela sua disponibilização, gestão e monitoramento da rede, do armazenamento e do servidor hospedeiro. Porém, também oferece o serviço de máquina virtual ao usuário com uma responsabilidade compartilhada.
Assim, fica a responsabilidade exclusiva do usuário em administrar e manter os aplicativos hospedados no provedor. Soluções desse tipo, como é o caso do Microsoft Azure e da Amazon AWS, são ideais para empresas que buscam eliminar preocupações e riscos relacionados com infraestrutura física de TI.
	
	Ao se optar pelo serviço PaaS, este facilita a administração dos serviços contratados, pois permite que o usuário se concentre nas metas de seus aplicativos. Devido ao serviço de máquina virtual e aplicativos ser de responsabilidade, tanto do provedor, como do usuário, é possível eliminar a necessidade dos gestores de TI se preocuparem com administração de infraestruturas de hardware. Assim, o usuário conta com uma plataforma de serviços na nuvem mais simples e prática ao dividir a responsabilidade da administração do servidor de máquina virtual e aplicativos com o provedor.
Dessa forma, o provedor fica com a responsabilidade de disponibilizar, gerenciar e monitorar o serviço de rede e o serviço de máquina virtual e aplicativos, porém, para esses dois últimos, de maneira compartilhada com o usuário.
Normalmente, o PaaS é voltado para empresas desenvolvedoras de software, que pretendem criar um ambiente de execução de sistemas próprios na nuvem. Esse é o caso de plataformas de vendas e ferramentas de desenvolvimento
	
	No caso do serviço SaaS, os usuários licenciam ferramentas eficientes, seguras e escaláveis fornecidas pelo provedor. A responsabilidade é exclusiva do provedor desde a infraestrutura de rede até a disponibilização das máquinas virtuais. Esse é o caso, por exemplo, do Google Apps e do Microsoft Office 365. Nessas soluções de fácil contratação e com poucos riscos para o usuário, é possível executar suítes de aplicativos de escritórios completas direto no navegador, tendo uma experiência de uso semelhante a um aplicativo desktop. Por se tratar de softwares de uso diário, esse tipo de plataforma pode ser utilizado em ambientes pessoais e corporativos.
Para o usuário, o SaaS elimina preocupações com distribuição de correções, novas funções e gerenciamento de sistemas. Todas essas atividades são de responsabilidade do provedor, que se compromete a fornecer a melhor experiência de uso possível em diversos dispositivos
É possível concluir que tanto o usuário como o provedor têm o controle total ou compartilhado da infraestrutura da computação em nuvem, sendo rede, armazenamento, servidor, máquina virtual ou aplicação. Tem também a responsabilidade sobre a segurança desses elementos. Um exemplo é o serviço de disco virtual do Dropbox (tipo SaaS), no qual a maior parte dos recursos é controlada pelo provedor, além de existir um procedimento de definição de senhas, o que não impede o usuário de divulgar a sua senha de maneira indevida e comprometer seu serviço.
Segurança na Computação em Nuvem
A segurança na computação em nuvem é o desafio mais visível a ser enfrentado. Isso porque a informação, que antes era armazenada localmente, agora se localiza na nuvem em local físico que não se tem precisão onde é, nemque tipos de dados estão sendo armazenados juntos.
A preocupação dos usuários dos serviços de computação em nuvem está vinculada à insegurança no acesso remoto aos serviços e nas informações situadas na infraestrutura do provedor, além do compartilhamento de equipamentos que contenham dados e processos de diversas empresas, e não exclusiva, como de costume.
O acesso aos serviços estabelecidos nas nuvens é realizado por variados usuários simultaneamente, gerando uma preocupação com a segurança e a garantia de níveis de serviços.
Instituições de pesquisa como a Cloud Security Alliance – CSA (Simmonds, Rezek & Reed, 2011) e a European Network and Information Security Agency - Enisa (Catteddu & Hogben, 2009) destacam os problemas de segurança na computação em nuvem. Isso não é feito apenas com o objetivo de proporcionar a computação em nuvem mais segura, mas também para aumentar a adoção dessa tecnologia, tanto por parte do ambiente acadêmico, como pelas empresas.
Ao se analisar os problemas de segurança em computação em nuvem, é empregado uma classificação por categoria com o objetivo de melhorar a identificação dos aspectos fundamentais de segurança. A classificação apresentada está dividida em 7 (sete) categorias: segurança de rede, interfaces, segurança de dados, virtualização, governança, conformidade e questões legais, que se subdividem em categorias menores (GONZALEZ et al., 2012).
	Segurança de Rede
	A categoria de segurança de rede refere-se a problemas de segurança associados às redes de comunicações, às interações entre os elementos de processamento e armazenamento da nuvem. Dessa forma, dividem-se nas seguintes subcategorias: transferências, firewall e configurações de segurança. A característica dos provedores da nuvem em ter arquiteturas distribuídas, compartilhando recursos em larga escala, além da sincronização de máquinas virtual, implica em um maior fluxo de dados dentro da nuvem. Logo, requer maior controle dos seus meios de comunicação.
	Interfaces
	As interfaces de acesso às nuvens são os meios que permitem a utilização do serviço por parte dos usuários, bem como a execução de tarefas administrativas e de controle do sistema. São fundamentais para a comunicação entre aplicações e para permitir que algumas funcionalidades sejam implementadas. No entanto, também podem ser violadas, o que foge da responsabilidade direta do usuário.
	Segurança dos Dados
	Essa categoria de segurança é referente à proteção dos dados em relação à confidencialidade, disponibilidade e integridade.
	Virtualização
	A técnica de virtualização divide os recursos virtualizados do hardware, mas é possível explorar brechas de segurança que burlem esse isolamento entre as máquinas, possibilitando a captura dos dados. Essas brechas de segurança, normalmente, são falhas do hypervisor, permitindo acesso ao disco e à memória das máquinas, de forma que se possa acessar também dados de outros usuários, o que afeta a integridade e a confidencialidade. Um exemplo de ataque entre máquinas virtuais é o cross-VM attacks, que estabelece canais de comunicação entre máquinas virtuais para facilitar a obtenção de dados por meios não autorizados.
	Governança
	Essa categoria está relacionada a problemas de perda de controle administrativo e de segurança sobre os recursos e os dados, ao serem repassadas decisões dessa natureza ao provedor da nuvem.
	Conformidade
	A categoria de conformidade de serviço trata de problemas relacionados às obrigações contratuais estabelecidas para o serviço e seus usuários.
	Questões Legais
	Em relação a essa categoria, é importante ressaltar que nem todos os aspectos legais de um país são aplicáveis a uma nuvem, principalmente em relação à abrangência internacional de algumas. Como a localização dos dados é incerta, pode haver distribuição em diversos data centers, em diferentes países e sob jurisdições distintas.
Principais soluções de Segurança na Computação em Nuvem
Com o objetivo de proteger os dados dos usuários, os provedores que oferecem serviços de computação em nuvem desenvolveram uma série de métodos que evitam o acesso de pessoas não autorizadas às informações.
Na segurança de rede, o provedor da nuvem deve assegurar o tráfego de redes legítimas e bloquear os maliciosos, além de rastreá-los por meio de dispositivos ou softwares de firewall. A utilização desse dispositivo oferece uma proteção à infraestrutura do provedor da nuvem contra ataques internos e externos. Esses mecanismos oferecem o controle de acesso no isolamento, na filtragem de endereços e nas portas de acesso, além da prevenção de ataques de negação de serviço (DoS – Deny Of Service).
Uma outra forma de segurança de rede é a configuração de protocolos, sistemas e tecnologias, oferecendo, assim, diferentes níveis de segurança e privacidade para o usuário e o provedor.
Outro ponto importante é a proteção das instalações dos provedores de serviço em nuvem. Os cuidados em manter a temperatura do local em níveis baixos (evitando o superaquecimento das máquinas), ter fonte de energia elétrica alternativa e permitir que apenas funcionários autorizados frequentem o espaço onde estão instalados os servidores são medidas de segurança. Além disso, os provedores devem fazer backups (cópias de segurança) periodicamente para recuperar dados, caso algum disco seja corrompido ou inutilizado.
Nas interfaces de acesso, o provedor deve realizar a autenticação para acesso à nuvem, a qual deve ser composta por login e senha (a ser trocada periodicamente) – em alguns casos, também é estabelecido um número de identificação. Outro recurso é eleger um administrador com a responsabilidade de autorizar ou limitar os dados que os outros usuários poderão visualizar, editar e compartilhar. Além disso, há também a codificação dos dados, os quais só devem ser decodificados por pessoas autorizadas.
Alguns exemplos de mecanismo de segurança de dados: criptografia, redundância e descarte ou remoção dos dados.
	Criptografia
	Protege os dados implementando técnicas de cifragem, escondendo o conteúdo dos dados
	Redundância
	Garante a disponibilidade e integridade, evitando a perda dos dados
	Descarte
	Ou remoção dos dados necessariamente é completo e definitivo, pois os resquícios de dados podem trazer problemas de segurança em relação às informações sigilosas
A segurança em virtualização não depende única e exclusivamente do combate a falhas em seu software de gerenciamento, hypervisor ou hardware, mas também de planejamento, manutenção e administração rigorosa durante todo seu tempo de vida útil. Algumas das defesas para ambiente virtualizado são: anéis de proteção, monitoramento de VM e criptografia da VM.
	Anéis de proteção
	Funcionam como mecanismos de proteção de dados e funcionalidades contra falhas e ações maliciosas. Esses níveis de proteção são níveis hierarquizados de privilégios dentro de uma arquitetura de computação. Os anéis fornecem um controle de acesso bastante rígido, dificultando o acesso não autorizado às camadas, tanto de aplicação, como do hypervisor, combatendo assim o roubo de máquina virtual e ataques do tipo VM escape, por exemplo.
	Monitoramento
	Provê a auditoria do ambiente e acaba auxiliando na detecção de intrusão no sistema, ajuda a combater ataques, prevenindo ameaças do tipo VM-Aware malware, negação de serviço (DoS), etc.
	Criptografia
	Camufla as informações ali existentes. Ela permite que os dados, caso sejam acessados, não consigam ser interpretados pelo invasor, auxiliando no combate de ataques do tipo footprinting e inserção de código malicioso.
Ao se contratar um serviço de computação em nuvem, é necessário estabelecer os procedimentos de segurança que serão empregados. As estruturas de controle são estabelecidas para diminuir os possíveis riscos e servir como um ponto de referência na execução e validação de conformidade. Esses métodos de segurança, as políticas do provedor e o processo de melhoria da qualidade constitui a governança e conformidade.
Na computação em nuvens, o risco de perda de dadosde uma empresa é enorme, levando em consideração que as informações não estarão diretamente na organização, e sim em posse das companhias prestadoras do serviço. Portanto, deve-se analisar bem antes de escolher uma empresa para prestar esse tipo de serviço. Entretanto, os dados de posse exclusivamente da empresa também não garantem que se estará seguro quanto ao sigilo e à perda de informações.
Ao adotar medidas de segurança eficientes, tanto lógicas, como físicas, as chances de expor as aplicações e dados em risco diminuem consideravelmente. Em alguns casos, a computação em nuvem pode ser uma alternativa segura para guardar as aplicações em servidores internos, já que é contratado um serviço especializado em segurança.
Considerações Finais
A computação em nuvem é a tecnologia baseada no armazenamento e processamento dos dados de usuários ou empresas em data centers de terceiros, que podem estar localizados em qualquer parte do planeta.
O termo nuvem (cloud) representa um conjunto de recursos combinados - servidores, aplicações, storages, entre outros - que o usuário não enxerga diretamente como estão estruturados e organizados.
A premissa básica da computação em nuvem é o compartilhamento de recursos com o intuito de alcançar uma economia de escala, de forma similar a um serviço “comoditizado”, como o serviço de energia elétrica. O modelo de nuvem permite que as empresas economizem com custos de infraestrutura, como servidores e switches, de modo a se focar em seu negócio em vez de gastar tempo e dinheiro com essa infra.
A ideia principal é que ninguém mais precisaria instalar programas em seu computador para realizar desde tarefas básicas (como mexer com planilhas), até trabalhos mais complexos (como edição de imagens e vídeos), pois tudo seria feito na utilização da internet e hospedado nos provedores da nuvem.
AULA 2 – MECANISMOS E ARQUITETURA DE COMPUTAÇÃO EM NUVEM
Definição
Arquitetura de computação em nuvem e sua estrutura básica, mecanismos de funcionamento da computação em nuvem e de segurança, arquiteturas fundamentais baseadas em nuvem.
Propósito
Compreender o conceito de arquitetura de computação em nuvem, identificando os elementos principais da estrutura de um sistema em nuvem, de modo a poder analisar e comparar as diferentes arquiteturas, além de conhecer seus mecanismos de funcionamento e a segurança da informação na computação em nuvem.
Objetivos
· Módulo 1: Descrever as características básicas da arquitetura de computação em nuvem
· Módulo 2: Identificar os elementos da estrutura de um sistema de computação em nuvem
· Módulo 3: Identificar mecanismos para funcionamento e segurança da computação em nuvem
· Módulo 4: Identificar algumas arquiteturas fundamentais baseadas na computação em nuvem
Introdução
A computação em nuvem é uma tecnologia criada e desenvolvida com o propósito de otimizar o uso de recursos computacionais das empresas, especialmente aquelas que demandam cada vez mais capacidade de armazenamento e de processamento. O que se pretende é que um provedor de serviços de computação contemple a infraestrutura requerida para atender a diferentes demandas computacionais dos usuários, localizados em qualquer parte e a qualquer momento, reduzindo os custos de armazenamento e processamento.
No passado, este tipo de serviço era fornecido por empresas conhecidas como bureau de serviços, que recebiam e forneciam serviços de processamento e de armazenamento. Naturalmente, não havia internet, nem a capacidade e velocidade computacional dos dias atuais, mas o modelo era muito semelhante.
Pretende-se descrever os principais elementos que caracterizam a arquitetura destes serviços, além de permitir o entendimento de seu funcionamento para realização dos serviços, bem como aspectos de segurança, fundamentais para a confiabilidade do serviço.
Esta descrição foi organizada em quatro módulos, o primeiro dos quais trata de aspectos e características de uma arquitetura de computação em nuvem; em seguida, são descritos os principais componentes da infraestrutura de um sistema de computação em nuvem, os quais formam o arcabouço de uma determinada arquitetura. O módulo 3, seguinte, descreve os mecanismos para o funcionamento e a segurança da computação em nuvem. O texto encerra com o módulo 4, que apresenta características de algumas arquiteturas fundamentais de computação em nuvem.
Módulo 1
Descrever as características básicas da arquitetura de computação em nuvem
Arquitetura X Implementação
Antes de descrever as características básicas da arquitetura de um sistema de computação em nuvem, é importante entender o que significa arquitetura e sua diferença para implementação.
Assim como se projetam produtos como um processador ou um disco rígido (Hard Disk - HD), também é necessário projetar sistemas ou serviços a serem oferecidos aos usuários, seja de que tipo for.
A computação em nuvem é um serviço e, como tal, deve ter seu projeto bem elaborado para atender a diversos requisitos, como: segurança, confiabilidade, integridade, disponibilidade. A isso chamamos arquitetura ou projeto do produto ou serviço.
Quando se estuda ou analisa o processo de criação (e fabricação/operação) de um determinado produto ou mesmo um serviço, seja ele qual for, deve-se tratar o assunto sob dois pontos de vista diferentes, cada um deles sendo utilizado em momentos diferentes da criação ou fabricação do referido produto/serviço: a arquitetura do produto/serviço e sua implementação (ou engenharia). O produto pode ser de qualquer natureza, como uma geladeira, um edifício de apartamentos, um computador, um processador, uma rede de computadores ou um serviço como a computação em nuvem.
Em geral, há profissionais especializados em cada caso, como os arquitetos e engenheiros civis, que até podem ter formação acadêmica distinta como no caso do projeto (arquiteto) e construção (engenheiro) de um edifício, ou ser o mesmo profissional se o produto ou serviço não tem uma grande complexidade.
A arquitetura, então, descreve as características e funções do produto e apresenta os elementos que permitirão ao engenheiro, ou desenvolvedor, fabricá-lo ou implementá-lo.
Atenção: A arquitetura de uma rede de computadores, por exemplo, consiste na descrição de suas funções agrupadas em camadas, isto é, os elementos que permitirão você acessar uma página da web ou enviar um e-mail ou transferir um arquivo.
No projeto desta arquitetura, são definidos os formatos das mensagens, com seus diversos itens para controle, detecção de erros etc. O implementador deverá, assim, usar estas especificações e construir ou desenvolver o produto/serviço.
No que se refere à computação em nuvem, sua arquitetura deve mostrar e descrever os aspectos inerentes à sua funcionalidade; como os seus diversos elementos funcionais estão organizados e o que fazer para realizar-se a atividade de computação em nuvem.
A figura a seguir mostra a estrutura básica de uma computação em nuvem, com o propósito de exibir seus elementos constitutivos, os quais se organizam e funcionam conforme a arquitetura idealizada. Nesta imagem, pode-se observar o que qualquer arquitetura deve conter:
	Usuários
	Usuários que estão dispersos geograficamente em seus locais de origem, e que acessam a nuvem através de laptops, servidores, desktops, tablets, smartphones, como visto na figura abaixo.
	Provedores de Serviços
	Os provedores dos serviços que disponibilizarão os elementos da infraestrutura requerida para fornecimento dos serviços. Na figura abaixo, podemos visualizar o provedor de nuvem com suas aplicações, plataforma e infraestrutura
	Canais de comunicação
	Os canais de comunicação entre os usuários e os provedores dos diversos serviços. No caso da computação em nuvem, esses canais são fornecidos pela conectividade com a internet. De acordo com a figura a seguir, seria a forma de comunicação com a internet pelos servidores, laptops, desktops, tablets e smartphones.
Arquitetura Genérica de Computação em Nuvem
Uma arquitetura de nuvem compreende diversos componentes,que se interligam e funcionam como um sistema integrado. Sobre isso, podem ser feitas algumas observações:
a) Assim como acontece com produtos da nossa vida (tais como: computadores, processadores, automóveis ou redes de computadores), também a computação em nuvem não possui um único tipo de arquitetura, uma única organização, uma única estrutura.
b) As arquiteturas para computação em nuvem podem ser estruturadas com diferentes componentes e em quantidades e capacidades das mais diversas, dependendo do tipo de clientes que pretendem servir, do volume de serviço a oferecer e dos custos envolvidos tanto por quem oferece (fornecedores, como Amazon ou Microsoft) quanto pelos usuários que requerem os serviços.
c) Deste modo, as arquiteturas atendem a modelos distintos e fornecem serviços variados. Esses elementos caracterizam arquiteturas distintas, embora a característica dos componentes seja a mesma. Essa é uma das grandes vantagens do sistema.
d) Em resumo, uma arquitetura para computação em nuvem descreve os elementos e suas funções, bem como os serviços que ela pode oferecer nessas condições funcionais, tanto do lado do usuário quanto do fornecedor, que se pode afirmar caracteriza a nuvem propriamente dita.
e) As arquiteturas, então, podem ser classificadas conforme o tipo de uso que o fornecedor de nuvem oferece e o interesse do usuário em receber o serviço nessa organização. Isso caracteriza modelos de funcionamento distintos, a saber:
· Modelo de nuvem pública;
· Modelo de nuvem privada;
· Modelo de nuvem híbrida;
· Modelo de nuvem de comunidade.
f) Além disso, pode-se estruturar uma computação em nuvem com menor ou maior abrangência de funções, para atender às diversas necessidades e limitações dos usuários, além dos custos da própria implementação e manutenção pelo fornecedor. Isso caracteriza, então, formas diferentes de prestação de serviços da nuvem para os usuários, isto é, de forma abrangente, como um serviço completo (SaaS) ou mais limitado, como, por exemplo, fornecimento apenas de infraestrutura de armazenamento (IaaS). Isso caracteriza diferentes tipos de arquitetura, conforme os serviços oferecidos, a saber:
· Infraestrutura como serviço (IaaS);
· Plataforma como serviço (PaaS);
· Software como serviço (SaaS);
· Rede como serviço (NaaS).
Em uma arquitetura genérica de um sistema de computação em nuvem, qualquer que seja o tipo, modelo de funcionamento ou serviço a oferecer, sua constituição se baseia na divisão dos componentes em dois grandes grupos, conforme sua localização e atribuições no processo de funcionamento do sistema. Os componentes da arquitetura são:
	Front-end
	Parte dianteira (“front-end”) que é o que o usuário utiliza para acessar a nuvem
	Back-end
	Parte de fundo ou interna (“back-end”) que é a própria nuvem. A internet é o elemento mediador que permite a comunicação entre o front-end e o back-end. A figura abaixo apresenta, de forma simplificada, os elementos da arquitetura
	
	
	
A parte dianteira ou “front-end” caracteriza os elementos disponibilizados para o usuário ou cliente do serviço de computação em nuvem. Na parte superior da figura acima, observa-se um exemplo de componentes físicos, como desktop, tablets; e componentes lógicos, como aplicativos; que constituem a arquitetura “front-end”.
O usuário pode utilizar diversos tipos de dispositivos como smartphones, computadores, tablets, normalmente utilizando um navegador, para acessar os recursos da nuvem.
Comentário: Atualmente, é mais comum ao usuário de um serviço de nuvem interagir apenas com os componentes que servem de interface para acesso, como o navegador da web. No entanto, dependendo do tipo de serviço implementado pela arquitetura em uso, as tarefas do usuário podem crescer.
No próximo módulo, alguns desses componentes serão descritos de forma mais detalhada.
O “back-end” pode ser genericamente entendido como sendo a própria nuvem e é constituído de diversos componentes, tanto de hardware e software quanto de gestão, responsáveis, em conjunto, pelo fornecimento dos serviços aos diversos usuários (clientes), especialmente em modelos de nuvem pública, sempre que estes solicitarem algum serviço ao fornecedor/provedor (servidores).
Os elementos do back-end variam, naturalmente, conforme o modelo e tipo de serviços adotados pela arquitetura. A figura abaixo ilustra os elementos genéricos da parte back-end.
O back-end engloba a maior parte dos componentes da arquitetura do sistema de computação em nuvem, isto é, os servidores, máquinas virtuais, dispositivos de armazenamento com alta capacidade e disponibilidade, a conectividade da rede e softwares que são necessários para a operação da nuvem. Dentre os softwares, o Hypervisor é responsável pela criação de máquinas virtuais, podendo alocar vários serviços em um mesmo servidor físico. Além das ferramentas de gerenciamento e desenvolvimentos de software; e os aplicativos de nuvem, como, por exemplo, o pacote office 365 da Microsoft, esses componentes citados estão ilustrados na figura acima.
Você sabia? Em geral, estes equipamentos são distribuídos geograficamente distantes dos usuários, o que contribui para o uso do termo “nuvem”.
Da mesma forma que os componentes da parte “front-end” variam de modelo e organização entre os usuários (embora basicamente sejam do mesmo tipo), também os componentes da parte “back-end” têm genericamente as mesmas aptidões e características, embora variando em quantidade, tipo e organização de arquitetura para arquitetura. Nos módulos a seguir, serão descritos alguns desses componentes e serão apresentadas diversas arquiteturas de computação em nuvem atuais.
Os diversos componentes normalmente requeridos para uma arquitetura “back-end” podem ser agrupados conforme sua utilidade no conjunto de atividades para operar e manter o sistema de computação em nuvem. Os principais componentes são:
· Cloud Runtime (execução na nuvem) de aplicações e serviços;
· Gerenciamento e desenvolvimento de software;
· Infraestrutura com servidores, armazenamento e rede; e
· Segurança na nuvem.
No módulo seguinte, estes componentes serão descritos em detalhes.
Você pode perceber pelo que foi apresentado até agora que a computação em nuvem torna-se viável quando ocorre a necessária conexão entre os elementos do front-end, isto é, da parte do usuário/cliente e da parte back-end, isto é, da nuvem propriamente dita, ou seja, dos servidores e aplicativos que fornecem os serviços requeridos pelos clientes.
Esta conexão é usualmente através da internet, permitindo ao usuário solicitar tarefas e serviços de qualquer parte geográfica do globo terrestre, uma excelente vantagem da computação em nuvem.
Tipos de Arquitetura de Sistemas de Computação em Nuvem
Há diferentes tipos de arquitetura, cuja organização depende muitas vezes do interesse e disponibilidade de recursos do usuário e do poder computacional do fornecedor do serviço e dos tipos de serviços oferecidos.
A escolha do modelo de computação em nuvem (se pública ou privada, por exemplo) requer uma análise profunda de diversos fatores: segurança, no topo da lista, custos de implementação e de operação do sistema, tipos de aplicações, entre outros. Atualmente, tem prevalecido o uso de arquiteturas públicas, exceto para empresas onde a disponibilidade e segurança requeiram uso de nuvem dedicada àquela organização.
Quanto aos serviços, podem ser exercidos de forma completa, como nas arquiteturas SaaS (software como serviço), isto é, o provedor e controlador da nuvem se responsabiliza pela realização de todo processamento, infraestrutura, gerência e segurança dos serviços e o usuário apenas solicita o serviço e é atendido. Ou de forma mais restrita e de menor custo, como apenas o fornecimento de infraestrutura de armazenamento ou o hardware por completo, como um servidor completo.
O modo pelo qual os diferentes fornecedores de serviços de computação em nuvem, como Microsoft, Amazon, Google e outros definem e organizam a sua infraestrutura da arquitetura em nuvem, além dos diversos serviços oferecidos,varia de acordo com as características dos tipos de arquitetura específicos e também da necessidade do cliente e, em alguns casos analisados, como modelos diferentes de computação e arquiteturas para fins específicos de serviços.
Nos módulos seguintes, ao identificar os diferentes elementos que comporão a infraestrutura de um sistema de computação em nuvem, será possível reforçar o entendimento das diferenças entre os modelos e serviços existentes, bem como os dispositivos usados em cada caso.
A simples escolha pelo usuário se irá empregar computação em nuvem ou manterá sua própria infraestrutura já é, em muitos casos, uma tarefa difícil e que requer análise de diversos fatores, tais como:
	Custo
	Seja de instalação e sobretudo de manutenção da infraestrutura
	Atualização do parque de TI
	Acesso permanente ao estado da arte em tecnologia de equipamentos e para desenvolvimento de aplicações (um fator favorável ao uso de nuvem). Este fator é uma discussão recorrente que ocorre quando se pensa em aquisições ou aluguel de infraestrutura
	Armazenamento de segurança e recuperação de dados (data backup e restoration)
	Muitos usuários, especialmente pessoas físicas, têm empregado mais o armazenamento em nuvem pela facilidade em manter cópias dos dados e realizar a restauração
	Trabalho remoto (home office)
	Trata-se de uma modalidade de trabalho de uso cada vez mais frequente, especialmente na atualidade. Há relatos do aumento no número de empresas avaliando crescer de forma mais permanente o trabalho remoto, seja para alguns ou todos os colaboradores. Um fator favorável ao uso de computação em nuvem, pois os dados e informações da empresa seriam facilmente acessíveis através da internet
Empresas que realizam muitas tarefas de forma colaborativa entre funcionários localizados geograficamente afastados, podem considerar a escolha de computação em nuvem como um dos fatores preponderantes para facilitar a colaboração e compartilhamento de recursos.
Esta análise realizada e considerando o conhecimento obtido sobre os diversos modelos de arquitetura e de serviços auxiliarão o usuário a escolher entre as diversas ofertas existentes atualmente no mercado.
Decidindo-se pelo uso de computação em nuvem, muitos outros fatores devem ser analisados, como custo, volume e diversidade de aplicações do usuário, diversidade de instalações (só um local ou múltiplas filiais), segurança de aplicações e dados, disponibilidade de acesso, entre outros.
Antes de concluir esta análise sobre os aspectos relevantes e os tipos de arquitetura de sistemas de computação em nuvem, deve-se lembrar que pode haver outro elemento a ser considerado pelo usuário na escolha da melhor solução. Trata-se de também analisar a possibilidade de uso de computação em grade (“grid computing”), uma alternativa à computação em nuvem e sua modalidade alternativa, a computação em cluster (“cluster computing”). A computação em grade é uma das tecnologias habilitadoras da computação em nuvem.
Genericamente, essas duas alternativas utilizam a infraestrutura do cliente/usuário para aumentar sua capacidade de processamento e armazenamento, sem necessitar de um fornecedor externo para prover aquelas necessidades.
No caso da computação em grade, pode-se interligar em rede uma quantidade apreciável de computadores completos (como um PC, com sua memória RAM e HDs) e um aplicativo específico e especializado gerenciará a divisão de uma grande tarefa de processamento pelos diversos terminais da rede, os quais “conversam” por troca de mensagens.
Módulo 2
Identificar os elementos da estrutura de um sistema de computação em nuvem
No módulo anterior, foi explicado que a arquitetura de um sistema de computação em nuvem é constituída por componentes de hardware e de software, que estão instalados tanto na área do usuário da nuvem (front-end), como na área do provedor do serviço de nuvem (back-end) sendo utilizados de forma diferente conforme o modelo de arquitetura (pública, privada ou híbrida) ou modelo de serviços (SaaS, IaaS, PaaS).
Agora, vamos apresentar de uma forma mais detalhada os componentes que são empregados em cada uma dessas partes.
Componentes do Front-End
Os componentes encontrados no front-end podem variar bastante, dependendo do modelo de serviços de nuvem a ser utilizado. Tipicamente, podemos dizer que a arquitetura de front-end é dividida em três partes:
	Software
	O software utilizado no front-end permite que o serviço da computação em nuvem seja executado no lado usuário. Geralmente, o software utilizado é um navegador web ou um aplicativo do lado cliente, específico para o provedor de nuvem que será acessado.
Quando o usuário emprega apenas um navegador, todo processamento fica no back-end, situação típica das nuvens SaaS. Já quando o usuário utiliza algum software para acesso à nuvem, como ocorre nas nuvens PaaS e IasS, as atividades e tarefas podem ficar divididas entre o front-end e o back-end.
	Interface de acesso
	A interface de acesso é a forma pela qual o consumidor da nuvem interage para executar as tarefas. Em algumas situações, a interface pode ser um editor de texto, como no caso da utilização do Google Docs, ou uma interface de webmail para troca de mensagens eletrônicas, como ocorre quando utilizamos o Gmail.
	Dispositivo e a Rede de comunicação
	O terceiro componente agrega o dispositivo e a rede de comunicação utilizados pelo usuário da nuvem. O dispositivo pode ser um notebook, um smartphone, ou uma Smart TV, por exemplo. Genericamente, é um dispositivo computacional que permite ao usuário acessar a interface da nuvem. Normalmente, o dispositivo do cliente não requer grande capacidade de processamento porque as tarefas mais pesadas são processadas na nuvem.
Para a conexão entre o dispositivo do usuário e a interface de acesso será utilizada uma rede de comunicação, que pode ser a própria rede local do usuário, desde que esteja conectada à internet, ou um acesso através de redes celulares, viabilizando a conexão entre o front-end e o back-end.
Atenção: Sem dúvida, podemos afirmar que uma das grandes vantagens do uso de computação em nuvem se revela na simplicidade dos equipamentos necessários aos usuários para o processamento de suas aplicações.
Sem o emprego da nuvem, seria necessário que os usuários estivessem atentos aos requisitos de escalabilidade, isto é, crescer seu parque computacional à medida que a demanda por dados e processamento aumentasse, como também manter um parque computacional atualizado.
A preocupação com esses requisitos requer constante atenção dos administradores de TI das organizações, bem como contribuem para custos crescentes.
O uso da computação em nuvem elimina ou minimiza consideravelmente as necessidades no lado do usuário (front-end), já que a nuvem pode se responsabilizar pela maior parte do processo, permitindo que os consumidores da nuvem utilizem equipamentos mais simples.
Componentes do Back-End
Agora, vamos ao coração da nuvem. O back-end é a parte da arquitetura de computação em nuvem que alimenta o front-end. Podemos dizer que, enquanto o front-end são os componentes que o usuário da nuvem enxerga, o back-end são os que ele não vê.
Aqui estão os componentes principais do sistema em nuvem, como hardwares de processamento e armazenamento. Geralmente, são constituídos por um conjunto de servidores, em um local geograficamente distante, no que, normalmente, chamamos de datacenter.
O back-end é de responsabilidade do provedor de nuvem, que irá disponibilizar recursos que garantam alta escalabilidade e disponibilidade, garantindo funcionamento contínuo com baixa latência. Estes incluem vários servidores, computadores, sistemas de armazenamento de dados, máquinas virtuais e programas que, juntos, constituem a nuvem de serviços de computação.
O lado do back-end também é responsável por fornecer mecanismos de segurança, controle de tráfego e protocolos que conectam computadores em rede para comunicação.
O back-end é composto de diversos componentes, que, de forma semelhante ao front-end,pode variar de acordo com o modelo e arquitetura de nuvem empregadas. Geralmente, inclui:
· Tempo de execução na nuvem (cloud runtime) para as Aplicações (application) e Serviços (service);
· Serviços de gerenciamento e desenvolvimento de software;
· Infraestrutura com servidores (servers), dispositivos de armazenamento (storage), rede (networking) Serviços de Segurança.
A figura abaixo ilustra, de forma genérica, os componentes do back-end para permitir uma melhor compreensão da distribuição dos componentes.
A aplicação é responsável por receber as requisições do usuário do serviço, assim, podemos afirmar que ela está relacionada à interface de acesso a nuvem. É nesta camada que serão coordenadas as necessidades do usuário com os recursos no back-end.
O serviço é responsável por fornecer a utilidade da nuvem em si. É neste componente que está o coração da nuvem. Qualquer tarefa que o usuário queira executar na nuvem será executada neste componente, independentemente se a nuvem oferece um serviço de armazenamento, um ambiente de desenvolvimento, ou qualquer outra atividade.
Atenção: O cloud runtime é o local do back-end no qual o serviço é executado. São criados com a ajuda dos softwares de virtualização conhecidos por hypervisor ou monitores de máquina virtuais. O runtime irá permitir que várias execuções em paralelo possam coexistir no mesmo servidor.
Para facilitar a compreensão, poderíamos dizer que o cloud runtime seria semelhante ao papel de um sistema operacional em um computador convencional. O sistema operacional permite que o usuário possa executar diversas atividades concorrentemente em um único dispositivo físico. Já o cloud runtime vai permitir, por exemplo, que várias instâncias de máquinas virtuais possam ser executadas de forma paralela.
O Hypervisor é responsável pela implementação da virtualização. É um componente que cria e executa máquinas virtuais, sendo a base do funcionamento de uma nuvem, onde diversos usuários compartilham o mesmo recurso físico, cada um com suas próprias particularidades (por exemplo, um possui todas as suas aplicações desenvolvidas para executar sob o sistema operacional Windows, enquanto outros utilizam Linux). Alguns exemplos de hypervisor são:
· Oracle Virtual Box;
· VMWare;
· KVM – Kernel-Based Virtual Machine, o qual opera em plataforma Linux;
· Xen-Usa um microkernel que fornece as ferramentas de virtualização dos servidores;
· Hyper-V – Funciona em ambiente MS Windows.
O armazenamento é responsável por manter a consistência das informações, ou seja, é o local da nuvem aonde todos os dados da nuvem estão armazenados. Para realizar o armazenamento dos dados, podem ser utilizados discos rígidos (HD), unidades de estado sólido (SSD – Solid State Drive) e, mais recentemente, o Optane.
Ainda hoje, o mais comum é o emprego do disco rígido ou HD, os quais continuam sendo desenvolvidos com elevadas capacidades individuais (16 TB, por ocasião da produção deste material). Os SSDs têm como grande vantagem a velocidade, quando comparado ao HD tradicional, entretanto, o custo ainda é elevado para grandes capacidades e bancos de memória de massa.
Saiba mais: Mais recentemente, a Intel está oferecendo o uso da memória Optane, com o dispositivo Intel Optane DC Persistent Storage, embora a capacidade atual desses dispositivos não seja ainda tão elevada quanto desejável para seu custo. Torna-se adequado para o uso em aplicações de tempo real que demande baixa latência de acesso ao dispositivo de armazenamento.
Em uma área de armazenamento, irão existir diversos discos rígidos instalados no próprio servidor ou em dispositivos especializados chamados de storage. Para que esses discos possam ser utilizados, é empregado um software de gerenciamento, particionando os discos da forma que é necessária para que seja oferecido o serviço da nuvem.
Muitos fornecedores utilizam sistemas de armazenamento complexos, sempre com o propósito de maior segurança e confiabilidade. Um desses tipos é o NAS – Network Attached Storage, que são equipamentos robustos para armazenar de forma segura grandes volumes de dados. O NAS (exemplo, abaixo) é um sistema completo com processador e memória principal e secundária. Ele pode ser usado por empresas nas suas redes locais, bem como dispositivos de armazenamento para sistemas de computação em nuvem.
Alguns sistemas de computação em nuvem gerenciam o compartilhamento de dados na rede por meio dos protocolos de compartilhamento de recursos, principalmente, os arquivos e diretórios.
Dois protocolos principais que podem ser utilizados são o CIFS (Common Internet File System) e o NFS (Network File System - RFC 7530). Trata-se de dois protocolos semelhantes no propósito e operação, embora com características e origens diferentes.
Sistemas de nuvem requerem, na maioria das vezes, muita capacidade de armazenamento e, afastados geograficamente do cliente da nuvem, requerendo esses protocolos de compartilhamento, de modo a atender às diferentes demandas.
A infraestrutura engloba o hardware de processamento que permite que todos os serviços sejam executados. Neles estão os servidores de grande capacidade de processamento, usualmente empregando Processadores Xeon da Intel ou Opteron da AMD em face de sua grande capacidade de processamento e bastante espaço de memória RAM de baixa latência.
É comum que os servidores também empreguem as chamadas GPU (Graphics Processing Unit), que, por nós usuários comuns, são conhecidas por placas de vídeo, mas que são empregadas em servidores de alto desempenho para obter maior capacidade de processamento.
Atenção: Além das GPUs, alguns provedores de nuvem podem usar soluções específicas como o Google’s Tensor Processing Unit, que são circuitos integrados de aplicação específica (ASICs, na sigla em inglês), desenvolvidos especialmente pelo Google e disponibilizados para os usuários da Google Cloud Platform, com foco em executar tarefas de inteligência artificial (IA).
Outra particularidade importante e que aumenta os custos refere-se à necessidade de inserir redundância no processo e armazenamento dos dados/aplicativos, garantindo mais disponibilidade e confiabilidade. Grandes fornecedores do serviço de nuvem distribuem os dispositivos de armazenamento em locais geograficamente dispersos nos data centers.
Os data centers são construções projetadas para abrigar de forma bastante segura a infraestrutura das empresas. Neles estão os servidores, os dispositivos de armazenamento, todos interconectados por redes de alto desempenho. Os data centers são organizações especializadas em armazenar e processar volumes de dados para múltiplos usuários e são um dos pilares de sistemas de computação em nuvem.
Ainda na infraestrutura, podemos acrescentar os componentes de rede do back-end. Estes dispositivos de rede são responsáveis pelas conexões entre os servidores da nuvem, com os dispositivos de armazenamento e com os sistemas de gerenciamento e segurança.
Genericamente, os dispositivos são normais a qualquer rede, como switches, roteadores e modems, além, naturalmente, do software de rede apropriado. A grande diferença está relacionada ao volume de informações que estes equipamentos devem tratar, principalmente, quando pensamos em nuvens de grande capacidade.
Uma observação interessante relativa a redes, mas não necessariamente a componentes que implementam o acesso aos extremos da computação em nuvem (usuário e servidores da nuvem), é a possibilidade de o fornecedor de serviços de nuvem também oferecer serviços de rede para o usuário. Isso é uma tarefa que pode ser típica em serviços de computação em nuvem do tipo SaaS, aquele que oferece uma vastidão de serviços aos usuários. Um deles pode ser o serviço de implementação e manutenção da rede do usuário, que dispensará, assim, seu esforço e custo para manter e fazer crescer sua rede.
Além dos equipamentos físicos (hardware) utilizados no back-end, há uma apreciável quantidade de programas de aplicação (software) que viabilizam a gerência, o funcionamento, controle e segurança dacomputação em nuvem. Em especial, podemos citar os que são utilizados para os serviços de gerenciamento e segurança.
	Serviços de Gerenciamento
	Os serviços de gerenciamento permitem que os recursos sejam gerenciados de acordo com as necessidades do usuário final. Por exemplo, em um servidor, existirão inúmeras instâncias de máquinas virtuais em execução simultaneamente, compartilhando os recursos do mesmo servidor físico. Portanto, o software de gerenciamento será essencial para que os recursos sejam corretamente alocados para cada tarefa, evitando gargalos e permitindo o bom funcionamento da nuvem.
	Serviço de Segurança
	O serviço de segurança é uma parte importante da arquitetura de software da nuvem. É primordial que a arquitetura de segurança permita, por exemplo, que os serviços e as informações sejam acessados por usuários autorizados, que as tarefas críticas não sejam interrompidas, protegendo o servidor de tentativas de invasão e garantindo que o sistema continue em operação, mesmo quando está sob ataque ou com alguma falha devido a hardware com defeito.
Esses serviços são essenciais para permitir que o usuário da nuvem tenha uma boa experiência de uso. No próximo módulo, serão apresentados de forma mais detalhada alguns dos mecanismos de segurança na nuvem.
Módulo 3
Identificar mecanismos para funcionamento e segurança da computação em nuvem
A computação em nuvem possui basicamente duas grandes tecnologias facilitadoras que auxiliam os mecanismos de funcionamento da nuvem: a virtualização e a internet.
A virtualização teve sua utilidade migrada de um único usuário com múltiplos processamentos, para o uso de uma classe de recursos com múltiplos usuários. A internet – acesso remoto a recursos compartilháveis – proporciona facilidade de acesso remoto, viabilizando o acesso aos recursos compartilhados pela virtualização.
Mecanismos para Funcionamento da Computação em Nuvem
O funcionamento da computação em nuvem depende de um conjunto de mecanismos que atendam aos requisitos desejados para o provimento de serviços em nuvem. Dentre esses mecanismos, podemos citar: balanceamento de carga, SLA, medidores do uso da nuvem, auditoria do funcionamento da nuvem, dentre outros.
Balanceamento de carga
A computação em nuvem possui diversas vantagens para usuários corporativos bem como pequenos usuários. Porém, acarreta diversos problemas para o provedor da nuvem. Um desses problemas refere-se ao balanceamento de carga.
Como o data center da nuvem é usualmente constituído de diversos servidores, para poder atender a uma grande demanda de solicitações de clientes, poderia ocorrer demandas maiores para uns servidores e menores para outros, com evidente prejuízo de desempenho e disponibilidade.
Para evitar ou minimizar a ocorrência deste desbalanceamento de carga nas solicitações aos servidores, utiliza-se de mecanismos de balanceamento de carga para controlar a distribuição das solicitações entre servidores, equilibrando, assim, sua carga de trabalho. Exemplo:
Para entendermos melhor esse mecanismo, vamos imaginar a situação de utilização da nuvem por um cliente comum ao realizar validação de cartão de crédito de consumidores em suas lojas. Pode acontecer que, na época de Natal, a demanda de solicitações aumente consideravelmente, indo além de um limite preestabelecido. Se o provedor de nuvem possui um mecanismo adequado de balanceamento de carga, ele pode distribuir as transações por diversos servidores.
Existem diversos mecanismos de balanceamento de carga, usados por diferentes provedores de Computação em Nuvem. Podemos citar o DNS Round Robin (É um mecanismo de equilíbrio local de carga, usado pelos servidores DNS para compartilhar e distribuir cargas entre dois ou mais servidores da rede. (BATTISTI, 2020)). Como veremos abaixo, podemos observar o balanceamento de carga entre o servidor Web1 e servidor Web2 através da utilização do DNS (sistema de nomes de domínio) para atender à solicitação do cliente.
O balanceamento de carga em computação em nuvem pode ser implementado por diversos algoritmos, como, por exemplo, os algoritmos de balanceamento dinâmico de carga com fila e balanceamento dinâmico de carga sem fila que são apresentados em Angonese (2012). A apresentação da operação desses algoritmos de balanceamento de carga está além do objetivo deste módulo.
Acordo de Nível de Serviço (SLA – Service Level Agreement)
O Acordo de Nível de Serviço (ANS) ou Service Level Agreement (SLA) é um acordo firmado entre o provedor de computação em nuvem e o cliente, que especifica quais serviços o provedor irá fornecer e quais as regras e condições de provimento desses serviços na nuvem.
Atenção: Na contratação do serviço de computação em nuvem, esse acordo é um dos itens mais importantes, especialmente para que o cliente possa monitorar o desempenho do provedor a partir de dados mensuráveis.
O acordo estabelece tanto as regras para os itens de realização do provimento, quanto a definição de indicadores métricos para garantir a segurança do contratante (usuário/cliente). Também é possível incluir itens (check point) de verificação e multas por descumprimento de prazos ou falhas no atendimento aos requisitos estabelecidos.
Dessa forma, o acordo de nível de serviço beneficia tanto o provedor como o próprio cliente.
	Provedor
	X
	Cliente
	De um lado, o provedor estará protegido contra exigências absurdas e cobranças indevidas.
	
	De outro, o cliente terá a garantia de que o serviço estará disponível no momento certo com a qualidade necessária.
Medidores de uso da nuvem pelos usuários para efeito de cobrança
Para garantir o funcionamento adequado e com qualidade dos serviços de computação em nuvem, é necessário o uso de medidas de desempenho em diversos recursos oferecidos, como computação, armazenamento, rede e aplicações.
Um cliente precisa tomar precauções adequadas para avaliar o provedor de nuvem e constatar a qualidade do serviço oferecido.
Dentre as medidas de desempenho, existem as que medem dados operacionais como:
· Quantidade de transações na unidade de tempo;
· Rastreamento da quantidade de acessos para leitura e gravação de dados em dispositivos de armazenamento e análise de previsões.
Além das medidas citadas, existem outras que avaliam o desempenho pelo provedor pelo tempo médio entre falhas (MTBF - Medium Time Between Fails) e pelo tempo médio para realizar um reparo.
Ainda, podemos acrescentar as medidas pela vazão do sistema (“throughput”) ou taxa de transferência de dados e as medidas pelo tempo de resposta, item muito importante quando se trata de uso de redes.
O provedor de nuvem deve fornecer relatórios sobre o desempenho do serviço e essa informação deve constar no Acordo de Nível de Serviço (SLA).
Elementos para coleta de dados para auditoria de funcionamento da nuvem
O processo de operacionalização e funcionamento em ambiente de computação em nuvem não é o mesmo do processo individual da empresa, sem o uso de uma entidade externa inserida no processo. Ou seja, as práticas de controle e auditoria são necessariamente diferentes.
A auditoria da organização não se envolve no processo de migração para o novo processo, exceto a partir do início de seu funcionamento. Sendo assim, o papel da auditoria deve se adaptar ao novo modelo e considerar o conjunto de itens importantes citados logo abaixo:
a) Compreensão e educação quanto aos riscos envolvidos com a computação em nuvem, tais como:
· Segurança, privacidade, integridade dos dados, eficiência e eficácia no emprego de novos processos empresariais, decorrentes do uso da nuvem (agente externo envolvido), conformidade com novos aspectos jurídicos e regulatórios.
b) Compreensão sobre as possibilidades e riscos dos diferentes serviços oferecidos por um mesmo provedor, tais como:
· Avaliação dos riscos de uso do serviço SaaS, IaaS ou PaaS.
· Entendimento dos riscos de funcionamento com o modelo público ou com o modelo privado;
· Avaliação dos riscos internos do uso da computação em nuvem.
O serviço de auditoria das empresas em relaçãoà computação em nuvem é um grande auxiliar para o controle dos aspectos envolvidos principalmente com segurança, pois assegura a integridade operacional e proteção aos dados dos usuários.
Um dos mecanismos usados para auxiliar na prática de auditoria dos serviços de computação em nuvem é o emprego de empresas especializadas nesse tipo de auditoria. TPA (Third Part Auditor) é o termo em inglês usado para identificar esse tipo de empresa, elas podem ser usadas tanto no modelo de nuvem pública quanto em nuvem privada.
Atualmente, e especialmente no exterior, os auditores externos (TPAs) têm sido bastante utilizados em computação em nuvem, principalmente, na verificação de itens de segurança e conformidade.
Comentário: Com auxílio de criptografia, os auditores externos verificam os dados armazenados na nuvem (remotamente). Também sendo possível empregar essa técnica nos modelos de nuvem pública, devido aos recursos computacionais e de comunicação existentes atualmente.
Elementos de Segurança requeridos para Funcionamento da Computação em Nuvem
Já se mencionou diversas vezes que um dos fatores mais importantes na definição da arquitetura de computação em nuvem reside no estabelecimento de mecanismos e processos voltados para proteger os dados e aplicações dos usuários, deixados sob a guarda da nuvem.
Afinal de contas, os ativos são, muitas vezes, o corpo e a alma de uma organização que, por razões estratégicas ou financeiras, utiliza-se dos serviços da computação em nuvem oferecidos por um provedor.
A confiabilidade e segurança desses dados malconduzida pode destruir a reputação e o negócio de uma empresa ou, se muito bem feito, pode aumentar de forma considerável sua confiabilidade e visibilidade no mercado.
Como o fornecedor dos serviços de armazenamento e processamento (provedor) está geograficamente afastado, em se tratando de computação em nuvem, do usuário/cliente, a transferência de dados se realiza pela internet, daí a segurança ser crítica.
Há diversos mecanismos que podem ser usados para proteção das informações, como:
· Isolamento do perímetro de rede;
· Auditoria;
· Redundância;
· Autenticação.
· Isolamento do perímetro de rede
Há diversos tipos e métodos de comprometimento da segurança na computação em nuvem, tanto por agentes externos (Outside Attackers - Em uma tradução de forma literal, significa ataque externo, isto é, entidades ou pessoas externas à empresa realizando um ataque às instalações de TI. Fonte: Brasil Escola.), quanto por erros de projeto ou nos algoritmos de funcionamento, que podem comprometer as aplicações/dados tanto quanto invasores externos.
Os agentes externos são elementos de fora do sistema, que podem realizar diferentes tipos de ataques: IP spoofing, Address Resolution Protocol (ARP spoofing), DNS poisoning e Denial of Service (DoS) que são ataques comuns a qualquer tipo de dispositivo ou ataques específicos a serviços de nuvem, como ataques contra o Hypervisor ou às máquinas virtuais.
Atenção: Um dos métodos mais eficazes de combater essas tentativas de comprometimento de segurança da nuvem é o uso de Firewall. Método adotado por grande parte dos maiores fornecedores de computação em nuvem, como Amazon e Microsoft.
No entanto, nem sempre o Firewall consegue responder adequadamente aos ataques, devido a problemas internos ao sistema, já que ele se encontra na porta de saída para a rede externa.
Além disso, certos ataques externos podem ser complexos demais e requerem métodos adicionais ao Firewall para garantir proteção, como o emprego de sistemas de detecção de intrusão, analisadores de logs, entre outros.
Uso de redundância
É importante que o projeto e funcionamento de um sistema de computação em nuvem considere as diferenças entre os usuários, inclusive no que se refere à segurança de dados e aplicações.
Aplicações de missão crítica ou de tempo real requerem uma atenção maior do sistema, de modo que não possam ser interrompidas quando em execução.
Um dos melhores métodos de aumentar a disponibilidade e confiabilidade de uma operação reside na replicação, ou seja, na redundância dos componentes e dos dados armazenados.
Você sabia: Grandes provedores de computação em nuvem, como a Microsoft ou a Amazon, fornecem redundância dos seus serviços, pois a sua infraestrutura se estende por todo o planeta. Dessa forma, é possível contratar a redundância da sua aplicação em várias regiões no mundo e, assim, garantindo a estabilidade e continuidade dos serviços, mesmo em caso de catástrofe.
Naturalmente, tais ações elevam os custos de implementação do hardware e software de segurança como também de manutenção da operação, mas tem sido compensado na prática (Amazon, Microsoft, IBM e outras organizações usam estes métodos) com fidelidade dos clientes e maior visibilidade no mercado das empresas.
Outros mecanismos
Sendo a segurança do sistema um fator crucial de sucesso para provedor de nuvem, costuma-se usar diversos meios para prover segurança ao sistema e ao seu funcionamento, especialmente para deter intrusos, de todas as formas. Entre essas formas, pode-se citar:
a) Uso de Firewall – Já discutido brevemente acima;
b) Uso de Criptografia – Atualmente, a maioria das transmissões na rede é criptografada, havendo mais de um meio para se realizar esta tarefa, como criptografia simétrica e assimétrica. O WhatsApp, por exemplo, usa criptografia da origem ao destino, enquanto bancos usam meios bem seguros, já que um erro que corrompa o conteúdo de um TEF (transmissão eletrônica de fundos), sem ser percebido, seria um desastre de credibilidade do sistema;
c) Muitos sistemas de tratamento de erros baseiam-se na execução origem/destino de um mesmo algoritmo que produz um grupo de sinais (bits) redundantes, acrescentados aos dados da mensagem; na origem, os bits para proteção são acrescentados ao bloco de dados, e no destino o sistema separa dados e bits de proteção, aplicando o mesmo algoritmo aos dados recebidos, produzindo novos bits para proteção. Esses são comparados com os bits de proteção recebidos. Como resultado, o sistema pode concluir se recebeu correto ou não;
d) Uso de certificados digitais pode acrescentar mais segurança aos seus detentores. Muitas empresas exigem o uso de certificados digitais pelos clientes para acesso a dados mais sigilosos, como a Receita Federal.
Quando um usuário do serviço de nuvem analisa os serviços oferecidos pelo provedor de nuvem, deve verificar dentre todos os itens, especialmente os relacionados à segurança. No entanto, a capacidade do provedor de manter a segurança depende de outros fatores como o modelo de implantação da computação em nuvem (pública, privada, híbrida ou comunitária), bem como o modelo de serviços (SaaS, IaaS, PaaS). Exemplo:
A nuvem que opera como SaaS deve oferecer segurança completa aos usuários, diferente dos sistemas que operam com serviço IaaS, onde diversas atividades de segurança são de responsabilidade do usuário.
Módulo 4
Identificar algumas arquiteturas fundamentais baseadas na computação em nuvem
Arquitetura Fundamental
A arquitetura fundamental da computação em nuvem é o conjunto de mecanismos necessários que compõem a infraestrutura física responsável em tornar a cloud computing uma realidade.
A arquitetura de nuvem tem o objetivo de fornecer aos clientes acesso ininterrupto aos dados e aplicativos. Além de ser possível acesso à rede sob demanda, existe também a possibilidade de se mover de forma rápida e eficiente entre servidores. Ou até mesmo entre nuvens, mantendo de forma eficiente a segurança da rede.
Não existe uma única arquitetura para a computação em nuvem. Existem muitas possibilidades em termos de infraestrutura de hardware, software e comunicação que são muito grandes e variadas, assim como os serviços disponíveis na nuvem.
Resumindo: Sendo assim, a arquitetura de computação em nuvem oferece flexibilidade ao construir a nuvem sob medida, conforme a necessidade do cliente.
Os mecanismos de infraestrutura para os serviços de computação em nuvem podem ser utilizados para a definiçãode diversos modelos de arquitetura fundamental de serviços em nuvem que serão abordas neste módulo.
Arquitetura de Distribuição de Carga de Trabalho
Na arquitetura de distribuição de carga de trabalho, os recursos de TI são escalonados.
Ao ser adicionado um ou mais recursos idênticos, o balanceador de carga distribui uniformemente a carga de trabalho entre os recursos de TI disponíveis.
Ao observarmos a figura abaixo, é possível identificar a redundância do serviço em nuvem com a implementação do servidor virtual B. O balanceador de carga intercepta as solicitações dos consumidores de serviços, e as direcionam para os servidores virtuais A e B, garantindo uma distribuição uniforme da carga de trabalho.
Essa arquitetura pode reduzir, dentro de um limite, tanto a superutilização, como também a subutilização de recursos de TI, de acordo com a sofisticação dos algoritmos de balanceamento de carga.
Saiba mais: Uma das variações dessa arquitetura é a inclusão, além dos servidores virtuais, dos comutadores virtuais no balanceamento de carga. O comutador virtual é um comutador ao qual os servidores virtuais estão conectados.
Comutador: O comutador utiliza um mecanismo de filtragem e comutação que consiste em dirigir os fluxos de dados para as máquinas mais adequadas em função de elementos presentes nos pacotes de dados. O comutador pode analisar os endereços existentes ou os protocolos utilizados para realizar o redirecionamento adequado.
Arquitetura baseada em Pool de Recursos
Um pool de recursos é um conjunto de recursos disponível para alocação ao consumidor da nuvem quando quiser acessar os serviços. Em outras palavras, um pool de recursos pode ser conceituado como uma abstração lógica para o gerenciamento flexível de recursos na nuvem que serão oferecidos aos usuários. Exemplo:
Quando o consumidor da nuvem contrata um provedor de nuvem com a arquitetura baseada em pool de recursos, poderá contratar um pool de recursos de servidores virtuais, ou seja, um conjunto de servidores virtuais para serem utilizados de acordo com sua necessidade do cliente.
A arquitetura baseada em pool de recursos agrupa os recursos de TI idênticos e os mantêm sob a gestão do sistema de controle que, automaticamente, se certifica se eles permanecem sincronizados. Dentre os conjuntos de pools de recursos, podemos destacar os termos:
· Pools de recursos irmãos
· Pools de recursos aninhados.
Pools de recursos irmãos
Os recursos de TI são agrupados fisicamente, ao contrário dos recursos de TI espalhados por diferentes datacenters.
Na figura abaixo, os pools estão isolados um do outro, para que cada cliente tenha acesso apenas ao seu respectivo pool.
Os Pools B e C são pools irmãos extraídos do Pool A, que foram alocados para um consumidor da nuvem. Neste caso, é possível obter os recursos de TI do Pool B e Pool C, a partir de uma reserva geral de recursos de TI compartilhada em toda a nuvem.
Pool de recursos aninhados
No pool de recursos aninhados, os pools maiores são divididos em pools menores, para agrupamento individual do mesmo tipo de recursos de TI. Dessa forma, é possível atribuir conjuntos de recursos a diferentes departamentos, ou grupos na mesma organização.
Para entendermos melhor, vamos visualizar a figura a seguir. Os pools aninhados A.1 e A.2 são compostos pelos mesmos recursos de TI do pool A, mas em quantidades diferentes. Eles são usados para provisionar serviços em nuvem que precisam ser instanciados rapidamente, usando o mesmo tipo de recursos de TI, com as mesmas configurações.
Exemplos comuns que envolvem o emprego de pools de recursos:
· Servidores de rede físicos, instalados com sistemas operacionais e outros programas e/ou aplicativos necessários, prontos para uso imediato.
· Servidores virtuais, usando um dos modelos disponíveis escolhidos pelo consumidor durante o provisionamento, por exemplo, um consumidor pode configurar servidores Windows ou Linux.
· Elementos de interconexão, compostos de diferentes dispositivos de conectividade de rede pré-configurados, por exemplo, um conjunto de firewalls virtuais, ou comutadores de rede físicos criados para conectividade redundante, balanceamento de carga ou agregação de link.
· CPU, prontos para serem alocados aos servidores virtuais e divididos em núcleos de processamento individuais.
· Memória RAM física, usados em servidores físicos recentemente provisionados, ou para dimensionar verticalmente servidores físicos.
Arquitetura de Escalonamento Dinâmico
A arquitetura de escalonamento dinâmico se baseia em um sistema que define condições de escalonamento predefinidas, aonde a alocação dinâmica de recursos de TI é realizada a partir de pools de recursos.
A alocação dinâmica possibilita o uso dos recursos conforme a variação da demanda de uso. Ao configurar o ouvinte (listener) de escalonamento automatizado com os limites de carga de trabalho definidos, é possível determinar quando novos recursos de TI são adicionados ao processamento da carga de trabalho.
Os tipos de escalonamento dinâmico mais comuns são:
	Escalonamento dinâmico horizontal
	Nesse tipo de escalonamento, os recursos de TI são replicados com as mesmas características da máquina virtual original e de acordo com os requisitos e permissões. Por exemplo, se a máquina virtual original tem capacidade de memória X, as máquinas duplicadas terão a mesma capacidade. Essa é a forma mais utilizada porque permite que os recursos sejam provisionados sem que o sistema fique indisponível. Da mesma forma, caso a demanda caia, os recursos são desalocados automaticamente.
	Escalonamento dinâmico vertical
	Nesse tipo de escalonamento, é ajustada a capacidade de processamento de um único recurso de TI. Por exemplo, suponhamos que a máquina virtual opera com 4GB de memória RAM, um escalonamento vertical significaria aumentar a capacidade de memória da máquina virtual para 8GB.
	Realocação dinâmica
	O recurso de TI é realocado para um host com mais capacidade.
Para um entendimento melhor, vamos analisar um exemplo de aplicação do escalonamento dinâmico horizontal na sequência (a), (b), (c) da figura 11.
Ao observarmos a figura acima, podemos extrair o movimento de atuação da arquitetura como apresentado logo abaixo:
	Passo 1
	Os clientes de serviços em nuvem enviam solicitações para a nuvem.
	Passo 2
	O ouvinte de escalonamento dinâmico monitora o serviço de nuvem, verificando se os limites de capacidade predefinidos foram excedidos.
	Passo 3
	Surge um aumento no número de solicitações oriundos dos clientes.
	Passo 4
	A carga de trabalho excede os limites de desempenho, o ouvinte de escalonamento dinâmico entra em ação agindo conforme a política de escalonamento existente.
	Passo 5
	Se a implementação do serviço em nuvem for considerada apta para escalonamento adicional, o listener inicia o processo de escalonamento.
	Passo 6
	O listener envia um sinal ao mecanismo de replicação de recursos
	Passo 7
	São criadas instâncias do serviço de nuvem.
	Passo 8
	O listener retoma o monitoramento, diminuindo e adicionando recursos de TI, conforme necessidade.
Arquitetura de Capacidade de Recurso Elástico
A arquitetura de capacidade de recurso elástico refere-se ao provisionamento dinâmico de servidores virtuais, usando um sistema de gerenciamento com mecanismo de automação inteligente, que aloca e recupera recursos dos processadores e memória principal, em resposta imediata aos requisitos de processamento dos recursos de TI hospedados, conforme pode ser visto na sequência (a), (b) da figura a seguir.
Ao observarmos a figura acima, podemos extrair o movimento de atuação da arquitetura como apresentado logo abaixo:
	Passo 1
	Os consumidores de serviços em nuvem enviam solicitações ativamente para um serviço em nuvem
	Passo 2
	O serviço em nuvem é monitorado por um ouvinte de escalonamento automatizado
	Passo 3
	Um script do mecanismo de automação inteligente está implementado com lógica de fluxo de trabalho.
	Passo 4
	O script é capaz de notificar o pool de recursos usando solicitações de alocaçãoPasso 5
	Acontece um aumento das solicitações dos consumidores de serviços em nuvem
	Passo 6
	O aumento das solicitações faz com que o listener sinalize o mecanismo de automação inteligente para executar o scrip
	Passo 7
	O script executa a lógica do fluxo de trabalho; sinaliza ao hypervisor para alocar mais recursos de TI dos pools de recursos
	Passo 8
	O hypervisor aloca CPU e RAM adicionais para o servidor virtual; a carga de trabalho aumentada pode ser tratada.
Os pools de recursos podem ser usados pelo escalonador, que interage junto com o hypervisor e/ou VIM (Virtualized Infrastructure Manager), para recuperar e retornar os recursos de CPU e memória RAM em tempo de execução.
O processamento do servidor virtual é monitorado, para que o poder de processamento adicional possa ser entregue a partir do pool de recursos por meio de alocação dinâmica, antes que os limites de capacidade sejam atendidos.
O servidor virtual, e seus aplicativos hospedados e recursos de TI, respondem escalonando verticalmente.
Arquitetura de Balanceamento de Carga de Serviço
A arquitetura de balanceamento de carga de serviço permite que sejam implantadas redundâncias dos serviços em nuvem, utilizando como base as arquiteturas de balanceamento de carga de trabalho explicadas anteriormente. O balanceador de carga pode ser posicionado independentemente dos serviços em nuvem e de seus servidores host, como pode ser visto na figura seguinte.
O balanceador de carga também pode ser incorporado como parte do aplicativo ou do ambiente do servidor. No caso, um servidor primário com a lógica de balanceamento de carga pode se comunicar com os servidores vizinhos para equilibrar a carga de trabalho, conforme mostrado na figura abaixo.
Ao observarmos a figura acima, podemos extrair o movimento de atuação da arquitetura como apresentado logo abaixo:
	Passo 1
	As solicitações do consumidor são enviadas para o serviço em nuvem A no servidor virtual A.
	Passo 2
	O balanceamento de carga integrado distribui solicitações para as implementações vizinhas do serviço de nuvem A nos servidores virtuais B e C.
As implementações de serviço em nuvem duplicadas são organizadas em um pool de recursos. Sendo assim, o balanceador de carga permite que os servidores host equilibrem suas cargas de trabalho.
Dependendo da carga de trabalho prevista, e da capacidade de processamento dos ambientes do servidor host, várias instâncias de cada implementação de serviço em nuvem podem ser geradas como parte de um pool de recursos que responde à flutuação dos volumes de solicitação com mais eficiência.
Arquitetura Cloud Bursting
A arquitetura cloud bursting oferece a opção aos consumidores de utilizarem os recursos de TI baseados em nuvem somente para atender a demandas em caso de sobrecarga do processamento on premise. A arquitetura escala ou "expulsa" os recursos executados localmente (on premise) para a nuvem, sempre que os limites de capacidade predefinidos forem atingidos.
Ou seja, cloud bursting é uma configuração definida entre uma nuvem privada e uma nuvem pública para lidar com picos na demanda de TI. Se uma organização que usa uma nuvem privada alcançar 100% de sua capacidade de recursos, o tráfego excedente será direcionado a uma nuvem pública para que não haja interrupção de serviços.
A arquitetura também libera recurso computacional da nuvem privada, onde aplicações não críticas são movidas para a nuvem pública, liberando o processamento on premise para aplicações críticas do consumidor.
Atenção: Os recursos de TI correspondentes baseados na nuvem são redundantemente pré-implantados, permanecendo inativos até que ocorra uma rajada. Depois que eles não são mais necessários, os recursos de TI baseados na nuvem são liberados e a arquitetura volta para o ambiente local.
O ouvinte de dimensionamento automatizado define o momento no qual as solicitações devem ser redirecionadas para recursos de TI baseados na nuvem. A replicação de recursos é utilizada para manter a sincronia entre os recursos de TI locais e os recursos de TI baseados na nuvem, em relação às informações de estado. Para entendermos melhor essa arquitetura, observem na figura abaixo o funcionamento do cloud bursting.
Ao observarmos a figura acima, podemos extrair o movimento de atuação da arquitetura como apresentado logo abaixo:
	Passo 1
	Um serviço automatizado monitora o uso do serviço A, redirecionando uma solicitação do consumidor de serviço C para uma implementação redundante do serviço A quando o limite de uso do serviço A é excedido
	Passo 2
	Um sistema de replicação de recursos é utilizado para manter sincronizados os bancos de dados de gerenciamento de status.
Arquitetura de Provisionamento Elástico de Disco
A arquitetura de provisionamento elástico de disco estabelece um sistema dinâmico de provisionamento de armazenamento que garante que o consumidor da nuvem seja cobrado pela quantidade exata de armazenamento que ele realmente usa, ao invés de ser cobrado por um espaço de armazenamento fixo. Exemplo:
Imaginamos o cenário no qual o consumidor contrata um servidor virtual com três discos rígidos de 150GB, sendo assim, será cobrado pelo uso de 450GB de espaço de armazenamento após a instalação do sistema operacional, embora ainda não tenha instalado nenhum software.
Visualizemos a figura abaixo para entendermos melhor o funcionamento da arquitetura de provisionamento elástico de disco.
Ao observarmos a figura anterior, podemos extrair os passos de atuação da arquitetura como apresentado logo abaixo:
	Passo 1
	O consumidor solicita um servidor virtual com três discos rígidos com capacidade de 150GB cada um.
	Passo 2
	O servidor virtual é provisionado com um total de 450GB de espaço em disco.
	Passo 3
	Os 450GB são definidos como o uso máximo de disco permitido para o servidor virtual. Ainda não existe reserva ou alocação de espaço.
	Passo 4
	O consumidor não instalou nenhum software, logo o espaço usado está em 0GB.
	Passo 5
	O consumidor da nuvem não é cobrado por nenhum uso de espaço em disco (o espaço em disco alocado é igual ao espaço usado real).
A arquitetura usa um provisionamento fino para alocação dinâmica de espaço de armazenamento, sendo também suportado pelo monitoramento de uso em tempo de execução, para uma coleta minuciosa dos dados de uso a serem cobrados.
Arquitetura de Armazenamento Redundante
A arquitetura de armazenamento redundante oferece uma duplicação dos dados em dispositivo de armazenamento secundário da nuvem como parte de um sistema de failover, que sincroniza seus dados com os dados do dispositivo de armazenamento primário da nuvem.
Em outras palavras, essa arquitetura possui um gateway que desvia as solicitações do consumidor da nuvem para o dispositivo secundário sempre que o dispositivo primário falhar, conforme pode ser visto na sequência (a), (b), (c) da figura 17.
Ao observarmos a figura acima, podemos extrair os passos de atuação da arquitetura como apresentado logo abaixo:
	Passo 1
	O dispositivo de armazenamento primário é replicado rotineiramente no dispositivo de armazenamento secundário da nuvem.
	Passo 2
	Quando o armazenamento primário fica indisponível, o gateway encaminha as solicitações do consumidor da nuvem para o dispositivo de armazenamento secundário
	Passo 3
	O dispositivo de armazenamento secundário proporciona aos consumidores da nuvem continuarem acessando seus dados.
Considerações Finais
Arquitetura de computação em nuvem é a coleção de componentes necessários para a cloud computing. É a infraestrutura física e lógica que torna a computação em nuvem uma realidade. A arquitetura de nuvem é destinada a fornecer aos usuários largura de banda alta, permitindo que os usuários tenham acesso ininterrupto a dados e aplicativos. Além disso, acesso à rede ágil sob demanda, com possibilidade de se mover de forma rápida e eficiente entre servidores ou, até mesmo, entre nuvens, e mais importante, segurança dos dados.
O estudo do contexto de cloud computing requer a atenção para vários aspectos importantesrelacionados aos conceitos, modelos, tecnologias, mecanismos, arquiteturas, dentre outros. Os vários tipos de mecanismos implementados nos serviços baseados em nuvem deverão ser usados para compor as várias arquiteturas de serviços que possibilitam o oferecimento dos mais diversos tipos de serviços.
A arquitetura de computação em nuvem pode ser dividida, sobretudo, em duas partes: front-end e back-end. O front-end é o que o cliente usa para acessar a nuvem e o back-end é a própria nuvem.
O front-end não precisa ter muito poder de processamento, porque a nuvem cuida de todos os cálculos. O back-end, no entanto, refere-se à própria nuvem. Com isso, ela é composta pelos recursos necessários para serviços de computação em nuvem. Consiste em máquinas virtuais, servidores, armazenamento de dados, mecanismo de segurança etc. Está sob controle de provedores.
O mediador entre o front-end e o back-end geralmente é a internet, que pode ser acessada através de uma rede local de uma empresa ou através de redes móveis. E para que seja feita a conexão entre o front-end e back-end, de forma segura, é necessário o emprego de mecanismos de segurança para minimizar os riscos no uso da nuvem.
Os mecanismos de infraestrutura para os serviços de computação em nuvem podem ser utilizados para a definição de diversos modelos de arquitetura fundamental de serviços em nuvem que foram abordados neste módulo, como: arquitetura com distribuição de carga, arquitetura com balanceamento de carga, arquitetura baseada em pool de recursos, dentre outras.
A computação em nuvem distribui o sistema de arquivos por vários discos rígidos e máquinas. Os dados nunca são armazenados em um único local. Portanto, no caso de uma unidade falhar, a outra assumirá automaticamente todo serviço. O espaço em disco do usuário é alocado no sistema de arquivos distribuído, enquanto outro componente importante é o algoritmo para alocação de recursos. Para finalizar, a computação em nuvem é um ambiente distribuído forte e depende de um algoritmo também forte.
Existe um conjunto de arquiteturas fundamentais, que servirão de base para a composição de arquiteturas mais avançadas.
AULA 3 – TRABALHANDO COM COMPUTAÇÃO EM NUVEM
Definição
Apresentação das considerações sobre a aplicabilidade dos modelos de serviços em nuvem, dos modelos de custos/precificação, das métricas de Qualidade de Serviço (QoS) e do Acordo de Nível de Serviço (SLA) como fatores considerados no trabalho com a cloud computing.
Propósito
Compreender as considerações do uso do modelo de serviços na arquitetura de computação em nuvem, as métricas de Qualidade de Serviço (QoS), o Acordo de Nível de Serviços (SLA) e a precificação dos serviços, para a atuação geral na área de redes e a atuação especializada em serviços de cloud computing.
Objetivos
· Módulo 1: Analisar as considerações para o modelo de nuvem
· Módulo 2: Identificar os modelos de custo e precificação
· Módulo 3: Descrever as métricas de Qualidade de Serviço e o Acordo de Nível de Serviço – ANS (Service Level Agreement – SLA)
Introdução
A computação em nuvem (do inglês cloud computing) é um conceito que faz referência à tecnologia que disponibiliza recursos sob demanda pela internet.
O National Institute of Standards and Technology (NIST) define a computação em nuvem como um modelo que possibilita acesso, de modo conveniente e sob demanda, a um conjunto de recursos computacionais configuráveis (por exemplo, redes, servidores, armazenamento, aplicações e serviços) que podem ser rapidamente adquiridos e liberados com mínimo esforço gerencial ou interação com o provedor de serviços.
O modelo de nuvem é composto por cinco características essenciais:
· Autoatendimento sob demanda;
· Amplo acesso à rede;
· Acesso a um pool de recursos;
· Elasticidade dinâmica;
· Serviço mensurável.
O modelo de nuvem é composto por três modelos de serviço:
· Infraestrutura como um Serviço (IaaS);
· Plataforma como um Serviço (PaaS);
· Software como um Serviço (SaaS).
O modelo de nuvem é composto por quatro modelos de implantação:
· Nuvem privada;
· Nuvem comunitária;
· Nuvem pública;
· Nuvem híbrida. (VAULX; SIMMON; BOHN, 2018).
Estudaremos os modelos de serviço e os modelos de implantação da computação em nuvem, além dos fundamentos de precificação dos serviços e das métricas de Qualidade de Serviço (Quality of Service – QoS) e de Acordo de Nível de Serviço (Service Level Agreement – SLA).
Módulo 1
Analisar as considerações para o modelo de nuvem
Conceitos
Os modelos de serviço em nuvem (ou modelos de entrega em nuvem) definem como esse tipo de serviço é oferecido aos clientes. Trata-se de uma combinação de recursos de Tecnologia da Informação (TI) oferecida pelo provedor de nuvem conforme a necessidade do cliente. Vamos conhecer a seguir os modelos de entrega de serviço da computação em nuvem.
Infraestrutura como um Serviço (Infrastructure-as-a-Service – IaaS)
Representa um ambiente de TI independente, composto por recursos de TI centrados na infraestrutura, acessados e gerenciados a partir de interfaces e ferramentas baseadas em serviços em nuvem.
O ambiente pode incluir hardware, rede, conectividade, sistemas operacionais e outros recursos de TI. Diferentemente dos ambientes tradicionais de hospedagem ou de terceirização, em IaaS, os recursos de TI em geral são virtualizados e “embrulhados” em pacotes, visando simplificar o escalonamento antecipado do tempo de execução e a personalização da infraestrutura.
O objetivo geral desse ambiente é fornecer um alto nível de controle e responsabilidade sobre sua configuração e sua utilização, tendo recursos de TI geralmente entregues sem possuir uma pré-configuração, transferindo a responsabilidade administrativa para o consumidor de serviço em nuvem.
Um recurso central e primário de TI em um ambiente típico de IaaS é o servidor virtual. Este é alugado especificando requisitos de hardware do servidor, como capacidade do processador, memória e espaço de armazenamento local, como mostrado a seguir.
Plataforma como um Serviço (Platform-as-a-Service – PaaS)
Representa um ambiente predefinido “pronto para uso”, com um conjunto de produtos e ferramentas pré-empacotados, usados para suportar todo o ciclo de vida de entrega de aplicativos personalizados, geralmente composto por recursos de TI já implantados e configurados. Um consumidor de nuvem pode querer usar e investir em um ambiente PaaS devido à:
· Intenção de estender ambientes locais para a nuvem, com propósitos de escalabilidade e economia;
· Substituição completa de um ambiente local;
· Intenção de se tornar um provedor de nuvem e implantar os próprios serviços para serem disponibilizados a consumidores externos.
O consumidor é poupado da carga administrativa de configuração e manutenção dos recursos de TI de infraestrutura simples fornecidos pelo modelo IaaS.
O consumidor recebe um nível mais baixo de controle sobre os recursos de TI subjacentes que hospedam e provisionam a plataforma, conforme mostrado a seguir. Os produtos PaaS estão disponíveis em diferentes pilhas de desenvolvimento, como o Google App Engine, que oferece um ambiente baseado em Java e Python.
O ponto de interrogação indica que o consumidor está separado dos detalhes de implementação da plataforma.
Software como um Serviço (Software-as-a-Service – SaaS)
Representa um aplicativo (software) oferecido como um serviço compartilhado. Esse modelo de entrega pode ser usado para disponibilizar, em larga escala, um serviço de nuvem reutilizável para vários consumidores. Os recursos podem ser utilizados para diferentes propósitos, como visto mais à frente.
O consumidor recebe um controle administrativo bastante restrito sobre os recursos. Também é possível encontrar uma situação em que a organização que atua como consumidor em um ambiente PaaS pode criar um serviço em nuvem que decide implantar, no mesmo ambiente, um modelo SaaS.
Para entendermos melhor, vamos observar a seguir uma comparação dos níveis de controle entre os modelos básicos.
Podemos observar que os trêsmodelos de serviço da computação em nuvem possibilitam a combinação entre eles, gerando um amplo portfólio de recursos para o consumidor.
O consumidor pode utilizar distintos modelos de serviços em nuvem. Ou seja, é possível utilizar os serviços da Amazon como provedor de IaaS e o Azure como provedor PaaS.
Aplicabilidade dos Modelos de Nuvem
Para a tomada de decisão sobre qual modelo de nuvem é mais conveniente às necessidades do consumidor, vamos analisar alguns fatores:
Fatores Técnicos
A organização provedora e consumidores podem desempenhar diferentes papeis no modelo de serviço em nuvem. Quanto menos serviços em nuvem a empresa cliente consumir, maior o grau de competência da equipe de TI da empresa, ou seja, menos serviços consumidos pela empresa na nuvem, maior será a área de TI da empresa cliente.
Ao observar o quadro 1, encontramos a disponibilização dos limites de papeis desempenhados pelo provedor e pelo consumidor. No caso do modelo SaaS, o provedor da nuvem desempenha um número maior de papéis e a empresa cliente, o consumidor, tem menos responsabilidade perante os serviços, permitindo que a área de TI seja menor.
E isso também significa que, no modelo IaaS, a empresa cliente terá que se preocupar com o gerenciamento de mais serviços de TI. Se ela não tiver boas habilidades de TI nas áreas de Computação Distribuída, Desenvolvimento Web e Arquiteturas Orientadas a Serviços (SOAs), talvez seja melhor se concentrar nos modelos de serviço SaaS e PaaS ou encontrar um parceiro que crie serviços em nuvem no IaaS.
Um exemplo de competência que pode pesar na escolha do modelo de serviço é o desenvolvimento de middleware, uma camada na qual o consumidor gerencia caso opte pelo modelo IaaS, mas que será gerenciado pelo provedor no caso da escolha pelo PaaS.
Fatores Financeiros
O foco dessa categoria é mais direcionado para o Custo Total de Propriedade (Total Cost of Ownership – TCO) do que para o cálculo do preço por hora ou por mês de um serviço em nuvem. O TCO é uma estimativa que auxilia na determinação dos custos diretos e indiretos de um produto ou sistema. Por exemplo, o investimento em um novo sistema de computador tem um preço de compra inicial. Os custos adicionais geralmente incluem novo software, instalação, custos de transição, treinamento de funcionários, custos de segurança, planejamento de recuperação de desastres, suporte contínuo e atualizações futuras. Usando esses custos como guia, a organização compara as vantagens e as desvantagens da compra do sistema de computador, assim como os benefícios gerais para a empresa a longo prazo.
Fatores Estratégicos
As estratégias de negócios contribuem para a decisão sobre qual modelo de serviço em nuvem selecionar. Exemplo: Se a velocidade para o lançamento de uma solução no mercado for grande, existe mais probabilidade de a escolha de SaaS (ou PaaS), em que a infraestrutura será abstraída do usuário final. Se o controle é a estratégia mais importante, é mais provável que uma solução de IaaS seja escolhida, fazendo a organização ter mais controle sobre a infraestrutura subjacente. As empresas muitas vezes acabam escolhendo um fornecedor de nuvem com base apenas em preferências técnicas, não levando em consideração as estratégias de negócios que estão impulsionando as iniciativas de nuvem.
Fatores Organizacionais
Uma avaliação da organização pode desempenhar um papel no modelo de serviço em nuvem que escolher: Quanto menor for a pilha de nuvens da empresa, maior o grau de competência da equipe. Voltando ao quadro 1, a pilha de nuvens do modelo SaaS, por exemplo, é menor do que a pilha de nuvens do modelo IaaS, significando que, no último modelo, a empresa terá que se preocupar com o gerenciamento de mais camadas da pilha. Se ela não tiver boas habilidades de TI nas áreas de Computação Distribuída, Desenvolvimento Web e Arquiteturas Orientadas a Serviços (SOAs), talvez seja melhor se concentrar nos modelos de serviço SaaS e PaaS ou encontrar um parceiro que crie serviços em nuvem no IaaS. Um exemplo de competência que pode pesar na escolha do modelo de serviço é o desenvolvimento de middleware, uma camada na qual o consumidor gerencia caso opte pelo modelo IaaS, mas que será gerenciado pelo provedor no caso da escolha pelo PaaS.
Fatores de Riscos
A gerência deve definir o grau de risco que uma empresa está disposta a assumir, conforme os objetivos do negócio; quantificar e qualificar os riscos identificados, como por quanto tempo a solução pode ficar inativa e quanto uma violação de segurança pode ser prejudicial.
Ao conceituar e analisar cada modelo de serviço em nuvem, podemos identificar quando é indicado usar o IaaS, o PaaS ou o SaaS. Vamos acompanhar os seguintes estudos de caso enquadrados por modelo de serviço.
Quando usar o SaaS
Entre os três modelos de serviço em nuvem, o SaaS foi o primeiro a amadurecer. Nesse modelo, os provedores têm total controle sobre a infraestrutura, o desempenho, a segurança, a escalabilidade e a privacidade, por exemplo, geralmente não oferecendo o mesmo nível de flexibilidade que uma empresa teria se desenvolvesse o próprio aplicativo. Em geral, são oferecidas duas formas de uso dos recursos aos consumidores:
1. Interface de usuário baseada na web, geralmente acessível em qualquer dispositivo conectado à internet;
2. APIs, de modo que os consumidores de serviços possam integrar recursos aos aplicativos existentes ou com outras soluções SaaS.
Exemplo
Suponha que a empresa BROKER é do ramo de administração de imóveis, não possuindo experiência na área de TI. Ela deseja contratar uma provedora de serviços em nuvem SaaS para oferecer um aplicativo on-line de venda e de aluguel de imóveis. Vamos verificar o que ela terá à disposição:
O modelo SaaS possui APIs refinadas e genéricas, projetadas para serem incorporadas como parte de soluções maiores. A empresa fornece um serviço similar ao Google Maps, com uma API que possibilita a incorporação de informações e de imagens de mapeamento por outros sites e aplicativos da web.
Alguns dos serviços são fornecidos de graça, e como são patrocinados por terceiros, eles executam uma forma de coleta de informações de segundo plano. A leitura do contrato do provedor de nuvem esclarece sobre qualquer atividade de fundo que o serviço possa executar.
O consumidor é isento das responsabilidades de implementar e administrar os ambientes de hospedagem subjacentes. Opções de personalização estão disponíveis, porém, são limitadas ao controle de uso em tempo de execução das instâncias de serviço em nuvem geradas especificamente pelo consumidor e para ele. O consumidor da nuvem terá à sua disposição, por exemplo:
· Gerenciamento de configurações relacionadas à segurança; opções selecionadas de disponibilidade e confiabilidade; custos de uso; contas de usuário, perfis e autorização de acesso;
· Seleção e monitoramento de SLAs;
· Definição de opções e limitações de escalabilidade manual e automatizada.
Quando usar o PaaS
Nas primeiras soluções PaaS, os consumidores usavam uma linguagem de programação específica e executavam, na infraestrutura do provedor de serviços, o que não impunha restrições de flexibilidade para organizações com muitas arquiteturas, pilhas de tecnologia e necessidades de aplicativos diferentes.
· A nova geração de provedores de serviços PaaS oferece suporte a várias pilhas, escolha da infraestrutura em que o software PaaS será implantado, suporte a vários idiomas, como Ruby, PHP, Python e Node.js.
· Algumas tarefas de administração do sistema, como correções de segurança mensais, criação de log, monitoramento, dimensionamento e failover (tolerância a falhas) são oferecidas pelo provedor, para que os desenvolvedores possam se concentrar na criação de aplicativos prontos para a nuvem.
· Como a plataforma é compartilhada por muitos clientes, muitos provedores de PaaS limitam a largura de banda de um usuário individual como proteção contra colisões e congestionamentos na rede, otimizam a utilização da CPU para reduzir a quantidade de geração decalor no data center e economizar energia ou limitam a atividade de banco de dados dos clientes. Os desenvolvedores devem entender as limitações da plataforma selecionada e projetar de acordo com elas.
Um típico IDE PaaS (Integrated Development Environment (IDE) pode ser traduzido como Ambiente de Desenvolvimento Integrado e representa um software para ajudar no desenvolvimento de aplicações) pode oferecer ampla variedade de ferramentas e recursos de programação, por exemplo, bibliotecas de software, bibliotecas de classes, estruturas, APIs. Os desenvolvedores podem criar, testar e executar o código do aplicativo na nuvem ou localmente enquanto usam o IDE para emular o ambiente de implantação na nuvem. Os aplicativos compilados ou concluídos são enviados para a nuvem e implantados nos ambientes prontos.
Exemplo
Suponha que a startup de comércio eletrônico START possui funcionários com boas experiências na área de TI. Ela deseja agora contratar os serviços de uma provedora de serviços em nuvem PaaS para oferecer uma plataforma de vendas on-line. Apesar de os ambientes PaaS fornecerem menos controle administrativo que os ambientes IaaS, eles ainda oferecem uma variedade significativa de recursos de gerenciamento. A START terá à disposição:
· Seleção de plataformas de software e estruturas de desenvolvimento para ambientes prontos; tipos de instância, front-end ou back-end; dispositivos de armazenamento em nuvem para uso em ambientes prontos; monitoramento de métricas de SLA relacionadas ao PaaS;
· Controle do ciclo de vida dos aplicativos desenvolvidos por PaaS (implantação, inicialização, encerramento, reinicialização e liberação); controle de versão de aplicativos e módulos implantados; recursos de escalabilidade (cotas de uso, limites de instância ativa, configuração e implantação dos mecanismos automatizados de ouvinte de escala e balanceador de carga);
· Gerenciamento de credenciais para desenvolvedores e administradores de recursos da nuvem; configurações gerais de segurança, como portas de rede acessíveis; custos de uso e recursos de TI;
· Configuração de mecanismos relacionados à disponibilidade e à confiabilidade;
· Estabelecimento e exibição de contratos de fornecimento de serviços (condições da conta, termos de uso).
Quando usar o IaaS
O PaaS pode reduzir os custos, reduzindo a quantidade de trabalho e de recursos necessários para criar e implantar aplicativos, mas pode ficar caro quando os dados excedem os terabytes e a largura de banda, ou a demanda da CPU excede os níveis normais.
À medida que o tempo avança, o custo do IaaS pode se tornar tão baixo que os provedores de PaaS podem ter que seguir o exemplo para competir. Por exemplo, quando a Amazon reduz os custos de seu Elastic Compute Cloud (EC2), outros provedores de IaaS podem ter que fazer o mesmo.
O IaaS também foi adotado sobre o PaaS devido às interrupções. Quando um provedor PaaS ou SaaS sofre uma interrupção, deve-se esperar a correção do problema para que os serviços fiquem novamente on-line.
Os servidores virtuais são acessados no nível do sistema operacional por aplicativos de terminal remoto, como: Cliente de Área de Trabalho Remota (para ambientes Windows) e Cliente SSH (para ambientes Mac e Linux).
Um dispositivo de armazenamento em nuvem estará conectado diretamente aos servidores virtuais. Porém existe a opção de estar conectado a um recurso de TI hospedado fora da nuvem, por exemplo, um dispositivo local por meio de WAN ou VPN.
Os seguintes formatos para manipulação e transmissão de dados de armazenamento em nuvem são comumente usados:
	Sistema de arquivos em rede
	A manipulação de arquivos é semelhante à maneira como as pastas são organizadas nos sistemas operacionais (NFS, CIFS);
	Dispositivos de rede de área de armazenamento
	O acesso é transmitido pela rede (iSCSI, Fibre Channel);
	Recursos baseados na web
	Baseado em objetos, a interface não é integrada ao sistema operacional, cujos arquivos são representados logicamente e podem ser acessados por meio de uma interface baseada na web (como o Amazon S3).
Exemplo
A APPOWER é uma grande empresa do ramo de comércio eletrônico que está avaliando a contratação de um provedor de serviços em nuvem IaaS, pois está desenvolvendo um serviço com requisitos de desempenho ou escalabilidade, que exigirá dos desenvolvedores o gerenciamento da memória, a configuração dos servidores de banco de dados e de aplicativos para maximizar a taxa de transferência, manipular o sistema operacional etc.
A APPOWER terá muito controle sobre como, e em que medida, os recursos de TI são provisionados, por exemplo:
· Controles de escalabilidade (escala automatizada, balanceamento de carga); ciclo de vida (desligamento, reinicialização, inicialização de dispositivos virtuais); ambiente de rede virtual e regras de acesso à rede (firewalls, perímetros de rede lógica);
· Gerenciamento da conexão de dispositivos de armazenamento em nuvem; pré-alocação de recursos de TI (reserva de recursos); credenciais e senhas para administradores de recursos em nuvem; credenciais para grupos de segurança; configurações de segurança; armazenamento de imagem do servidor virtual personalizado (importação, exportação, backup);
· Seleção de opções de alta disponibilidade (failover, cluster de recursos de TI); monitoramento de métricas SLA; configurações básicas de software; instâncias de recursos, entre várias configurações e opções disponíveis relacionadas a hardware (recursos de processamento, RAM, armazenamento); regiões geográficas nas quais os recursos de TI baseados em nuvem devem ser hospedados;
· Estabelecimento e exibição de contratos de fornecimento de serviços (condições da conta, termos de uso);
· Rastreamento e gerenciamento de custos.
Módulo 2
Identificar os modelos de custo e precificação
Conceitos
Existe uma variedade cada vez maior de opções de serviços baseados em nuvem, exigindo a comparação entre as ofertas dos provedores de serviços em nuvem. É necessário ter requisitos claros, criar Acordos de Nível de Serviço (SLAs) que os reflitam e mensurá-los para validar a entrega dos serviços com o desempenho e as soluções.
Mensurar os dados sobre recursos, como qualidade de serviço, disponibilidade e confiabilidade, possibilita oferecer ao cliente as ferramentas e a oportunidade de escolher e compreender melhor o serviço que está sendo entregue.
Segundo o NIST (2018), uma métrica fornece o conhecimento sobre uma propriedade da nuvem pela sua definição (por exemplo, expressão, unidade, regras) e os valores resultantes da medição da propriedade. Ela também fornece as informações necessárias para reproduzir e verificar medições e resultados de medições.
Atenção: As métricas são importantes para apoiar a tomada de decisão na seleção dos serviços em nuvem, a definição e o cumprimento dos contratos de serviço, monitorando os serviços em nuvem, a contabilidade e a auditoria.
Métricas para avaliar a computação em nuvem
Quanto à computação em nuvem, existem muitos sistemas e subsistemas a serem considerados, incluindo armazenamento, banco de dados e camadas de aplicativos. Ou seja, para garantir o serviço em nuvem de qualidade e bem-sucedido, é necessária a observação prévia das métricas operacionais, como dados de desempenho e transação, rastreamento de leitura/gravação do armazenamento, análises preditivas e custos, entre outras. Vamos analisar a seguir algumas métricas de custos consideradas na computação em nuvem.
Métrica de custo comercial
O objetivo da métrica de custo comercial é avaliar os custos estimados e o valor comercial dos leasings de recursos de TI baseados em nuvem quando comparados à compra de recursos de TI locais. Para isso, consideram-se os seguintes custos:
	Custos iniciais
	Investimentos iniciais feitos pelas organizações para financiar os recursos de TI que pretendem usar. Incluem custos para obter os recursos de TI e despesas necessárias para implantá-los e administrá-los
	Custos contínuos
	Despesas exigidas por uma organização para executar e manter os recursos deTI que ela usa
Veja, a seguir, alguns exemplos de escala de custos, para os custos iniciais e contínuos:
Além dos custos apresentados, outras métricas de custos comerciais podem ser levadas em consideração, como mostrado a seguir:
	Custo de capital
	Custo decorrente da captação de recursos necessários. Ex.: É mais caro obter um investimento inicial de R$ 150.000, do que obter esse valor por um período de três anos
	Custos irrecuperáveis
	Recursos de TI que a empresa já tinha, ou seja, já foram pagos, e estão operacionais. Ao comparar custos iniciais com custos irrecuperáveis significativos, pode ser mais difícil justificar o leasing de recursos de TI baseados em nuvem como alternativa
	Custos de integração
	Medem o esforço para tornar os recursos de TI compatíveis e interoperáveis em um ambiente externo, como uma nova plataforma em nuvem
	Custos bloqueados (Locked-in)
	Nem sempre é possível fazer a portabilidade de um provedor para outro a longo prazo. Alguns consumidores de serviços em nuvem podem se tornar dependentes das características proprietárias de um ambiente em nuvem, existindo assim custos bloqueados associados a esse tipo de mudança, que podem diminuir ainda mais o valor comercial de longo prazo dos leasings de recursos de TI baseados em nuvem
Métricas de custo de uso da nuvem
As métricas de custo de uso podem ser agrupadas da seguinte forma:
	Uso da rede
	Geralmente é calculado medindo-se separadamente o tráfego de uso da rede de entrada e o tráfego de uso da rede de saída em relação aos serviços em nuvem ou outros recursos de TI
	Uso do servidor
	As métricas de uso do servidor em geral são usadas para definir o valor a ser pago por uma quantidade de servidores e ambientes utilizados em ambientes IaaS e PaaS. Podemos utilizar, por exemplo, a alocação de instâncias de máquina virtual sob demanda
	Dispositivo de armazenamento em nuvem
	O armazenamento em nuvem geralmente é cobrado pela quantidade de espaço alocado em um período predefinido. As taxas de alocação de armazenamento sob demanda geralmente são baseadas em incrementos de tempo curtos (como uma base horária). Já a métrica de dados de E/S (Entrada e Saída) transferidos mede a quantidade de dados de entrada e saída transferidos
	Uso de serviço em nuvem
	O uso do serviço de nuvem em ambientes SaaS geralmente é medido usando as métricas: Duração da assinatura de uso do serviço de nuvem (ex.: Contratar um serviço SaaS por 1 ano); usuários registrados com acesso legítimo (ex.: Existe um valor para até 50 usuários – após esse limite, cobra-se por usuário individual); e número de transações atendidas pelo serviço de nuvem (ex.: Transações de cadastros de usuários)
A seguir, são mostrados alguns exemplos de métricas de custo de uso da nuvem. Em “Medidas de utilização / Métricas”, vemos alguns exemplos de medidas e de métricas que podem ser utilizadas por um determinado tipo de serviço em nuvem.
Em “Medição” vemos as unidades de medidas ou as maneiras de medir cada uma das métricas relacionadas. Em “Frequência” vemos a periodicidade das medições realizadas ao longo do tempo.
Em “Modelo de serviço” vemos o modelo básico de serviço em nuvem (IaaS, PaaS, SaaS) ao qual a métrica pode ser adequada. Em “Exemplo” há uma exemplificação de aplicação prática, ou como a métrica pode ser comercialmente explorada por um provedor de serviços em nuvem.
Gerenciamento de custos
Normalmente o gerenciamento de custos é centralizado nas fases do ciclo de vida dos serviços em nuvem, definidas a seguir e mostradas adiante.
	Design e desenvolvimento de serviço em nuvem
	A organização que fornece o serviço define os modelos de preços e de custo mais conservadores
	Implantação de serviço em nuvem
	Determinação e implementação da arquitetura de back-end para medir o uso e a coleta de dados relacionados à cobrança
	Contrato de serviço em nuvem
	Negociações entre o consumidor e o provedor, para chegar a um acordo mútuo sobre as taxas com base nas métricas de custo de uso
	Oferta de serviço em nuvem
	Oferta dos modelos de preços do serviço, usando modelos de custo e quaisquer opções de personalização disponíveis
	Provisionamento de serviço em nuvem
	O uso do serviço e os limites de criação de instância podem ser impostos pelo provedor de nuvem ou definidos pelo consumidor
	Operação do serviço em nuvem
	O uso ativo do serviço produz dados métricos de custo de uso
	Desativação do serviço de nuvem
	Quando o serviço é desativado temporária ou permanentemente
Precificação
A computação em nuvem impõe um novo desafio financeiro às empresas de tecnologia: Como precificar corretamente os modelos de contratos e como conseguir o capital necessário para financiar os equipamentos e a infraestrutura?
Os modelos de precificação da computação em nuvem incluem os seguintes fatores de influência:
· Concorrência no mercado e requisitos regulatórios;
· Custos indiretos no design, desenvolvimento, implantação e operação de serviços em nuvem e outros recursos de TI;
· Oportunidades para diminuir despesas pelo compartilhamento de recursos de TI e otimização de data center.
O cálculo pode ser influenciado por variáveis como:
· Custos que dependem do tipo de alocação de recursos de TI (ex.: Sob demanda versus reservada);
· Taxas fixas ou variáveis, conforme o tipo de alocação de recursos (cota fixa de uso, ou uso dinâmico);
· Descontos à medida que a escalabilidade dos recursos de TI aumenta progressivamente;
· Personalização de custo e preço.
Para entendermos melhor, vamos analisar o seguinte estudo de caso.
Estudo de caso
Uma empresa faz uma análise de Custo Total de Propriedade (TCO) para decidir se migrará um aplicativo herdado para um ambiente PaaS implantado em um cluster de servidor virtual composto por 2 servidores virtuais em execução em 1 servidor físico dedicado, que possui 200 GB de banco de dados. Os valores já são os melhores, escolhidos após várias consultas e análises de preços com fornecedores, como mostrados a seguir.
Custos iniciais no local (on-premises):
· Licenciamento: O servidor físico que hospeda o aplicativo custa R$15.000,00; o software necessário para executar os 2 servidores virtuais custa R$30.000,00;
· Mão de obra: R$3.000,00;
· O armazenamento não foi avaliado como parte do plano.
Custos totais: R$15.000,00 + R$30.000,00 + R$3.000,00 = R$48.000,00.
Custos contínuos no local (on-premises):
· Taxas ambientais: R$2.000,00;
· Manutenção de hardware: R$300,00.
Custos totais:R$2.000,00 + R$300,00 = R$2.300,00.
Custos iniciais baseados na nuvem:
· Se os servidores forem alugados de um provedor de nuvem, não haverá custo inicial de hardware ou software;
· Mão de obra para solucionar problemas de interoperabilidade e configuração do aplicativo: R$2.000,00.
Custos contínuos baseados na nuvem:
· Instância do servidor: R$2,00/hora por servidor virtual. Para 2 servidores virtuais: 2 x (R$2,00 x 720 horas) = R$2.880,00.
· Servidor e armazenamento de banco de dados: R$2,50/GB por mês x 200 GB = R$500,00.
· Rede: Consumo de saída R$0,15/GB e um volume mensal de 500 GB = R$75,00.
· Mão de obra: R$1.000,00 por mês.
Os custos contínuos totais são: R$2.880,00 + R$500,00 + R$75,00 + R$1.000,00 = R$4.455,00.
Podemos elaborar uma comparação, conforme a seguir:
Pelos dados apresentados, podemos avaliar o custo entre uma solução on-premise e uma solução na nuvem. Concluímos que a solução na nuvem é mais viável economicamente. Sendo assim, a empresa pode optar pela migração para a computação em nuvem.
Módulo 3
Descrever as métricas de Qualidade de Serviço e o Acordo de Nível de Serviço – ANS (Service Level Agreement – SLA)
Conceitos
Em relação à prestação de serviços, o Acordo de Nível de Serviço – ANS (Service Level Agreement – SLA) é essencial para alinhar os detalhes do trabalho entre aquele que o solicita e aquele que o disponibiliza. Com o SLA é possível estabelecer os requisitos referentes ao contrato, tanto em relação à entrega de um serviço adequado quanto para estabelecer as expectativas sobre o resultado.
Um SLA é umcontrato entre o provedor de serviços de nuvem (Cloud Service Provider – CSP) e o consumidor de serviços de nuvem (Cloud Service Consumer – CSC), o qual define a expectativa do nível de serviço que o CSP promete fornecer ao CSC.
Conforme mostrado, O SLA é basicamente um documento que atua como um contrato entre o provedor e o cliente, ou seja, entre os assinantes. Ele é padronizado pela norma NBR ISO-IEC 20000-1, da Associação Brasileira de Normas Técnicas (ABNT), ou seja, segue um modelo único em todas as aplicações, especialmente para ser aprovado.
Os SLAs constituem uma peça fundamental para serviços baseados em nuvem, pois os CSPs assumem responsabilidades em nome do consumidor. Os consumidores precisam garantir que o provedor forneça serviços confiáveis, seguros, escalonáveis e disponíveis.
Podem existir vários provedores envolvidos na composição de um serviço em nuvem, sendo possível que uma empresa crie uma solução composta por serviços de cada modelo de serviço em nuvem.
Basicamente, o contrato é responsável em determinar os direitos e os deveres de cada parte envolvida, mensurando prazos, metas, indicadores e formas de suporte técnico.
Uma empresa pode usar, por exemplo, um IaaS CSP para fornecer a camada de infraestrutura, um provedor de PaaS para fornecer a camada de pilha de aplicativos e um conjunto de soluções de SaaS e APIs de terceiros para várias funções do utilitário.
Cada um dos CSPs que formam a plataforma da empresa possui os próprios SLAs. A organização deve considerar todos esses SLAs antes de se comprometer com contratos de serviço com os clientes.
O SLA preza por alguns objetivos. Entre eles, a simplificação e a clareza do serviço que será prestado, além da redução de conflitos e da eliminação de expectativas não compatíveis com o que será de fato realizado.
Para começarmos a definir um SLA precisamos determinar quais são as expectativas dos clientes, que podem ser influenciadas pelos seguintes fatores:
	Criticidade dos serviços prestados
	Enquanto serviços de mídia social (p. ex. Instagram) não são de missão crítica, qualquer serviço que envolva transações financeiras, como banco on-line e comércio eletrônico, exigirá SLAs muito altos. Níveis de serviço ruins para esses tipos de negócios implicam impactos substanciais
	Tipo de interação entre o provedor e o consumidor
	Se uma empresa, por exemplo, estiver construindo uma solução na Rackspace, ela deve entender os SLAs e elaborar uma estratégia no caso de a Rackspace apresentar uma interrupção. Se o serviço em nuvem for crítico, a arquitetura precisa levar em conta um plano de tolerância a falha se o provedor falhar. Outro exemplo, os SLAs podem conduzir à decisão de investir na construção de redundância total de todas as camadas da arquitetura em várias zonas de disponibilidade da Amazon Web Services – AWS (cada região é uma área geográfica separada; cada região tem vários locais isolados conhecidos como zonas de disponibilidade). (AMAZON, 2020)
	Consumidores ou clientes corporativos
	Muitos serviços ofertados aos consumidores para serviços não essenciais à missão não oferecem SLAs sobre desempenho, tempo de atividade e confiabilidade. Os termos dos serviços protegem fortemente o provedor no sentido de oferecer os serviços “como estão” para os consumidores. No máximo, os provedores se comprometem a aplicar esforços para proteger os dados e manter a privacidade. Os consumidores devem aceitar esses termos para participar
	Clientes pagantes ou não pagantes
	Quanto mais forte for o SLA, mais caro será gerenciá-lo e mantê-lo. O provedor de serviços em nuvem deseja gastar o menor esforço para permitir que o consumidor teste o serviço. Depois que o cliente passa para uma camada paga, aplicam-se níveis mais altos de serviço. Os clientes que usam serviços gratuitos em geral recebem SLAs mais baixos do que os clientes que usam soluções pagas. Muitas vezes os serviços “freemium” (para usuários não pagantes) são executados em máquinas de menor custo e com funcionalidades limitadas
	Setor regulamentado ou setor não regulamentado
	Os SLAs para clientes que necessitam de serviços em um setor regulamentado devem ser mais fortes do que aqueles em um setor não regulamentado. Setores como assistência médica, bancos, seguros, governo, varejo e outros exigem SLAs fortes sobre desempenho, tempo de atividade, segurança, privacidade, conformidade e muito mais
	Anônimo ou identificável pessoalmente
	Alguns serviços em nuvem podem coletar informações de identificação pessoal, como dados biométricos, números de documentos pessoais, informações de cartão de crédito e outros dados fortemente regulamentados, que exigem altos níveis de SLAs de segurança e privacidade
Uma empresa pode ser um consumidor de nuvem e um provedor de nuvem.
Exemplo: A empresa XPTO é um consumidor do provedor ACME, que oferece serviços em nuvem IaaS. Além das camadas de serviços de Aplicações e Dados, a XPTO tem acesso às camadas mais baixas da pilha de serviços, incluindo rotinas em tempo de execução, Middleware e SO. A XPTO então criou uma solução SaaS e se tornou um provedor em nuvem oferecendo acesso somente às camadas de Aplicações e Dados.
Importância do SLA
O SLA é um documento essencial para o cliente e para o provedor, pois garante a entrega de um serviço satisfatório para ambas partes.
Olhando pelo prisma do cliente, o SLA pode ser comparado a uma espécie de comprovante de tudo o que foi especificado sobre o serviço contratado. Se algo ocorrer fora do planejado, é possível usar o SLA para contestar e chegar a um acordo.
Para os provedores de serviço, o SLA é essencial para organizar as tarefas e as etapas do processo de atendimento, e assim tudo acaba ocorrendo de forma prática e de acordo com os pedidos do cliente.
No estabelecimento do SLA é preciso que ambas as partes sanem todas as dúvidas e deixem bem claro o que é possível ou não, para manter a transparência e finalizar o acordo de forma satisfatória.
Composição
O SLA precisa ser estruturado em categorias que descrevem o serviço prestado:
	Nível de Serviço
	Nessa etapa é definida a espécie do serviço que será prestado ao cliente (um processo de manutenção, implantação, atualização ou reparo de algum sistema ou ferramenta)
	Termo de Compromisso
	Nessa etapa é possível estruturar o contrato com segurança e transparência, garantindo que as duas partes entendam completamente a proposta e se comprometam a seguir tudo o que foi acordado nela
	Prazos de Contrato
	Os prazos da prestação do serviço são essenciais na elaboração do SLA.
Os prazos de contrato garantem que o provedor atenda às necessidades do cliente dentro do prazo estipulado. Dessa forma, uma contestação é possível caso ocorra algum atraso significativo.
Para a empresa, os prazos são ideais para organizar as tarefas da equipe e estipular o nível de prioridade de cada projeto. Por exemplo, aqueles serviços com uma data de entrega mais próxima à data atual devem ser priorizados pela equipe, para que nenhum atraso ocorra e cause conflitos com o cliente
	Suporte técnico
	Os provedores de serviço em nuvem geralmente oferecem um suporte técnico por um período determinado após a finalização do projeto. 
Sendo assim, o apoio oferecido pelo provedor deve ser determinado quando o SLA está sendo formulado.
Seja por 48 horas após a finalização do serviço ou até por um ano, o suporte técnico funciona como uma garantia e deve ser analisado com cuidado, principalmente pelo provedor, antes de tomar um espaço no SLA
	SLM
	O Gerenciamento de Nível de Serviço – GNS (Service Level Management – SLM) é um conceito que costuma ser confundido com o SLA. Na verdade, o SLM funciona como um sistema de avaliação da qualidade do serviço que está sendo oferecido e executado
	MTBF
	O Tempo Médio entre Falhas (Mean Time Between Failures – MTBF) funciona como um ponto de avaliação da qualidade do serviço desenvolvido
Tipos de SLA
Existem dois tipos de SLA:
	SLA focado no cliente
	Em que são documentadas todas as especificações e expectativas explicadaspelo solicitante do serviço
	SLA focado no serviço
	No qual o modelo não abre tanto espaço para as especificações do cliente, ou seja, o processo é padronizado e o solicitante precisa aceitá-lo como ele é
Métricas de qualidade de serviço
Os SLAs usam métricas de qualidade de serviço para expressar características mensuráveis de QoS. Exemplos dessas métricas são:
	Disponibilidade
	Tempo de atividade, interrupções, duração do serviço
	Confiabilidade
	MTBF, taxa garantida de respostas bem-sucedidas
	Desempenho
	Capacidade do sistema (p. ex. processamento, memória etc.), tempo de resposta (p. ex. processamento, banco de dados etc.) e tempo de entrega garantidos
	Escalabilidade
	Garantia de flutuação de capacidade, capacidade de resposta
	Resiliência
	Tempo Médio para Transição (Mean-Time to Switchover – MTSO), Tempo Médio para Recuperação do Sistema (Mean-Time System Recovery – MTSR)
Um exemplo mostrado a seguir é o da taxa de disponibilidade. A disponibilidade geral de um recurso de TI pode ser representada como uma porcentagem do tempo de atividade. Isso significa que um tempo de atividade de 100% representa um recurso de TI sempre disponível.
Os sistemas de gerenciamento de SLA usam as métricas para atestar periodicamente a conformidade com as garantias do SLA. Também coletam dados relacionados ao SLA para vários tipos de análises estatísticas. Cada métrica de qualidade de serviço é definida usando as seguintes características:
	Ser quantificável
	A unidade de medida é bem definida, absoluta e apropriada para que a métrica possa ser baseada em medições quantitativas
	Ser repetível
	Os métodos de medição devem gerar resultados idênticos quando repetidos em condições idênticas
	Ser comparável
	As unidades de medida usadas por uma métrica precisam ser padronizadas e comparáveis
	Ser facilmente obtida
	A métrica possui uma unidade comum de medição não proprietária, que seja facilmente obtida e entendida pelos consumidores da nuvem
Os clientes corporativos esperam relatórios mensais de SLAs baseados em métricas e geralmente solicitam o direito de executar os próprios contratos anuais de auditoria para rastrear SLAs relacionados à segurança e a regulamentações.
Pode estar incluída nesse documento uma lista de todas as certificações das várias auditorias anteriores, como SSAE18 (padrão de controles para proteção da confidencialidade e privacidade das informações na nuvem), HIPAA (segurança e privacidade de informações pessoais de saúde) e outras.
Considerações finais
A computação em nuvem é considerada um símbolo da internet e como permite uma grande capacidade de armazenamento em computadores e servidores compartilhados na rede, realizar a migração de informações e de dados para a nuvem é uma estratégia cada vez mais adotada pelas empresas e pelos gestores de tecnologia. Isso vai ao encontro de uma das principais preocupações atuais dos CIOs das empresas: A redução de custos.
Atualmente usamos diversos aplicativos e serviços que funcionam em conformidade com o modelo de computação em nuvem. Entender os conceitos é extremamente importante para saber tomar boas decisões e atuar corretamente em uma infraestrutura de recursos de TI.
O preço no mercado da computação em nuvem é extremamente complexo e nada amigável. Em teoria, ela oferece um modelo bastante simples para consumir recursos de computação e armazenamento. Clientes demandam capacidade, o fornecedor a fornece e é pago por isso.
Ao se trabalhar com computação em nuvem, devemos conhecer os tipos de serviços fornecidos, como IaaS, PaaS e SaaS, além de entender o modelo de precificação adotado pelo provedor. Diante da variedade de recursos fornecidos pela nuvem, métricas de qualidade de serviço e acordo de nível de serviço são instrumentos de proteção tanto para o consumidor como para o provedor
AULA 4 – COMPUTAÇÃO EM NUVEM NA PRÁTICA
Definição
A computação em nuvem com uma visão prática dentre os principais provedores: Amazon, Google e Microsoft.
Propósito
Conhecer os principais provedores de nuvem, suas características, serviços e identificar suas diferenças relacionadas às vantagens e desvantagens.
Objetivos
· Módulo 1: Descrever a Plataforma Amazon AWS
· Módulo 2: Descrever a Plataforma Microsoft AZURE
· Módulo 3: Descrever a Plataforma Google Cloud
Introdução
A computação em nuvem é uma tecnologia que permite armazenar dados e conectar aplicações na nuvem da mesma maneira que você faz em aplicações locais. Para entendermos melhor como a cloud computing funciona, vamos imaginar um cenário de uma aplicação local básica.
Normalmente, você tem um servidor com um sistema operacional instalado e, rodando em cima desse sistema operacional, uma aplicação. Essa aplicação pode ser um software, um sistema de negócios da empresa, ou um site qualquer. Tudo isso está fisicamente instalado no servidor. Provavelmente, a aplicação se conecta em um banco de dados, que necessita de outros serviços específicos, tais como: o controle de acesso, segurança. Será necessário o gerenciamento desses serviços, e um profissional de TI ou uma equipe deve ser contratada para manter o funcionamento do servidor (hardware), do sistema operacional, do banco de dados e outros serviços. Nesse tipo de cenário, a escalabilidade (Escalabilidade indica a capacidade de manipular uma porção crescente de trabalho de modo uniforme, ou estar preparado para crescer) é algo bastante complexo.
Agora, vamos imaginar um cenário semelhante, porém, desta vez, a aplicação está na nuvem. Sendo assim, você tem um conjunto poderoso de hardware a sua disposição, mas você nunca vê o hardware. O servidor roda em uma rede de datacenter, onde as aplicações estão distribuídas e você não precisa se preocupar com a infraestrutura, com atualizações e com o gerenciamento. Portanto, o seu foco está no que realmente importa, na construção de funcionalidade ou na melhoria de sua aplicação.
Sendo assim, as configurações, escalabilidade, provisionamento, infraestrutura, tudo isso é administrado pelo provedor, pela plataforma de computação em nuvem.
Neste tema, conheceremos três dos principais provedores de computação em nuvem: Amazon, Microsoft e Google. Cada plataforma de computação em nuvem fornece seus serviços e recursos nos modelos de serviço IaaS, PaaS e SaaS.
Módulo 1
Descrever a Plataforma Amazon AWS
Amazon Web Service (AWS)
A Amazon Web Services (AWS) é a plataforma de computação em nuvem da Amazon. Segundo o próprio site da empresa:
A Amazon Web Services (AWS) é a plataforma de nuvem mais adotada e mais abrangente do mundo, oferecendo mais de 175 serviços completos de data centers em todo o mundo. Milhões de clientes, incluindo as startups de crescimento mais rápido, grandes empresas e os maiores órgãos governamentais, estão usando a AWS para reduzirem seus custos, ficarem mais ágeis e inovarem mais rapidamente. (AMAZON, 2020)
Conceito da Amazon AWS
A Amazon foi fundada em 1994 com o foco nas vendas de livros. Em poucos anos, a empresa deixou de ser apenas uma vendedora de informações impressa para se tornar uma referência mundial em gestão da informação digital. Atualmente, é um dos maiores provedores de computação em nuvem, oferecendo serviços de nuvem para otimizar e reduzir os custos de TI.
Ao conhecer melhor a trajetória da Amazon, podemos considerar a empresa como um dos maiores símbolos de transformação digital das últimas décadas. Essa transformação digital não diz respeito apenas às inovações de e-commerce, gestão de estoques e logística, mas também à forma como os negócios usam a tecnologia para expandir, consolidar-se e encontrar novos mercados.
	2000
	Em meados dos anos 2000, a Amazon identificou a necessidade de possuir uma grande infraestrutura de TI, com milhares de servidores espalhados pelo mundo para apoiar seu negócio de vendas on-line. Assim, iniciou-se um processo de muita pesquisa e desenvolvimento, criando soluções para os problemas mais comuns de infraestrutura. Com isso, a Amazon percebeu que a locação dos seus recursos computacionaispoderia ser um interessante negócio.
	2006
	Logo, em 2006, foi lançada a plataforma Amazon AWS, que inicialmente apresentou uma proposta semelhante aos tipos tradicionais de provedores de hospedagem, porém, com um diferencial em oferecer serviço conforme o uso. Ou seja, você paga apenas o que usar, sem a obrigatoriedade de longos contratos, tornando-se uma das primeiras empresas a introduzir um modelo de cloud sob o sistema “pague somente pelo que utiliza”
O AWS surgiu inicialmente para ser utilizado internamente pela Amazon. Depois, tornou-se um modelo de serviços de alta rentabilidade, tanto para si, como para seus clientes, tendo crescido e oferecido cada vez mais serviços de TI (Tecnologia da Informação) em nuvem de forma escalável. A Amazon disponibiliza diversos servidores para armazenamento de dados, processamento e outras infraestruturas em forma de serviço. Ou seja, a Amazon AWS oferece seus serviços através dos modelos de IaaS (Infrastructure as a service), PaaS (Platform as a service) e SaaS (Software as a Service).
A AWS é uma das maiores plataformas de computação em nuvem que investe em inovações. A Amazon tem investido em recursos e serviços na área de Inteligência Artificial, IoT (Internet das Coisas), aprendizado de máquina e computação sem servidor. Com um grande número de tutoriais e treinamentos, inclusive gratuitos, presenciais ou à distância, a plataforma tem agregado cada vez mais usuários que possam aprender a lidar com a ferramenta, estudando ou experimentando seus serviços.
Regiões e zonas da Amazon AWS
A Amazon AWS possui data centers em diversas partes do mundo, como na Europa, Cingapura, Austrália, Brasil, Japão e Estados Unidos. Hoje, é utilizada por milhares de empresas e muitas dessas que possuem data center próprio têm migrado sua infraestrutura para a plataforma AWS.
A AWS abrange 76 zonas de disponibilidade em 24 regiões geográficas pelo mundo, com a previsão de mais 9 zonas e mais 3 regiões na Indonésia, no Japão e na Espanha. Sendo assim, até a produção desse tema, a AWS está presente em 245 países e territórios, conforme é visualizado na figura:
A infraestrutura da AWS é composta por regiões, zonas de disponibilidade (AZs) e zonas locais. O conceito de região é o local físico onde estão os data centers. As regiões da AWS são projetadas para serem isoladas umas das outras, proporcionando maior tolerância a falhas e estabilidade.
As regiões da AWS possuem várias AZs isoladas e separadas fisicamente em uma área geográfica e conectadas com baixa latência, alta vazão e redes altamente redundantes.
Por exemplo, ao executar uma instância, é possível escolher uma zona de disponibilidade, mas se você distribuiu suas instâncias em várias zonas de disponibilidade, se uma instância falhar, poderá migrar sua aplicação para uma outra zona e continuar com o serviço em operação.
A zona local é uma extensão de uma região da AWS que está geograficamente próxima dos usuários. Ao usar a zona local, é possível alocar recursos, como computação e armazenamento em vários locais mais próximos de seus usuários. Porém, por default, os recursos não são replicados entre as regiões da AWS, a menos que você especifique.
Até o momento da edição deste tema, a região da América do Sul oferece sua plataforma em 3 zonas de disponibilidade com 4 pontos de presença e 1 ponto de presença de cache no Brasil, em São Paulo, conforme a Figura 3. O lançamento em São Paulo ocorreu em 2011.
Os pontos de presença, ou edge locations, são infraestruturas da AWS enxutas com poucos serviços e com o objetivo de melhorar a experiência dos usuários. Os principais serviços hospedados nas edge locations são: CloudFront, Route 53 e WAF.
Características da Amazon AWS
A AWS fornece aos clientes poder computacional, armazenamento e outros serviços em minutos, garantindo pacotes de serviços de infraestrutura de TI elástico. Dessa maneira, existe a flexibilidade de escolher qualquer plataforma de desenvolvimento ou modelo de programação que se adapte às necessidades dos clientes.
Os clientes pagam apenas pelo que usam, e sem despesas iniciais ou compromissos de longo prazo, sendo uma maneira econômica de suprir as necessidades de infraestrutura das empresas.
De acordo com o Amazon AWS (2020), dentre as características de sua plataforma, podemos citar como principais:
	Flexível
	A AWS permite que as organizações usem o modelo de programação, sistemas operacionais, bancos de dados e arquiteturas com os quais já estão familiarizados
	Econômico
	Com a AWS, as organizações pagam apenas pelo que usam
	Escalonável e Elástico
	As empresas podem rapidamente adicionar e subtrair recursos da AWS de forma a atender a demanda dos clientes e gerenciar custos
	Segura
	Para fornecer segurança e privacidade completas, a AWS cria serviços de acordo com as principais normas de segurança, fornecendo recursos de segurança apropriados a esses serviços e documentação sobre como usar esses recursos
	Experiente
	Utiliza o conhecimento de mais de quinze anos de experiência da Amazon no fornecimento de infraestrutura global em larga escala, de forma confiável e segura
A AWS é avaliada como líder no Quadrante Mágico de infraestrutura de nuvem como serviço (Magic Quadrant para Cloud Infrastructure as a Service) e com a pontuação máxima nos dois eixos de medição: capacidade de execução e integridade da visão (ver figura 4).
Quadrante Mágico: O quadrante mágico é uma representação gráfica desenvolvida por Gartner, com o objetivo de fornecer uma ferramenta de pesquisa e auxílio nas tomadas de decisões pelas empresas. O gráfico divide-se em 4 quadrantes: líderes, desafiadores, visionários e concorrentes de nicho de mercado.
Serviços da Amazon AWS
A Amazon foi uma das pioneiras na implantação de serviços de computação em nuvem.
Dentre seus serviços, o primeiro foi o Amazon S3 por volta de 2003. Desde então, a plataforma de computação em nuvem da Amazon tem evoluído constantemente, tornando-se referência e uma das líderes em fornecimento de serviços na nuvem. A seguir, vamos listar os seus principais serviços na nuvem. Na figura abaixo, é possível identificar alguns serviços da plataforma e suas logomarcas.
Amazon S3 – Amazon Simple Storage Service
O Amazon Simple Storage Service é o serviço de armazenamento de objetos da AWS e foi um dos primeiros que a Amazon ofereceu. Fornece uma interface simples para armazenamento e recuperação de qualquer quantidade de dados, a qualquer momento e de qualquer lugar. O S3 permite executar análises de big data sem a necessidade de reportá-los para outro lugar.
Trata-se de um serviço resiliente e escalável, projetado para oferecer resiliência de 99,999999999%. Isto é, os dados são distribuídos automaticamente entre, no mínimo, três instalações físicas, separadas geograficamente por, pelo menos, 10 quilômetros dentro de uma região da AWS.
Amazon S3 Standard, S3 Standard-IA e Amazon Glacier são serviços projetados para distribuir automaticamente os dados em, no mínimo, 3 zonas de disponibilidade (AZs) físicas. Além disso, é possível a replicação automática dos dados para qualquer outra região da AWS.
Resumindo, o Amazon S3 é um serviço de coleta, armazenamento e análise de grandes volumes de dados, com um elevado índice de segurança e simplicidade em sua execução. Além disso, é possível armazenar dados de qualquer tipo de origem, por exemplo, dados de aplicativos mobile, dados coletados por sensores, dados de dispositivos da Internet das Coisas (IoT), websites, dentre outros ambientes envolvidos no meio digital.
Amazon EC2 – Amazon Elastic Compute Cloud
O Amazon Elastic Compute Cloud é o serviço que provê recursos computacionais em nuvem, ou seja, é um pool de memória, disco, CPU e rede. Esse serviço fornece um ambiente de máquinas virtuais com sistema operacional Windows ou sistema operacional Linux.
O EC2 é um serviço que se integra com vários outros serviços essenciais da Amazon, sendo a parte central do pool de serviços da AWS. Ele permite que você adquira recursos, como memória, disco,CPU e rede, através do pagamento conforme o uso, selecionando os recursos que necessita e iniciar um servidor virtual EC2, conhecido como instância virtual.
Uma das vantagens desse recurso, além da simplicidade, é o redimensionamento de acordo com a necessidade atual e futura do cliente. Isso significa que é possível aumentar e diminuir os recursos computacionais em pouco segundos, por exemplo, passando de uma instância de 4 GBytes de memória e 2 core de CPU para uma instância de 8 GBytes de memória e 4 core de CPU em determinado momento e depois retornar para a configuração original, se for o caso.
Ao iniciar uma instância, você pode fazer uso dela como quiser, do mesmo modo que você faria com um servidor local, com a vantagem de pagar pelo poder computacional da instância por hora, enquanto está em execução. Ao parar a instância da máquina virtual o usuário não é mais cobrado pelo serviço.
Amazon AMI - Amazon Machine Images
A Amazon Machine Image é um ambiente de trabalho composto por imagens pré-formatadas de instância do EC2, com as configurações prontas, sem a necessidade de se perder tempo com instalação de aplicativos, configuração ou migração de dados.
A AMI possui vários tipos de imagens de acordo com o sistema operacional (Windows ou Linux), e com as permissões de inicialização, região, arquitetura do sistema e armazenamento. Existem 3 (três) formas de obter uma Amazon AMI, são elas:
· Publicado pela AWS – A Amazon disponibiliza vários AMIs com versões de diferentes sistemas operacionais, como Linux (Ubuntu, Red Hat etc.) e Windows (Windows 2008, 2012 etc.). As AMIs são gratuitas e o cliente só paga pela infraestrutura utilizada na AWS;
· AWS Marketplace – é uma loja da Amazon que comercializa imagens em condições de uso e de serem executadas no Amazon EC2. A instância é cobrada de acordo com as taxas definidas pelo proprietário da AMI, bem como as taxas de infraestrutura da AWS;
· Imagens geradas a partir de instâncias existentes – nesse caso, o cliente tem a opção de trazer sua licença para uso na nuvem. É um caso do BYOL (Bring Your Own Licensing) ou traga sua própria licença. Desta forma o custo é reduzido pois não está incluso o custo da licença e o próprio cliente fica responsável pela sua licença.
Amazon RDS – Amazon Relacional Database Service
O Relacional Database Service é o serviço de banco de dados relacional na nuvem da Amazon. Dentre suas principais características, podemos citar uma fácil configuração, operação e escalabilidade, além de proporcionar capacidade para redimensionamento, de forma econômica, e possibilidade de automatização de tarefas administrativas mais complexas.
O RDS fornece vários modelos de instâncias de banco de dados com seis diferentes produtos:
· PostgreSQL;
· Amazon Aurora;
· MySQL;
· Microsoft SQL Server;
· Oracle;
· MariaDB.
Amazon Lambda
O Amazon Lambda é um serviço da Amazon responsável pela execução de código sem a necessidade de gerenciamento ou provisionamento dos servidores. Ou seja, é o serviço de computação sem servidor (serverless computing) da Amazon, proporcionando que arquitetos e desenvolvedores de nuvem usem o serviço para diferentes casos de uso.
O Lambda implementa e gerencia toda a infraestrutura necessária, monitora a integridade do servidor, registra a execução do código e fornece estatísticas detalhadas.
Por ser um serviço do tipo “pay-as-you-go”, os clientes pagam apenas pelos recursos de computação utilizados. Sendo assim, torna-se um serviço econômico, pois, no lugar de estar disponível 24/7, o código somente é executado quando necessário, consumindo zero recursos quando não é acionado. Podemos afirmar desta forma que o Lambda é orientado a eventos.
O Lambda fornece uma variedade de linguagens de programação, como: Java, Python, Node.JS, entre outras, através de frameworks de código aberto. É possível realizar deploys usando ferramentas como Apex, Serverless e Sparta.
Um exemplo é a hospedagem de sites e, nesse caso, praticamente sem custo, assim, o serviço Lambda funciona como um back-end, lidando com a lógica do aplicativo e armazenamento dos dados em banco de dados relacionais ou não, como o AWS RDS ou o DynamoDB.
Resumidamente, basta carregar o código e o próprio AWS Lambda se encarregará de tudo que for necessário para escalar e executar o código em alta disponibilidade.
Amazon VPC – Amazon Virtual Private Cloud
O Amazon Virtual Private Cloud é um serviço que fornece aos clientes uma nuvem virtual privada, ou seja, uma nuvem privada logicamente isolada do AWS. Dessa maneira, o cliente tem total controle do seu ambiente, sendo possível selecionar seu próprio intervalo de endereço IP (IPv4 e IPv6), configurar as suas sub-redes, tabelas de rotas e gateways de rede.
O serviço Amazon VPC foi lançado após o serviço Amazon EC2, por isso, existem duas plataformas de rede diferentes disponíveis na AWS: EC2-Classic e EC2-VPC. O Amazon EC2 foi lançado originalmente com uma rede única e plana compartilhada com outros clientes da AWS, chamada EC2-Classic. Dessa forma, as contas da AWS criadas antes da chegada do serviço Amazon VPC podem iniciar instâncias na rede EC2-Classic e EC2-VPC.
As contas da AWS criadas após dezembro de 2013 suportam apenas o lançamento de instâncias usando o EC2-VPC. As contas da AWS que oferecem suporte ao EC2-VPC terão uma VPC padrão criada em cada região com uma sub-rede padrão criada em cada zona de disponibilidade.
Um Amazon VPC consiste nos seguintes componentes:
· Sub-redes;
· Tabelas de rotas;
· Conjuntos de opções do protocolo DHCP (Dynamic Host Configuration Protocol);
· Grupos de segurança;
· Listas de controle de acesso à rede (ACLs).
Um Amazon VPC possui os seguintes componentes opcionais:
· Gateways da Internet (IGWs);
· Endereços de IP elástico (EIP);
· Interfaces de rede elástica (ENIs);
· Endpoints;
· Peering;
· Instâncias de conversão de endereço de rede (NATs) e gateways NAT;
· Gateway Privado Virtual (VPG), Gateways de Cliente (CGWs) e Redes Privadas Virtuais (VPNs).
Amazon Cloudfront
O Amazon CloudFront é o serviço CDN (Content Delivery Network) da AWS. A rede de entrega de conteúdo funciona através de servidores de borda que ficam localizados em pontos estratégicos ao redor do mundo, acelerando a entrega do conteúdo estático e dinâmico da web.
Content Delivery Network: É uma rede distribuída globalmente de servidores de cache que acelera o download de páginas da web e outros conteúdos. Uma das vantagens da CDN é o aumento de escalabilidade de um site ou aplicação móvel em situações de picos de tráfego. Além de ser transparente para os clientes finais.
Quando um cliente solicita um conteúdo, o Amazon CloudFront identifica o local de origem da requisição e roteia o local da borda que fornece a menor latência (atraso de tempo), para que o conteúdo seja entregue com o melhor desempenho possível.
Amazon CloudFront: Para identificar a origem das requisições, as CDNs utilizam as informações dos servidores DNS (Sistema de Nomes de Domínio) e assim, identificam a localização geográfica de cada solicitação tanto de uma página web como de um conteúdo. Feito isso, é veiculado esse conteúdo nos servidores de cache mais próximos do local do cliente.
Caso o conteúdo já esteja no local de borda, o Amazon CloudFront o entregará imediatamente. Se não estiver, o recuperará do servidor de origem, como um bucket do Amazon S3 ou de um servidor da Web, que armazena as versões originais dos seus arquivos.
O CloudFront suporta todo o conteúdo que pode ser exibido por HTTP ou HTTPS. Isso inclui todos os arquivos estáticos populares, como arquivos HTML, imagens, JavaScript e arquivos CSS, além de áudio, vídeo, arquivos de mídia ou downloads de software.
Existem situações onde o CloudFront não é apropriado. Quando todas as solicitações ou a maioria delas partem de um único local, neste caso, não há como aproveitar os vários locais de servidores de borda. Outra situação é quando todas as solicitações são realizadas de uma VPN corporativa, nesta situação, as solicitações aparecem no CloudFront com a mesmaorigem.
Amazon Route 53
O Amazon Route 53 é um serviço de DNS (Domain Name Server) da Amazon AWS que permite a criação, modificação e exclusão de arquivos DNS de qualquer um de seus domínios.
Com o Route 53, é possível criar registros DNS para um novo domínio ou transferir registros DNS para um domínio existente. A aplicação comporta-se como uma API REST simples e baseada em padrões, assim, é possível criar, atualizar e gerenciar registros DNS com facilidade.
Uma das vantagens ao usar o Amazon Route 53 é a alta disponibilidade e confiabilidade da infraestrutura AWS, garantindo a capacidade de direcionamento dos usuários finais para seus aplicativos. Outra vantagem é escalonável, ou seja, o Route 53 lida muito bem com grandes volumes de consulta sem interrupções.
Módulo 2
Descrever a Plataforma Microsoft AZURE
Microsoft Azure
A evolução e sofisticação da Computação em nuvem gerou um elevado crescimento na procura por serviços sob demanda com pagamento baseado no uso, não tendo demorado muito para que a Microsoft entrasse no mercado e oferecesse a sua plataforma.
Atualmente, a plataforma de nuvem da Microsoft concentra serviços desde a infraestrutura de cloud computing para hospedar sistemas empresariais até aplicativos e recursos que elevam a produtividade da empresa em vários setores.
Conceito do Microsoft Azure
O Azure é a plataforma de computação em nuvem da Microsoft que concentra um conjunto de serviços e tecnologias oferecendo escalabilidade, alta disponibilidade, elasticidade e agilidade.
Elasticidade: A elasticidade é a capacidade de um sistema de se adaptar à carga de trabalho por meio do provisionamento e desprovisionamento de recursos automaticamente, de forma que os recursos disponíveis sejam sempre equivalentes à demanda do momento.
O Microsoft Azure oferece desde a infraestrutura - isto é, poder computacional, armazenamento, entre outros serviços que são necessários para executar sistemas empresariais -, até o fornecimento de aplicativos que possibilitam elevar a produtividade.
Você sabia: A plataforma fornece acesso a mais de 200 serviços pré-configurados e fazem parte do conjunto integrado de recursos de IaaS, PaaS e SaaS do Azure, incluindo tecnologias como IA, aprendizado de máquina, análise de dados, DevOps, Internet das Coisas (IoT) e segurança.
Regiões e Zonas do Microsoft Azure
A plataforma divide o globo em quatro áreas geográficas: Américas, Europa, Pacífico Asiático, Oriente Médio e África. Em cada área geográfica leva-se em consideração uma série de fatores, como: limites políticos, residência dos dados, redundância e garantia de disponibilidade, entre outros. Tornando-se a base para a arquitetura dos subníveis desta plataforma.
A divisão geográfica é uma área do mundo que contém pelo menos uma região. No momento da produção desse tema, o Microsoft Azure possui mais de 60 regiões pelo mundo em 140 países, conforme a figura seguinte. A infraestrutura do Azure é composta por mais de 160 data centers físicos e organizados em regiões.
A oferta de uma extensa infraestrutura distribuída em inúmeros lugares nos ajuda em diversos cenários, como: posicionamento estratégico de recursos para diminuir a latência de um serviço, residência dos dados para conformidades legais, além de demandas específicas e modelos de redundância para recuperação de desastres.
A Microsoft investe pesado em recursos e infraestrutura de ponta, mesmo assim, não está imune aos problemas. Pensando nisso e com o objetivo de garantir a redundância dos dados e serviços para se resguardar contra falhas, o Azure disponibiliza o recurso de zona de disponibilidade e regiões pares.
Zonas de disponibilidade é um conjunto de data centers independentes, dentro de uma região, possibilitando trabalhar com recursos redundantes entre as zonas, conforme figura seguinte. Isso, na prática, garante que, uma vez se configurando, sua aplicação ou VM estará segura em caso de desastre em um dos data centers de determinada região.
Para entendermos melhor, imagine que você hospedou seus aplicativos na região do Azure “East US”, que possui 3 zonas de disponibilidade. Caso uma das zonas dessa região sofra algum desastre, todos os aplicativos estarão seguros em uma outra zona, dentro da mesma região. Por padrão, a Microsoft entrega, no mínimo, 3 zonas de disponibilidade em todas as regiões.
Mas e se o desastre comprometer toda a região?
Nessas circunstâncias excepcionais, a Plataforma Microsoft Azure oferece serviços baseados em pares de regiões. Nesse caso, as instalações estão na mesma região geográfica para atender requisitos legais e de conformidades, porém, a uma distância de, pelo menos, 450km de distância. “Azure Region Pairs”, como o próprio nome sugere, é a implementação de redundância entre data centers posicionados em duas regiões, como podemos visualizar na imagem a seguir.
Características do Microsoft Azure
Uma das suas principais características é a facilidade de uso, pois a plataforma oferece uma vasta documentação para todas as suas aplicações, além de oferecer experiência de usuário corporativo semelhante à do usuário doméstico.
	Soluções híbridas
	A plataforma oferece soluções híbridas, tanto para uma nuvem privada, como para uma pública, dessa forma, é possível suprir serviços de armazenamento, backup e recuperação de dados
	Disponibilidade
	Em relação à disponibilidade, a plataforma Azure tem um acordo de nível de serviço, SLA, de 99,95% de disponibilidade. Uma outra característica relevante da plataforma é a possibilidade de oferecer suporte a qualquer sistema operacional, além de idiomas, estruturas e ferramentas
	Soluções
	Dentre suas soluções ofertadas, as mais populares, atualmente, envolvem sites e hospedagem na web, aprendizado de máquina, back-ends móveis, banco de dados SQL relacional gerenciado e a implantação de aplicativos Windows na nuvem
Em termos gerais, o Microsoft Azure funciona como um apoio tecnológico ao negócio, ao fornecer ao mesmo tempo, a infraestrutura necessária para rodar o sistema da empresa (computação, armazenamento, lógica, gestão financeira etc.) e as ferramentas necessárias para transformar esse poder em produtividade.
Serviços do Microsoft Azure
O Microsoft Azure é uma plataforma completa e flexível, que oferece serviços de computação, armazenamento, backup, banco de dados, análise de dados, dentre outros. Possui modelos de serviços de computação em nuvem, divididos em três amplas categorias: IaaS, PaaS e SaaS.
Essas categorias são também denominadas como “Pilha de Computação em Nuvem”, pois são compiladas uma sobre as outras. Na figura abaixo, é possível compreender o termo usado como Pilha ao visualizar o comparativo entre os tipos de modelo de serviço oferecido. Também é possível observar na figura exatamente quais as responsabilidades atribuídas à TI da empresa e quais as responsabilidades atribuídas ao Microsoft Azure.
IaaS – Infrastructure as a Service
Com a assinatura IaaS é possível eliminar a infraestrutura de data center da empresa - computação, armazenamento e rede – e transferi-la para a nuvem, gerando mobilidade, flexibilidade e economia aos processos da empresa.
O Azure possibilita a criação de máquinas virtuais com o Sistema Operacional Windows Server ou Linux, com suporte para SQL Server, Oracle, IBM e SAP.
Em relação ao serviço de armazenamento e backup, a plataforma é escalável, isto é, aumentando o seu espaço conforme a necessidade. A segurança desses dados é garantida com a implantação de redundância dos dados nas regiões e zonas do Azure de acordo com o SLA entre a Microsoft e a empresa contratante.
PaaS – Platform as a Service
Com a assinatura PaaS o Azure oferece o ambiente de infraestrutura – servidores, armazenamento e rede, além do middleware, ferramentas de desenvolvimento, serviços de BI (Business Intelligence), SGBD, ferramentas de análise de negócios dentre outros.
Nesse caso, a plataforma Azure oferece a estrutura necessária para rodar os programas e sistemas na nuvem, geralmente, em um modelo de nuvem híbrida, onde algunsservidores estão localizados fisicamente dentro da empresa ou alugados de forma exclusiva.
No modelo PaaS, a responsabilidade da Microsoft aumenta, o sistema em si é virtualizado pelo serviço da plataforma, e a empresa só precisa gerenciar os aplicativos e os dados.
SaaS – Software as a Service
Com a assinatura SaaS o usuário simplesmente contrata o serviço e não se preocupa nem com o código, nem com o banco. A plataforma permite aos usuários conectar-se e usar aplicativos baseados em computação em nuvem pela internet.
Podemos citar alguns exemplos comuns de serviços, como: e-mail, calendários e ferramentas do Office, como Office 365.
No caso do SaaS, a aplicação está hospedada no Azure e com um único ponto de entrada para todos os clientes, conforme visualizado abaixo. Toda a infraestrutura - middleware, software de aplicativo e dados de aplicativo - fica no data center do provedor, sendo este responsável pelo gerenciamento do hardware e software, garantindo disponibilidade e segurança para os aplicativos e seus dados.
Sendo assim, a plataforma Microsoft Azure oferece serviços nos modelos IaaS, PaaS e SaaS, agregando produtividade, crescimento e economia para as empresas e usuários do provedor.
Para finalizar esse item, vamos citar os principais tipos de serviços distribuídos nos três modelos apresentados:
	Máquinas virtuais
	A plataforma oferece máquinas virtuais Linux ou Windows de acordo com a necessidade da empresa
	Gerenciamento de rede
	A plataforma oferece ferramentas de gerenciamento da rede dentro do próprio painel de controle. Desta forma, é possível monitorar, diagnosticar e obter informações sobre o desempenho e a integridade do sistema
	Aplicações em nuvem
	A plataforma oferece ambiente de softwares virtualizados à semelhança das máquinas virtuais. Desta forma, é possível acessar softwares de interesse da empresa de qualquer lugar do mundo
	Armazenamento e backup
	A plataforma oferece um processo simples e automatizado, ao armazenar e recuperar os dados hospedados no Azure pelo seu esquema de redundância de dados nos data centers da Microsoft
	Banco de dados
	A plataforma oferece gerenciador de banco de dados relacionais inteligente e com alta compatibilidade e portabilidade para migrar bancos sem alterar os aplicativos
	Análise de dados com IA e Machine Learning
	A plataforma oferece recursos de IA permitindo uma análise dos dados mais complexa em relação as análises tradicionais. Desta forma, gera-se otimização e economia nos processos automatizados, pois a plataforma tem a capacidade de interpretar indicadores de performance e ainda sugerir modelos melhores de desenvolvimento e administração
	Internet das Coisas
	A plataforma Azure possui um Hub específico para IoT com a função de gerenciar os dispositivos em um único sistema de gestão da computação em nuvem
Dentre os recursos avançados do Azure, atualmente, a plataforma Azure possui aspectos adicionais, como:
	CDN (Content Delivery Network)
	Solução de cache distribuído ao redor do mundo. O objetivo principal é reduzir a latência de comunicação entre as aplicações
	HPC (High Performance Computing)
	Como o próprio nome sugere, é um serviço de computação de alto desempenho. Neste modelo, é cobrada a hora de computação de acordo com o tipo de servidor escolhido. Exemplos de aplicações comumente encontradas na execução em HPC são aquelas que utilizam código assíncrono e multithreads.
	SQL Azure, Azure Tables e Blobs
	Recursos para armazenamento de dados disponíveis no Windows Azure. SQL Azure é o modelo relacional de armazenamento de dados e foi desenvolvido com os mesmos recursos do SQL Server tradicional, assim, é possível executar praticamente todas as operações já tradicionalmente realizadas no ambiente on-premises. O Windows Azure disponibiliza também um modelo de armazenamento de dados não estruturados, chamado de Azure Tables. Profissionais acostumados a trabalharem com NoSQL têm suas necessidades atendidas com este modelo. Finalmente, como última opção, mencionamos o modelo de Blobs. A ideia aqui é proporcionar um ambiente dedicado ao armazenamento de arquivos gerais em formato binário.
	Service Bus
	Recurso que possibilita a integração entre diferentes sistemas através de serviços diversos. Service Bus pode ser entendido como um "hub de integração"
	Windows Azure Connect
	Recurso responsável por garantir a qualidade de conexão entre a nuvem e os ambientes on-premise dos usuários das nuvens
	Active Directory
	Ao sofrer consideráveis melhorias em diversos aspectos, o Access Control Service (ACS) tornou-se o que hoje é conhecido como Windows Azure Active Directory. Em linhas gerais, WAAD é um hub dedicado à disponibilização de serviços para autenticação de usuários, seja via AD, Facebook, Twitter
	Media Services
	Recurso dedicado à produção e compartilhamento de recursos de mídia
Multithreads: Threads são trechos de códigos que podem rodar de forma independente em relação ao programa principal. Os sistemas que suportam uma única thread (em real execução) são chamados de monothread, enquanto os sistemas que suportam múltiplas threads são chamados de multithread.
Módulo 3
Descrever a Plataforma Google Cloud
Google Cloud Platform
O Google Cloud Platform (GCP) é um conjunto de produtos e serviços computacionais do Google para computação em nuvem.
Podem ser categorizados como poder de computação (compute), armazenamento de dados (storage), banco de dados (database), rede (networking), análise de dados (big data) e aprendizado de máquina (machine learning).
Esses produtos e serviços estão disponíveis em máquinas virtuais, também chamadas de instâncias, que são acessadas pela internet. Dessa maneira, o usuário não precisa investir em recursos on-premises, sendo possível economizar o capital inicial de investimento, pois não existe a necessidade de custos CapEx de computação (despesas de capital). Com a GCP, só se paga pelo tempo que usou. Esse tipo de abordagem, como comentada anteriormente, é conhecido por “pay-as-you-go”.
CapEx: CapEx é a sigla da expressão inglesa capital expenditure (em português, despesas de capital ou investimento em bens de capital) e que designa o montante de dinheiro despendido na aquisição (ou introdução de melhorias) de bens de capital de uma determinada empresa.
Conceito do Google Cloud Platform
	2008
	O Google começou a oferecer seus serviços de nuvem (Google Cloud Platform) em meados do ano de 2008. A versão inicial do provedor ocorreu com o anúncio do Google App Engine, uma plataforma de desenvolvimento e hospedagem de aplicações nos data centers do Google. A plataforma tem como objetivo oferecer uma série de serviços baseados na nuvem com alta performance, segurança e confiabilidade
	2012
	O serviço Google App Engine iniciou a era de computação em nuvem da Google e funcionava apenas sob o modelo PaaS. Quando o Google Compute Engine foi lançado, em junho de 2012, a empresa entrou no mundo da computação em nuvem como IaaS
	2013
	Contudo, somente foi lançado ao público no final de dezembro de 2013
Regiões e zonas do Google Cloud Platform
O Google Cloud Platform (GCP) possui data centers em diversas partes do planeta. Sendo assim, seus serviços estão disponíveis na América do Norte, América do Sul, Europa, Ásia e Austrália. Esses continentes estão divididos em regiões e zonas. Os data centers são chamados de zonas e são agrupadas por regiões que indicam o local físico onde estão instaladas.
No momento da produção desse tema, o GCP possui 22 regiões, distribuídas em 67 zonas e disponíveis em mais de 200 países e territórios de pontos de presença. No Brasil, temos uma região localizada em São Paulo desde 2017. Dessa forma, o Google garante a redundância dos dados em caso de falhas nas regiões.
Na figura seguinte, podemos observar a distribuição da GCP em regiões e zonas. O Google tem um data center no estado de Iowa nos EUA, conhecido por US Central 1. Essa região Iowa é dividida em quatro zonas distintas, A, B, C e F. Sendo assim, é possível disponibilizar o deploy de umapp em todas as quatro zonas para uma melhor tolerância a falhas. Uma outra forma de garantir tolerância a falha é habilitar o deploy em uma outra região, assim, caso algum desastre natural aconteça, os seus aplicativos continuarão em funcionamento.
Os serviços e recursos do Google Cloud podem ser zonais, regionais ou multirregionais, isto é gerenciado pelo Google em várias regiões.
	Zonais
	No caso de zonais, o serviço está localizado em uma única zona. Se a zona estiver indisponível, todos os recursos dessa zona permanecem indisponíveis até serem restabelecidos. Um exemplo de recurso zonal é uma instância de máquina virtual (VM) do Compute Engine que reside em uma zona específica
	Regionais
	Nos regionais, o serviço está localizado nas zonas da região. Esse serviço é fornecido de uma forma redundante em todas as zonas da região. Dessa forma, proporcionando mais disponibilidade em relação aos serviços zonais. Como exemplo temos os aplicativos do App Engine ou grupos de instâncias regionais gerenciados
	Multirregionais
	Nos recursos multirregionais, o serviço está localizado em mais de uma região, sendo assim redundantes e distribuídos dentro e entre regiões, agregando como vantagem a disponibilidade, o desempenho e a eficiência do recurso. Alguns exemplos desses serviços são: API Cloud Healthcare, Cloud Bigtable, Cloud Spanner, Cloud Storage, Cloud Key Management Service, BigQuery e Datastore
Características do Google Cloud Platform
Segundo o relatório do Gartner, que avalia as empresas provedoras de computação em nuvem sob o modelo IaaS (Infrastructure as a Service); em 2018, a GCP ocupou pela primeira vez o “Magic Quadrant para Cloud Infrastructure as a Service” como uma das líderes.
Neste quadrante, a avaliação é orientada a IaaS - Infraestrutura como serviço. O Google foi reconhecido pela Gartner a partir de 2018 como um dos três líderes no Quadrante Mágico, ficando atrás apenas da Amazon AWS e da Microsoft Azure.
Na figura abaixo, podemos observar o gráfico dos anos de 2017, 2018 e 2019, em que o Gartner nomeou o Google como líder no Quadrante Mágico do Gartner de 2018 para serviços de armazenamento em nuvem pública.
O Google Cloud Platform é comprometido com o código aberto. A companhia é adepta ao Open Compute Project (OCP), que é uma comunidade com o principal objetivo de projetar uma infraestrutura de computação escalável e torná-la aberta para qualquer pessoa usar e inovar.
Open Compute Project: O Open Compute Project (OCP) é uma comunidade colaborativa focada em redesenhar a tecnologia de hardware para dar suporte eficiente às crescentes demandas de infraestrutura de computação.
Segundo a Forbes (2017), o Google já criou mais de 2 mil projetos de código aberto, dentre eles, o popular Android; a linguagem Go, que é usada no App Engine; e o Kubernetes, sistema de orquestração de contêineres. Uma das mais importantes vantagens da GCP é a utilização da estrutura do Google para armazenar os dados e criar aplicações em nuvem. Além da criação de aplicativos, a GCP fornece ferramentas do G Suite, que é um conjunto de soluções Cloud com o objetivo de melhorar a operação de uma empresa.
O G Suite conta com: e-mail corporativo, armazenamento, instrumentos para acelerar o ritmo produtivo - formulários, documentos e planilhas -, mobilidade, espaço para trabalhos colaborativos e estratégias de engajamento.
Em relação à segurança na nuvem, a Cloud do Google possui uma lista de certificações que contempla o CSA STAR, PCI DSS, HIPAA, FedRAMP, além de outras certificações exclusivas para países e regiões específicas.
Dentre as vantagens da GCP, podemos ainda destacar:
	Novas criações
	Criação de aplicações de forma rápida
	Customização
	Máquinas customizáveis em nível máximo
	Sistemas suportados
	Suportam Linux e Windows
	Base de soluções
	Boa base de conhecimento para solução de problemas
	Segurança
	Bom nível de Segurança
	Valor
	Preços competitivos
Serviços do Google Cloud Platform
O Google Cloud Platform possui uma variada lista de recursos oferecidos aos usuários. Os principais recursos podem ser agrupados em tipos de serviços:
· Computação (compute)
· Armazenamento e banco de dados (storage & database)
· Big data
· Machine learning
· Rede (networking)
· Management
Na figura a seguir, podemos observar os principais tipos de serviços e suas plataformas. Conheceremos algumas dessas plataformas oferecidas pela GCP.
Computação (compute)
	Google Compute Engine (GCE)
	É uma plataforma de infraestrutura como serviço do Google Cloud (IaaS). Essa plataforma oferece aos usuários desde máquinas virtuais até hospedagem de workloads
	Google App Engine (GAE)
	É uma plataforma como serviço do Google Cloud (PaaS). Essa plataforma oferece componentes de software aos desenvolvedores. Ela possibilita o acesso a hospedagens escalonáveis do Google, pois é possível usar kit de desenvolvimento de software (SDK) para desenvolverem softwares que são executados no App Engine
O principal objetivo dessa plataforma é a publicação de aplicativos com a mínima preocupação com a configuração do servidor. Dessa maneira, os desenvolvedores podem focar na programação e deixar para o App Engine a configuração do ambiente.
Em resumo, ao enviar o projeto para o App Engine, o usuário não precisa se preocupar em qual plataforma de hardware está rodando a versão do sistema operacional, nem com a configuração de todo o ambiente usado
	Google Container Engine (GKE)
	É uma plataforma de gestão e orquestração para containers da Cloud Google. O Google Container Engine é baseado no mecanismo de orquestração de contêiner Google Kubernetes de código aberto que o Google criou originalmente com o objetivo de auxiliar as empresas em seu próprio gerenciamento operacional de contêineres, podendo ser implantado tanto para uso em infraestrutura local, nuvem híbrida ou nuvem pública.
O GKE escala os contêineres de um determinado cluster e os gerencia automaticamente. A interação com o GKE pode ser realizada tanto por meio de interface de linha de comando (CLI) do GCloud ou através do Google Cloud Platform Console
Armazenamento e banco de dados (storage e database)
	Google Cloud Storage
	É uma plataforma de armazenamento em nuvem projetada para abrigar conjuntos de dados grandes e não estruturados.
O Cloud Storage pode ser acessado, tanto pelo navegador web, como por uma interface de linha de comando. O usuário tem total controle sobre os dados, sendo possível aumentar ou diminuir a capacidade de armazenamento ou até arquivar os dados que não estão sendo utilizados.
A plataforma não exige praticamente nenhuma administração pelo usuário. Também não é necessário fazer o capacity planning, nem o pagamento upfront, isto é, o pagamento antecipado
	Outros Serviços de Armazenamento de Banco de Dados
	· Cloud Datastore – é um banco de dados NoSQL para armazenamento não relacional.
· Cloud SQL – é o banco de dados fully-relational MySQL administrado pelo Google na nuvem.
· Cloud Bigtable – é um banco de dados NoSQL, NoOps. Serviço escalonável e totalmente gerenciado para grandes quantidades de dados
Outros serviços
O Google Cloud Platform inclui também serviços de nuvem para processamento de dados e análises, como o Google BigQuery para consultas SQL. Além disso, o Google Cloud Dataflow é um serviço de processamento de dados destinado à análise, Extract Transform and Load (ETL) e projetos computacionais em tempo real. A plataforma também inclui o Google Cloud Dataproc, que oferece serviços Apache Spark e Hadoop para processamento de big data.
Atenção: A plataforma Google Cloud está em constante evolução e o Google pode periodicamente introduzir, alterar ou descontinuar seus serviços com base na demanda do usuário ou em pressões competitivas.
Considerações Finais
Os provedores de computação em nuvem possuem recursos e vantagens que atendem às necessidades específicas do cliente, que observa esses serviços como um caminho a ser adotado e estratégias de inserção na nuvem. Como exemplo, podemos citar um cliente que pode querer usaro Google Cloud Platform para um aplicativo que precisa dos recursos do Spanner, enquanto usa a Amazon AWS para seus serviços de IA e o Azure para cargas de trabalho específicas do Windows.
Nessa corrida de oferecer recursos e serviços em computação em nuvem, as grandes plataformas de provedores buscam soluções de alta disponibilidade e capacidade operacional.
Dessa forma, visualizamos nesse tema os três principais fornecedores de computação em nuvem, Amazon AWS, Microsoft Azure e Google Cloud, analisando seus pontos fortes e fracos que os tornam ideais para diferentes casos de uso.
A competição pela liderança na computação em nuvem é uma corrida acirrada entre os maiores provedores: AWS vs. Azure vs. Google. É possível observar que, para infraestrutura como serviço (IaaS) e plataforma como serviço (PaaS), eles mantêm alta posição diante das outras empresas desse segmento.
A Amazon Web Services possui uma gama de ferramentas e não para de crescer, com recursos incomparáveis. A Microsoft Azure possui uma infraestrutura de nuvem com capacidade excepcional, voltada, principalmente, para o cliente corporativo devido seu histórico corporativo (e suporte do Windows) como Microsoft. O Google Cloud entrou no mercado de nuvem mais tarde e não tem o foco corporativo, mas sua experiência técnica é profunda e suas ferramentas líderes de mercado em inteligência artificial, aprendizado de máquina e análise de dados.
Em resumo, a AWS praticamente domina o mercado. Enquanto isso, a Microsoft é particularmente forte em SaaS e o Google Cloud está posicionado para um crescimento agressivo.
AULA 5 – SISTEMA OPERACIONAL LINUX E O SERVIDOR WEB APACHE
Definição
Apresentação de comandos para realizar operações básicas, de manipulação de permissões de arquivo e diretório e gerenciamento de usuários e grupos, no terminal do Linux. Introdução ao servidor Web Apache, suas configurações e seus principais parâmetros.
Propósito
Compreender o sistema operacional Linux e o servidor Web Apache, amplamente utilizados no mercado, tendo em vista a capacitação profissional.
Preparação
Antes de iniciar o conteúdo deste tema, faça uma revisão sobre a camada de aplicação do modelo OSI e os protocolos HTTP e HTTPS.
Para melhor aproveitamento do dos estudos, recomendamos dispor de uma máquina Linux para treinar comandos e seguir os exemplos do módulo 4. Caso não disponha de um computador com o Linux instalado, há duas formas simples de obtê-lo, sem precisar reinstalar seu computador:
· Mais simples e rápido: busque um emulador Linux. Existem alguns disponíveis gratuitamente na internet. 
· Mais avançado: instale uma máquina virtual com uma distribuição Linux de sua escolha.
Objetivos
· Módulo 1: Compreender o funcionamento do terminal de comandos do sistema operacional Linux
· Módulo 2: Descrever o sistema de arquivos e seu esquema de permissões
· Módulo 3: Descrever a organização de usuários e grupos e os principais comandos para o seu gerenciamento
· Módulo 4: Reconhecer o funcionamento do servidor Web Apache
Introdução
Para estudarmos os principais comandos de forma detalhada, precisamos entender seu funcionamento e sua organização. Veremos, ainda, o sistema operacional Linux e o servidor Web Apache.
Módulo 1
Compreender o funcionamento do terminal de comandos do sistema operacional Linux
O Sistema Operacional Linux
Uma das características mais conhecidas do Linux, assim como dos sistemas UNIX em geral, é sua linha de comandos, baseada em interpretadores conhecidos como shell. Todo e qualquer gerenciamento do sistema pode ser feito por meio de comandos nesse ambiente shell, também conhecido como terminal de comandos.
Apesar de existir ambiente gráfico com janelas para o Linux, muitos administradores de sistema não o utilizam, por diferentes razões:
· Nem toda operação pode ser realizada no ambiente gráfico ou exigirá a instalação de novos programas para este fim.
· Para muitas operações, o uso de comandos permite maior agilidade em comparação com o ambiente gráfico.
· O ambiente gráfico é um software que, naturalmente, consome recursos da máquina onde está executando, ocupando espaço em memória, disco e demandando processamento.
O Linux é disponibilizado em grandes pacotes, conhecidos como distribuições. Neles estão contidos o núcleo do sistema operacional, uma variedade de aplicações e utilitários, além do programa instalador, que será responsável por implantar o sistema no computador.
ACESSANDO O LINUX (LOGIN)
O Linux é um sistema operacional multiusuário e com atenção à segurança, o que nos obriga a sempre realizar autenticação para acessá-lo.
Cada usuário possui o nome (username) e senha pessoal para a autenticação no sistema (login).
Como na maioria dos sistemas operacionais, o Linux possui um superusuário padrão, com amplos poderes sobre o sistema, conhecido por ‘root’.
Um descuido ao digitar comandos como ‘root’ poderá comprometer os dados e o funcionamento do próprio servidor.
Por isso, muitas distribuições não habilitam o acesso direto a ele, exigindo que outras contas de usuários comuns sejam criadas. Assim, temos um primeiro nível de acesso com poderes limitados.
Em um sistema sem ambiente gráfico, o terminal de comandos é exibido imediatamente após o acesso (login) ao sistema. Caso esteja em um ambiente gráfico, ainda será necessário abrir o terminal em uma janela.
Utilizando o Terminal de Comandos
O elemento mais importante do terminal é o PROMPT de comando. É uma espécie de “palavra mágica” exibida pelo terminal, indicando que ele está pronto para receber comandos.
No Linux, o PROMPT é representado pelos caracteres $ ou #. O segundo é exibido somente para o usuário ‘root’. Assim, é possível rapidamente saber se o comando que iremos digitar será executado como um usuário comum, de poderes limitados, ou como o superusuário ‘root’.
$ comando
Em verde, vemos o PROMPT de um usuário comum. Se o usuário fosse o ‘‘root’’ o PROMPT seria o ‘#’. Em vermelho, um comando qualquer digitado pelo usuário.
Para executar o comando, deve ser pressionada a tecla ENTER.
Atenção: Alguns terminais de comando para Linux utilizam o caractere % como PROMPT para usuários comuns.
Variações do Prompt de Comando
Para auxiliar o usuário, muitas distribuições Linux já trazem um PROMPT pré-configurado com informações adicionais e úteis a qualquer momento.
bob@servidor:/tmp $
Deste exemplo sabemos que:
	‘bob’
	É o nome do usuário executando o terminal de comandos. Todos os comandos que ele digitar serão executados pelo usuário ‘bob’, com as permissões e os poderes desse usuário
	‘servidor’
	É o nome (hostname) da estação Linux. Essa informação é muito útil para um administrador quando ele está conectado simultaneamente a diversos servidores, que dá a certeza de que está enviando o comando para o servidor Linux certo
	‘/tmp’
	É o diretório atual – falaremos mais adiante sobre isso. Ter essa informação visível no PROMPT facilita operações envolvendo arquivos e diretórios
O terminal de comandos do Linux possui grande variedade dos mesmos. Na prática, cada comando é um programa próprio. Portanto, ao digitá-los, estamos executando programas. Vamos ver alguns exemplos de comandos do terminal Linux?
	whoami
	‘Quem sou eu?’ Informa o nome do usuário (username).
	
	$ whoami
bob
	hostname
	Informa o nome da estação Linux. Esse nome é definido durante a instalação do Linux e pode ser trocado posteriormente.
	pwd
	Informa o diretório atual do usuário
	history
	Exibe uma lista dos últimos comandos digitados pelo usuário
	exit/logout
	Ambos os comandos encerram a sessão, sendo exigida nova autenticação (login) para usar o sistema
A estrutura de Comandos do Terminal Linux
Os comandos são estruturados como:
$ comando [opções] [argumentos]
Os argumentos indicam ações para os programas. Pode ser, por exemplo, o nome de um ou mais arquivos que serão lidos ou escritos pelo comando.
As opções modificam o comportamento do programa ou como as respostas serão elaboradas. Em geral, as opções são iniciadas com hífen ( - ).
Repare, no exemploanterior, que as opções e os argumentos são mostrados entre colchetes [ ]. Essa representação é utilizada nas documentações de comandos para indicar itens opcionais, ou seja, que não precisam ser incluídos cada vez que o comando é executado. A separação de opções e argumentos é feita sempre pelo caractere ‘espaço’.
Como conhecer as opções e os argumentos para cada comando? O Linux possui um comando específico para exibir os manuais de seus comandos.
$ man [comando]
No argumento, informe o nome do comando para o qual deseja ver o manual. Por exemplo:
$ man pwd
Para obter as instruções do comando ‘pwd’.
Vamos conhecer outros comandos úteis?
	more ARQUIVO
	Permite visualizar o conteúdo do arquivo indicado no argumento, página por página
	
	$ more trabalho.txt
	less ARQUIVO
	Permite visualizar o conteúdo do arquivo indicado no argumento, página por página. É semelhante ao comando ‘more’, porém tende a ser mais rápido.
	
	$ less trabalho.txt
	cat ARQUIVO
	Permite visualizar o conteúdo do arquivo indicado no argumento
	
	$ cat trabalho.txt
	head -n ARQUIVO
	Exibe as ‘n’ primeiras linhas do arquivo indicado no argumento
	
	$ cat trabalho.txt
LINHA 1
LINHA 2
LINHA 3
LINHA 4
LINHA 5
$ head -2 trabalho.txt
LINHA 1
LINHA 2
	tail -n ARQUIVO
	Exibe as ‘n’ últimas linhas do arquivo indicado no argumento. Muito útil, por exemplo, para visualizar os últimos registros de um longo arquivo de logs do sistema
	touch ARQUIVO
	Se não existir um arquivo com o nome passado no argumento, ele será criado vazio. Se existir, apenas será atualizada a informação de hora da última modificação, porém o seu nome e conteúdo não serão modificados. Neste tema, será um comando útil para criar arquivos, ainda que vazios, para estudar outros comandos
	last
	Exibe os últimos acessos ao sistema, indicando o nome dos usuários e eventos de carga (boot) do Linux
	who
	Lembrando que o Linux é um sistema multiusuário e multitarefas, permitindo que diversos usuários se conectem simultaneamente. O comando ‘who’ exibe a lista de usuários conectados no momento
	uname -a
	O comando exibe diversas informações sobre o Linux, e a opção ‘-a’ faz com que exiba todas de uma só vez. Dentre as informações exibidas estão o nome da estação (hostname), a versão do núcleo do sistema (kernel) e a plataforma de hardware sobre a qual o Linux está executando
	ip addr
	Exibe os endereços atribuídos às interfaces de rede
	
	$ ip addr
1: lo: mtu 1500 group default qlen 1
link/loopback 00:00:00:00:00:00
inet 127.0.0.1/8 brd 127.255.255.255 scope global dynamic
13: eth0: <> mtu 1500 group default qlen 1
link/ether 00:4e:c8:a5:89:13
inet 169.254.14.90/16 brd 169.254.255.255 scope global dynamic
14: wifi0: <BROADCAST,MULTICAST,UP> mtu 1500 group default qlen 1
link/ieee802.11 4c:c2:90:1f:a5:f1
inet 192.168.1.70/24 brd 192.168.1.255 scope global dynamic
	
	No último bloco são exibidas as configurações da interface de rede ‘wifi0’ e o endereço IP atribuído. Esse comando será útil no último módulo, sobre o Apache.
Em versões mais antigas, também podia ser usado o comando ‘ifconfig’
	
	$ ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 1500
inet 127.0.0.1 netmask 255.0.0.0
loop (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wifi0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.70 netmask 255.255.255.0 broadcast 192.168.1.255
ether 4c:c2:90:1f:a5:f1 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
	
	Em distribuições mais recentes, como o Ubuntu 18.04, o comando ‘ifconfig’ não é instalado por padrão e pode ser incluído posteriormente com o pacote ‘net-tools’
Editando arquivos no Linux
Uma ferramenta fundamental no Linux são os editores de texto, que permitem alterar o conteúdo de arquivos texto, muito usados para a configuração de programas e serviços.
Existem vários editores disponíveis e alguns já costumam ser instalados pelas principais distribuições Linux. Um desses editores, simples de usar, é o ‘nano’.
$ nano ARQUIVO
Ao executar o comando ‘nano’, basta passar o nome do arquivo que deseja editar como argumento. Se o arquivo não existir, ele poderá ser criado. Uma vez aberto, navegue usando as setas do teclado, como em um editor de texto qualquer.
Repare que no rodapé da tela são exibidas as combinações de tecla para as principais operações do editor ‘nano’.
	^G Get Help
	^O Write Out
	^W Where Is
	^K Cut Text
	^J Justify
	^C Cur Pos
	^X Exit
	^R Read File
	^\ Replace
	^U Paste Text
	^T To Spell
	^_ Go To Line
Exemplo: Para sair do editor use a combinação de teclas “Crtl-X”. Nesse momento, confirme se deseja salvar as alterações feitas no arquivo.
Um dos editores mais famosos entre os usuários do Linux é o ‘vim’, versão melhorada do clássico editor ‘vi’ do Unix. É uma ferramenta leve e muito poderosa, que oferece muitos recursos avançados, além de auxiliar na manipulação de configurações e códigos-fonte. Apesar de seu uso não ser tão simples quanto o do ‘nano’, vale a pena conhecer.
Executando um Comando como o superusuário ‘root’
No Linux, certas operações só podem ser realizadas pelo usuário ‘root’, como criar usuários e instalar programas e gerenciar serviços, assim como o Apache.
Antigamente, as distribuições Linux permitiam criar uma senha para o usuário ‘root’ no ato da instalação, porém essa é uma prática que traz riscos para a segurança do sistema e está caindo em desuso. Atualmente, é mais usual a criação de usuários comuns com poderes para executar comandos individualmente como o ‘root’.
Com o comando ‘sudo’, usuários comuns autorizados conseguem executar outros comandos com os poderes de ‘root’.
$ sudo COMANDO
Na primeira vez, o ‘sudo’ vai te pedir para digitar sua própria senha, por segurança, e em seguida executará o ‘COMANDO’ com a identidade do ‘root’.
Exemplo: Para reiniciar o Linux, pode ser usado o comando ‘reboot’. No entanto, um usuário comum não tem permissão para executá-lo, sendo necessário o uso do ‘sudo’.
$ sudo reboot
Para desligar o Linux, podem ser usados os comandos a seguir, sempre com o ‘sudo’ para ter os poderes do usuário ‘root’.
$ sudo halt
$ sudo shutdown –h now
Relembrando: Lembre-se de que somente usuários previamente autorizados conseguirão usar o ‘sudo’. Uma das maneiras de configurar a autorização é por meio de grupos de usuário. O comando ‘sudo’ possui uma configuração versátil, portanto, verifique as recomendações da distribuição Linux que estiver usando, pois a nomenclatura de grupos costuma variar.
Módulo 2
Descrever o sistema de arquivos e seu esquema de permissões
Agora que já sabemos como o terminal de comandos do Linux funciona, começaremos a explorar comandos para realizar tarefas importantes de administração do sistema.
Neste módulo, vamos conhecer o sistema de arquivos do Linux e aprender os comandos mais importantes para gerenciá-lo.
Uma característica do sistema de arquivos no Linux, e que se destaca para todo novo usuário, é o fato de ser CASE-SENSITIVE. O que isso significa?
Significa que ele distingue caracteres maiúsculos de minúsculos nos nomes de arquivos. Um exemplo: “Linux”, “LINUX” e “linux” são interpretados pelo sistema como nomes DIFERENTES.
Na prática, essa característica exige ainda mais atenção dos usuários e administradores do sistema, pois a troca de apenas um caractere entre maiúsculo ou minúsculo será suficiente para que uma operação seja feita com o arquivo ou diretório errado. Não é incomum, mesmo para usuários experientes, enfrentar problemas desse tipo por mera distração.
A estrutura de diretórios do Linux
Assim como a maioria dos sistemas operacionais modernos, o Linux utiliza diretórios que nos permitem organizar e estruturar melhor os arquivos armazenados.
No Linux, todos os arquivos são organizados em uma única estrutura de diretórios. Isso significa que todos os diretórios e arquivosestão sob um ponto conhecido como RAIZ da árvore, representada pelo caractere ‘/’.
Alguns desses diretórios têm finalidades específicas. Entre eles, podemos destacar:
	/bin
	Onde estão armazenados os programas que respondem pelos comandos do sistema
	/etc
	Onde estão armazenados os arquivos de configuração do sistema, inclusive o cadastro de usuários e grupos (falaremos mais adiante)
	/home
	Sob o /home são criados diretórios para cada usuário existente. Por exemplo, o usuário ‘bob’ terá um diretório privado em /home/bob. Para bob, o diretório /home/bob é o seu diretório Home
	/root
	É o diretório exclusivo do usuário ‘root’
	/tmp
	Arquivos temporários de usuários e programas
Outros dispositivos, discos internos ou externos, são montados nessa mesma e única árvore. Essa abordagem destoa, por exemplo, do Windows, em que cada sistema de arquivos é identificado por uma letra (C:, D:, E:) com sua raiz própria de diretórios.
É importante observar que não há obrigação de que o diretório home de um usuário seja criado dentro de ‘/home’ e nem que o diretório home tenha o mesmo login do usuário. Por simplicidade e padronização, essas duas práticas são amplamente adotadas, mas não são compulsórias. Logo, não há impedimento técnico para que o home do usuário ‘bob’ seja o diretório ‘/tmp/xyz’, por exemplo.
Representação do Caminho de Diretórios
Quando queremos identificar a localização exata de uma casa, precisamos de um endereço completo e não apenas do número da casa. Da mesma forma, quando queremos nos referir a um arquivo, precisamos indicar sua localização exata dentro da árvore de diretórios, descrevendo todo o caminho desde a raiz até o diretório onde o arquivo está. A representação é feita usando o caractere ‘/’ como separador dos diretórios. Exemplo:
/home/bob/documentos/identidade.pdf
· O arquivo se chama ‘identidade.pdf’ e está dentro do diretório ‘/home/bob/documentos’.
· ‘documentos’ é um diretório, que está dentro de ‘/home/bob’.
· ‘bob’ é um diretório que está dentro de ‘/home’; ‘home’ é um diretório abaixo da raiz de diretórios.
A raiz é representada pelo caractere ‘/’ no início do caminho. O caminho iniciado na raiz é chamado de caminho absoluto, pois representa precisamente a localização do arquivo dentro da árvore.
E qual comando permite ver o conteúdo de um diretório?
É o comando ls
O comando ‘ls’ lista o conteúdo de um diretório, exibindo todos os arquivos e diretórios existentes nele. No argumento podemos informar outro diretório para o qual queremos essa listagem.
 
Quando digitamos, porém, simplesmente ‘ls’, sem argumentos, ele também retorna um resultado. Mas de qual diretório?
Para responder a essa pergunta, precisamos entender o conceito de diretório atual. Enquanto usamos um terminal de comando, sempre estamos em algum diretório, que é o atual. Se realizarmos alguma operação sem indicar um caminho absoluto, o diretório atual será utilizado.
Assim, quando digitamos ‘ls’, o comando retornará a lista de arquivos e diretórios no atual.
Para saber qual é o diretório atual, usamos o comando ‘pwd’.
 A resposta indica que nosso diretório atual é ‘/home/bob’. Quando for executado o comando ‘ls’, a resposta será o conteúdo desse diretório. E se eu digitasse o comando a seguir?
Repare que o argumento ‘testes’ não inicia com a barra ‘/’, portanto, não é um caminho absoluto, a partir da raiz de diretórios. Nesse caso, o comando ‘ls’ irá listar o diretório ‘testes’ dentro do atual. Ou seja, ele retornará o conteúdo do diretório ‘/home/bob/testes’.
Um caminho que não inicia pela raiz, que não começa com ‘/’, é chamado de caminho relativo. Ao contrário do caminho absoluto, o relativo depende do diretório atual para se referir a um arquivo ou outro diretório.
O argumento do comando ‘ls’ foi um caminho relativo, logo, o ‘ls’ irá listar o conteúdo de ‘/home/bob/trabalhos/arquivos’.
Como navegar entre os diretórios, mudando o diretório atual?
Para isso, existe o comando ‘cd’ (change dir). Exemplo:
Nosso diretório atual é /home/bob.
$ cd testes
Nesse momento, entraremos no diretório ‘testes’, dentro do diretório /home/bob – caso o diretório ‘testes’ não exista, receberemos um erro e a operação não será realizada.
Para voltar (subir) um nível na árvore de diretórios, usamos o argumento ‘..’, que representa o diretório acima, ou diretório ‘pai’.
Nesses exemplos, usamos um caminho relativo, ou seja, o resultado final sempre dependerá do diretório atual. Se usarmos um caminho absoluto, o comando ‘cd’ nos levará para um diretório específico.
Após o comando, o diretório atual será /etc, não importando qual era inicialmente.
Após o comando, o diretório atual será a raiz do sistema, não importando qual era inicialmente.
O comando ‘cd’ também pode ser usado sem nenhum argumento. Nesse caso, o diretório atual passará a ser o seu diretório home.
O diretório home de um usuário pode ser representado pelo caractere ‘~’. Assim, se um usuário digita o comando:
O diretório atual será o home do usuário que digitou o comando. Por exemplo, se o diretório home de ‘bob’ é ‘/home/bob’ e ele digita o comando:
Seu diretório atual passará a ser ‘/home/bob/trabalho’.
Vejamos, a seguir, comandos para criar e excluir diretórios e arquivos. Vamos lá?
	$ mkdir DIRETÓRIO
	Para criar um novo diretório, indicando seu nome no argumento
	
	$ mkdir textos
	
	Será criado o diretório de nome ‘textos’ dentro do diretório atual. O mkdir também permite criar um diretório em qualquer ponto da árvore de diretórios, indicado por caminho absoluto. Exemplo:
	
	$ mkdir /tmp/textos
	
	O diretório ‘textos’ será criado dentro do diretório /tmp
	$ rmdir DIRETÓRIO
	O ‘rmdir’ pode ser usado para apagar diretórios. É importante notar que ele não é capaz de apagar o seu conteúdo, assim, o comando só conseguirá apagar um diretório se ele já estiver vazio.
O ‘rmdir’ também não conseguirá apagar um diretório se ele for o seu atual. Nesse caso você deve mudar o seu diretório atual. Por exemplo, usando o comando ‘cd ..’ para subir um nível.
	$ rm ARQUIVO
	O comando ‘rm’ é usado para apagar arquivos. O argumento é o arquivo que deve ser apagado. Pode ser passado um caminho relativo ou absoluto. Exemplo:
	
	$ rm trabalho.doc
	
	Será apagado o arquivo trabalho.doc no diretório atual.
	
	$ rm /home/bob/trabalho.doc
	
	Será apagado o arquivo /home/bob/trabalho.doc. É importante notar que esse arquivo será apagado independentemente do seu diretório atual, pois o argumento é um caminho absoluto.
	
	$ rm atividade/trabalho.doc
	
	Esse argumento é um caminho relativo, pois não começa na raiz (‘/’), desse modo, o comando ‘rm’ irá procurar o diretório ‘atividade’ dentro do diretório atual e, dentro de ‘atividade’, o arquivo ‘trabalho.doc’.
O ‘rm’ também pode ser usado para apagar um diretório com todo o seu conteúdo, incluindo outros diretórios. Essa operação é feita com a opção ‘-r’ (r de recursão), porém deve ser usada com extrema cautela. Incorretamente, pode remover muito mais que o desejado e até apagar arquivos importantes para o funcionamento do sistema operacional.
Propriedades de Arquivos e Diretórios
Quando digitamos simplesmente o comando ‘ls’, vemos o conteúdo do diretório atual, porém não há distinção entre o que é arquivo e o que é diretório.
Para auxiliar nosso trabalho, as distribuições Linux costumam trazer o comando ‘ls’ configurado para colorir os itens conforme seu tipo, mas é só isso. Sem essa funcionalidade, não podemos distinguir se cada item é arquivo ou diretório.
E existem outras propriedades de arquivos e diretórios relacionadas à segurança que precisamos conhecer. Para isso, o comando ‘ls’ possui opções que determinam as informações que ele irá exibir. Uma dessas opções é o ‘-l’:
Cada linha representa um item contido no diretório atual, ou seja, representa um arquivo ou diretório. Vamos entender como as linhas são compostas:
· O primeiro caractere de cada linha indica se é um diretório (d) ou um arquivo (-).
· Em seguida, temos uma sequência de 9 caracteres que representam as permissões de segurança.
Da primeiralinha exibida pelo comando ‘ls –l’, temos:
rw-r-----
Essa sequência é dividida em três partes, de 3 caracteres cada: Permissões do proprietário, do grupo e de outros.
Todo arquivo e diretório possuem um usuário proprietário, algo como o ‘dono’ do arquivo. As permissões do proprietário definem os poderes que esse usuário, o ‘dono’, tem sobre o arquivo.
A mesma coisa vale para as permissões do grupo. Todo arquivo e diretório possuem um grupo associado. Essas permissões definem os poderes concedidos aos seus usuários membros. Para qualquer outro usuário, não sendo o proprietário e nem pertencendo ao grupo, são definidas as permissões para outros.
	rw-
	r--
	---
	Permissões do proprietário
	Permissões do grupo
	Permissões para outros
O formato anterior é bem simples. Os caracteres sempre aparecerão na ordem: rwx
O significado dessas letras também é simples. Se a linha corresponde a um arquivo:
	r – Significa que há permissão para leitura do arquivo. Ou seja, pode-se abrir e ler o conteúdo do arquivo.
	»
	w – Significa que há permissão para escrever no arquivo.
	»
	x – Significa permissão para executar o arquivo. Essa é uma permissão importante, pois dá o controle sobre o que pode ser executado no sistema.
Se a permissão não estiver concedida, ‘r’, ‘w’ ou ‘x’ serão substituídos por ‘-‘. Voltando ao nosso exemplo:
	rw-
	r--
	---
	Permissões do proprietário
	Permissões do grupo
	Permissões para outros
	O proprietário pode ler e escrever no arquivo, mas não pode executá-lo
	Os usuários que pertencem ao grupo podem ler o arquivo, mas não podem modificá-lo nem o executar
	Qualquer outro usuário (que não seja o proprietário e não pertença ao grupo) não tem qualquer permissão sobre o arquivo
As permissões mudam um pouco seu significado quando a linha corresponde a um diretório. Veja a tabela a seguir, que compara os efeitos de cada permissão entre arquivos e diretórios:
	-
	Arquivo
	Diretório
	r (read)
	O arquivo pode ser lido. Sem essa permissão, não é possível ler o conteúdo do arquivo
	O conteúdo do diretório pode ser visto. Sem essa permissão, não é possível listar o conteúdo do diretório com o comando ‘ls’, por exemplo
	w (write)
	O arquivo pode ser modificado
	O conteúdo do diretório pode ser modificado. Permite criar novos arquivos e diretórios, renomear ou apagar arquivos e diretórios existentes.
Mas, para essa permissão ser efetiva, a permissão ‘x’ (a seguir) também deve estar concedida
	x (execute)
	O arquivo pode ser executado.
É usado em arquivos de programas e scripts. Sem essa permissão, o Linux se recusará a executar o programa nesse arquivo/script
	O diretório pode ser acessado. Sem essa permissão, não é possível acessar o diretório usando o comando ‘cd’
De volta ao exemplo, cada linha produzida pelo comando ‘ls -l’ traz mais algumas informações:
	-rw-r-----
	1
	bob
	adm
	240
	May 20
	15:37
	arquivo 1
Já vimos que:
	-
	Indica que arquivo1 é um arquivo. O ‘d’ indicaria que é um diretório
	rw-r-----
	Permissões de usuário, grupo e outros
Os demais campos são:
	1
	Refere-se a como o sistema de arquivos organiza as informações de diretórios. Não vamos nos preocupar com ele agora
	bob
	É o usuário proprietário do arquivo. Portanto, é bob quem terá as permissões rw- sobre o arquivo
	adm
	É o grupo do arquivo. Os usuários do grupo adm terão as permissões r--
	240
	É o tamanho do arquivo em bytes. Quando o arquivo é muito grande, pode ser usada a opção ‘-h’ no comando ‘ls’, que mostrará o tamanho em unidades de mais fácil visualização (KB, MB, GB)
	May 20
15:37
	Data e hora da última modificação do arquivo ou diretório
	arquivo1
	O nome do arquivo ou diretório
Comandos para alterar as permissões de Arquivos e Diretórios
No exemplo anterior, vimos que o arquivo de nome ‘arquivo1’ pertence ao grupo ‘adm’, cujas permissões são r--. Na prática, os usuários que pertencem ao grupo ‘adm’ poderão apenas ler esse arquivo.
Como alterar o proprietário, o grupo e as permissões de um arquivo?
chgrp grupo arquivo
O comando chgrp (change group – mudar grupo) permite alterar o grupo de um arquivo ou diretório.
Antes
Exemplo:
Muda o grupo do ‘arquivo1’ para ‘alunos’.
Depois
O comando também permite a mudança sobre vários arquivos ou diretórios de uma só vez:
O comando anterior mudou o grupo dos 3 arquivos para ‘alunos’.
Mais adiante, veremos como criar e gerenciar grupos de usuários.
chown usuário arquivo
Com o comando ‘chown’ (change owner – mudar proprietário), modificamos o proprietário de um arquivo ou diretório. Exemplo:
Assim como o ‘chgrp’, o ‘chown’ também permite mudar o proprietário de diversos arquivos de uma só vez.
 
Uma vantagem do ‘chown’ é que ele permite mudar, também, o grupo no mesmo comando.
Nesse exemplo, o proprietário será alterado para ‘bob’ e o grupo para ‘alunos’, ao mesmo tempo.
chmod permissões arquivo
O comando ‘chmod’ permite modificar as permissões de um arquivo ou diretório. Sua sintaxe é simples: O primeiro argumento representa as novas permissões, e o segundo é o nome do arquivo ou diretório sobre o qual a mudança será aplicada.
Assim como o ‘chown’ e o ‘chgrp’, o ‘chmod’ também permite aplicar as mudanças sobre mais de um arquivo ou diretório de uma só vez, bastando incluir os nomes como argumentos adicionais.
Para as permissões, existem duas formas de representação: a numérica e a simbólica.
A representação numérica, ou representação OCTAL, é composta por três dígitos numéricos (ABC): o primeiro (A) para as permissões do proprietário, o segundo (B) para grupo e o terceiro (C) para outros.
Cada dígito vai assumir um valor de 0 a 7, num total de 8 combinações possíveis para as três permissões que ele representa. Exemplo:
O dígito 4 representa permissão de leitura, apenas.
Se usarmos o comando: $ chmod 444 arquivo
As permissões do ‘arquivo’ serão: r--r--r--
Proprietário, grupo e outros têm apenas permissão para leitura.
Mas não é necessário decorar o significado de cada uma das 8 combinações possíveis, pois sua dedução é uma simples soma binária. As permissões possíveis são: R, W e X – sempre nessa ordem. 
Cada uma dessas permissões pode ser ligada ou desligada, representada como um bit de valor ‘1’ ou ‘0’.
· O bit correspondente ao X terá valor 1.
· O bit correspondente ao W terá valor 2.
· O bit correspondente ao R terá valor 4.
	r
	w
	x
	4
	2
	1
A conta é simples: Quando a permissão está ligada, soma-se seu valor. As combinações possíveis são:
· ---	0	nenhuma permissão
· --x	1	somente execução (1)
· -w-	2	somente escrita (2)
· -wx	3	escrita + execução (2+1)
· r--	4	somente leitura (4)
· r-x	5	leitura + execução (4+1)
· rw	6	leitura + escrita (4+2)
· rwx	7	todas as permissões (4+2+1)
Exemplo:
$ chmod 740 arquivo
As permissões do ‘arquivo’ serão alteradas para:
rwxr-----	O proprietário tem todas as permissões; grupo, somente de leitura; e os demais usuários, nenhuma permissão.
Ao usar a representação numérica, sempre temos que explicitar todas as permissões. Se quisermos trocar apenas parte das permissões, sem modificar outras, será necessário usar o comando ‘chmod’ com a representação simbólica. Na representação simbólica, montamos uma ‘frase’ contendo as alterações que desejamos fazer, e veremos que é possível modificar apenas parte das permissões. O formato usa uma combinação de:
· Qualificador: ‘u’ (proprietário), ‘g’ (grupo), ‘o’ (outros) e ‘a’ (todos).
· Ações: ‘+’ (incluir a permissão), ‘-‘ (retirar a permissão) e ‘=’ (substituir as permissões).
· Permissões: ‘r’, ‘w’ e ‘x’.
Várias permissões podem ser declaradas ao mesmo tempo, separadas por vírgulas. Exemplo:
$ chmod u+rx arquivo
Nesse exemplo, serão incluídas (+) as permissões ‘r’ e ‘x’ para o proprietário (‘u’). Se uma ou ambas já existiam, permanecem. Note que nada será feito quanto à permissão de escrita (w). Se o proprietário já a tinha, continuará com ela. Se não, continuará sem ela. Repare também que apenas as permissões do proprietário serão afetadas.
$ chmod u+rx,g+r,o-r arquivo
Nesse exemplo, serão incluídas (+) as permissões ‘r’ e ‘x’ para o proprietário. Será incluída(+) a permissão ‘r’ para o grupo e será removida (-) a permissão ‘r’ dos outros.
$ chmod a=rw arquivo
Nesse exemplo, o qualificador ‘a’ (all) fará com que as permissões sejam aplicadas, ao mesmo tempo, para proprietário, grupo e outros. A ação ‘=’ indica que as permissões deverão ser conforme o indicado. Ou seja, apenas ‘r’ e ‘w’. Como o ‘x’ não foi incluído, ele será retirado das permissões onde existir. As permissões do ‘arquivo’ serão, independentemente dos valores iniciais: rw-rw-rw-
Repare que, nos dois primeiros exemplos, não é possível afirmar quais serão as permissões do arquivo após usar o comando ‘chmod’, porque apenas parte delas foi modificada e o resultado final depende das situações iniciais, que não foram apresentadas. Exemplo:
Situação inicial:
r-xr--r--
Comando:
chmod u+w,g+x,o-r
Situação final:
rwxr-x---
Foi incluída (+) a permissão ‘w’ para o proprietário, incluída (+) a ‘x’ para o grupo e excluída (-) a ‘r’ para os demais.
Copiando arquivos
Para copiar arquivos no Linux, usamos o comando ‘cp’. Sua sintaxe é simples:
$ cp origem destino
O primeiro argumento é o nome do arquivo que iremos copiar. Pode ser indicado apenas o nome, se ele estiver no diretório atual. Caso não esteja, deve ser indicado com o caminho completo. O destino é o nome para o qual será copiado. Observe que:
· O destino pode ser um caminho completo, permitindo direcionar a cópia para qualquer diretório.
· Se o destino for apenas um nome, sem caminho completo, o arquivo será copiado com esse nome no diretório atual.
· No destino pode ser indicado um nome diferente do original para a cópia.
· Se o destino for o nome de um diretório existente, o arquivo será copiado para dentro desse diretório com o mesmo nome original.
Exemplo:
$ cp arquivo1 arquivo2
Nesse exemplo, nenhum dos argumentos é um caminho completo, portanto, origem e destino serão tratados no diretório atual. O ‘arquivo1’ será copiado como ‘arquivo2’.
Repare que o ‘arquivo2’ possuirá conteúdo idêntico ao do ‘arquivo1’, afinal foi feita uma cópia, mas são arquivos independentes. Alterações em um não se aplicarão ao outro.
$ cp /etc/resolv.conf /tmp
O arquivo ‘/etc/resolv.conf’ (arquivo ‘resolv.conf’ no diretório ‘/etc’) será copiado para ‘/tmp’. Como ‘/tmp’ é um diretório, a cópia terá o mesmo nome original. Ou seja, o caminho completo da cópia será ‘/tmp/resolv.conf’. Repare o próximo exemplo: 
$ cp /etc/resolv.conf /tmp/qualquer
Supondo que não exista um diretório de nome ‘qualquer’ dentro de ‘/tmp’, o arquivo ‘/etc/resolv.conf’ será copiado para o ‘/tmp’ com o nome de ‘qualquer’.
Se ‘/tmp/qualquer’ existir como diretório, a cópia segue o exemplo anterior, e o caminho completo da cópia será ‘/tmp/qualquer/resolv.conf’.
Movendo arquivos
No Linux, o comando ‘mv’ é usado para mover e renomear arquivos. Sua sintaxe é semelhante à do comando ‘cp’:
$ mv arquivo1 arquivo2
Nesse exemplo, o ‘arquivo1’ será simplesmente renomeado para ‘arquivo2’. Como nenhum caminho foi indicado, toda a operação se restringe ao diretório atual. Se for usado o comando:
$ mv arquivo1 /tmp/arquivo2
Nesse caso, o ‘arquivo1’ será movido para o diretório /tmp e será renomeado para ‘arquivo2’.
Suponha, porém, que ‘/tmp/arquivo2’ seja um diretório já existente. O ‘arquivo1’ será movido para esse diretório e seu nome original será mantido. No final, o caminho completo dele será ‘/tmp/arquivo2/arquivo1’.
Links simbólicos
Um recurso importante e muito útil do Linux é o link simbólico, um tipo especial de arquivo que aponta para outro arquivo ou diretório. Todas as operações em um link, de leitura ou escrita, serão realizadas no seu alvo.
Existe outro tipo de link, o hard link, porém, nesse texto abordaremos somente os links simbólicos, também chamados de soft links.
Identificar um link é fácil com o comando ‘ls –l’. A primeira letra de cada linha, que indica o tipo do arquivo, será ‘l’ de link.
No exemplo, temos a linha que corresponde a um link de nome ‘nome_do_link’. Repare que o ‘ls -l’ já informa o alvo do link, nesse caso o ‘arquivo1’. Ou seja:
· Ao ler o conteúdo do link, leremos o conteúdo de ‘arquivo1’.
· Ao abrir um editor e alterar o conteúdo do link, alteraremos o conteúdo de ‘arquivo1’.
Importante ressaltar que se o link simbólico for apagado, seu alvo (‘arquivo1’) não será afetado.
O link também pode apontar para diretórios, como no exemplo a seguir:
Temos um link de nome ‘temporario’ apontando para o diretório ‘/tmp’. Ao entrar nesse diretório com o comando ‘cd’, visualizamos o conteúdo do diretório ‘/tmp’. Qualquer alteração que fizermos, criar, apagar ou modificar arquivos será realizada no diretório ‘/tmp’, que é para onde o link aponta. Para criar um link, usamos o comando ‘ln’ com a opção ‘-s’.
$ ln -s ALVO LINK
Exemplo:
$ ln -s arquivo1 arquivo2
Será criado um link com nome ‘arquivo2’ apontando para ‘arquivo1’.
$ ln -s /etc/resolv.conf arquivo3
Será criado um link com nome ‘arquivo3’ apontando para o alvo ‘/etc/resolv.conf’. O comando ‘ls -l ‘mostrará a linha:
lrwxrwxrwx 1 bob bob 16 May 24 15:25 arquivo3 -> /etc/resolv.conf
A sintaxe do comando é a mesma para criar links de diretórios.
Módulo 3
Descrever a organização de usuários e grupos e os principais comandos para o seu gerenciamento
O Linux é um sistema operacional multiusuário, capaz de gerenciar diversos usuários do sistema, garantindo sua independência e proteção de dados. Como vimos no módulo anterior, o gerenciamento de segurança é vinculado aos usuários e pelas permissões de acesso a arquivos e diretórios.
Neste módulo, veremos como o Linux trata seus usuários e grupos e os principais comandos para esse gerenciamento.
Gerenciamento de Usuários e Grupos
No Linux, cada usuário é representado por um nome, também chamado de username (nome de usuário). Em geral, o username é uma palavra de até 31 caracteres alfanuméricos, sem espaços e cujo primeiro caractere deve ser uma letra. Ele será o identificador do usuário, usado para acessar o sistema, definir permissões etc.
O username é definido por quem está criando o usuário e deve ser único naquele sistema. Em geral, não são admitidas letras maiúsculas no username.
Por razões práticas, o sistema trata internamente os usuários por meio de um número. Por isso, sempre que um usuário é criado, o sistema, automaticamente, atribui a ele um número, conhecido como UID (User ID – Identificador de usuário).
Um comando que permite descobrir o UID de um usuário é o ‘id’.
A primeira parte da resposta, em destaque, nos mostra que o UID do usuário ‘bob’ é ‘1000’.
A maneira como o Linux organiza a distribuição de números UID pode variar entre distribuições, já que esse comportamento é configurável. Em geral, os números mais baixos são reservados para usuários do sistema que já vêm pré-configurados.
Aos usuários “comuns”, criados posteriormente, são reservados os números mais altos, por exemplo, acima de ‘1000’. Portanto, nesse caso, o primeiro usuário criado receberia o UID ‘1000’; o segundo, ‘1001’.
Atenção: A numeração de UID não precisa ser contínua, mas é obrigatório que:
· Não pode haver repetição, ou seja, cada usuário tem um UID exclusivo.
· O UID zero é exclusivo do usuário ‘root’.
A principal vantagem em usar o UID está na simplicidade para fazer referência a um usuário usando um número inteiro, de tamanho fixo e reduzido (por exemplo, 32 bits), e não como uma sequência de caracteres de tamanho variável.
Quando um usuário é criado no Linux, ele é registrado no arquivo ‘/etc/passwd’, que funciona como um banco de dados dos usuários. Como quase tudo no Linux, é um arquivo texto, podendo ser visualizado com um editor de texto comum.
Atenção: Apesar de poder ser alterado manualmente com o editor, não é recomendável fazê-lo, já que um pequeno descuido pode criar sérios problemas ao sistema, seus usuários e programas.
A estrutura do arquivo ‘/etc/passwd’ é bem simples, com uma linha por usuário, onde são registradas as informações mais básicas de cada um, como username, UID, diretório HOME etc.
 
Repare na primeira coluna o username do usuário e, naterceira, o UID.
Antes, a senha também era guardada nesse arquivo, devidamente cifrada. No entanto, esse mecanismo passou a ser considerado frágil e um novo foi criado, utilizando outro arquivo para armazenar a senha, o ‘/etc/shadow’.  
Uma linha do arquivo /etc/shadow referente ao usuário bob.
A segunda coluna contém a senha “cifrada” do usuário. Na realidade, o que está gravado nesse arquivo é um hash da senha do usuário. Esse mecanismo dificulta a obtenção da senha original, mesmo que o servidor seja invadido e esse arquivo copiado.
Trocando a senha do Usuário
O comando ‘passwd’ permite mudar a senha.
Atenção: Os asteriscos (*) não são exibidos pelo comando ‘passwd’, foram incluídos aqui para representar a digitação das senhas.
Inicialmente é necessário digitar a senha atual, garantindo que a operação está sendo feita pelo próprio usuário. Depois, a nova senha deve ser digitada duas vezes para confirmação.
O usuário ‘root’ pode usar o comando ‘passwd’ para trocar a senha de outro usuário, bastando indicar o username como argumento. Por exemplo:
$ passwd joe
Criando Usuários
Para criar um usuário no Linux, podemos usar o comando ‘adduser’, que é interativo e simples. Como deve ser executado pelo usuário ‘root’, é necessário o ‘sudo’.
$ sudo adduser USERNAME
No argumento deve ser indicado o username do novo usuário, muitas vezes chamado de “login do usuário”. O comando pedirá uma senha inicial para o novo usuário e fará algumas perguntas, opcionais.
Ao término, pede-se para confirmar a efetiva criação da conta. Novamente, os asteriscos (*) não são exibidos na tela.
A seguir vamos entender como é feita a criação de grupos.
Grupos
O Linux permite a criação de grupos de usuários, facilitando bastante a administração do sistema. Como vimos anteriormente, as permissões de arquivos permitirão realizar atribuições a vários usuários de uma só vez. Assim como os usuários, os grupos também possuem números de identificação, o GID (Group ID).
Atenção: É importante ressaltar que UID e GID seguem numerações independentes, então será muito comum ver um mesmo número atribuído ao UID de um usuário e ao GID de um grupo. Isso não é um problema, pois são conjuntos distintos.
Uma dúvida comum é se todo usuário é obrigado a pertencer a pelo menos um grupo. A resposta curta é SIM, mas precisa ser explicada: do ponto de vista do usuário, existem o grupo primário e os grupos secundários.
Grupo Primário
Todo usuário deve pertencer a um grupo primário, apenas um. Este é configurado diretamente na linha do usuário no arquivo ‘/etc/passwd’. Quando um usuário cria um arquivo ou diretório, o seu grupo primário é atribuído inicialmente como o grupo desse novo arquivo ou diretório.
Geralmente, os comandos para criação de usuário vêm previamente configurados para criar um grupo exclusivo para cada novo usuário, com o mesmo username do usuário e atribuído como grupo primário para ele. Por isso, ao criar a conta ‘bob’, veremos que também foi criado um grupo bob. 
Anteriormente, vimos o comando ‘id’, que traz informações sobre o usuário, como o seu UID.
A segunda informação que ele nos traz é exatamente o grupo primário da conta ‘bob’: um grupo também de nome ‘bob’ e com GID ‘1000’. Observe que, nesse exemplo, o UID do usuário bob e o GID do grupo ‘bob’ têm o mesmo número, o que foi uma coincidência.
Grupos Secundários
Os grupos adicionais aos quais um usuário pertence são chamados de grupos secundários. Enquanto o primário é definido quando a conta de um usuário é criada, a participação em grupos secundários é definida posteriormente, depois que a conta do usuário já foi criada.
Nenhum usuário é obrigado a pertencer a grupos secundários.
Vamos entender agora os principais comandos para o gerenciamento de grupos?
 Clique nas barras para ver as informações.
Criando Grupos
Toda manipulação de grupos só pode ser feita pelo usuário ‘root’, então não se esqueça de usar o comando ‘sudo’.
Passando no argumento o nome do grupo:
O grupo ‘aluno’ será criado ‘vazio’, ou seja, sem usuários membros.
Manipulando os Grupos de Usuários
É possível mudar o grupo primário de um usuário, mas cuidado para não criar problemas de segurança no seu sistema.
Trocará o grupo primário de bob para ‘aluno’.
Para adicionar um Usuário a um Grupo Secundário, use o Comando
  
Repare nas opções ‘–G’ (maiúsculo), que indica grupo secundário, e ‘-a’ para incluir (append) o grupo.
O usuário ‘bob’ será incluído no grupo secundário ‘aluno’. 
Também é possível incluir o usuário em diversos grupos de uma só vez (separados por vírgula e sem espaços):
$ sudo usermod –a –G aluno,professor bob
O usuário ‘bob’ será incluído nos grupos secundários ‘aluno’ e ‘professor’.
Para retirar um Usuário de um Grupo Secundário
$ sudo gpasswd –d LOGIN GRUPO
Exemplo:
$ sudo gpasswd –d bob aluno
Para excluir um Grupo
$ sudo groupdel GRUPO
Neste exemplo, estamos apagando o grupo ‘aluno’:
$ sudo groupdel aluno
Obtendo informações sobre Grupos
groups [USERNAME]
O comando ‘groups’ permite obter a lista de grupos aos quais um usuário indicado no argumento pertence. Se o argumento de username for omitido, a informação prestada será sobre o usuário que executou o comando.
members GRUPO
O comando ‘members’ exibe a lista de usuários que pertencem a um grupo.
$ members alunos
alice bob joe
O comando ‘members’ não é instalado por padrão em algumas distribuições Linux. Verifique na documentação como instalá-lo manualmente.
O arquivo /etc/group
É onde o Linux guarda as informações dos grupos existentes e de seus membros. Assim como o ‘passwd’ e ‘shadow’, também usa uma linha para cada grupo, iniciando com o nome do mesmo.
alunos:x:1004:alice,bob,joe
A linha em destaque representa o grupo ‘alunos’, cujo GID é ‘1004’ e tem como membros: ‘alice’, ‘bob’ e ‘joe’.
Módulo 4
Reconhecer o funcionamento do servidor Web Apache
A administração de serviços no Linux requer o conhecimento do terminal de comandos e de operações com arquivos e usuários. Agora que já temos uma base sobre esses assuntos, estamos prontos para prosseguir e compreender o funcionamento, a configuração básica, a organização de arquivos e a administração do servidor Web Apache.
Servidor Web Apache
Dentre os programas mais utilizados em servidores da internet em todo o mundo está o Apache. Para começar este tópico, precisamos entender o que é o Apache e o papel que ele desempenha em servidores.
O Apache é um servidor HTTP ou, como muitos chamam, um servidor Web. Ele é responsável por receber e processar requisições enviadas por clientes HTTP. Quando acessamos um site, do outro lado estamos sendo atendidos por um servidor HTTP.
Servidor HTTP: São executados em processos do tipo background, ou seja, sem intervenção manual de um administrador para responder às solicitações recebidas.
O Apache se destaca por ser um software de alta confiabilidade, gratuito e de código-fonte aberto, permitindo que qualquer pessoa possa modificá-lo para uso pessoal ou contribuir com melhorias para a comunidade de usuários.
O Apache é mantido pela The Apache Software Foundation e um grande número de programadores contribui com o seu desenvolvimento. Como possui diversos módulos opcionais para variadas funcionalidades, tem grande versatilidade.
Atenção: É importante frisar que diferentes distribuições Linux utilizam distintos esquemas de organização das configurações do Apache. Neste tema, abordaremos a organização usada nas distribuições baseadas no Debian, como a Ubuntu Linux.
Mais importante do que entender a organização é compreender a lógica de administração. Assim, você saberá do que precisa quando se deparar com uma distribuição que utiliza um esquema diferente.
Instalação do Apache
Geralmente, o Apache pode ser instalado por dois caminhos:
	Caminho 1
	Baixando seu código-fonte e compilando-o. Apesar de existir farta documentação, é uma atividade mais complexa e exige a instalação prévia de bibliotecas, compiladores etc. Em geral, é a opção para usuários avançados e em casos mais específicos
	Caminho 2
	O segundo caminho, mais simples,é a instalação por meio de pacotes fornecidos pelas principais distribuições Linux. Os pacotes já trazem o programa pronto para executar, além de bibliotecas e outras dependências. As rotinas de atualização também são facilitadas, assim como a instalação de módulos opcionais
A instalação do Apache na distribuição Ubuntu Linux é feita com o comando:
$ sudo apt install apache2
O ‘apt’ é o programa gerenciador de pacotes usado pelo Ubuntu. Ele irá obter na internet os pacotes do Apache e fará sua instalação. Após isso, o Apache estará configurado com uma página inicial de demonstração, que pode ser acessada a partir de outro computador.
Usando o comando ‘ip addr’, obtenha o endereço IP do servidor. Em outra máquina, na mesma rede, abra um navegador (Internet Explorer, Firefox, Chrome) e digite o endereço do servidor. Exemplo: http://192.168.1.70
Antes, era comum escrever toda a configuração do Apache em um único arquivo, como o ‘/etc/httpd.conf’.
O problema dessa abordagem é que, quanto mais sites eram criados no servidor, maior ficava esse arquivo, até ser impraticável administrá-lo. Para piorar, aumentavam as chances de se cometer um erro acidental na configuração, afetando todo o servidor.
Não era incomum o servidor sair do ar, e consequentemente todos os sites hospedados, por um erro acidental, muitas vezes difícil de ser diagnosticado.
Para facilitar a administração, a configuração do Apache passou a ser modularizada, composta por diversos arquivos, organizados por tipo de configuração, em diretórios específicos.
Uma árvore de diretórios de configuração típica está representada a seguir:
Vamos entender como funciona?
	Arquivos
	No diretório ‘/etc/apache2’ estão localizados arquivos com configurações globais do Apache. Entre eles:
· ‘ports.conf’, em que são declaradas as portas TCP que o Apache abre para receber solicitações – Por padrão, 80 para HTTP e 443 para HTTPS.
· ‘apache2.conf’, o arquivo principal de configuração. Mas, nenhuma configuração deve ser incluída aqui. Por padrão, esse arquivo contém instruções para que as configurações sejam obtidas nos demais arquivos e diretórios.
	Divisão dos diretórios em grupos
	Dentro de ‘/etc/apache2’ há seis diretórios, divididos em três grupos:
· conf - Para configurações gerais do Apache.
· mods - Para configuração de módulos.
· sites - Para configuração de sites
	Leitura dos arquivos
	Para cada um desses grupos, há um diretório ‘available’ (disponível) e um ‘enabled’ (habilitado). Quando o Apache é iniciado, ele lê todos os arquivos dos diretórios ‘enabled’:
· /etc/apache2/conf-enabled
· /etc/apache2/mods-enabled
· /etc/apache2/sites-enabled
Cada um dos arquivos presentes nesses diretórios será lido e sua configuração carregada pelo Apache. Se listarmos, porém, o conteúdo de qualquer um desses diretórios, veremos que todos os seus arquivos são, na verdade, links.
Observe o ‘l’ no início de cada linha, indicando que se trata de links simbólicos.
Todos os links no diretório ‘conf-enabled’ apontam para arquivos que estão no respectivo diretório ‘conf-available’.
Mas por que essa organização?
Para permitir que as configurações possam ser escritas livremente e só ativadas quando desejado. Um arquivo nos diretórios ‘available’ não será lido pelo Apache. Isso permite que escrevamos uma configuração, mas só a ative posteriormente, criando o link em ‘enabled’ para esse arquivo.
Assim, o Apache pode trazer diversas configurações de módulos opcionais que permanecerão inativas até que o administrador as ative manualmente. Isso vale para as configurações de site. É possível retirar um site do ar meramente apagando o ‘link’ da configuração deste, não sendo necessário editar arquivos com outras configurações.
Nos diretórios ‘available’ estarão os arquivos texto com as configurações, ativas ou não. Nos diretórios ‘enabled’ existirão apenas links para as configurações ativas.
Exemplo: O arquivo ‘/etc/apache2/mods-available/ssl.conf’ possui configurações para ativar o protocolo criptografado HTTPS. Se o seu servidor não vai utilizar esse recurso, não há necessidade de ter esse módulo habilitado. Por outro lado, para ativar o HTTPS, basta criar o link no diretório ‘enabled’ e o recurso estará disponível para uso.
Importante: O nome dos arquivos de configuração deve terminar com ‘.conf’.
Ativando e desativando Módulos, Configurações e Sites
Sabemos que para ativar as configurações devem ser criados links nos diretórios ‘enabled’ apontando para arquivos no diretório ‘available’. No entanto, o Apache traz comandos que facilitam essa tarefa:
a2enconf e a2disconf
O comando ‘a2enconf’ habilita (enable) as configurações, enquanto o ‘a2disconf’ as desabilita (disable). Exemplo de uso: 
$ sudo a2enconf charset
O nome da configuração é passado no argumento, e a terminação ‘.conf’ dos arquivos pode ser omitida. Nesse exemplo, foi ativada a configuração ‘charset’. O programa criou o link: 
‘/etc/apache2/conf-enabled/charset.conf’
apontando para
‘/etc/apache2/conf-available/charset.conf’
Os comandos para habilitar e desabilitar módulos e sites são semelhantes.
a2enmod e a2dismod
O comando ‘a2enmod’ habilita módulos opcionais do Apache, enquanto o ‘a2dismod’ desabilita.
a2ensite e a2dissite
O comando ‘a2ensite’ habilita sites, enquanto o ‘a2dissite’ desabilita.
Após qualquer alteração nas configurações, é necessário avisar ao Apache para que ele as releia ou reinicie o processo.
Para as tarefas de controle do processo do Apache existe o comando ‘apache2ctl’, que oferece diversas opções. Entre elas:
	$ apache2ctl start
	Inicia o processo do Apache, retornando erro se o processo já estiver executando
	$ apache2ctl configtest
	Executa uma análise dos arquivos de configuração do Apache em busca de erros de sintaxe, sem interferir com o processo em execução. Deve-se observar que nem todo erro será detectável por esse teste
	$ apache2ctl stop
	Encerra o processo do Apache. Nenhuma nova requisição será recebida e os usuários receberão um aviso do tipo “servidor inacessível”
	$ apache2ctl restart
	Encerra e reinicia o processo do Apache. Não deve ser usado apenas para carregar novas configurações, pois as requisições em andamento serão interrompidas imediatamente. Deve-se usar com cuidado, já que eventuais erros de configuração poderão impedir o processo de reiniciar, deixando-o parado
	$ apache2ctl graceful
	Envia um sinal para o Apache reiniciar, relendo os arquivos de configuração, porém sem interromper as requisições em andamento. Se o processo não estava em execução, ele é iniciado. Também é possível que erros na configuração impeçam o processo de reiniciar, deixando-o parado
	$ apache2ctl status
	Exibe informações sobre o processo em execução do Apache. Há também o argumento ‘fullstatus’, com informações detalhadas sobre as requisições sendo atendidas (requer o módulo ‘mod_status’ habilitado)
Como já vimos, quando o Apache é instalado é feita uma configuração inicial com uma página de teste. O nome do arquivo deste site pode variar dependendo da distribuição Linux.
Nas distribuições Debian e Ubuntu, esse arquivo é o /etc/apache2/sites-enables/000-default.conf e seu conteúdo é reproduzido a seguir:
O arquivo parece grande, mas repare que muitas linhas começam com o caractere ‘#’. Toda linha iniciada com o ‘#’ é considerada comentário e não é lida pelo Apache. As linhas em branco também são ignoradas.
Atenção: A maioria dos arquivos de configuração no Linux usa essa mesma lógica, assim, é fácil inserir textos, comentários e observações para serem lidos por pessoas e não pela máquina.
Portanto, desse arquivo, o que será efetivamente lido pelo Apache é somente isso:
Examinando o Arquivo de Configuração
Antes de analisar o significado de cada uma dessas linhas, precisamos ter em mente qual é o objetivo dessa configuração: trata-se de uma configuração inicial, com uma página simples de demonstração, a única presente no servidor.
Em um servidor com vários sites, existirão vários arquivos de configuração semelhantes a esse, um para cada site.
	<VirtualHost*:80>
	A diretiva ‘<VirtualHost>’ permite configurar os endereços e as portas em que o site responde. 
Um servidor Linux pode ser configurado com diversos endereços IP.  O Apache permite que determinados sites respondam em somente um desses endereços. É possível, por exemplo, designar um endereço IP para cada site. A desvantagem desse tipo de configuração é que você precisará de novos endereços para cada novo site, o que nem sempre é possível. 
A configuração mais usada hoje consiste em um único endereço IP sendo usado para atender a diversos sites. 
Nessa linha de ‘<VirtualHost>’, o ‘*:80’ significa que o site responderá em todos os endereços IP do servidor e na porta 80. 
Lembre-se que a porta 80 é a padrão (well known port) para o protocolo HTTP, assim como a porta 443 é a padrão para o protocolo HTTPS. A princípio, qualquer porta pode ser utilizada pelo Apache, se já não estiver em uso por outro processo. Mas será necessário divulgar, além do endereço, o número da porta para compor a URL.
 Por exemplo, se for usada a porta 8000, a URL será: ‘http://www.meusite.com:8000’
	ServerAdmin webmaster@localhost
	Informação que será passada a um cliente em caso de erro no acesso ao site, contendo um e-mail para contato
	DocumentRoot /var/www/html
	Uma das configurações mais importantes de um site é onde está seu conteúdo. Nesse caso, o diretório ‘/var/www/html’
	ErrorLog /var/log/apache/error.log
	A diretiva ‘ErrorLog’ define em que arquivo serão gravados os registros (logs) de erro. A cada erro ocorrido, uma nova linha é gerada nesse arquivo, com as informações sobre ele, além de data e hora
	CustomLog /var/log/apache/access.log combined
	A diretiva ‘CustomLog’ define em que arquivo serão gravados os registros de acesso aos sites. O parâmetro ‘combined’ define um formato predeterminado para esses registro
A diretiva DirectoryIndex
O acesso a um site é sempre feito por meio de uma URL (Uniform Resource Locator) digitada no navegador. A URL é, em resumo, uma frase que contém todas as informações para localizar um recurso como site ou arquivo. Exemplo:
http://site-exemplo.com/info.html
Nessa URL constam o protocolo (HTTP), o endereço do site (‘site-exemplo.com’) e o nome do recurso procurado (‘info.html’). O cliente (navegador) se conecta ao servidor do site e requisita o recurso ‘info.html’. Nesse exemplo, o servidor Apache buscaria o arquivo ‘info.html’ no diretório do site e o enviaria ao cliente.
Muitas vezes, porém, usamos uma URL sem indicar um recurso, como em http://site-exemplo.com. Nesses casos, como o Apache sabe que arquivo buscar?
Para esta função, há a diretiva ‘DirectoryIndex’, que permite definir um ou mais arquivos que serão procurados pelo Apache, em ordem. Exemplo:
• DirectoryIndex principal.html
Define o nome do arquivo a ser procurado.
• DirectoryIndex principal.html opcional.html
O Apache procurará o arquivo ‘principal.html’. Se não encontrar, irá procurar o ‘opcional.html’.
Na ausência dessa diretiva, o Apache assume como padrão o arquivo ‘index.html’.
Configurando dois Sites no mesmo Servidor
Atualmente, é muito comum um servidor hospedar diversos sites independentes utilizando somente um endereço IP. A diretiva ‘Servername’ permite determinar na configuração do site o nome (domínio) pelo qual ele responderá.
Mas é importante lembrar que o cliente deverá conseguir resolver esse nome, assim, não basta configurar o Apache para responder por ele, também é preciso registrá-lo em um servidor DNS.
Vamos simular a configuração de dois sites em um servidor Apache?
Na tabela a seguir, relacionaremos todas as informações necessárias para a configuração:
	
	Site A
	Site B
	Nome (domínio do site)
	www.site-teste1.com
	www.site-teste2.com
	Diretório com o conteúdo do site
	/var/www/site-teste1
	/var/www/site-teste2
	Arquivo “principal” (DirectoryIndex)
	index.html
	default.htm
	Arquivo de configuração (/etc/apache2/sites-available)
	site-teste1.conf
	site-teste2.conf
Criando os Diretórios para os Sites
Também é necessário colocar o conteúdo. Nesse exemplo, copiaremos o arquivo de demonstração (‘/var/www/html/index.html’) para este fim.
· $ sudo mkdir /var/www/site-teste1
· $ sudo cp /var/www/html/index.html /var/www/site-teste1
· $ sudo mkdir /var/www/site-teste2
· $ sudo cp /var/www/html/index.html /var/www/site-teste2/default.htm
Repare que, no segundo exemplo, o arquivo foi copiado mudando o nome para ‘default.htm’. 
Lembre-se: O nome e o caminho do arquivo HTML de demonstração, que usamos como base, variam conforme a distribuição Linux. Qualquer arquivo HTML pode ser usado como conteúdo nesse teste.
Importante: O Apache é executado por um usuário com poucos privilégios. O nome do usuário varia com a distribuição Linux: ‘www-data’, ‘apache’ etc. É importante que os arquivos nos diretórios dos sites (‘/var/www/site-teste1’ etc.) possam ser lidos pelo usuário do Apache. Uma opção é garantir que os arquivos possuam permissão de leitura para outros e os diretórios, permissões de leitura ‘r’ e de acesso ‘x’ também para outros.
Criando os Arquivos de Configuração para os Sites
Usando um editor de textos, criamos o arquivo ‘/etc/apache2/sites-available/site-teste1.conf’ e o preenchemos com o seguinte conteúdo:
Do mesmo modo, criamos o arquivo /etc/apache2/sites-available/site-teste2.conf e o preenchemos:
Habilitando os Sites
$ sudo a2ensite site-teste1
$ sudo a2ensite site-teste2
Enviando um sinal para o Apache reler as configurações
$ sudo apache2ctl graceful
É possível acessar os novos sites a partir de um navegador, simulando o acesso de um usuário comum. Isso poderá ser feito a partir de um computador executando o sistema operacional Windows.
No entanto, é preciso que o navegador consiga resolver os nomes dos sites para o endereço do servidor Apache. Como os domínios dos sites que criamos não existem na internet, será necessário “enganar” o Windows.
O procedimento a seguir deve ser feito com cautela, pois pode causar danos ao Windows. Será necessário que o usuário tenha permissão de administrador do sistema.
	Execute o editor Notepad como administrador
	»
	Abra o arquivo
C:\
Windows\
System32\
Drivers\
Etc\
HOSTS
	»
	Inclua as seguintes linhas, trocando o endereço IP pelo endereço IP do servidor Apache que você obteve com o comando ip addr
192.168.1.70	www.site-teste1.com
192.168.1.70	www.site-teste2.com
Salve o arquivo. Não se esqueça de desfazer essa configuração após terminar seus testes.
Essa alteração fará com que o Windows reconheça os endereços dos novos sites, mesmo que eles não existam na internet.
No seu computador com Windows, abra um navegador de sua preferência. Digite os sites configurados: www.site-teste1.com e www.site-teste2.com.
Os dois sites serão exibidos da mesma maneira, pois o conteúdo é o mesmo, obtido na página de demonstração. Mesmo sem conhecer HTML, edite esses arquivos e faça uma pequena alteração no texto deles. Recarregue as páginas no seu navegador e veja as alterações.
Para praticar 1:
Na configuração dos sites, indicamos arquivos de log em que o Apache incluirá os registros de acessos, um por linha:
· Busque esses arquivos e veja o seu conteúdo. Observe o formato e as informações que ele contém. Você pode usar o comando ‘less ARQUIVO’. 
Para praticar 2:
Vamos acessar um recurso que não existe no servidor e veremos o que acontece:
· No seu navegador, busque um recurso inexistente no site. Por exemplo, digite a URL:
· ‘http://www.site-teste1.com/abc.html’
· Como não existe um recurso com o nome ‘abc.html’, o Apache retornará uma página com o conhecido erro 404 (recurso não encontrado). 
Habilitando o HTTPS no Servidor Apache
Uma limitação do protocolo HTTP é que ele não conta com a criptografia dos dados para tráfegos, sendo possível que um terceiro consiga interceptar as informações transmitidas e até modificá-las. Para resolver essa fragilidade, foi criado o protocolo HTTPS que é, basicamente, o protocolo HTTP com uma camada adicional de criptografia.
Atualmente, é considerado obrigatório que um site utilize o HTTPS setransmite dados pessoais de um usuário, solicita senhas, cartão de crédito etc.
O HTTPS é simples de configurar no Apache, mas pode parecer complicado porque se baseia em certificação digital e são necessárias algumas ações, além da simples configuração de um arquivo.
Em poucas palavras, o certificado digital é como um documento autenticado no cartório, afirmando que você é realmente quem diz ser. O cartório desse exemplo são as autoridades certificadoras (CA).
O processo de obtenção de um certificado deve seguir alguns passos:
1. Criação das chaves criptográficas (pública e privada).
2. Elaboração da requisição de certificado (CSR).
3. Envio da requisição (CSR) a uma autoridade certificadora (CA).
4. Emissão do certificado pela autoridade certificadora (CA).
5. Instalação do certificado digital emitido pela autoridade certificadora (CA). 
É importante lembrar que a maioria das autoridades certificadoras cobra pelo serviço, já que precisa realizar verificações de segurança. O valor varia dependendo do tipo de certificado solicitado e da autoridade certificadora. 
Para praticar 3:
Vamos habilitar o protocolo HTTPS no site ‘www.site-teste1.com’. Nessa atividade, assumiremos o papel da autoridade certificadora, gerando um certificado do tipo self-signed (assinado por mim). Na prática, esse tipo de certificado não é reconhecido por nenhum navegador e sempre será exibido um aviso de segurança. 
Lembre-se de que esse é um procedimento simplificado, pois nosso objetivo é a configuração do Apache. Sempre que for gerar um certificado, leia as instruções da autoridade certificadora escolhida, que costuma disponibilizar procedimentos detalhados.
Para gerar nosso certificado self-signed, usaremos o comando a seguir (tudo em uma única linha):
 Se o comando ‘openssl’ não for encontrado, será necessário instalar esse pacote de software. Verifique a documentação da distribuição Linux que estiver usando. Por exemplo: No Ubuntu Linux, a instalação é feita com o comando:
‘sudo apt install openssl’
O comando ‘openssl’ é uma ferramenta para gerenciamento, entre outras coisas, de chaves criptográficas. Nessa única linha estamos gerando as chaves (criptografia RSA de 2048 bits), preparando a requisição e emitindo um certificado com 365 dias de validade.
Chegou o momento de entrar com os dados do novo certificado:
 
Ao término, dois arquivos são gerados nos caminhos indicados: a chave criptográfica e o certificado digital. Nesse exemplo foram escolhidos os diretórios ‘/etc/ssl/private’ e ‘/etc/ssl/certs’, padrão na distribuição Ubuntu, porém você pode criar outro diretório para esses arquivos.
Atenção: O arquivo site-teste1.key contém a chave privada do seu certificado e deve ser protegido ao máximo, pois um invasor será capaz de decifrar a comunicação do servidor, além de forjar um site com o mesmo domínio. É recomendável que o arquivo possua proprietário e grupo ‘root’ e permissão do tipo ‘400’ ou ‘600’. Sempre confira a segurança das suas chaves privadas! A chave pública está armazenada junto ao certificado digital, e ambos são entregues aos usuários quando se conectam ao servidor.
O próximo passo é configurar o Apache:
· Habilite o módulo de ssl do Apache (SSL é a camada criptográfica usada pelo HTTPS).
$ a2enmod ssl
· Inclua o seguinte conteúdo no final do arquivo de configuração, sem modificar o conteúdo que já existe (/etc/apache2/sites-available/site-teste1.conf).
Repare que é um conjunto de diretivas iguais às já existentes com quatro diferenças: a primeira é a porta 443 na diretiva ‘<VirtualHost>’ – lembrando que o protocolo HTTPS tem porta padrão 443; as outras são as três últimas linhas, onde a diretiva ‘SSLEngine’ ativa o uso da camada SSL e as demais indicam onde estão a chave e o certificado digital.
· Carregue a nova configuração no Apache:
$ apache2ctl graceful 
· Acesse o site: ‘https://www.site-teste1.com’. (Atenção ao https)
Uma mensagem de segurança será exibida, afinal o certificado não foi emitido por uma CA conhecida e confiável. Selecione a opção para acessar assim mesmo. Você deverá ver o seu site. A diferença é que agora toda a comunicação ocorreu por um canal criptografado.
· No navegador, peça para exibir o certificado digital do site e veja os dados que foram digitados na requisição:
· Repita o procedimento e habilite o HTTPS também para o domínio ‘www.site-teste2.com’.
Considerações Finais
O Linux sempre se destacou pela diversidade de linguagens e plataformas suportadas, inclusive em ambientes de aplicação Web. Aliado aos custos envolvidos, torna-se uma opção quase natural para muitos administradores de sistemas em soluções privadas ou hospedadas na nuvem.
O servidor Apache é um dos pontos fortes nesse ambiente, por representar uma solução robusta, gratuita e pronta para suportar demandas de todos os tamanhos. Conhecer o Linux e o Apache é um diferencial para qualquer profissional da área de tecnologia da informação, necessário para grande parte das oportunidades de trabalho. A partir do conhecimento apresentado neste tema, você terá condições de se aprofundar, para aprender e dominar novos recursos, das variadas áreas de serviços que o Linux e o Apache podem atender.
Um conselho final que gostaríamos de deixar é: jamais negligencie a segurança. A correria do dia a dia e a busca por soluções rápidas podem propiciar essa negligência, mas é importante estar sempre atento à segurança dos seus sistemas e servidores.

Mais conteúdos dessa disciplina