Solutions Architect

Alta disponibilidade

Uma carga altamente disponível continua atendendo quando cai uma instância, um banco ou uma Availability Zone inteira. Esta é a tarefa 2.2 de Design Resilient Architectures, 26% do conteúdo pontuado.

Página oficial

Availability Zones são locais isolados dentro de uma Região. Espalhar cada camada por pelo menos 2 AZs elimina o ponto único de falha que uma AZ representa.

Pontos-chave

  • Todas as camadas: load balancer, grupo do Auto Scaling e banco precisam cobrir várias AZs. Um único componente em uma AZ deixa a pilha inteira dependente dela.
  • Exigência do ALB: um Application Load Balancer precisa de pelo menos 2 Availability Zones habilitadas.
  • Estabilidade estática: provisione capacidade suficiente nas AZs restantes para aguentar a carga sem depender de escalar durante a falha.
  • Zonal shift: o Amazon Application Recovery Controller (ARC) tira o tráfego do load balancer de uma AZ com problema em uma única ação.
  • Multi-AZ vs multi-Região: Multi-AZ cobre a perda de um data center ou de uma AZ. Perder uma Região inteira é recuperação de desastres e exige uma segunda Região.

Na prova

"Sobreviver à falha de uma Availability Zone com o menor custo" -> Multi-AZ (ALB, Auto Scaling entre AZs, RDS Multi-AZ). Uma segunda Região é o distrator, a menos que a questão fale em falha de Região inteira.

Load balancers

Elastic Load Balancing

Página oficial

O ELB distribui o tráfego entre destinos saudáveis em várias Availability Zones e para de enviar tráfego a um destino que falha nos health checks.

Pontos-chave

  • Health checks: configurados por target group. Destinos com problema deixam de receber tráfego e voltam a receber quando ficam saudáveis.
  • Cross-zone: sempre ativo no nível do load balancer no ALB (pode ser desligado por target group), desligado por padrão no NLB e no GWLB.
  • Integração com Auto Scaling: instâncias criadas pelo grupo entram no target group e saem ao serem encerradas. Ative os health checks do ELB no grupo para que ele troque as instâncias que o load balancer marca como não saudáveis.
  • Interno vs voltado à internet: um load balancer público para a camada web e um interno para a camada de aplicação formam um design em camadas.

Na prova

"Clientes precisam liberar IPs fixos no firewall" ou "tráfego UDP" -> NLB. "Rotear /api e /images para serviços diferentes" -> ALB. "Inserir firewalls de terceiros de forma transparente" -> GWLB.

Tipos de load balancer

TipoQuando usar
ALBCamada 7: HTTP, HTTPS, gRPC, WebSockets. Roteia por caminho, host, header, método, query string ou IP de origem. Destinos: instâncias, IPs, Lambda. Funciona com AWS WAF e autenticação de usuários.
NLBCamada 4: TCP, UDP, TLS, QUIC, milhões de requisições por segundo. Um IP estático por AZ, Elastic IP opcional por sub-rede. Fica na frente de serviços AWS PrivateLink.
GWLBCamada 3 para appliances virtuais (firewalls, IDS/IPS, inspeção profunda de pacotes). GENEVE na porta 6081, Gateway Load Balancer endpoints como próximo salto na tabela de rotas.

EC2 Auto Scaling

Amazon EC2 Auto Scaling

Página oficial

Mantém o número desejado de instâncias saudáveis entre AZs e muda esse número conforme a demanda, entre um mínimo e um máximo.

Pontos-chave

  • Target tracking: a política recomendada. Mantém uma métrica como CPU média ou requisições por destino em um valor alvo, como um termostato.
  • Step e simple: o step ajusta em quantidades diferentes conforme o tamanho da violação do alarme. O simple aplica um único ajuste e espera um cooldown.
  • Agendado e preditivo: o agendado muda a capacidade em horários conhecidos. O preditivo analisa até 14 dias de histórico (no mínimo 24 horas) para prever as próximas 48 horas e escala antes dos picos cíclicos.
  • Warm pools: instâncias pré-inicializadas mantidas Stopped, Hibernated ou Running para reduzir a latência de scale-out de aplicações que demoram a subir.
  • Lifecycle hooks: seguram a instância em estado de espera (1 hora por padrão) para prepará-la antes de entrar em serviço ou copiar logs antes de encerrar.
  • Instance refresh: troca as instâncias de forma gradual depois de um novo launch template ou AMI.

Na prova

"O tráfego sobe todo dia útil às 9h e as instâncias levam minutos para subir" -> escalonamento preditivo ou agendado, mais um warm pool. "Manter a CPU perto de um valor" -> target tracking. Simple scaling raramente é a melhor resposta.

Página oficial

Implantações Multi-AZ fazem failover automático dentro da Região. Réplicas de leitura escalam leituras e podem ser promovidas, mas replicam de forma assíncrona e são promovidas manualmente.

Pontos-chave

  • Multi-AZ DB instance: um standby síncrono em outra AZ que não atende leituras. O failover aponta o endpoint DNS para o standby, normalmente em 60 a 120 segundos.
  • Multi-AZ DB cluster: um writer e 2 standbys legíveis em 3 AZs com replicação semissíncrona, para RDS for MySQL e PostgreSQL. O failover costuma levar menos de 35 segundos.
  • Réplicas de leitura: assíncronas, até 15 por origem, na mesma Região ou em outra. Servem para escalar leituras, relatórios e DR entre Regiões por promoção. O RDS não as escala automaticamente.
  • Reconexão: a aplicação precisa reconectar depois do failover e não deve guardar DNS em cache por mais de 60 segundos.

