ARQUITETURA AWS

Esse pode ser um assunto difícil, especialmente se você não tem uma formação técnica, mas é crucial estar familiarizado com os conceitos em um nível elevado, pois perguntas sobre esse tema surgem no exame.

 

Por isso é importante que você inicie lendo sobre os 6 Pilares do AWS Well-Architected Framework

Diferenças entre Computação em Nuvem e Ambiente Tradicional

  1. Ativos de TI tornam-se recursos programáveis:

    • Na AWS, servidores, bancos de dados, armazenamento e componentes de aplicativos de nível superior podem ser instanciados em segundos.
    • Esses recursos podem ser tratados como temporários e descartáveis, livres das restrições de uma infraestrutura de TI fixa e finita.
  2. Capacidade global, disponível e ilimitada:

    • Utilizando a infraestrutura global da AWS, é possível implantar sua aplicação na Região AWS que melhor atenda às suas necessidades.
    • Para aplicações globais, a latência para usuários finais ao redor do mundo pode ser reduzida usando a rede de entrega de conteúdo Amazon CloudFront.
  3. Serviços gerenciados em níveis mais altos:

    • Os clientes da AWS têm acesso a um amplo conjunto de serviços de computação, armazenamento, banco de dados, análise, aplicativos e implantação.
    • Esses serviços estão instantaneamente disponíveis para desenvolvedores, reduzindo a dependência de habilidades especializadas internas e permitindo que as organizações entreguem novas soluções mais rapidamente.
  4. Segurança incorporada:

    • A nuvem AWS oferece capacidades de governança que possibilitam o monitoramento contínuo de mudanças de configuração em seus recursos de TI.
    • Como os ativos da AWS são recursos programáveis, sua política de segurança pode ser formalizada e incorporada ao design de sua infraestrutura.

Escalabilidade

Escalabilidade Vertical:

    • O escalonamento vertical ocorre por meio do aumento das especificações de um recurso individual (por exemplo, aprimorando um servidor com um disco rígido maior ou uma CPU mais rápida).
    • Na Amazon EC2, isso pode ser facilmente alcançado interrompendo uma instância e redimensionando-a para um tipo de instância que tenha mais RAM, CPU, IO ou capacidades de rede.

Escalabilidade Horizontal:

    • O escalonamento horizontal ocorre por meio do aumento do número de recursos (por exemplo, adicionando mais discos rígidos a uma matriz de armazenamento ou adicionando mais servidores para dar suporte a uma aplicação).
    • Isso é uma excelente maneira de construir aplicações em escala na internet que aproveitam a elasticidade da computação em nuvem.
Escalabilidade Horizontal Escalabilidade Vertical
Adicionar mais instâncias à medida que a demanda aumenta Adicionar mais CPU e/ou RAM às instâncias existentes à medida que a demanda aumenta
Não requer tempo de inatividade para aumentar ou diminuir Requer uma reinicialização para aumentar ou diminuir
Automático usando serviços como AWS Auto-Scaling Requer script ou ferramentas de automação para automatizar
Escalabilidade ilimitada Escalabilidade limitada pelo tamanho máximo da instância

Aplicações Sem Estado

Uma aplicação sem estado não requer conhecimento de interações anteriores e não armazena informações de sessão. Isso permite escalabilidade horizontal, já que qualquer solicitação pode ser atendida por qualquer dos recursos computacionais disponíveis (por exemplo, instâncias EC2, funções AWS Lambda).

Componentes Sem Estado

  • A maioria das aplicações precisa manter informações de estado.

  • Por exemplo, as aplicações web precisam rastrear se um usuário está logado, caso contrário, podem apresentar conteúdo personalizado com base em ações anteriores.

  • Aplicações web podem usar cookies HTTP para armazenar informações sobre uma sessão no navegador do cliente (por exemplo, itens no carrinho de compras).

  • Considere armazenar apenas um identificador de sessão único em um cookie HTTP e armazenar informações de sessão mais detalhadas no servidor.

Exemplos de Componentes Sem Estado

  • DynamoDB é frequentemente utilizado para armazenar o estado da sessão para manter uma arquitetura sem estado.
  • Para arquivos maiores, um sistema de armazenamento compartilhado como S3 ou EFS pode ser usado.
  • SWF pode ser usado para fluxos de trabalho com várias etapas.
  •  

