Arquitetura de Aplicações em Nuvem
Aula 1
Modelos de Arquitetura em Nuvem
Modelos de Arquitetura em Nuvem
Olá, estudante! Nesta videoaula, você irá conhecer os conceitos dos modelos de arquitetura em nuvem. A arquitetura em nuvem refere-se à estrutura organizacional dos componentes de nuvem, que inclui servidores, armazenamento, redes, software e outros elementos necessários para suportar as necessidades de computação de uma aplicação ou empresa.
Esse conteúdo é importante para a sua prática profissional, pois a compreensão dos modelos de arquitetura em nuvem é essencial para profissionais que desejam alinhar as estratégias de TI com os objetivos de negócios, garantindo eficiência, segurança e conformidade em ambientes de nuvem.
Prepare-se para essa jornada de conhecimento! Vamos lá!!!
Ponto de Partida
Olá, estudante! Nesta aula, vamos aprender os modelos de arquitetura para aplicações em nuvem, que, em geral, são complexas, pois envolvem diversos componentes que interagem entre si por meio da Internet. O projeto da arquitetura de uma aplicação afeta diversos aspectos, como seu desempenho, disponibilidade e até mesmo o nível de segurança. Portanto, esse é um tópico relevante e que merece muita atenção. As aplicações em nuvem podem incluir diversos componentes de software, como bancos de dados, serviços web e aplicativos. A especificação da arquitetura consiste em determinar quais são os componentes, como eles devem se comunicar, como podem ser protegidos de ações maliciosas e como garantir que os requisitos da aplicação sejam alcançados.
Além dos conceitos básicos, será discutida a evolução dos modelos de arquitetura, incluindo abordagens como microsserviços, Serverless Computing e Edge Computing.
Bons estudos!
Vamos Começar!
Arquitetura em nuvem
As aplicações em nuvem são sistemas de software complexos, na medida em que implementam diversas funcionalidades e fazem uso de variados serviços que são acessados por meio da Internet. Para lidar com essa complexidade, as aplicações podem ser divididas em módulos (ou componentes) funcionais. Por exemplo, uma aplicação web de comércio eletrônico pode incluir vários módulos, como um responsável pela autenticação de usuários ou outro responsável pela geração de relatórios de vendas. Cada um deles pode ser um software independente, capaz de ser executado, por exemplo, em uma máquina virtual ou em um contêiner de um provedor de nuvem pública.
A definição da arquitetura de uma aplicação consiste em definir quais seriam os seus módulos funcionais e como eles devem interagir entre si (Coulouris et al., 2013). O projeto da arquitetura de aplicações em nuvem é um grande desafio e as decisões nele envolvidas podem influenciar vários aspectos da aplicação, como desempenho, escalabilidade e segurança. A fase de projeto é importante para tentar antecipar a identificação de possíveis problemas como: gargalos de desempenho, ameaças de segurança e impacto da falha de componentes específicos na disponibilidade da aplicação. Componentes críticos podem ser replicados para viabilizar mecanismos de tolerância a falhas e balanceamento de carga.
Existem três modelos básicos para a arquitetura de aplicações distribuídas: arquitetura centralizada, descentralizada e híbrida (Tanenbaum; Steen, 2008). A arquitetura centralizada é o modelo tradicional cliente-servidor. Quando um componente requisita um serviço de outro, o que faz a requisição é o cliente e o que responde é o servidor. As aplicações web representam um exemplo típico do modelo de arquitetura centralizada: o servidor web responde as requisições enviadas por navegadores web.
A arquitetura descentralizada é caracterizada pelo modelo Peer-to-Peer (P2P). Nesse caso, não há distinção entre clientes e servidores, e os componentes de software, por sua vez, podem fazer requisições entre si de forma arbitrária. A Figura 1 ilustra a lógica dos modelos cliente-servidor e P2P.
Uma alternativa interessante ao escolher um modelo centralizado ou descentralizado é a arquitetura híbrida, na qual uma mesma aplicação utiliza os dois modelos, ou seja, algumas funcionalidades da aplicação são implementadas na forma cliente-servidor e outras são implementadas na forma P2P. Assim, pode-se aproveitar o melhor de cada arquitetura.
Apesar da escalabilidade dos sistemas P2P, esse modelo é muito complexo, pois exige a implementação de mecanismos descentralizados. A maior prova dessa complexidade é que a maioria das aplicações que utilizados, como aplicativos de comunicação instantânea e aplicações web, são sistemas cliente-servidor centralizados.
A arquitetura de microsserviços
As principais funcionalidades de uma aplicação são implementadas na camada de processamento, por exemplo, na forma de um Serviço Web (Web Service). Esse serviço é denominado monolítico quando todos os seus módulos funcionais estão implementados em um único componente de software. Se a aplicação possui muitas funcionalidades, esse serviço pode apresentar alguns problemas, como: ocupação de muito espaço de memória; dificuldade de implementar correções e de evolução do software; alto custo de replicação, etc. Diante desses problemas, novas arquiteturas de serviços web foram propostas para melhorar o desempenho e a escalabilidade, assim como facilitar a replicação. Essas abordagens baseiam-se na ideia de dividir o serviço web monolítico em diversos componentes de software independentes. Entre as principais abordagens, podemos citar a arquitetura de microsserviços (Dragoni et al., 2017) e a arquitetura Serverless (Computação sem Servidor) (Baldini et al., 2017), cujo principal exemplo é o modelo Função como Serviço (FaaS – Function as a Service). A Figura 2 ilustra a evolução desses modelos, que se reflete no grau de modularização da aplicação.
No modelo de microsserviços, cada um dos módulos funcionais de uma aplicação monolítica vira um serviço menor e especializado, denominado microsserviço. Cada microsserviço é um componente de software independente. Assim, ele pode ser executado como um serviço web em um contêiner ou máquina virtual. A Figura 3 exemplifica a arquitetura de microsserviços. Nesse caso, uma aplicação é modularizada em N microsserviços independentes, que podem se comunicar com serviços remotos, como outra aplicação, com sistemas legados ou com um banco de dados (DB – Database). A Figura 3 também ilustra o papel de um API Gateway, que é um componente responsável por redirecionar as requisições dos clientes para o microsserviço apropriado de acordo com a funcionalidade requisitada. A arquitetura de microsserviços é adequada para aplicações complexas, por exemplo, uma aplicação para consolidação de transações financeiras com cartão de crédito, pois envolve várias etapas e entidades, como lojas, bancos, adquirentes, etc. Nesse caso, a aplicação pode ser modularizada em vários microsserviços específicos que lidam com cada parte do problema.
De acordo com Dragoni et al., 2017, duas características principais definem um microsserviço: o alto grau de coesão das suas funcionalidades e sua capacidade de responder a requisições. A coesão significa que um microsserviço implementa um conjunto de funcionalidades relacionadas, que dependem umas das outras. A capacidade de responder a requisições implica que os microsserviços, de fato, comportam-se como um servidor, ou seja, provêm algum serviço. Eles podem responder a requisições de clientes ou requisições de outros microsserviços.
A arquitetura de microsserviços representa aplicações distribuídas formadas pela composição de microsserviços independentes. Esse conceito é ilustrado na Figura 4. Nesse caso, temos um serviço monolítico formado por três módulos funcionais. Em uma arquitetura de microsserviços, cada um desses módulos poderia ser implementado como um (micro) serviço independente. Como mostra a figura, apenas alguns dos microsserviços podem ser replicados e cada um deles pode ter seu próprio banco de dados.
A arquitetura de microsserviços traz uma série de vantagens. Ao implementar modificações em um microsserviço, somente esse componente específico precisa ser reiniciado. No serviço monolítico, as modificações em apenas um módulo exigem a reinicialização do serviço como um todo. Como o microsserviço é menor, ele exige menos recursos, o que facilita o uso de contêineres e a replicação. Além disso, cada microsserviço pode ser replicado de forma independente. Assim, aquele que apresenta grande demanda pode ser replicado, enquanto outro, com menos demanda, não tem essa necessidade. No caso de um monolítico, o software como um todo (incluindo todos os seus módulos) tem que ser replicado, a despeito da demanda para cada um de seus módulos funcionais, o que pode resultar em desperdício de recursos.
Siga em Frente...
Aplicações com arquitetura de multicamadas
As aplicações centralizadas apresentam problemas de desempenho e escalabilidade, o que fez com que muitas abordagens surgissem com o intuito de resolvê-los. Uma delas é o modelo cliente-servidor com uma arquitetura em múltiplas camadas (Tanenbaum; Steen, 2008). Nesse modelo de arquitetura, a aplicação é dividida em várias camadas, sendo cada uma delas responsável por um conjunto específico de funcionalidades. Os componentes de uma camada podem interagir com os componentes das camadas vizinhas, além de serem executados em servidores diferentes para melhorar o desempenho. Nesse caso, temos uma separação física entre as camadas.
Em geral, as aplicações multicamadas são divididas em três:
- Camada de interface do usuário (controle da interação com o usuário).
- Camada de processamento (implementação da lógica das principais funcionalidades da aplicação).
- Camada de dados (armazenamento persistente de dados).
Na Figura 5, temos o exemplo de uma aplicação Web baseada na arquitetura em camadas. Nesse caso, o navegador web executa a camada de interface com o usuário; já na camada de processamento, o servidor web responde as requisições de acordo com as regras de negócio. Na camada de dados, um Sistema Gerenciador de Banco de Dados administra o armazenamento das informações do sistema. Em um ambiente de nuvem, podemos usar diversos serviços para hospedar uma aplicação com essa arquitetura. Por exemplo, podemos alocar máquinas virtuais ou contêineres para executar um servidor web (na camada de processamento) e usar serviços de Bancos de Dados em Nuvem para persistências das informações (na camada de dados).
Os provedores de nuvem também oferecem serviços para replicação dinâmica dos componentes. No exemplo ilustrado na Figura 5, há três réplicas do servidor web e duas réplicas do servidor de banco de dados. Esse tipo de replicação pode ser automatizado em ambientes de nuvem. Além disso, os provedores oferecem mecanismos para balanceamento de carga. A Figura 5 também demonstra o balanceamento de carga das requisições dos clientes entre as réplicas do servidor Web. Se houver falha em um dos servidores, as demais réplicas continuam a atender as requisições. Além disso, a carga de trabalho é dividida entre as réplicas, o que resulta em menor tempo de resposta aos clientes. Com isso, a aplicação dividida em camadas melhora o grau de desempenho e confiabilidade, mesmo que a arquitetura ainda seja cliente-servidor. Os provedores de computação em nuvem permitem a alocação ou liberação automática de réplicas de acordo com as variações no volume de requisições dos clientes.
Conceito de Edge Computing
Mesmo com a evolução dos modelos de arquitetura, ainda pode haver problemas de escalabilidade em soluções em nuvem, pois não deixa de ser um modelo centralizado. Por exemplo, nas aplicações de Big Data e Internet das Coisas, um grande volume de dados precisa ser transmitido até o provedor para ser processado e, depois, eventuais respostas necessitam ser enviadas até os dispositivos finais. Essas questões motivaram a consolidação do paradigma de Computação nas Bordas (Edge Computing), cuja ideia principal é mover o processamento dos dados para a borda da rede (Shi et al., 2016). Uma visão geral da Edge Computing é apresentada na Figura 6. A execução de serviços na borda da rede pode beneficiar algumas soluções, por exemplo, aplicações de mobilidade urbana, que precisam de respostas rápidas para análise de dados do trânsito em uma determinada região.
O objetivo desse modelo não é substituir a computação em nuvem. Na verdade, são abordagens complementares, pois as aplicações que exigem maior capacidade de armazenamento e processamento de dados continuam a ser executadas de forma centralizada no provedor de computação em nuvem. Um bom exemplo disso é um sistema que utiliza aprendizado de máquina para identificar fraudes em compras com cartão de crédito. Por outro lado, aplicações cujo requisito principal é o tempo de resposta, podem ser executadas na borda da rede, pelos próprios dispositivos ou por alguma infraestrutura dedicada de Computação nas Bordas. Em geral, é apropriada para aplicações que envolvem análise de dados em tempo real (Coutinho; Carneiro; Greve, 2016). A seguir, são descritas algumas importantes aplicações práticas que podem se beneficiar das vantagens do modelo descentralizado da computação em bordas:
- Redes de sensores: redes de dispositivos com capacidade de monitoramento (sensoriamento) dispersos por áreas amplas. Essas redes são usadas para implementação de soluções em diversas áreas, como vigilância, monitoramento ambiental, etc. Os dispositivos possuem capacidade limitada, fazem uso de mecanismos de reconhecimento de contexto e topologias hierárquicas, o que torna interessante o uso de computação nas bordas.
- Cache de dados: a arquitetura descentralizada da computação em bordas permite a implementação de sistemas inteligentes de replicação e distribuição de conteúdo, inclusive para usuários móveis.
- Edifícios inteligentes (smart buildings): uso de sensores e atuadores para gerenciamento automático e otimizado da infraestrutura de edifícios. Essas soluções podem ser usadas para conservar água, energia, vigilância, regulação de temperatura, entre outros. Os requisitos de reconhecimento de contexto, baixa latência e privacidade dos dados tornam mais atrativo para essas aplicações o modelo de computação nas bordas.
Vamos Exercitar?
Software de controle para veículos autônomos
Descrição da situação-problema
Você é analista de TI em uma empresa do setor automotivo que decidiu iniciar a fabricação de veículos autônomos, que não precisam de motoristas, pois eles possuem um sistema de controle sofisticado, capaz de conduzir o veículo com segurança. Seu papel é liderar a equipe que vai implementar o software de controle para condução automática dos veículos. Você precisa, inicialmente, escolher um modelo de arquitetura para a solução desses veículos.
Resolução da situação-problema
Existem muitos aplicativos de navegação para veículos baseados em soluções em nuvem. No entanto, um software de controle para condução de veículo precisa tomar decisões em tempo real. Além do uso de serviços de inteligência artificial, esse tipo de aplicação requer baixa latência de comunicação e baixo tempo de resposta no processamento de dados. Se os veículos tivessem que se comunicar com servidores na nuvem, esses requisitos poderiam não ser atendidos. O modelo mais adequado, nesse caso, seria uma abordagem de Edge Computing, como ilustrado na Figura 7. Os carros poderiam se comunicar com altas taxas de transmissão por meio de uma rede sem fio 5G e aproveitar a capacidade de processamento e armazenamento de dados das estações de transmissão de dados para executar funcionalidades em tempo real. Mesmo assim, serviços em nuvem poderiam ser utilizados para agregar informações, armazenar dados históricos para análise de estatísticas e para cálculos de rotas longas que exigem dados do trânsito em várias regiões.
Saiba Mais
O modelo de computação em borda, especialmente a computação em névoa, possibilita o surgimento de diferentes aplicações capazes de mudar a forma como os serviços podem ser prestados. O artigo Aplicações da computação em névoa explica a introdução à computação em névoa.
Referências Bibliográficas
BALDINI, I. et al. Serverless computing: Current trends and open problems. In: Research Advances in Cloud Computing. [s.l.], Springer, 2017.
COUTINHO, A. A.; CARNEIRO, E.; GREVE, F. Computação em névoa: conceitos, aplicações e desafios. In: Minicursos do XXXIV Simpósio Brasileiro de Redes de Computadores e Sistemas Distribuídos. Porto Alegre: SBC, 2016. Cap. 6, p. 266-315. Disponível em: https://www.researchgate.net/publication/309312669_Computacao_em_Nevoa_Conceitos_Aplicacoes_e_Desafios Acesso em: 8 fev. 2024.
DRAGONI, N. et al. Microservices: yesterday, today, and tomorrow. In: Present and Ulterior Software Engineering, p. 195–216. Springer International Publishing, 2017.
SHI, W. et al. Edge Computing: vision and challenges. IEEE Internet of Things Journal, v. 3, 2016.
TANENBAUM, A. S.; STEEN, M. V. Sistemas distribuídos: princípios e paradigmas. 2. ed. São Paulo: Pearson Prentice Hall, 2008.
Aula 2
Qualidade de Serviço em Nuvem
Qualidade de Serviço em Nuvem
Olá, estudante! Nesta videoaula, você irá conhecer o conceito de Qualidade de Serviço (QoS) em nuvem. A QoS refere-se a um conjunto de parâmetros que são usados para avaliar a eficácia e a eficiência de um serviço, garantindo que ele atenda ou exceda as expectativas do usuário. Quando aplicado à computação em nuvem, a QoS desempenha um papel crucial na entrega de serviços confiáveis e de alta performance.
Esse conteúdo é importante para a sua prática profissional, pois a qualidade de serviço em nuvem é uma consideração central para profissionais que desejam garantir a eficácia, a segurança e a confiabilidade dos serviços em nuvem em suas práticas profissionais. É uma parte integrante da entrega bem-sucedida de soluções de TI e contribui significativamente para o sucesso operacional e a satisfação do cliente.
Prepare-se para essa jornada de conhecimento! Vamos lá!!!
Ponto de Partida
Olá, estudante! Um dos obstáculos para migração de aplicações para provedores de computação em nuvem é o fato de que o acesso remoto aos serviços pode afetar negativamente o desempenho. De fato, sem uma conexão de rede de boa qualidade é difícil garantir uma experiência satisfatória para os usuários. Além disso, os provedores precisam de soluções para oferecer confiabilidade e escalabilidade para os serviços. Você conhece as métricas para descrever de forma objetiva os requisitos de desempenho de aplicações? Sabe quais são os mecanismos utilizados pelos provedores para lidar com falhas e problemas de desempenho?
Nesta aula, vamos iniciar o estudo com a descrição de métricas de desempenho de rede e a definição do conceito de Acordo de Nível de Serviço (SLA). Em seguida, vamos descrever alguns indicadores de Qualidade de Serviço utilizados pelos provedores de computação em nuvem. Além disso, serão explicados mecanismos que visam aprimorar a escalabilidade, a confiabilidade e a disponibilidade de aplicações em nuvem. Por fim, vamos estudar, também, a recuperação de desastres, que consiste em mecanismos para lidar com falhas. Com esse estudo, você será capaz de compreender como podemos medir a qualidade das aplicações de forma objetiva, assim como as principais soluções para melhoria de desempenho e escalabilidade em ambientes de nuvem.
Bons estudos!
Vamos Começar!
Acordo de Nível de Serviço (SLA) em provedores de computação em nuvem
O uso de serviços de computação em nuvem na implementação de aplicações distribuídas pode trazer vários benefícios, como a redução de custos e a eliminação da necessidade de gerenciar equipamentos de TI. Por outro lado, existem também algumas barreiras para o uso dos serviços de provedores de nuvem pública. Em particular, o desempenho das aplicações em nuvem pode ser um desafio, se não houver disponibilidade de redes de comunicação de qualidade. Como o acesso aos serviços e dados no provedor é realizado por meio da Internet, pode haver problemas de desempenho ou até mesmo falhas na comunicação entre os componentes. Considere o caso de sistemas com requisitos de tempo real, como jogos ou aplicações de chamada de voz. Esses tipos de aplicações não funcionam de forma adequada se a conexão for de baixa qualidade. Aplicações que armazenam dados na nuvem também podem sofrer degradação de desempenho se houver atraso no acesso remoto aos dados.
Nesse contexto, precisamos utilizar mecanismos para tentar assegurar uma experiência satisfatória dos usuários de aplicações em nuvem. O primeiro ponto a considerar é como caracterizar de forma objetiva a qualidade da comunicação. Isso significa que precisamos de métricas quantitativas para descrever os requisitos mínimos de desempenho. Para lidar com essas questões, há um conceito denominado Qualidade de Serviço (QoS – Quality of Service).
Em se tratando de redes de computadores, a QoS pode ser entendida como uma abordagem utilizada para especificar parâmetros de desempenho das aplicações, assim como os mecanismos necessários para garantir os requisitos de desempenho estabelecidos (Kamienski; Sadok, 2000). Os modelos de QoS podem ser utilizados para caracterizar objetivamente os requisitos de desempenho de uma aplicação. Além disso, utilizam métricas de desempenho de rede, tais como:
- Atraso: o tempo total de transmissão de um pacote do nó remetente ao nó destinatário. Aplicações de chamadas de voz na Internet, por exemplo, requerem um atraso máximo de 150ms (Chen; Farley; Ye, 2004).
- Jitter: medida da variação no atraso na transmissão dos pacotes. Quanto maior o jitter, pior é o desempenho de aplicações multimídia, como streaming de músicas na internet.
- Taxa de transmissão: o volume de dados efetivamente transmitido entre o nó remetente e o nó destinatário. Em geral, é medida em termos de megabits por segundo (Mbps). Por exemplo, a aplicação de streaming de vídeo sob demanda Netflix estabelece que, para assistir vídeos em resolução Ultra HD, é necessária uma conexão com uma taxa de, pelo menos, 25Mbps (Netflix, 2019).
- Taxa de perda: porcentagem dos pacotes que não foram entregues com sucesso para o nó destinatário. Por exemplo, se foram transmitidos 50 pacotes e apenas 40 foram efetivamente entregues ao destinatário, então a taxa de perda é de 20%, ou seja, 10 de 50 pacotes não foram entregues.
Utilizando essas e outras métricas mais específicas, os provedores especificam condições para provisão dos serviços de computação em nuvem em um documento chamado Acordo de Nível de Serviço (SLA – Service Level Agreement) (Erl; Puttini; Mahmoo, 2013). O SLA descreve de forma objetiva as garantias de QoS, a confiabilidade e o desempenho de cada serviço. Uma das principais métricas de QoS utilizadas por provedores de nuvem pública é a disponibilidade de um serviço, que é determinada como a porcentagem do tempo em que um serviço se mantém apto para responder corretamente as requisições de aplicações, clientes ou usuários. Por exemplo, se um serviço web ficou “fora do ar” por 8 dias durante um período de 100 dias, então pode-se afirmar que a sua disponibilidade foi de apenas 92%.
Os provedores utilizam um mecanismo denominado monitor de SLA para monitorar continuamente os indicadores de desempenho dos serviços em nuvem, a fim de verificar se eles estão de acordo com as métricas de qualidade estabelecidas no SLA (Erl; Putiini; Mahmood, 2013). O provedor mantém um banco de dados com as informações de desempenho coletadas por esse mecanismo. A Figura 1 mostra o papel do monitor de SLA, considerando um exemplo no qual os serviços monitorados são máquinas virtuais. O monitor de SLA verifica periodicamente se as VM estão ativas, enviando mensagens de requisição (req) simples. Cada máquina virtual envia uma mensagem de resposta (resp). Nesse caso, a VM-1 não responde ao monitor, então, é considerada inativa. As informações são armazenadas em um banco de dados com estatísticas sobre os serviços do provedor. As informações coletadas pelo monitor de SLA podem ser usadas pelo sistema de gerenciamento do provedor para gerar relatórios de análise de desempenho dos serviços e para fins de tarifação.
Siga em Frente...
Confiabilidade, escalabilidade, disponibilidade e desempenho de aplicações em nuvem
Além da disponibilidade, os provedores de computação em nuvem podem considerar outras métricas de qualidade de serviço (Erl; Puttini; Mahmoo, 2013). Entre as principais métricas, pode-se destacar: escalabilidade, performance, confiabilidade e resiliência. A escalabilidade diz respeito à capacidade de um sistema de ajustar a quantidade de recursos computacionais de acordo com a demanda. Quando um sistema é considerado escalável, isso significa que um aumento na carga de trabalho não compromete o desempenho desse sistema, pois novos recursos podem ser alocados para que não aconteça sobrecarga. A performance é uma medida direta da capacidade de execução do serviço. Pode ser medida, por exemplo, pelo tempo de resposta, que consiste no tempo total para um cliente receber a resposta para uma requisição enviada a um servidor, incluindo o tempo gasto pelo servidor para executar a operação requisitada. A confiabilidade consiste na capacidade do serviço de operar continuamente sem falhas. Ela pode ser medida em termos do tempo médio entre falhas, ou seja, o tempo esperado entre a ocorrência de falhas. A resiliência representa uma medida da robustez de um serviço. Ela está relacionada ao grau de tolerância a falhas do serviço. A resiliência pode ser medida em termos do tempo médio para recuperação, quando da ocorrência de uma falha.
Em geral, o Monitor de SLA tem relação não somente com a disponibilidade, mas também com as demais métricas de QoS mencionadas: performance, escalabilidade, confiabilidade e resiliência. As informações coletadas por esse monitor não são usadas apenas para diagnosticar quais serviços estão disponíveis (ativos), por exemplo, o monitor de SLA verifica outros dados sobre as VM, como uso de memória e processador. Portanto, os dados coletados servem para determinar indicadores de desempenho. Além disso, as informações do monitor de SLA serve também para disparar eventos que acionam outros mecanismos que visam melhorar a qualidade de serviço no provedor de computação em nuvem. Entre esses mecanismos, podemos destacar: dimensionamento automático; balanceamento de carga; recuperação de desastres (falhas) (Erl; Puttini; Mahmoo, 2013). Por exemplo, uma sobrecarga em um servidor identificada pelo monitor de SLA pode acionar o mecanismo de dimensionamento automático para criar réplicas desse servidor. Todos os mecanismos, em conjunto, contribuem para melhorar o desempenho dos serviços provisionados, o que se reflete nas métricas de QoS.
O mecanismo de dimensionamento automático (automated scaling) é responsável por ajustar a capacidade de um serviço em função das demandas. Se a carga de trabalho aumenta, o mecanismo aloca mais recursos para manter a performance do serviço. Por exemplo, esse mecanismo pode automaticamente criar uma réplica de um banco de dados para lidar com um aumento no número de consultas ao banco. Se a carga de trabalho diminui, o mecanismo libera recursos ociosos para reduzir custos. Assim, esse mecanismo confere escalabilidade aos serviços em nuvem de forma automatizada, buscando otimizar a relação entre custo e performance (Mao; Humphrey, 2011). O redimensionamento (escalonamento) pode ser vertical ou horizontal. O vertical corresponde a aumentar a configuração de um recurso, por exemplo, reconfigurar uma máquina virtual com 8GB de memória para 16GB. O escalonamento horizontal corresponde a criar réplicas de uma instância e é bastante utilizado em aplicações web. Nesse caso, s VM VMão criadas réplicas do servidor web ou do servidor de bancos de dados para atender a um aumento no número de requisições recebidas pela aplicação. A Figura 2 ilustra os conceitos de escalonamento vertical e horizontal.
O balanceamento de carga é um mecanismo para distribuir a demanda de trabalho entre as réplicas de um serviço. Por exemplo, cada nova requisição que chega à rede do provedor pode ser encaminhada para a réplica menos sobrecarregada. Isso resulta em melhor performance, pois diminui o tempo de resposta das requisições. Em conjunto com o dimensionamento automático, o balanceamento de carga também favorece a escalabilidade e a disponibilidade do serviço, pois se uma instância de um serviço ser tornar inativa (indisponível, devido a uma falha por exemplo) as requisições a esse serviço podem ser encaminhadas para outra réplica.
A Figura 3 mostra um exemplo de um mecanismo de balanceamento de carga para um serviço de streaming de vídeo. Suponha que um provedor tenha três data centers em diferentes regiões: Alemanha, Califórnia e São Paulo. O mecanismo de balanceamento de carga escolhe a réplica do servidor de streaming mais próxima do cliente para melhorar a performance do serviço. De fato, existem várias técnicas para implementar o balanceamento de carga, como distribuição uniforme, balanceamento ponderado, entre outras (Kansal; Chana, 2012).
O mecanismo de recuperação de falhas trabalha em conjunto com os demais mecanismos. O objetivo do mecanismo de recuperação a falhas é identificar a ocorrência de falhas para que as requisições sejam redirecionadas somente para as réplicas do serviço que estejam ativas e funcionando corretamente. Quando uma instância falha, o mecanismo de balanceamento de carga é avisado para não redirecionar requisições para essa instância. Assim, a implementação e recuperação a falhas contribui também para aumentar a confiabilidade e a disponibilidade do serviço.
Observe que o mecanismo de recuperação a falhas depende da redundância (replicação) de recursos. Por exemplo, quando uma instância de um serviço falha, deve haver uma réplica (secundária) desse serviço já preparada para receber as requisições. De acordo com a forma como a réplica secundária é utilizada, existem dois modelos básicos de recuperação a falhas: modelo ativo-ativo e modelo ativo-passivo (Erl; Puttini; Mahmoo, 2013). No modelo ativo-passivo, a réplica secundária não é utilizada para atender requisições regularmente. Ela só é acionada quando a réplica principal falha. A Figura 4 exemplifica essa estratégia.
Quando a máquina virtual primária falha, as requisições dos clientes são direcionadas para sua réplica. No modelo ativo-ativo, ambas as réplicas recebem requisições (sem distinção). Quando uma das réplicas falha, então, todas as requisições são redirecionadas para a outra, até que a réplica que falhou seja corrigida ou uma nova réplica seja instanciada. A Figura 5 mostra um cenário baseado nesse modelo.
Em geral, para cada serviço em nuvem que exige alta disponibilidade, são criadas diversas réplicas, inclusive réplicas em outro data center do provedor. Dessa forma, mesmo que aconteça um grave desastre em alguma região que comprometa esse data center, o serviço continuará disponível, pois existem réplicas em outro.
Como exemplos de desastres, podemos citar falhas nos sistemas de distribuição de energia elétrica que resultam em blackouts, podendo durar horas ou dias. Também podem ocorrer catástrofes naturais, como inundações. Nesses casos, as instalações de um data center poderiam ficar completamente inoperantes, o que afetaria a continuidade dos negócios que dependem da disponibilidade dos serviços do provedor. Imagine os prejuízos!
O projeto de aplicações em nuvem envolve não somente determinar a arquitetura dos componentes da aplicação, mas também os mecanismos necessários para garantir os requisitos de desempenho. Os provedores oferecem mecanismos de balanceamento de carga, recuperação de falhas e dimensionamento automático. Esses mecanismos devem ser habilitados ou incorporados na aplicação para otimização do seu desempenho.
Nesta aula, aprendemos muito sobre o desempenho de aplicações em nuvem. Foram descritas várias métricas que permitem especificar de forma objetiva os requisitos de qualidade de serviço. Também foram explicados alguns mecanismos importantes que são utilizados para aumentar a performance, disponibilidade e resiliência de aplicações em nuvem.
Vamos Exercitar?
Abordagens de recuperação a falhas
Descrição da situação-problema
As aplicações em algumas áreas, como no setor financeiro, saúde e governamental, apresentam requisitos bastante rigorosos em relação à confiabilidade e disponibilidade dos serviços. Nesses casos, é importante o uso de mecanismos de recuperação a falhas. Existem dois modelos básicos para isso: ativo-ativo e ativo-passivo. Faça uma análise comparativa desses modelos a fim de destacar suas vantagens e desvantagens, em termos de custo e desempenho.
Resolução da situação-problema
A estratégia básica de recuperação a falhas é a redundância: recursos adicionais são usados em caso de falha dos recursos inicialmente alocados, assim, o serviço continuará disponível. Vimos que existem dois modelos básicos para mecanismos de recuperação a falhas: ativo-ativo e ativo-passivo. Para compreender melhor a diferença entre eles, vamos considerar que, para um dado serviço em nuvem, existe a instância principal do serviço e uma instância secundária (uma réplica criada para viabilizar a implementação da recuperação de falhas). No modelo ativo-passivo, a réplica secundária é utilizada apenas no caso de falha na instância principal. No modelo ativo-ativo, a réplica secundária é utilizada no balanceamento de carga para ajudar no processamento das requisições ao serviço. A vantagem do modelo ativo-ativo é um custo menor, pois não há ociosidade de uma réplica secundária alocada somente para recuperação a falhas. Por outro lado, esse modelo implica em um risco. Se a réplica secundária é utilizada no balanceamento de carga regularmente, ela pode estar sobrecarregada no momento em que a instância principal falhar. Nesse caso, a falta de recursos disponíveis na réplica secundária pode comprometer o desempenho.
Saiba Mais
Balanceamento de carga é a prática de distribuir cargas de trabalho computacionais entre dois ou mais computadores. Na internet, o balanceamento de carga é frequentemente empregado para dividir o tráfego de rede entre vários servidores. Para saber mais sobre esse assunto, consulte: O que é balanceamento de carga.
Referências Bibliográficas
CHEN, Y.; FARLEY, T.; YE, N. QoS requirements of network applications on the Internet.
ERL, T.; PUTTINI, R.; MAHMOOD, Z. Cloud computing: concepts, technology & architecture. Rio de Janeiro: Prentice Hall, 2013.
Information Knowledge Systems Management, v. 4, 2004.
KAMIENSKI, C.; SADOK, D. Qualidade de Serviço na Internet. In: Minicursos do XVIII Simpósio Brasileiro de Redes de Computadores (SBRC 2000). [S.l.]: Sociedade Brasileira de Computação, p. 1–40, 2000. Disponível em: https://www.researchgate.net/publication/242087340_Qualidade_de_Servico_na_Internet Acesso em: 8 fev. 2024.
KANSAL, N. J.; CHANA, I. Cloud load balancing techniques: A step towards green computing. IJCSI International Journal of Computer Science Issues, v. 9, 2012.
NETFLIX. Posso assistir aos títulos da Netflix em Ultra HD? Centro de ajuda do Portal da Netflix, [s.d.]. Disponível em: https://help.netflix.com/en/node/13444 Acesso em: 14 jul. 2019.
MAO, M.; HUMPHREY, M. Auto-scaling to minimize cost and meet application deadlines in cloud workflows. In: Proceedings of 2011 International Conference for High Performance Computing, Networking, Storage and Analysis. IEEE, 2011.
Aula 3
Segurança e Privacidade em Nuvem
Segurança e Privacidade em Nuvem
Olá, estudante! Nesta videoaula, você irá conhecer o importante tema da segurança e privacidade em nuvem. Esses são aspectos críticos ao lidar com serviços em nuvem para garantir a integridade, confidencialidade e disponibilidade dos dados. Entender e implementar práticas eficazes de segurança e privacidade em nuvem é vital para proteger dados sensíveis, garantir a conformidade e manter a confiança dos usuários e stakeholders.
Esse conteúdo é importante para a sua prática profissional, pois a segurança e privacidade em nuvem são pilares essenciais para garantir a proteção, confiabilidade e conformidade das operações digitais. Profissionais que incorporam esses princípios em suas práticas contribuem para ambientes de TI mais seguros e resilientes.
Prepare-se para essa jornada de conhecimento! Vamos lá!!!
Ponto de Partida
Olá, estudante! A segurança e a privacidade dos dados é um dos aspectos mais controversos da computação em nuvem. Por um lado, algumas empresas e profissionais de TI, fazem questionamentos em relação à migração de dados e aplicações para a nuvem, alegando que o uso de provedores públicos aumenta a exposição dos dados e as chances de vulnerabilidades de segurança. Além disso, os recursos dos provedores são compartilhados entre diversos clientes, de forma que falhas de proteção e isolamento poderiam permitir que um cliente tivesse acesso aos dados de outros.
Por outro lado, o data center dos provedores conta com uma infraestrutura mais robusta e confiável do que a maioria das empresas poderiam manter em suas próprias instalações. Além disso, os provedores contam com profissionais altamente especializados para implementação dos mecanismos de segurança a um custo relativamente menor e o crescimento de uso da computação em nuvem mostra o sucesso com a solução da maioria dos problemas de segurança, caso contrário as empresas não estariam migrando suas soluções de TI para a nuvem. De fato, um estudo da Google Cloud em parceria com o MIT mostra um aumento significativo da confiança das empresas em relação à segurança em nuvem (Google, 2017). O estudo mostra, ainda, que o aumento da segurança é o segundo fator mais importante para as empresas na decisão de utilizar serviços em nuvem.
Nesta aula, vamos aprender as principais propriedades que caracterizam, de forma geral, um sistema computacional seguro. Depois, vamos descrever os conceitos básicos sobre gerenciamento de riscos e, por fim, vamos explicar as ameaças e as vulnerabilidades para aplicações em ambientes de nuvem, além de alguns dos mecanismos que podem ser usados para melhorar a segurança das soluções. Esses assuntos são de extrema relevância, principalmente para aplicações críticas ou para aquelas que envolvem dados sigilosos.
Bons estudos!
Vamos Começar!
Mecanismos de segurança para aplicações em nuvem
Embora a computação em nuvem possa trazer vários benefícios, existem alguns desafios na adoção de soluções. Você conhece as principais dificuldades apontadas pelas empresas em relação ao uso de serviços em provedores de nuvem pública? Entre essas dificuldades, pode-se destacar as questões de segurança e privacidade, de acordo com um estudo realizado em 2018 (Tucker, 2019). Isso acontece porque o acesso às aplicações nos provedores é feito por meio da Internet. Assim, existe uma maior exposição dos dados e serviços em comparação ao cenário no qual uma empresa mantém sua própria infraestrutura de TI, com a comunicação entre os componentes realizada através de uma rede local. Dessa forma, a maior exposição dos dados na internet, no modelo de computação em nuvem, aumenta as chances de ataques que buscam violar a segurança das aplicações. Portanto, esse tipo de projeto exige muito cuidado com aspectos da segurança dos serviços e da privacidade dos dados. São imprescindíveis o uso de mecanismos de segurança e o estabelecimento de uma estratégia de gerenciamento de riscos.
Antes de conhecer as principais vulnerabilidades de aplicações em nuvem e os principais mecanismos de segurança, precisamos compreender os princípios de segurança da informação e as propriedades de um sistema seguro. Conforme apresentado na literatura (Kurose; Ross, 2013; Tanenbaum; Steen, 2008), as propriedades básicas de uma comunicação segura e confiável são:
- Confidencialidade: sigilo do conteúdo dos pacotes transmitidos na rede.
- Integridade: garantia de que os dados transmitidos não podem ser alterados.
- Autenticidade: confirmação da identidade das partes envolvidas na transmissão dos dados.
- Disponibilidade: garantia de que um sistema estará apto para realizar as operações de transmissão ou processamento dos dados.
Vamos estudar os principais mecanismos de segurança disponíveis. Entre eles, podemos mencionar: criptografia, gerenciamento de acesso e identidade, autenticação unificada e imagens fortalecidas de máquinas virtuais.
A criptografia consiste em técnicas que permitem disfarçar os dados enviados, de forma que um atacante não consiga obter nenhuma informação dos dados interceptados (Kurose; Ross, 2013). Isso implica codificar os dados de modo que somente o destinatário legítimo possa decifrá-los, tornando-os, assim, ininteligíveis para terceiros. A principal aplicação da criptografia é assegurar a confidencialidade dos dados armazenados nos provedores de nuvem pública e dos dados transmitidos entre um provedor e seus clientes. Além disso, a criptografia também pode ser usada em mecanismos para garantia de integridade e autenticidade. Uma vez que a criptografia pode ser usada na implementação de diversos mecanismos, ela é considerada um conceito fundamental para a segurança de sistemas computacionais.
Os algoritmos utilizados para codificar os dados são de conhecimento público, mas, para decodificá-los, é necessário um código secreto denominado chave de criptografia. Existem duas abordagens: a criptografia de chaves simétricas e a criptografia de chave pública (Kurose; Ross, 2013). Na primeira abordagem, existe uma única chave que é utilizada pelo remetente para criptografar os dados que serão enviados ou armazenados em nuvem. O receptor precisa de uma cópia dessa chave para decodificar os dados. Na abordagem de chave pública, o processo envolve um par de chaves. Para o destinatário receber os dados, ele precisa gerar o seu par de chaves; uma delas é denominada pública e não precisa ser mantida em segredo; a outra chave é denominada privada e deve ser mantida em segredo. O remetente usa a chave pública do destinatário para criptografar os dados. Assim, os dados só podem ser decifrados com a chave privada correspondente mantida em segredo pelo destinatário.
Os algoritmos de criptografia também podem ser usados em funções de hash para verificar a integridade dos dados (Erl; Puttini; Mahmood, 2013). Um código hash do conteúdo a ser transmitido é gerado pelo receptor e disponibilizado ao destinatário. Quando recebe os dados, o destinatário gera novamente o código hash e compara com o código gerado pelo receptor. Se os códigos não são iguais é porque o conteúdo foi alterado durante a transmissão e deve, portanto, ser descartado. Se os códigos são iguais, então a integridade dos dados foi mantida. A criptografia também é utilizada em mecanismos de assinatura digital, que são importantes na garantia de autenticidade.
Os mecanismos de criptografia podem ser utilizados para garantir a confidencialidade e integridade dos dados transmitidos através da Internet. No caso do uso de nuvem pública, esses mecanismos também podem ser usados para confidencialidade e integridade dos dados armazenados no provedor. No entanto, esse processo pode afetar o desempenho, devido ao tempo gasto para criptografar os dados nas operações de escrita e para descriptografar os dados nas operações de leitura. Essa opção de armazenar os dados de forma criptografada é oferecida pela maioria dos provedores e serve para lidar com ataques de virtualização e garantir a privacidade, mesmo que estejam em equipamentos compartilhados.
Outra solução de segurança importante nos provedores de nuvem pública é o Gerenciamento de Acesso e Identidade (IAM – Identity and Access Management) (Erl; Puttini; Mahmood, 2013). Esse recurso é utilizado pelos provedores, principalmente, para implementação de políticas de controle de acesso. O IAM permite o gerenciamento e a autenticação de usuários, assim como o controle de privilégios para grupos de usuários e gerenciamento de credenciais. Esse tipo de recurso é importante na implementação de soluções de segurança para lidar com ataques de negação de serviços, autenticação fraca e violação de privacidade no acesso a dados e serviços. Se um cliente utiliza serviços em vários provedores, então, é importante também para questões de controle de acesso o uso de mecanismos de autenticação unificada (SSO – Single Sign On). Esses mecanismos oferecem uma solução segura para autenticação em vários provedores, utilizando as mesmas credenciais.
Outro recurso bastante utilizado pelos provedores de computação em nuvem para aprimorar a segurança dos serviços é o uso de imagens fortalecidas de máquinas virtuais (Hardened VM Images) (Erl; Puttini; Mahmood, 2013). Sabemos que as instâncias de máquinas virtuais são criadas a partir de imagens disponíveis no provedor. As imagens fortalecidas são aquelas que foram configuradas por especialistas, considerando políticas de segurança rigorosas para eliminar possíveis vulnerabilidades. Dessa forma, quando um cliente cria uma VM a partir de uma imagem fortalecida, ele sabe que o sistema operacional dessa VM já foi configurado com as melhores práticas de segurança conhecidas.
Os mecanismos de segurança devem ser usados em conjunto e aprimorados continuamente para lidarem com eventuais ações maliciosas contra as aplicações em ambientes de nuvem. É importante ressaltar que a segurança não é responsabilidade somente do provedor de computação em nuvem; o cliente dos serviços também precisa cooperar. Para assegurar a confiabilidade e a segurança de uma aplicação, é importante a definição de uma estratégia de gerenciamento de riscos, que permitirá que uma empresa possa lidar com problemas de segurança, tanto em relação à segurança de dados e redes como em relação à governança e conformidade dos serviços, ao migrar suas aplicações para um provedor de nuvem pública. Como ilustrado na Figura 1, o gerenciamento de riscos envolve três etapas: avaliação, tratamento e controle (Erl; Puttini; Mahmood, 2013).
Gerenciamento de riscos para serviços em nuvem
A etapa de avaliação de riscos consiste em analisar as possíveis vulnerabilidades e ameaças no ambiente operacional do provedor de nuvem. Devem ser analisados o histórico de incidentes de segurança e as características da rede do provedor. Nessa etapa, os riscos são identificados e classificados em termos do impacto que podem causar. A etapa de tratamento de risco envolve a definição de estratégias e políticas de segurança e a realização de ações para evitar ou atenuar o efeito dos identificados na etapa anterior. Nessa fase, também precisa estar claro quais são as responsabilidades do provedor e dos clientes; algumas delas podem, inclusive, ser delegadas para empresas ou profissionais especializados. O último estágio (controle de riscos) é o momento de diagnosticar a eficácia das ações de segurança implementadas, no qual podem ser definidas formas de aprimorar os mecanismos de segurança. Esse processo de gerenciamento de risco deve se repetir periodicamente, pois novas ameaças podem surgir, novas tecnologias e aplicações podem ser incluídas no ambiente do provedor, assim como podem ser introduzidos mecanismos de segurança mais sofisticados.
Alguns aspectos importantes a serem considerados ao gerenciar riscos para serviços em nuvem:
- Avaliação de riscos: realize uma avaliação completa dos riscos associados ao uso de serviços em nuvem. Isso envolve identificar ameaças potenciais, vulnerabilidades e possíveis impactos nos negócios.
- Classificação de dados: classifique os dados com base em sua sensibilidade e importância. Isso ajuda a determinar quais dados precisam de medidas de segurança mais rigorosas.
- Contratos e Acordos de Nível de Serviço (SLA): analise cuidadosamente os contratos e com provedores de serviços em nuvem para garantir que incluam disposições relacionadas à segurança, privacidade e conformidade.
- Conformidade regulatória: certifique-se de que os serviços em nuvem estejam em conformidade com regulamentações específicas da indústria e requisitos legais que se aplicam à sua organização.
- Resiliência e recuperação de desastres: desenvolva planos de resiliência e recuperação de desastres para garantir a continuidade dos negócios em caso de falhas ou eventos adversos.
- Avaliação de provedores de nuvem: realize uma avaliação minuciosa dos provedores de serviços em nuvem, levando em consideração sua postura de segurança, histórico de incidentes e práticas de conformidade.
- Controle de acesso e autenticação: implemente controles robustos de acesso e autenticação para garantir que apenas usuários autorizados tenham permissão para acessar recursos críticos.
- Criptografia: utilize a criptografia para proteger dados sensíveis durante a transmissão e armazenamento, reduzindo o risco de acesso não autorizado.
- Monitoramento contínuo: estabeleça sistemas de monitoramento contínuo para identificar atividades suspeitas e responder prontamente a possíveis incidentes de segurança.
- Atualizações de segurança: mantenha os sistemas e software atualizados com as últimas correções de segurança para mitigar vulnerabilidades conhecidas.
- Treinamento em segurança: forneça treinamento regular em segurança para todos os usuários, aumentando a conscientização sobre práticas seguras ao usar serviços em nuvem.
- Gestão de identidade e acesso: implemente políticas de gestão de identidade eficazes para garantir que apenas as pessoas certas tenham acesso aos recursos adequados.
- Estratégias de mitigação: desenvolva estratégias de mitigação para reduzir a probabilidade e o impacto de possíveis riscos, garantindo uma abordagem proativa.
- Testes de penetração: realize testes regulares de penetração para identificar e corrigir possíveis vulnerabilidades antes que se tornem alvos de exploração.
- Compartilhamento responsável: se os serviços em nuvem envolvem compartilhamento de recursos com terceiros, certifique-se de que a colaboração seja realizada de maneira segura e responsável.
Siga em Frente...
Principais ameaças e vulnerabilidades para aplicações em nuvem
A internet é uma rede que não inclui em sua arquitetura a implementação das propriedades de uma comunicação segura (Kurose; Ross, 2013).
Dessa forma, a infraestrutura de rede dos provedores de acesso à internet (ISPs – Internet Service Providers) é considerada um meio de comunicação inseguro. Portanto, uma aplicação que utiliza a internet como rede de comunicação precisa ser protegida por meio de mecanismos de segurança, como criptografia e controle de acesso. Nesse contexto, o projeto de aplicações em nuvem precisa contemplar estratégias e ferramentas de segurança para garantia de autenticidade, confidencialidade e integralidade dos dados transmitidos entre os clientes e o provedor. A Figura 2 ilustra esse cenário. A comunicação de dados entre os usuários legítimos e os serviços disponíveis no provedor está sujeita às ações de agentes maliciosos que visam realizar ataques que exploram eventuais vulnerabilidades das aplicações.
Vamos discutir as principais ameaças e vulnerabilidades que podem afetar as aplicações em nuvem para, depois, explicar alguns mecanismos e políticas que podem ser utilizados para lidar com esses problemas e melhorar o nível de segurança das aplicações. Conforme explicam Erl, Puttini e Mahmood (2013), as principais ameaças de segurança para aplicações em nuvem são: interceptação de tráfego, negação de serviço e ataques de virtualização. Vamos conhecer a definição e as características de cada um desses tipos de ataque:
- Interceptação de tráfego: ocorre quando uma entidade não autorizada é capaz de obter as informações transmitidas entre provedor em nuvem e clientes, de forma que a confidencialidade dos dados é violada (Erl; Puttini; Mahmood, 2013). Esse tipo de ataque é difícil de ser detectado, pois é passivo, no sentido em que não há modificações nos dados ou sistemas. O atacante apenas copia os dados transmitidos na rede para ter acesso a informações sigilosas dos provedores e seus clientes. Esse cenário caracteriza uma forma de espionagem.
- Negação de Serviço (DoS – Denial of Service): tem o objetivo de afetar a disponibilidade dos serviços. Esse ataque consiste em sobrecarregar o serviço com um grande volume de requisições, de forma que não consiga mais responder aos clientes legítimos com um desempenho satisfatório (Erl; Puttini; Mahmood, 2013). A Figura 3 mostra um exemplo de um ataque de DoS. Nesse caso, um servidor em um provedor de nuvem é sobrecarregado com requisições disparadas de computadores que foram invadidos e controlados por um atacante. Com a sobrecarga de requisições em um curto período, o servidor terá dificuldades em atender as requisições dos clientes legítimos.
Para resistir aos ataques de DoS, os provedores identificavam e bloqueavam os endereços dos nós da rede de onde os atacantes disparavam as requisições. No entanto, esses ataques ficaram mais sofisticados. Em vez de disparar um grande volume de requisições de alguns nós, o que facilitava a identificação da fonte do ataque, os atacantes passaram a disparar poucas requisições de grande número de computadores dispersos pela internet. Essa estratégia é denominada ataque de DoS distribuído (DDoS – Distributed DoS). Assim, é muito difícil para o provedor distinguir as requisições enviadas por clientes confiáveis das requisições geradas pelos atacantes em computadores que foram invadidos.
Outra ameaça bastante relevante para aplicações em nuvem são os ataques de virtualização, que buscam explorar eventuais falhas e vulnerabilidades nas ferramentas de virtualização utilizadas pelos provedores (Erl; Puttini; Mahmood, 2013). Nesse caso, o atacante pode conseguir algum nível de controle sobre a infraestrutura de TI do provedor. Outro problema é que pode haver violação da privacidade dos dados dos clientes do provedor. Como a virtualização permite que diversos recursos compartilhem um mesmo recurso físico, pode haver dados de diversos clientes em um mesmo equipamento. Os ataques às ferramentas de virtualização podem conseguir violar os mecanismos de proteção que existem para manter um isolamento entre os recursos e dados de diversos clientes que compartilham a infraestrutura do provedor.
Além das ameaças relacionadas com segurança de dados e redes, os provedores de computação em nuvem também precisam lidar com ameaças relacionadas a outras categorias de segurança, como governança, conformidade e questões legais (Gonzalez et al., 2013). Entre os principais problemas nessas categorias, podemos citar:
- Baixo nível de controle administrativo sobre a segurança dos dados por parte dos clientes de um provedor.
- Dependência das tecnologias e políticas de segurança adotadas pelo provedor.
- Problemas relacionados aos requisitos de confiabilidade e políticas de auditoria estabelecidos em acordos de qualidade de serviço (SLA).
Jurisdição dependente da localização dos provedores onde estão armazenados os dados, pois alguns provedores possuem data centers em países diferentes.
Vamos Exercitar?
Segurança no download de aplicativos
Descrição da situação-problema
Considere que você foi contratado como analista de TI por uma empresa que mantém uma loja online de aplicativos. Os usuários acessam a loja para fazer download para seus dispositivos móveis. Existe um problema de segurança que consiste no fato de que o arquivo executável (do aplicativo) recebido do usuário seja diferente do arquivo disponível para download na loja. Isso pode acontecer por falhas na transmissão que, de alguma forma, corromperam o conteúdo do arquivo durante o envio dos dados através da Internet. Outra possibilidade é que um atacante tenha interceptado e alterado intencionalmente o arquivo para injetar um código executável malicioso no arquivo original. Sua tarefa é caracterizar como essa ameaça viola as propriedades de segurança e descrever algum mecanismo que possa ser utilizado para lidar com o problema descrito.
Resolução da situação-problema
Aprendemos sobre quatro propriedades de um sistema seguro: autenticidade, confidencialidade, integridade e disponibilidade. As ameaças descritas não afetam a disponibilidade da aplicação, pois a loja continua ativa para atender às solicitações de download. Também não afetam a autenticidade, pois o atacante não finge sua identidade para fazer o download de um aplicativo na loja. Também não há que se falar em confidencialidade, pois não há sigilo sobre o arquivo executável dos aplicativos. O problema descrito, de fato, é uma possível violação da integridade do arquivo durante sua transmissão pela rede.
Para lidar com essas ameaças, poderia ser utilizado algum mecanismo de Hashing. Nesse caso, o mecanismo poderia funcionar da seguinte maneira: a loja utilizaria uma função de hash para gerar um código hash correspondente para cada arquivo executável de aplicativo disponível na loja. O usuário deveria fazer o download do arquivo e do código hash. Quando o download for concluído, o usuário utilizaria a mesma função de hash para gerar o código e, então, faria uma comparação dos códigos; se fossem iguais, é porque a integridade do arquivo foi mantida. Se os códigos fossem diferentes, é porque o arquivo foi alterado de alguma forma e, então, o download teria que ser feito novamente. Dessa forma, mecanismos de hashing podem ser utilizados para verificar a integridade de arquivos executáveis transferidos de servidores na internet para evitar a execução de código executável malicioso que, eventualmente, tenha sido incluído no arquivo por um atacante.
Saiba Mais
Leia o documento referenciado a seguir para conhecer um pouco mais sobre os riscos de aplicações em ambientes de Computação em Nuvem.
MELO, K. Segurança na Nuvem: por onde começar? ABES, 14-04-2016.
Referências Bibliográficas
ERL, T.; PUTTINI, R.; MAHMOOD, Z. Cloud computing: concepts, technology & architecture. Rio de Janeiro: Prentice Hall, 2013.
GONZALEZ, N. M. et al. Segurança das nuvens computacionais: uma visão dos principais problemas e soluções. Revista USP, São Paulo, 2013.
KUROSE, J. F.; ROSS, K. W. Redes de Computadores e a Internet: uma abordagem top-down. 6. ed. São Paulo: Pearson Education do Brasil, 2013.
Aula 4
Casos de Uso da Computação em Nuvem
Casos de Uso da Computação em Nuvem
Olá, estudante! Nesta videoaula, mergulharemos nos diversos casos de uso que a computação em nuvem oferece. Prepare-se para explorar como essa tecnologia tem impactado projetos, negócios e muito mais.
Esse conteúdo é importante para a sua prática profissional, para enfrentar os desafios da era digital, contribuindo para o sucesso de projetos, impulsionando a inovação e garantindo a eficiência operacional em suas práticas profissionais.
Prepare-se para esta jornada de conhecimento! Vamos lá!!!
Ponto de Partida
Olá, estudante! A computação em nuvem tem sido amplamente adotada em diversos setores, em aplicações práticas que impulsionam projetos e transformam a dinâmica dos negócios. Estudos de casos revelam sua versatilidade, desde a implementação bem-sucedida em saúde, finanças, educação, até a revolução na manufatura, varejo e setor público.
Em projetos, a nuvem oferece soluções eficientes, como armazenamento escalável, hospedagem ágil de sites e aplicações, e ambientes de desenvolvimento/testes flexíveis. A capacidade de processamento em nuvem é particularmente destacada em aplicações de big data, inteligência artificial e aprendizado de máquina, impulsionando a análise de dados e a inovação.
No âmbito empresarial, a computação em nuvem se traduz em benefícios tangíveis. Desde o armazenamento seguro de dados até a implementação de sistemas ERP, a nuvem permite a continuidade de negócios com soluções de recuperação de desastres, facilitando a gestão de documentos e a colaboração entre equipes.
Esses três temas convergem para destacar como a nuvem não apenas atende a demandas específicas de diferentes setores, mas também é uma ferramenta integral para a eficiência operacional, inovação e transformação digital em projetos e negócios.
Bons estudos!
Vamos Começar!
Estudos de casos em diferentes setores
Os estudos de caso em diferentes setores de computação em nuvem destacam como essa tecnologia pode ser aplicada para resolver desafios específicos e impulsionar a inovação em diversas indústrias. Aqui estão alguns exemplos de estudos de caso em setores variados:
- Setor de saúde: no gerenciamento eficiente de registros médicos, compartilhamento de informações entre instituições e Implantação de sistemas de saúde eletrônicos na nuvem para armazenamento seguro e compartilhamento instantâneo de dados entre profissionais de saúde.
- Setor financeiro: no processamento rápido e seguro de transações financeiras, conformidade regulatória e utilização de serviços em nuvem para processamento escalável de transações, análise de dados em tempo real e implementação de medidas de segurança avançadas.
- Educação a distância: no acesso remoto a recursos educacionais, escalabilidade para atender a picos de demanda e plataformas de ensino a distância baseadas em nuvem, permitindo a entrega de conteúdo educacional, colaboração online e suporte a grandes números de usuários simultâneos.
- Manufatura inteligente: no monitoramento em tempo real, otimização de cadeias de produção e implementação de soluções IoT conectadas à nuvem para coleta de dados em tempo real, análise preditiva e melhoria contínua dos processos de manufatura.
- Varejo online: no gerenciamento de inventário, personalização da experiência do cliente e utilização de plataformas de computação em nuvem para processamento rápido de transações, análise de dados de comportamento do cliente e implementação de sistemas de recomendação personalizados.
- Agricultura digital: no monitoramento de cultivos, previsão de safras. Implantação de sensores IoT agrícolas conectados à nuvem para coleta de dados de campo, análise de condições climáticas e previsões baseadas em aprendizado de máquina.
- Telecomunicações: no gerenciamento de tráfego de rede, escalabilidade e adoção de infraestrutura de nuvem para fornecer serviços escaláveis, virtualização de funções de rede (NFV) para otimização e flexibilidade.
- Setor público: na entrega eficiente de serviços públicos, segurança de dados e utilização de plataformas de nuvem para oferecer serviços digitais, armazenamento seguro de dados governamentais e implementação de soluções de cibersegurança.
Esses estudos de caso destacam a versatilidade e os benefícios da computação em nuvem em diferentes setores, fornecendo soluções para desafios específicos e impulsionando a transformação digital.
Aplicações práticas da nuvem em projetos
As aplicações práticas da computação em nuvem em projetos abrangem uma variedade de setores e casos de uso, como:
- Armazenamento de dados: empresas podem armazenar grandes volumes de dados de forma escalável e acessá-los facilmente de qualquer lugar e, com isso, ter uma redução nos custos, alta disponibilidade, backup automático e recuperação de desastres.
- Hospedagem de sites e aplicações: desenvolvedores podem implantar e hospedar sites e aplicativos na nuvem, escalando recursos conforme necessário, com escalabilidade, facilidade de gerenciamento, redução de custos de infraestrutura.
- Desenvolvimento e testes: ambientes de desenvolvimento e testes podem ser provisionados rapidamente na nuvem, permitindo testes mais eficientes e agilidade no desenvolvimento, economia de tempo, recursos sob demanda.
- Big Data e análise de dados: processamento e análise de grandes conjuntos de dados, usando serviços de big data na nuvem. Benefícios: escalabilidade, processamento paralelo, ferramentas avançadas de análise.
- Inteligência artificial e aprendizado de máquina: treinamento de modelos de IA/ML em infraestruturas de nuvem, implementação de aplicações inteligentes. Poder computacional escalável, acesso a frameworks de ML, implementação rápida.
- Colaboração e comunicação empresarial: uso de plataformas de colaboração na nuvem para comunicação eficiente entre equipes. Acesso remoto, colaboração em tempo real, compartilhamento de documentos.
- Internet das coisas: coleta e análise de dados gerados por dispositivos IoT, usando serviços em nuvem. Processamento de dados em escala, armazenamento eficiente, análise em tempo real.
- Aplicações de negócios (ERP, CRM): implementação de sistemas de planejamento de recursos empresariais (ERP) e gestão de relacionamento com o cliente (CRM) na nuvem. Acesso remoto, atualizações automáticas, integração fácil.
- Segurança e conformidade: utilização de serviços de segurança em nuvem para proteção contra ameaças e conformidade com regulamentações. Monitoramento contínuo, detecção de ameaças avançadas, conformidade simplificada.
- Desktops virtuais (VDI): fornecimento de desktops virtuais baseados em nuvem para acesso remoto. Mobilidade, fácil gerenciamento, escalabilidade.
Essas aplicações práticas demonstram como a computação em nuvem pode ser uma ferramenta versátil para impulsionar a eficiência, a inovação e a agilidade em projetos.
Siga em Frente...
Aplicações práticas da nuvem em negócios
A computação em nuvem oferece diversas aplicações práticas para impulsionar os negócios, melhorar a eficiência operacional e facilitar a inovação. Aqui estão algumas das aplicações mais comuns em ambientes empresariais:
- Armazenamento de dados: armazenamento seguro e escalável e redução de custos de armazenamento local, acesso remoto aos dados, backup e recuperação eficientes.
- Hospedagem de aplicações e websites: Implantação e hospedagem de aplicações empresariais, websites e portais online. Escalabilidade conforme a demanda, gerenciamento simplificado, maior disponibilidade.
- Desenvolvimento e testes de software: criação de ambientes de desenvolvimento e testes na nuvem. Provisionamento rápido, custos reduzidos, ambientes isolados para testes.
- Recuperação de desastres e continuidade de negócios: implementação de soluções de backup e recuperação na nuvem. Recuperação rápida, redundância de dados, menor impacto em caso de falhas.
- Colaboração e compartilhamento de documentos: uso de plataformas de colaboração na nuvem para compartilhamento e edição colaborativa de documentos. Acesso remoto, colaboração em tempo real, controle de versões.
- Sistemas de gestão empresarial (ERP): implementação de soluções ERP baseadas em nuvem para integração de processos de negócios. Atualizações automáticas, acesso remoto, integração de dados empresariais.
- Análise de dados e Business Intelligence (BI): uso de serviços em nuvem para análise de dados e geração de insights. Escalabilidade para grandes conjuntos de dados, ferramentas avançadas de BI, análise preditiva.
- Desktops virtuais (VDI): fornecimento de desktops virtuais para funcionários em dispositivos remotos. Mobilidade, segurança aprimorada, fácil gerenciamento centralizado.
- Automação de processos: utilização de serviços em nuvem para automação de processos de negócios. Eficiência operacional, redução de erros, integração de sistemas.
- Segurança e conformidade: implementação de soluções de segurança em nuvem para proteger dados empresariais. Monitoramento contínuo, detecção de ameaças avançadas, conformidade simplificada.
Essas aplicações práticas destacam como a computação em nuvem pode transformar diferentes aspectos dos negócios, proporcionando flexibilidade, escalabilidade e eficiência operacional.
Vamos Exercitar?
Adoção de aplicações práticas da nuvem em projetos
Descrição da situação-problema
Imagine uma empresa de desenvolvimento de software que enfrenta desafios relacionados à agilidade no desenvolvimento de projetos e colaboração eficiente entre equipes distribuídas geograficamente. A empresa percebe a necessidade de adotar soluções inovadoras para superar esses obstáculos e aprimorar seu processo de desenvolvimento de software.
Desafios:
- Ambientes de desenvolvimento limitados: os ambientes de desenvolvimento atuais são limitados em termos de escalabilidade e agilidade e os desenvolvedores enfrentam atrasos na criação de ambientes de teste e desenvolvimento.
- Colaboração remota ineficiente: a comunicação entre equipes distribuídas é desafiadora, resultando em atrasos e falta de alinhamento e na dificuldade em compartilhar recursos e manter uma visão unificada do progresso do projeto.
Resolução da situação-problema
A empresa decide adotar aplicações práticas da computação em nuvem para enfrentar esses desafios. Aqui estão as medidas tomadas para resolver a situação:
- Ambientes de desenvolvimento na nuvem: implementação de ambientes de desenvolvimento escaláveis na nuvem, permitindo a rápida criação e destruição de instâncias, conforme necessário, e utilização de serviços, como AWS CloudFormation ou Azure Resource Manager para automatizar a configuração do ambiente.
- Colaboração eficiente com ferramentas em nuvem: adoção de plataformas de colaboração na nuvem, como Slack, Microsoft Teams ou Google Workspace, para facilitar a comunicação em tempo real e implementação de ferramentas de gerenciamento de projetos baseadas em nuvem, como Jira ou Trello, para acompanhar e compartilhar o progresso do projeto.
- Integração contínua e entrega (CI/CD) na nuvem: implementação de pipelines de CI/CD na nuvem para automação contínua de testes e implantação e uso de serviços, como Jenkins, GitLab CI ou GitHub Actions para garantir uma entrega contínua e confiável.
- Armazenamento e gerenciamento de código na nuvem: migração do repositório de código para plataformas de controle de versão na nuvem, como GitHub ou Bitbucket, e utilização de serviços de armazenamento na nuvem, como Amazon S3 ou Azure Blob Storage, para armazenamento eficiente de artefatos e dados.
Resultados esperados:
- Redução significativa no tempo de configuração de ambientes de desenvolvimento.
- Melhoria na comunicação e colaboração entre equipes, independentemente da localização geográfica.
- Aumento da eficiência do ciclo de vida de desenvolvimento, com implantações mais rápidas e confiáveis.
- Armazenamento seguro e eficiente de dados, melhorando a integridade e a disponibilidade das informações.
Essa abordagem prática da nuvem visa transformar a maneira como a empresa lida com projetos, aumentando a agilidade, melhorando a colaboração e garantindo a entrega eficiente de software.
Saiba Mais
A computação em nuvem tem desempenhado um papel fundamental na revolução digital, oferecendo uma variedade de casos de uso que transformam a maneira como empresas e profissionais abordam os desafios tecnológicos. Para saber mais sobre as vantagens de utilizar a tecnologia cloud computing, consulte 7 grandes empresas que usam serviços de computação em nuvem.
Referências Bibliográficas
HOWMIK, S. Cloud computing. Cambridge: Cambridge University Press, 2017.
ERL, T.; PUTTINI, R.; MAHMOOD, Z. Cloud Computing: concepts, technology & architecture. Rio de Janeiro: Prentice Hall, 2013.
GONZALEZ, N. M. et al. Segurança das nuvens computacionais: uma visão dos principais problemas e soluções. Revista USP, São Paulo, 2013.
Encerramento da Unidade
Arquitetura de Aplicações em Nuvem
Videoaula de Encerramento
Olá, estudante! Nesta videoaula, vamos explorar os conceitos relacionados à arquitetura de aplicações em nuvem. Projetar e estruturar uma aplicação na nuvem é crucial para garantir desempenho, confiabilidade e segurança.
Esse conteúdo é importante para a sua prática profissional, uma arquitetura robusta contribui para a confiabilidade e disponibilidade contínua das aplicações. Profissionais que entendem os princípios de criptografia, gerenciamento de identidade, controle de acesso e práticas de segurança em nuvem podem projetar aplicações robustas e proteger dados sensíveis contra ameaças cibernéticas.
Prepare-se para essa jornada de conhecimento! Vamos lá!!!
Ponto de Chegada
Olá, estudante! Para desenvolver a competência desta unidade, que é conhecer e exemplificar como a arquitetura de uma aplicação em nuvem influencia o seu desempenho, confiabilidade e segurança, é crucial abordar diversos aspectos da arquitetura e como cada um contribui para esses três pilares fundamentais. Vamos explorar esses elementos.
- Desempenho:
- Elasticidade da infraestrutura: utilização de serviços de autoescalonamento para ajustar dinamicamente a capacidade conforme a carga de trabalho, garantindo desempenho consistente, mesmo durante picos de tráfego.
- Arquitetura de microsserviços: divisão da aplicação em microsserviços independentes, permitindo escalabilidade seletiva de componentes específicos e evitando impacto global em caso de falhas.CDN para distribuição
- de conteúdo: implementação de uma CDN para entregar conteúdo estático de forma eficiente, reduzindo a latência e acelerando o carregamento de páginas.
- Confiabilidade:
- Redundância e recuperação de desastres: configuração de instâncias em diferentes zonas de disponibilidade para garantir redundância. Adoção de serviços de backup na nuvem para rápida recuperação em caso de falhas.
- Monitoramento em tempo real: utilização de ferramentas de monitoramento para detectar anomalias e falhas imediatamente, permitindo ações corretivas proativas.
- Testes automatizados: implementação de testes automatizados contínuos para validar a estabilidade da aplicação após atualizações, evitando impactos não previstos.
- Segurança:
- Políticas de controle de acesso: definição de políticas rigorosas de controle de acesso, garantindo que apenas usuários autorizados tenham acesso a dados sensíveis ou áreas críticas da aplicação.
- Criptografia de dados em repouso e em trânsito: aplicação de criptografia para proteger dados armazenados e transmitidos, reduzindo o risco de violações de segurança.
- Gerenciamento de identidade e acesso: implementação de serviços de gerenciamento de identidade para autenticação e autorização eficazes, garantindo a integridade do acesso à aplicação.
Desenvolver a competência nesta unidade envolve a compreensão prática sobre como cada decisão arquitetônica influencia diretamente o desempenho, a confiabilidade e a segurança de uma aplicação em nuvem. Ao aplicar exemplos concretos, os profissionais estarão aptos a tomar decisões informadas durante o processo de arquitetura, alinhando-se aos objetivos estratégicos da organização e proporcionando uma experiência de alta qualidade aos usuários.
É Hora de Praticar!
Desafios na arquitetura de aplicações em nuvem
Descrição da Situação-Problema
Imaginemos uma empresa de e-commerce que enfrenta desafios significativos na arquitetura de suas aplicações em nuvem. A empresa observou um aumento no tráfego durante picos sazonais de vendas, resultando em instabilidades na aplicação, lentidão nas transações e, ocasionalmente, indisponibilidade do serviço para os usuários. Além disso, a arquitetura atual não se adapta facilmente a mudanças nas demandas do mercado e na escalabilidade da infraestrutura.
Desafios identificados:
- Instabilidade durante picos de tráfego: a infraestrutura existente não consegue lidar eficientemente com aumentos abruptos de tráfego, levando a quedas no desempenho e até mesmo à indisponibilidade do serviço durante períodos críticos de vendas.
- Escalabilidade limitada: a arquitetura atual não é facilmente escalável para atender às flutuações sazonais de demanda, resultando em subutilização de recursos durante períodos de baixo tráfego e sobrecarga em momentos de pico.
- Gerenciamento complexo: a complexidade na administração da infraestrutura em nuvem dificulta o gerenciamento eficaz dos recursos, tornando lenta a implementação de atualizações e mudanças na aplicação.
Reflita
- O que é elasticidade na arquitetura de aplicações em nuvem e como ela impacta o desempenho da aplicação?
- Explique como a arquitetura de microsserviços difere da abordagem monolítica e porque ela é vantajosa na nuvem.
- Qual é o papel de uma CDN (Content Delivery Network) na arquitetura de aplicações em nuvem, e como ela contribui para o desempenho?
Resolução do estudo de caso
Resolução da situação-problema
A empresa decide abordar esses desafios por meio de uma reestruturação abrangente na arquitetura de suas aplicações em nuvem. Algumas medidas tomadas para resolver a situação:
- Implementação de autoescalonamento: adoção de serviços de autoescalonamento na nuvem, como AWS Auto Scaling ou Azure Autoscale, para ajustar automaticamente a capacidade da infraestrutura com base nas demandas de tráfego em tempo real.
- Arquitetura de microsserviços: reestruturação da aplicação, utilizando uma arquitetura de microsserviços, permitindo escalabilidade independente de componentes específicos e facilitando a implantação contínua.
- CDN (Content Delivery Network): utilização de uma CDN para distribuição eficiente de conteúdo estático, reduzindo a carga nos servidores principais e melhorando a latência para usuários em diferentes regiões geográficas.
- Monitoramento e análise preditiva: implementação de ferramentas de monitoramento em tempo real e análise preditiva para identificar padrões de tráfego e antecipar picos, permitindo ajustes preventivos na capacidade.
- Contêineres e orquestração: adoção de contêineres, como Docker, e orquestração, como Kubernetes, para facilitar o empacotamento de aplicações e garantir uma implantação consistente e escalável.
Resultados esperados:
- Estabilidade aprimorada: redução significativa na instabilidade durante picos de tráfego, proporcionando uma experiência mais consistente para os usuários.
- Escala eficiente: capacidade de escalonar dinamicamente recursos, garantindo uma resposta eficiente às mudanças nas demandas de tráfego.
- Agilidade operacional: simplificação do gerenciamento da infraestrutura, permitindo atualizações e mudanças rápidas na aplicação.
Essas medidas visam transformar a arquitetura de aplicações em nuvem da empresa, capacitando-a para lidar com desafios de tráfego variável e garantir uma experiência confiável aos usuários, independentemente das condições sazonais.
Dê o play!
Assimile
A arquitetura de aplicações em nuvem refere-se ao design e à estrutura de sistemas de software que são construídos para operar na infraestrutura de computação em nuvem. Ela engloba decisões de design e padrões arquiteturais que permitem que as aplicações se beneficiem das características e serviços oferecidos pelos provedores de nuvem, como escalabilidade, elasticidade, redundância, segurança e eficiência.
Referências
CARVALHO, A. C. P. L. F.; LORENA, A. C. Introdução à computação. São Paulo: GEN, 2017.
ERL, T.; PUTTINI, R.; MAHMOOD, Z. Cloud Computing: concepts, technology & architecture. Rio de Janeiro: Prentice Hall, 2013.
MEIRELES, A.; OLIVEIRA, H. S.; PICHETTI, R. F. Cloud computing. Porto Alegre: SAGAH, 2020.