🧠FFVAcademy
🗄️

Bancos: Multi-AZ, Read Replicas e DynamoDB

17 min de leitura·+90 XP

Bancos são o tópico mais denso e o segundo mais cobrado no SAA-C03 (depois de networking). O exame cobra a distinção clara entre disponibilidade (Multi-AZ), escalabilidade de leitura (Read Replicas), performance extrema (Aurora, DAX), DR cross-region (Global Database, Global Tables) e modelagem NoSQL (LSI vs GSI). Cada um resolve um problema diferente.

📘 Resilient· 26%
📘 High-Performing· 24%
📘 Cost-Optimized· 20%

RDS — bancos relacionais gerenciados

RDS suporta MySQL, PostgreSQL, MariaDB, Oracle, SQL Server. AWS gerencia patching, backup, failover; você controla schema e queries. Não confunda RDS com Aurora — Aurora é um engine proprietário da AWS compatível com MySQL e Postgres, com storage layer separada e reescrita.

FeatureMulti-AZRead Replica
ObjetivoAlta disponibilidadeEscalar leituras
SincronizaçãoSíncronaAssíncrona (lag em ms–s)
Standby aceita reads?Não (exceto Multi-AZ cluster, 2 readers)Sim, é endpoint separado
FailoverAutomático, <60s típicoManual: promover a standalone
Cross-region?Não (intra-region)Sim (MySQL/Postgres/MariaDB)
Custo2× (standby cobrado)1× por réplica
Até1 standbyAté 15 réplicas por primário
💡
Multi-AZ Cluster (lançado 2022): variante para MySQL e Postgres com 2 readers secundários que aceitam tráfego de leitura via cluster endpoint. Cobre HA e um pouco de escalabilidade de leitura ao mesmo tempo. Mas ainda assim, para 10 réplicas, use Read Replicas.
🗺️ Multi-AZ Standard vs Multi-AZ Cluster
Multi-AZ Standard (1 primário + 1 standby)
   AZ-a             AZ-b
   ┌─────┐   sync   ┌─────┐
   │ P1  │◀────────▶│ S1  │  S1 NÃO aceita reads
   └──┬──┘          └─────┘
      │ endpoint
   App (1 reader possível só na primary)

Multi-AZ Cluster (1 writer + 2 readers)
   AZ-a       AZ-b       AZ-c
   ┌─────┐  ┌─────┐  ┌─────┐
   │ W   │──│ R1  │──│ R2  │  R1 e R2 aceitam reads
   └─────┘  └─────┘  └─────┘
      │        │        │
      └──writer-endpoint──┐
             reader-endpoint

Aurora — o banco AWS reinventado

Aurora separa compute (nodes MySQL/Postgres compatíveis) de storage (cluster volume replicado 6× em 3 AZs, storage auto-expanding até 128TB). Até 15 read replicas, failover < 30s, writer endpoint + reader endpoint. 3× a performance de MySQL, 5× de Postgres (segundo AWS).

Storage layerSSD distribuído, auto-heal, tolera perda de 2 cópias em escrita e 3 em leitura.
EndpointsWriter (primário), Reader (load balance entre réplicas), Custom (subset específico), Instance (uma réplica).
Aurora Serverless v2Escala fine-grained em ACUs (0.5–128). Bom para workloads variáveis ou novos apps sem benchmark.
Aurora Global DatabaseReplicação cross-region em storage layer: RPO <1s, RTO <1min. Até 5 regiões secundárias leitoras + 1 primária.
Fast Database CloningClone de um cluster em segundos com copy-on-write. Ideal para testes destrutivos.
BacktrackRewind do cluster inteiro até 72h atrás, sem restore (apenas Aurora MySQL).
RDS ProxyPool de conexões gerenciado. Reduz conexões para DB e sobrevive a failovers sem deixar apps reconectar.

📋 SaaS multi-tenant global, usuários em 4 continentes, precisa consistência <1s em reads globais

Aurora Global Database

Storage-layer replication cross-region com RPO <1s. Leitores regionais servem read traffic localmente. Promoção em <1min se primário cair.

Alt: DynamoDB Global Tablesse o modelo permite NoSQL; multi-active write.

DynamoDB — NoSQL serverless key-value e document

DynamoDB é o NoSQL da AWS: schema-less, partitioned by hash, SLA de latência single-digit-ms em qualquer escala, multi-AZ sempre, sem admin de instâncias. Paga por consumo (RCU/WCU) ou on-demand.