Componentes Com Estado

  • Bancos de dados são com estado.
  • Muitas aplicações legadas são com estado.
  • O balanceamento de carga com afinidade de sessão pode ser usado para escalonamento horizontal de componentes com estado.
  • No entanto, a afinidade de sessão não é garantida, e as sessões existentes não se beneficiam dos nós recém-lançados.

Processamento Distribuído

Casos de uso que envolvem o processamento de grandes volumes de dados (por exemplo, qualquer coisa que não possa ser tratada por um único recurso computacional de maneira oportuna) requerem uma abordagem de processamento distribuído.

 

Ao dividir uma tarefa e seus dados em muitos fragmentos pequenos de trabalho, é possível executar cada um deles em qualquer conjunto maior de recursos computacionais disponíveis.

Recursos Descartáveis em Vez de Servidores Fixos

Dica de exame: Pense em servidores e outros componentes como recursos temporários.

 

Inicie quantos precisar e use-os apenas pelo tempo necessário.

 

Um problema com servidores fixos e de longa duração é o “desvio de configuração” (onde mudanças e patches de software são aplicados ao longo do tempo).

  • Esse problema pode ser resolvido com o padrão de “infraestrutura imutável”, onde um servidor nunca é atualizado, mas sim substituído por um novo conforme necessário.

Instanciando Recursos de Computação

Você não quer configurar manualmente novos recursos com sua configuração e código.

 

Use processos automatizados e repetíveis que evitem longos prazos e não sejam propensos a erros humanos.

  1. Inicialização:

    • Execute ações automatizadas de inicialização para modificar configurações padrão.
    • Isso inclui scripts que instalam software ou copiam dados para trazer esse recurso para um estado específico.
    • Você pode parametrizar detalhes de configuração que variam entre ambientes diferentes.
  2. Imagens Douradas (do inglês, golden image):

    • Alguns tipos de recursos podem ser iniciados a partir de uma imagem dourada.
    • Exemplos incluem instâncias EC2, instâncias RDS e volumes EBS.
    • Uma imagem dourada é uma captura de um estado específico para esse recurso.
    • Comparado à inicialização, as imagens douradas proporcionam tempos de inicialização mais rápidos e eliminam dependências de serviços de configuração ou repositórios de terceiros.
  3. Infraestrutura como Código:

    • Os ativos da AWS são programáveis, então você pode aplicar técnicas, práticas e ferramentas do desenvolvimento de software para tornar toda a sua infraestrutura reutilizável, mantida, extensível e testável.

Automação

Em uma infraestrutura de TI tradicional, frequentemente é necessário reagir manualmente a uma variedade de eventos.

 

Ao implantar na AWS, há muitas oportunidades para automação.

 

Isso melhora tanto a estabilidade do seu sistema quanto a eficiência de sua organização.

 

Exemplos de automações usando serviços da AWS incluem:

AWS Elastic Beanstalk:

  • A maneira mais rápida e simples de colocar uma aplicação em execução na AWS.

Amazon EC2 Auto Recovery:

  • Você pode criar um alarme do Amazon CloudWatch que monitora uma instância Amazon EC2 e a recupera automaticamente se ela ficar comprometida.

Auto Scaling:

  • Com o Auto Scaling, você pode manter a disponibilidade da aplicação e dimensionar automaticamente sua capacidade Amazon EC2 de acordo com as condições que você define.

Amazon CloudWatch Alarms:

  • Você pode criar um alarme do CloudWatch que envia uma mensagem do Amazon Simple Notification Service (Amazon SNS) quando uma métrica específica ultrapassa um limite especificado por um número específico de períodos.

Amazon CloudWatch Events:

  • O serviço CloudWatch entrega um fluxo quase em tempo real de eventos do sistema que descrevem alterações nos recursos da AWS.

Eventos do Ciclo de Vida do AWS OpsWorks:

  • O AWS OpsWorks suporta a configuração contínua por meio de eventos do ciclo de vida que atualizam automaticamente a configuração de suas instâncias para se adaptar a alterações no ambiente.

