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.
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
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
| Tipo | Quando usar |
|---|---|
| ALB | Camada 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. |
| NLB | Camada 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. |
| GWLB | Camada 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
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,HibernatedouRunningpara 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.
Disponibilidade no RDS
Amazon RDS
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ção | O que entrega |
|---|---|
| Multi-AZ DB instance | HA. Standby síncrono, sem leitura, failover normalmente de 60 a 120 segundos. |
| Multi-AZ DB cluster | HA e leituras. 2 standbys legíveis, failover normalmente abaixo de 35 segundos. |
| Réplica de leitura | Escala de leitura e DR. Assíncrona, até 15, promoção manual. |
| Aurora Replica | Os dois. Até 15 por cluster no storage compartilhado, alvo de failover automático. |
Aurora
Amazon Aurora
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
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
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.
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.