Modo de capacityCobrançaCaso
On-DemandPor request ($/milhão)Tráfego imprevisível, novos apps, spikes
ProvisionedRCU/WCU provisionadasCarga previsível, custo menor em escala
Auto ScalingProvisioned com ajuste automáticoIntermediário entre os dois
ÍndiceLSIGSI
Partition KeyMesma da tabela baseQualquer atributo
Sort KeyDiferenteQualquer atributo (opcional)
CriaçãoSó na criação da tabelaA qualquer momento
CapacityCompartilhada com tabela basePrópria (RCU/WCU separadas)
ConsistênciaForte suportadaApenas eventual (nunca strongly consistent)
Limite5 LSIs por tabela20 GSIs por tabela (padrão)
⚠️
Pegadinha clássica do exame:“preciso consultar por outro atributo que não é a PK da tabela” → GSI. “preciso consultar com mesma PK mas outra sort key” → LSI. Se o enunciado diz “strongly consistent reads” em índice, LSI é a única opção.
DAX (DynamoDB Accelerator)Cache in-memory ms→μs. Transparente para aplicação, compatível com a API DynamoDB. Para workloads read-heavy extremos.
DynamoDB StreamsOrdered change log por partição. Retenção 24h. Trigger natural para Lambda (CDC).
Global TablesMulti-region active-active. Usa Streams. Last-writer-wins em conflito. Até 5 regiões.
TTLAtributo timestamp → DynamoDB apaga item automaticamente (delay de até 48h). Grátis.
TransactionsACID em até 100 items entre tabelas. Custa 2× RCU/WCU.
PITRPoint-in-time recovery de 35 dias. Roll-back por timestamp. Não é o mesmo que backup.
bash
# Criar tabela on-demand com PK composta
aws dynamodb create-table \
  --table-name Orders \
  --attribute-definitions \
    AttributeName=UserId,AttributeType=S \
    AttributeName=OrderId,AttributeType=S \
  --key-schema \
    AttributeName=UserId,KeyType=HASH \
    AttributeName=OrderId,KeyType=RANGE \
  --billing-mode PAY_PER_REQUEST

# Query por PK com condição na SK
aws dynamodb query --table-name Orders \
  --key-condition-expression "UserId = :u AND begins_with(OrderId, :p)" \
  --expression-attribute-values '{":u":{"S":"u123"},":p":{"S":"2026"}}'

Cálculo de RCU/WCU (nível SAA)

1 RCU1 strongly-consistent read de 4KB/s OU 2 eventually-consistent de 4KB/s OU 0.5 transactional de 4KB/s.
1 WCU1 write de 1KB/s. Transacional = 2 WCU.
Round-upSempre arredonda para cima. Ler item de 5KB = 2 RCU (não 1,25).
💡
Exemplo: aplicação faz 300 reads eventualmente consistentes de 8KB/s + 100 writes de 2KB/s.
Reads: 300 × 2KB (arredondar 8KB = 2×4KB) × 0,5 (eventual) = 300 RCU.
Writes: 100 × 2 (2KB arredonda para 2×1KB) = 200 WCU.

Estratégias de DR para bancos

EstratégiaRPORTOCusto
Backup & Restore (snapshot cross-region)minutos–horashoras$
Pilot Light (standby mínimo replicando)segundos–minutos10–30 min$$
Warm Standby (stack reduzida ativa)segundosminutos$$$
Multi-Site Active-Active~0segundos$$$$

📋 E-commerce grande: checkout não pode cair, tolera 5s de stale reads em catálogo

Aurora Global Database (checkout) + DynamoDB Global Tables (catálogo)

Checkout precisa de consistência e failover rápido → Aurora Global. Catálogo tolera eventual consistency e pode escalar multi-master → DynamoDB Global.

Alt: Tudo em Aurora Globalsimpler mas perde multi-active write para catálogo.

Q&A de exame

RDS Read Replica promovida — o que acontece com o primário original?

Réplica vira primário standalone. O antigo primário segue normal, mas a replicação entre eles para. Você normalmente re-apontaria a aplicação para a nova primária em cenário de DR.

Por que escolher Aurora Serverless v2 em vez de instances provisioned?

Workload variável (ex: staging usado em horário comercial). v2 escala em ACUs finas em segundos, sem gap de capacity. v1 (legacy) tinha cold start longo — v2 é hot. Ideal também quando você não sabe ainda o tamanho certo.

DynamoDB retornou ProvisionedThroughputExceededException — causa e fix?

Ultrapassou RCU/WCU provisionado ou “hot partition” (chave de partição mal distribuída). Fixes: (1) migrar para On-Demand; (2) melhorar distribuição da PK (adicionar hash prefix); (3) ativar Auto Scaling com alvo 70%.

Qual a diferença entre DAX e ElastiCache na frente do DynamoDB?

DAX é transparente e compatível com a SDK do DynamoDB — só trocar endpoint. Não exige mudança de código nem estratégia de invalidação. ElastiCache exige cache-aside: você lê cache, fallback para Dynamo, escreve cache. Muito mais código e edge cases.
⚠️
Armadilhas recorrentes:(1) Multi-AZ standby NÃO serve reads; (2) LSI exige criação no create-table — não dá para adicionar depois; (3) Aurora Global RPO “near-zero”, não “zero”; (4) DAX é para DynamoDB apenas, não Aurora; (5) PITR em DynamoDB não é backup — pode ser deletado com a tabela se não houver backup separado.
Take-aways: Multi-AZ = HA, Read Replicas = escalar leituras, Aurora = performance + cluster volume, Aurora Global = DR cross-region relacional, DynamoDB = NoSQL serverless com GSI/LSI/DAX/Global Tables. Escolha pelo workload: OLTP relacional transacional → RDS/Aurora; key-value altíssima escala → DynamoDB.
🧩

Quiz rápido

3 perguntas · Acerte tudo e ganhe o badge 🎯 Gabarito