Eventos Agendados do AWS Lambda:

  • Esses eventos permitem criar uma função Lambda e direcionar o AWS Lambda para executá-la em uma programação regular.

Loose Coupling (Desvinculação)

À medida que a complexidade da aplicação aumenta, uma característica desejável de um sistema de TI é que ele possa ser dividido em componentes menores e desvinculados.

 

Isso significa que os sistemas de TI devem ser projetados de maneira a reduzir interdependências — uma alteração ou falha em um componente não deve se propagar para outros componentes.

 

Princípios de design incluem:

Interfaces bem definidas:

    • Reduzem as interdependências em um sistema, permitindo a interação apenas por meio de interfaces específicas, agnósticas à tecnologia (por exemplo, APIs RESTful).

Descoberta de Serviços:

    • Recursos diversos devem ter uma maneira de se descobrir sem conhecimento prévio da topologia da rede.

Integração Assíncrona:

    • Esta é outra forma de desvinculação, onde uma interação não precisa de uma resposta imediata (pense em filas SQS ou Kinesis).

Falha Graciosa:

    • Construa aplicações de forma que lidem com falhas de maneira graciosa (reduza o impacto da falha e implemente tentativas).

Serviços, Não Servidores

Na AWS, há um conjunto de serviços que oferecem blocos de construção que os desenvolvedores podem consumir para alimentar suas aplicações.

 

Esses serviços gerenciados incluem bancos de dados, aprendizado de máquina, análise, filas, pesquisa, email, notificações e muito mais.

Serviços Gerenciados

Com a infraestrutura de TI tradicional, as organizações precisam construir e operar uma ampla variedade de componentes tecnológicos.

 

A AWS oferece um conjunto amplo de serviços de computação, armazenamento, banco de dados, análise, aplicativos e implantação que ajudam as organizações a se movimentarem mais rapidamente e a reduzirem os custos de TI.

Arquiteturas sem Servidor

Outra abordagem que pode reduzir a complexidade operacional da execução de aplicações é a das arquiteturas sem servidor.

 

É possível construir serviços tanto orientados a eventos quanto síncronos para mobile, web, análise e Internet das Coisas (IoT) sem gerenciar qualquer infraestrutura de servidor.

Bancos de Dados

Com a infraestrutura de TI tradicional, as organizações muitas vezes eram limitadas pelas tecnologias de banco de dados e armazenamento que podiam usar.

 

Com a AWS, essas restrições são removidas por serviços de banco de dados gerenciados que oferecem desempenho empresarial a um custo de código aberto.

Bancos de Dados Relacionais

Bancos de dados relacionais (frequentemente chamados de RDBS ou bancos de dados SQL) normalizam dados em estruturas tabulares bem definidas conhecidas como tabelas, que consistem em linhas e colunas.

 

Eles oferecem uma linguagem de consulta poderosa, capacidades de indexação flexíveis, controles de integridade robustos e a capacidade de combinar dados de várias tabelas de maneira rápida e eficiente.

 

Amazon RDS é um serviço de banco de dados relacional.

Escalabilidade

  • Bancos de dados relacionais podem escalar verticalmente (por exemplo, atualizando para uma instância de banco de dados RDS maior).
  • Para casos de uso intensivo em leitura, você pode escalar horizontalmente usando réplicas de leitura.
  • Para escalar a capacidade de gravação além de uma única instância, é necessária a partição ou sharding dos dados.

Alta Disponibilidade

  • Para bancos de dados de produção, a Amazon recomenda o uso do RDS Multi-AZ, que cria uma cópia de reserva replicada de forma síncrona em outra Zona de Disponibilidade.
  • Com o Multi-AZ, o RDS pode falhar para a réplica de reserva sem intervenção administrativa.

Anti-Padrões

  • Se sua aplicação indexa e consulta principalmente dados sem a necessidade de junções ou transações complexas, considere um banco de dados NoSQL.
  • Se você tem grandes arquivos binários (áudio, vídeo e imagem), será mais eficiente armazenar os arquivos reais no S3 e manter apenas os metadados dos arquivos em seu banco de dados.

Bancos de Dados NoSQL