Na prova

"Failover automático sem mudar a aplicação" -> Multi-AZ. "Tirar as consultas de relatório do banco principal" -> réplica de leitura. A réplica de leitura é o distrator para HA: é assíncrona e precisa ser promovida.

Opções de RDS e Aurora

OpçãoO que entrega
Multi-AZ DB instanceHA. Standby síncrono, sem leitura, failover normalmente de 60 a 120 segundos.
Multi-AZ DB clusterHA e leituras. 2 standbys legíveis, failover normalmente abaixo de 35 segundos.
Réplica de leituraEscala de leitura e DR. Assíncrona, até 15, promoção manual.
Aurora ReplicaOs dois. Até 15 por cluster no storage compartilhado, alvo de failover automático.

Aurora

Amazon Aurora

Página oficial

O Aurora separa a computação de um volume de cluster compartilhado e copiado em 3 AZs, então réplicas somam capacidade de leitura e alvos de failover sem copiar dados.

Pontos-chave

  • Storage: cada escrita é replicada de forma síncrona para 6 nós de armazenamento entre AZs, seja qual for o número de instâncias. O volume cresce sozinho.
  • Aurora Replicas: até 15 leitoras com atraso normalmente bem abaixo de 100 milissegundos. O reader endpoint distribui as conexões de leitura.
  • Failover: uma réplica é promovida, normalmente em menos de 60 segundos e muitas vezes em menos de 30. Sem réplicas o writer é recriado, normalmente em menos de 10 minutos.
  • Promotion tiers: a prioridade de 0 (maior) a 15 decide qual réplica vira writer. No empate vence a maior réplica.
  • Cluster endpoint: sempre aponta para o writer atual, então a string de conexão sobrevive ao failover.

Na prova

"Failover mais rápido para um banco relacional com muitas réplicas de leitura" -> Aurora com réplicas em outras AZs. "Escolher qual réplica vira writer" -> promotion tier.

RDS Proxy

Amazon RDS Proxy

Página oficial

Pool de conexões gerenciado entre a aplicação e o RDS ou Aurora, que absorve picos de conexão e esconde o failover dos clientes.

Pontos-chave

  • Pool de conexões: reaproveita conexões com o banco, então milhares de invocações Lambda ou threads não esgotam o banco. O excesso entra em fila ou sofre throttling em vez de falhar.
  • Failover: mantém as conexões dos clientes abertas e roteia para a nova instância, ignorando caches de DNS e reduzindo o tempo de failover em até 66% no Aurora Multi-AZ.
  • Segurança: pode exigir autenticação IAM dos clientes e lê as credenciais do banco no AWS Secrets Manager.
  • Sem mudar código: a maioria das aplicações só troca o endpoint. O proxy fica na mesma VPC do banco e nunca é acessível publicamente.

Na prova

"Funções Lambda esgotam as conexões do banco" -> RDS Proxy. Aumentar a classe da instância é o distrator. "Fazer uma aplicação tolerar o failover do banco sem mudar código" -> RDS Proxy.

Failover no Route 53

Amazon Route 53

Página oficial

Os health checks do Route 53 tiram endpoints com problema das respostas DNS, o que permite failover ativo-ativo ou ativo-passivo entre AZs ou Regiões.

Pontos-chave

  • Tipos de health check: um endpoint (IP ou nome de domínio), outros health checks (calculado) ou um alarme do CloudWatch.
  • Ativo-passivo: a política failover responde com o registro primário enquanto ele está saudável e com o secundário quando não está, por exemplo um site estático no S3 como página de manutenção.
  • Ativo-ativo: qualquer outra política (weighted, latency, geolocation) com health checks devolve só registros saudáveis.
  • Registros alias: para destinos da AWS como um ALB, ative Evaluate Target Health em vez de criar um health check separado.
  • Recursos privados: as verificações de endpoint partem da internet, então monitore recursos privados com um health check sobre um alarme do CloudWatch.

Na prova

"Mandar usuários para um site reserva só quando o principal falhar" -> roteamento failover com health checks. "Distribuir tráfego e pular Regiões com problema" -> roteamento latency ou weighted com health checks.

Página oficial

Resiliência também depende de limites, deploys e visibilidade: cotas que travam o escalonamento, throttling que exige novas tentativas e rastreamento que acha o componente com falha.

Pontos-chave

  • Service quotas: muitas cotas são por conta por Região e ajustáveis no Service Quotas. Aumente antes que um lançamento ou um failover precise da capacidade.
  • Throttling: repita com exponential backoff e jitter, limite o número de tentativas e repita só operações idempotentes.
  • Infraestrutura imutável: nunca altere produção no lugar. Suba novos recursos (nova AMI, novo launch template) e mude o tráfego com canary ou blue/green, mantendo a versão anterior para rollback.
  • AWS X-Ray: rastreia requisições entre serviços e desenha um trace map que mostra gargalos, picos de latência e erros.
  • Aplicações legadas que não podem mudar: coloque-as atrás de um ALB com um grupo do Auto Scaling entre AZs, leve o banco para RDS Multi-AZ com RDS Proxy e proteja back ends frágeis com SQS.

Na prova

"A Região de failover não conseguiu subir instâncias suficientes" -> aumentar as service quotas na Região standby com antecedência. "Descobrir qual microsserviço adiciona latência" -> X-Ray, não só o CloudWatch Logs.