NoSQL é um termo usado para descrever bancos de dados que trocam algumas das capacidades de consulta e transação de bancos de dados relacionais por um modelo de dados mais flexível que se dimensiona horizontalmente.

 

Bancos de dados NoSQL utilizam uma variedade de modelos de dados, incluindo grafos, pares de chave-valor e documentos JSON.

 

DynamoDB é o serviço de banco de dados NoSQL da Amazon.

Escalabilidade

Motores de banco de dados NoSQL geralmente realizam particionamento de dados e replicação para escalar horizontalmente tanto a leitura quanto a gravação.

Alta Disponibilidade

DynamoDB replica dados de forma síncrona em três instalações em uma região AWS para tolerância a falhas.

Anti-Padrões

  • Se seu esquema não puder ser desnormalizado e sua aplicação precisar de junções ou transações complexas, considere um banco de dados relacional.
  • Se você tiver grandes arquivos binários (áudio, vídeo e imagem), considere armazenar os arquivos no Amazon S3 e manter apenas os metadados no seu banco de dados.

Data Warehouse (Armazém de Dados)

Um armazém de dados é um tipo especializado de banco de dados relacional, otimizado para análise e geração de relatórios de grandes volumes de dados.

 

Pode ser utilizado para combinar dados transacionais de fontes diversas, tornando-os disponíveis para análise e tomada de decisões.

 

O Amazon Redshift é um serviço gerenciado de armazém de dados projetado para operar a menos de um décimo do custo de soluções tradicionais.

Escalabilidade:

  • O Amazon Redshift alcança armazenamento eficiente e desempenho ótimo de consulta por meio de processamento paralelo massivo (MPP), armazenamento de dados em colunas e esquemas de codificação de compressão de dados direcionados.
  • É especialmente adequado para cargas de trabalho analíticas e de geração de relatórios em conjuntos de dados muito grandes.

Alta Disponibilidade:

  • O Redshift possui várias características que aprimoram a confiabilidade do cluster do seu armazém de dados.
  • Clusters de vários nós replicam dados para outros nós dentro do cluster.
  • Os dados são continuamente copiados para o S3.
  • O RedShift monitora continuamente a saúde do cluster, re-replica dados de unidades com falha e substitui nós conforme necessário.

Anti-Padrões:

  • Por ser um sistema de gerenciamento de banco de dados relacional (RDBMS) baseado em SQL, o Amazon Redshift é compatível com outras aplicações RDBMS e ferramentas de inteligência de negócios.
  • Embora o Amazon Redshift forneça funcionalidades de um RDBMS típico, incluindo funções de processamento de transações online (OLTP), não é projetado para essas cargas de trabalho.

Remoção de Pontos Únicos de Falha

Um sistema é altamente disponível quando pode resistir à falha de um ou vários componentes.

 

Automatize a recuperação e reduza a interrupção em cada camada de sua arquitetura.

Redundância

  • Pontos únicos de falha podem ser removidos introduzindo redundância.
  • Na redundância de espera, quando um recurso falha, a funcionalidade é recuperada em um recurso secundário usando um processo chamado failover, que normalmente leva algum tempo para ser concluído.
  • Na redundância ativa, as solicitações são distribuídas para vários recursos de computação redundantes e, quando um deles falha, os demais podem simplesmente absorver uma parcela maior da carga de trabalho.

Detectar Falhas

  • Construa o máximo de automação possível tanto na detecção quanto na reação a falhas.
  • Serviços como ELB e Route53 mascaram falhas direcionando o tráfego para endpoints saudáveis.
  • O Auto Scaling pode ser configurado para substituir automaticamente nós não saudáveis.
  • Você também pode substituir nós não saudáveis usando o auto-recuperamento do EC2, OpsWorks e Elastic Beanstalk.

Armazenamento Durável de Dados

Projete sua arquitetura para proteger tanto a disponibilidade quanto a integridade dos dados.

 

A replicação de dados é a técnica que introduz cópias redundantes de dados.

 

Isso pode ajudar a escalar horizontalmente a capacidade de leitura, mas também aumenta a durabilidade e a disponibilidade dos dados.

 

A replicação pode ocorrer em alguns modos diferentes:

  1. Replicação Síncrona:

    • Transações são confirmadas apenas após os dados serem armazenados de forma durável na instância primária e na instância de réplica. Pode ser usada para proteger a integridade dos dados (baixo RPO) e aumentar a capacidade de leitura (com consistência forte).
  2. Replicação Assíncrona:

    • Mudanças na instância primária não são refletidas imediatamente em suas réplicas. Pode ser usada para escalar horizontalmente a capacidade de leitura do sistema (com atraso na replicação) e aumentar a durabilidade dos dados (com perda de alguns dados).
  3. Replicação baseada em Quórum:

    • Combina replicação síncrona e assíncrona e é adequada para sistemas de banco de dados distribuídos em grande escala.

Resiliência Automatizada em Múltiplos Data Centers

Com infraestrutura tradicional, a falha entre data centers é realizada usando um plano de recuperação de desastres.

 

Grandes distâncias entre data centers tornam a replicação síncrona impraticável devido à latência.

 

As falhas geralmente resultam em perda de dados e processos caros de recuperação de dados.

 

Na AWS, é possível adotar uma proteção mais simples e eficiente contra esse tipo de falha.

 

Cada região da AWS contém locais distintos chamados Zonas de Disponibilidade (AZs).

 

Cada AZ é projetada para ser isolada de falhas em outras AZs.

 

Uma AZ é um data center e, em alguns casos, uma AZ consiste em vários data centers.

 

AZs dentro de uma região fornecem conectividade de rede barata e de baixa latência para outras zonas na mesma região.

 

Isso permite replicar dados entre data centers de forma síncrona para que a falha possa ser automatizada e transparente para seus usuários.

Isolamento de Falhas e Escalonamento Horizontal Tradicional

Embora o padrão de redundância ativa seja ótimo para equilibrar o tráfego e lidar com interrupções de instâncias ou Zonas de Disponibilidade, não é suficiente se houver algo prejudicial nas próprias solicitações.

 

Se uma solicitação específica desencadear um bug que faça o sistema falhar, o chamador pode desencadear uma falha em cascata ao tentar repetidamente a mesma solicitação em todas as instâncias.

 

Uma melhoria de isolamento de falhas que você pode fazer no escalonamento horizontal tradicional é chamada de sharding.

 

Como a técnica tradicionalmente usada em sistemas de armazenamento de dados, em vez de espalhar o tráfego de todos os clientes por todos os nós, você pode agrupar as instâncias em shards.

 

Dessa forma, você pode reduzir o impacto nos clientes em proporção direta ao número de shards que possui.

Otimização de Custos

A simples mudança de arquiteturas existentes para a nuvem permite que organizações reduzam despesas de capital e alcancem economias devido à escala oferecida pela AWS.

 

Ao iterar e aproveitar mais recursos da AWS, há oportunidades adicionais para criar arquiteturas na nuvem otimizadas para custos.

Dimensionamento Adequado

  • Em alguns casos, escolha o tipo mais barato que atenda aos requisitos de carga de trabalho.
  • Em outros casos, usar menos instâncias de um tipo maior pode resultar em menor custo total ou melhor desempenho.
  • Realize testes comparativos e selecione o tipo de instância certo, dependendo de como sua carga de trabalho utiliza CPU, RAM, rede, tamanho de armazenamento e E/S.
  • Reduza custos escolhendo a solução de armazenamento certa para suas necessidades, por exemplo:
    • S3 oferece diversas classes de armazenamento, incluindo Padrão, Redução de Redundância e Acesso Infrequente Padrão.
    • EC2, RDS e ES suportam diferentes tipos de volume EBS (magnético, SSD de propósito geral, SSD com IOPS provisionado) que você deve avaliar.

Elasticidade

Planeje implementar Auto Scaling para o maior número possível de cargas de trabalho do EC2, escalando horizontalmente quando necessário e diminuindo automaticamente para reduzir custos.

 

Automatize o desligamento de cargas de trabalho não produtivas quando não estiverem em uso.

 

Onde possível, substitua cargas de trabalho do EC2 por serviços gerenciados da AWS que não exigem decisões de capacidade, por exemplo:

    • ELB.
    • CloudFront.
    • SQS.
    • Kinesis Firehose.
    • Lambda.
    • SES.
    • CloudSearch.
    • Ou use serviços nos quais você pode modificar a capacidade conforme necessário, por exemplo:
    • DynamoDB.
    • RDS.
    • Elasticsearch Service.

Caching

O caching é uma técnica que armazena dados previamente calculados para uso futuro, melhorando o desempenho da aplicação e aumentando a eficiência de custos.

 

  1. Caching de Dados de Aplicativos:

    • As aplicações podem ser projetadas para armazenar e recuperar informações de caches gerenciados em memória, como resultados de consultas de banco de dados intensivas em I/O ou resultados de processamento intensivo computacional.
  2. Caching de Borda:

    • Cópias de conteúdo estático e dinâmico podem ser armazenadas no Amazon CloudFront, um serviço de entrega de conteúdo (CDN) composto por várias localizações de borda ao redor do mundo.

    • O caching de borda permite que o conteúdo seja servido por uma infraestrutura mais próxima dos espectadores, reduzindo a latência e proporcionando taxas de transferência de dados sustentadas e altas necessárias para entregar objetos grandes e populares aos usuários finais em grande escala.

Delegue Responsabilidade de Segurança para a AWS

A AWS opera sob um modelo de responsabilidade de segurança compartilhada, em que a AWS é responsável pela segurança da infraestrutura de nuvem subjacente, e você é responsável por garantir a segurança das cargas de trabalho que implanta na AWS.

Reduza o Acesso Privilégiado

Ao tratar servidores como recursos programáveis, você pode capitalizar isso para obter benefícios na área de segurança.

 

Elimine a necessidade de acesso ao sistema operacional convidado em ambientes de produção.

 

Se uma instância apresentar um problema, você pode encerrá-la e substituí-la automaticamente ou manualmente.

 

Em um ambiente tradicional, as contas de serviço frequentemente receberiam credenciais de longo prazo armazenadas em um arquivo de configuração.

 

Na AWS, você pode usar funções IAM para conceder permissões a aplicativos em execução em instâncias do Amazon EC2 usando credenciais de curto prazo.

Segurança como Código

Estruturas de segurança tradicionais, regulamentações e políticas organizacionais definem requisitos de segurança relacionados a coisas como regras de firewall, controles de acesso à rede, sub-redes internas/externas e fortalecimento do sistema operacional.

 

Você pode implementar esses requisitos em um ambiente AWS, mas agora pode capturá-los em um script que define um “Ambiente Dourado”.

 

Isso significa que você pode criar um script do AWS CloudFormation que captura sua política de segurança e a implanta de maneira confiável.

 

As melhores práticas de segurança agora podem ser reutilizadas entre vários projetos e fazer parte do seu pipeline de integração contínua.

 

Você pode realizar testes de segurança como parte do seu ciclo de lançamento e descobrir automaticamente lacunas e desvios de sua política de segurança.

Auditoria em Tempo Real

Testar e auditar seu ambiente é fundamental para avançar rapidamente mantendo-se seguro.

 

Abordagens tradicionais que envolvem verificações periódicas não são suficientes, especialmente em ambientes ágeis onde a mudança é constante.

 

Na AWS, é possível implementar monitoramento contínuo e automação de controles para minimizar a exposição a riscos de segurança.

 

Serviços como AWS Config, Amazon Inspector e AWS Trusted Advisor monitoram continuamente a conformidade ou vulnerabilidades.

 

Com as regras do AWS Config, você também saberá se algum componente estava fora de conformidade, mesmo que por um breve período.

 

Você pode implementar logs extensivos para suas aplicações (usando Amazon CloudWatch Logs) e para as chamadas reais da API da AWS, habilitando o AWS CloudTrail.

 

Os logs podem ser armazenados de maneira imutável e processados automaticamente para notificar ou até mesmo agir em seu nome, protegendo sua organização contra a não conformidade.

 

Você pode usar o AWS Lambda, o Amazon EMR, o Amazon Elasticsearch Service ou ferramentas de terceiros do AWS Marketplace para escanear logs e detectar coisas como permissões não utilizadas, uso excessivo de contas privilegiadas, uso de chaves, logins anômalos, violações de política e abuso do sistema.

Rolar para cima