Resiliência da arquitetura de referência

TL;DR

A arquitetura serverless de referência já nasceu com um pedaço de resiliência de graça — Lambda distribuída entre AZs, S3 com 11 noves de durabilidade, DynamoDB replicado dentro da região — porque a AWS constrói esses serviços gerenciados sobre a mesma disciplina Multi-AZ das duas primeiras notas deste galho. Mas “de graça” tem limite: sobreviver a uma região inteira caindo, a uma tabela apagada por engano, ou a um pico de demanda que dobra o SLA de disponibilidade exige uma decisão consciente de RTO/RPO, e essa decisão custa dinheiro em proporção direta à ambição. Este capstone fecha o galho aplicando as cinco notas anteriores à arquitetura de referência inteira — o que ela ganha de graça, onde ela ainda tem um ponto único de falha, que estratégia de DR (Backup & Restore, Pilot Light, Warm Standby, Active-Active) cada camada merece — e fecha o Bloco 4 inteiro amarrando IaC, Observabilidade, Segurança, FinOps e Resiliência na única frase que resume “operar em produção”: desenhar não basta, é preciso declarar, enxergar, proteger, pagar certo e sobreviver.

O problema: o diagrama bonito tinha um SPOF escondido

Volte ao diagrama do capstone do Bloco 3. Um pedido de e-commerce entra pelo API Gateway, uma Lambda valida, o Step Functions orquestra pagamento e estoque, o EventBridge avisa quem precisa saber, o resultado pousa no DynamoDB e no S3. Peça por peça, cada componente parece robusto — afinal, são todos serviços gerenciados da AWS. Mas “gerenciado” não é sinônimo de “resiliente a qualquer coisa”, e é fácil confundir os dois.

Pergunte, camada por camada: e se a região us-east-1 inteira tiver um evento de correlação — a mesma classe de incidente que a nota 03 deste galho descreveu, onde múltiplas AZs degradam juntas por uma causa comum de rede? O API Gateway daquela região para de aceitar requisições. O Step Functions não tem para onde promover — ele não existe fora da região onde foi definido. O DynamoDB, a menos que você tenha explicitamente configurado Global Tables, tem uma única cópia primária regional. E o pior cenário nem precisa de uma região inteira cair: um DeleteTable acidental, ou um deploy que apaga o bucket errado, replica sua própria destruição para toda AZ da região em milissegundos — porque a replicação síncrona que salva contra falha de hardware não distingue “hardware quebrou” de “humano cometeu um erro”.

Este é o ponto exato em que o capstone do Bloco 3 parou de propósito: ele nomeou resiliência como uma das cinco perguntas em aberto e disse “o galho 20 responde”. Chegou a hora de responder.

Fronteira com as cinco notas anteriores

Se você não leu as notas 01-05 deste galho, este capstone pressupõe o vocabulário delas: Multi-AZ e HA (notas 01-02), RTO/RPO e as quatro estratégias de DR (nota 03), replicação cross-region e DynamoDB Global Tables (nota 04), backup/PITR e teste de recuperação (nota 05). Aqui a aplicação é ponta a ponta, não um mecanismo novo.

O que a arquitetura de referência já ganha de graça

Antes de desenhar o que falta, é preciso separar honestamente o que os serviços gerenciados já entregam sem nenhuma configuração extra — porque gastar esforço redesenhando algo que já está resolvido é o oposto de julgamento sênior.

  • Lambda: cada invocação roda dentro da infraestrutura gerenciada da própria Lambda, distribuída pelas AZs da região automaticamente — você não escolhe uma AZ para sua função, a Lambda escolhe por você e reparte a carga. Se você conectar a função a uma VPC própria (para acessar um RDS privado, por exemplo), a prática recomendada pela AWS é fornecer sub-redes em pelo menos duas AZs — a resiliência aqui já é responsabilidade compartilhada, mas o piso é alto.
  • S3: a documentação oficial da AWS declara que S3 Standard e a maioria das classes de armazenamento replicam objetos redundantemente em no mínimo três Availability Zones dentro da região, com durabilidade projetada de 99.999999999% (11 noves) e disponibilidade de 99.99% ao ano — e são desenhados para sobreviver à perda de uma AZ inteira sem intervenção.
  • DynamoDB: cada tabela replica automaticamente entre múltiplas AZs da região por padrão — isso é o “Multi-AZ” do DynamoDB, sempre ligado, sem nenhum toggle. O que não vem de graça é a réplica cross-region (Global Tables, nota 04) — essa é opt-in e paga à parte.
  • API Gateway e EventBridge: como serviços totalmente gerenciados, operam com redundância multi-AZ nativa dentro da região onde o recurso foi criado — de novo, dentro da região, não entre regiões.
flowchart TB
    subgraph Regiao["us-east-1 — o que já é resiliente de graça"]
        direction TB
        APIGW["API Gateway<br/>multi-AZ nativo"]
        Lambda["Lambda<br/>multi-AZ nativo,<br/>escala automática"]
        SF["Step Functions<br/>multi-AZ nativo"]
        EB["EventBridge<br/>multi-AZ nativo"]
        DDB[("DynamoDB<br/>replicado em ≥3 AZs<br/>dentro da região")]
        S3[("S3<br/>≥3 AZs, 11 noves<br/>de durabilidade")]
    end

    subgraph SPOF["O que É um SPOF regional, sem configuração extra"]
        direction TB
        R1["Se us-east-1 tiver um evento<br/>de correlação (nota 03),<br/>tudo acima para junto"]
        R2["DynamoDB sem Global Tables =<br/>uma cópia primária, uma região"]
        R3["Delete/corrupção replica<br/>para as 3 AZs em ms —<br/>Multi-AZ não é backup"]
    end

    Regiao -.->|"a menos que você<br/>desenhe cross-region"| SPOF

"Serverless" não é sinônimo de "sem ponto único de falha"

O erro mais comum de quem aprendeu compute serverless é achar que, por não gerenciar servidor, também não precisa pensar em resiliência — a AWS “já cuida disso”. Ela cuida da resiliência dentro da região. A resiliência entre regiões é uma decisão de arquitetura que você precisa tomar e pagar, exatamente como seria com EC2. O serverless move o piso de resiliência para cima; não remove o teto que falta desenhar.

A árvore de decisão: RTO/RPO até a estratégia de DR

A nota 03 já deu as quatro estratégias canônicas da AWS. O trabalho de arquitetura real é decidir, camada por camada da arquitetura de referência, qual delas se aplica — e a decisão nasce da mesma pergunta de sempre: quanto custa, por minuto, esse componente estar fora do ar ou perder dado?

flowchart TD
    Start(["Qual componente da<br/>arquitetura de referência?"]) --> Q1{"Perda de dado é<br/>aceitável em horas?"}
    Q1 -->|"Sim — ex.: exports de BI,<br/>staging"| BR["Backup & Restore<br/>RTO: horas · RPO: horas<br/>Custo: menor"]
    Q1 -->|"Não"| Q2{"Precisa voltar em<br/>minutos, não segundos?"}
    Q2 -->|"Sim, com núcleo<br/>mínimo pré-provisionado"| PL["Pilot Light<br/>RTO/RPO: minutos<br/>Custo: baixo-médio"]
    Q2 -->|"Precisa de capacidade<br/>reduzida já rodando"| WS["Warm Standby<br/>RTO/RPO: minutos<br/>Custo: médio-alto"]
    Q2 -->|"Não — precisa de<br/>segundos a quase-zero"| Q3{"O dado suporta<br/>multi-master<br/>(conflito tolerável)?"}
    Q3 -->|"Sim — catálogo, sessão,<br/>carrinho"| AA["Multi-Site Active/Active<br/>RTO: ~zero · RPO: ~zero<br/>Custo: maior"]
    Q3 -->|"Não — pagamento,<br/>autorização financeira"| AA2["Active/Active com<br/>reconciliação de negócio<br/>(idempotência, ledger)"]

    BR -.-> C1["Checkout: NÃO<br/>Relatório interno: SIM"]
    PL -.-> C2["API de catálogo interno:<br/>candidato razoável"]
    WS -.-> C3["Step Functions +<br/>Lambda de checkout:<br/>candidato natural"]
    AA -.-> C4["DynamoDB Global Tables<br/>para catálogo/carrinho"]

Aplicando essa árvore à arquitetura de referência do Bloco 3, camada por camada:

CamadaCriticidadeRTO/RPO alvoEstratégiaPor quê
API Gateway + Lambda de validação de pedidoTier 1 — essencialminutos / minutosWarm Standby (stack replicada via IaC noutra região, tráfego frio até failover)Stateless, fácil de reimplantar; o gargalo é o dado, não o compute
Step Functions “Processar Pedido”Tier 1 — essencialminutos / minutosWarm Standby (definição do workflow versionada via IaC nas duas regiões)Definição de workflow é declarativa — reimplantar é rápido se já está no repositório
DynamoDB (pedidos, carrinho)Tier 0-1, depende do dadosegundos-minutos / ~zeroGlobal Tables (Active/Active) para carrinho/catálogo; Warm Standby + backup para pedidos financeirosCarrinho tolera last-writer-wins; pedido financeiro exige reconciliação, não apenas replicação
S3 (recibos, notas fiscais)Tier 2 — importantehoras / minutosCross-Region Replication (S3 CRR) + versionamentoJá é durável dentro da região; CRR cobre perda de região a custo relativamente baixo
EventBridge (fan-out de notificação)Tier 2-3horas / minutosBackup & Restore (regra recriada via IaC, replay de eventos perdidos aceitável)Perder alguns minutos de eventos de notificação é inconveniente, não catastrófico
Fargate (geração de PDF)Tier 2dezenas de min. / minutosPilot Light (cluster mínimo definido, escala sob demanda no failover)Processo assíncrono, atraso tolerável se a fila (SQS) absorver o backlog

Verificado 2026-07-24

A tabela de nines de S3 (99.999999999% durabilidade, 99.99% disponibilidade, redundância em no mínimo 3 AZs por região) vem diretamente de docs.aws.amazon.com/AmazonS3/latest/userguide/DataDurability.html. Confirme antes de reusar em contexto de SLA contratual — “designed to provide” é o texto oficial, não uma garantia contratual formal (a SLA contratual de disponibilidade é um documento separado, com créditos de serviço).

O triângulo: custo × resiliência × complexidade

A nota 03 do galho de FinOps já avisou: multi-região dobra a conta, e resiliência compete com custo pelo mesmo orçamento. Vale nomear isso como triângulo, porque as três pontas puxam em direções opostas e nenhuma solução otimiza as três ao mesmo tempo.

flowchart TB
    subgraph Triangulo["O triângulo resiliência × custo × complexidade"]
        R["Resiliência<br/>(RTO/RPO agressivo)"]
        C["Custo<br/>(capacidade ociosa,<br/>replicação, egress)"]
        X["Complexidade<br/>(operação, times,<br/>superfície de falha)"]
    end
    R ---|"mais RTO/RPO agressivo<br/>= mais capacidade parada"| C
    C ---|"barato só cortando<br/>redundância = risco"| R
    R ---|"multi-master, resolução<br/>de conflito, dois times<br/>operando duas regiões"| X
    X ---|"cada camada nova de<br/>failover é mais uma coisa<br/>que pode quebrar sozinha"| R

Warm Standby de uma região secundária inteira não é só o custo de infraestrutura parada — é o custo de manter duas cópias de tudo sincronizadas via IaC (galho 16), observadas nas duas regiões (galho 17), com a mesma superfície de segurança duplicada (galho 18). Active/Active com Global Tables multiplica isso: agora você tem resolução de conflito por last-writer-wins rodando em produção, um vetor de bug que Backup & Restore nunca teria.

A decisão certa nunca é “o máximo de resiliência que dá pra comprar” — é o ponto do triângulo que a criticidade real do workload justifica, e nem toda camada da mesma arquitetura fica no mesmo ponto. O exemplo da nota 02 se repete aqui em escala de arquitetura inteira: o checkout financeiro e o painel de relatório interno da mesma aplicação legitimamente vivem em pontos diferentes desse triângulo, e forçá-los ao mesmo padrão é desperdício de orçamento numa ponta e risco inaceitável na outra.

A armadilha do "já que estamos migrando, vamos fazer active-active em tudo"

Um projeto de DR costuma nascer depois de um susto real — uma queda de região, uma auditoria de compliance, um cliente grande perguntando sobre RTO no contrato. A resposta de pânico é superdimensionar: active-active em toda a arquitetura, porque “nunca mais”. Isso costuma dobrar o custo de infraestrutura permanentemente (galho 19) e adicionar uma superfície de complexidade operacional (dois ambientes vivos, resolução de conflito, dobro de superfície de IAM) que o time não tinha antes — trocando o risco de “região cair” pelo risco, maior no dia a dia, de “operar dois ambientes ativos mal entendidos”. A árvore de decisão desta nota existe para conter esse impulso: workload por workload, não arquitetura inteira de uma vez.

Assista: 6 Pillars of the AWS Well-Architected Framework (you should really know this)

Canal: Be A Better Dev | Duração: ~19min | Idioma: EN

Situa o pilar de Reliability (o motor por trás do triângulo desta nota) ao lado do pilar de Cost Optimization — dá o pano de fundo do framework inteiro que justifica por que a AWS documenta resiliência e custo como forças competindo pelo mesmo orçamento, e não como dois assuntos separados. Trecho de destaque [8:10]: “all of application building is for nothing if we can’t ensure their application remain stable”

🎬 Assistir no YouTube

Assista: AWS Summit DC 2021 — Increase resiliency with cloud-based disaster recovery

Canal: AWS Events | Duração: ~42min | Idioma: EN

Talk oficial da AWS que percorre o mesmo espectro de estratégias de DR desta trilha (backup simples até multi-site) sempre amarrando cada nível a seu overhead de custo — o mesmo raciocínio “quanto mais RTO/RPO agressivo, mais capacidade parada” que o triângulo desta nota formaliza em diagrama. Trecho de destaque [4:04]: “recover quickly but there’s a trade-off, there’s usually larger overhead costs”

🎬 Assistir no YouTube

Lente dupla: a resiliência completa da AWS vs a mais simples da DigitalOcean

Esta é a nota do galho onde a distância entre os dois provedores fica mais visível em escala de sistema inteiro — e vale nomeá-la sem meio-termo, como as notas anteriores já fizeram peça por peça.

Na AWS, a arquitetura de referência inteira tem um caminho documentado para cada ponta do triângulo: Global Tables para dado multi-master, Aurora Global Database para relacional cross-region, S3 CRR para objeto, Route 53 health-check-based failover para roteamento, Step Functions e EventBridge redeployáveis via IaC em segundos. O prêmio inteiro do Well-Architected Framework em Reliability foi desenhado em cima desse kit.

Na DigitalOcean, a mesma arquitetura — App Platform, Functions, Managed Databases, Spaces, Managed Kafka — tem Multi-AZ dentro de uma região só parcialmente (standby nodes em bancos gerenciados, já coberto no galho 9 e na nota 02 deste galho), e nenhuma primitiva nativa de replicação multi-região automática: sem Global Tables, sem CRR nativo pro Spaces (a orientação oficial é rclone manual, como a nota 04 já documentou), sem orquestrador de workflow pra reimplantar via IaC em segundos. Um plano de DR cross-region na DO é inteiramente construído pela sua equipe — infraestrutura replicada por Terraform, sincronização de dado por job próprio, roteamento de failover por um DNS provider terceiro com health check.

Isso não é a DO “perdendo” a comparação — é a DO sendo honesta sobre o que ela é: uma plataforma que entrega excelente HA dentro de uma região a um custo e complexidade muito menores, e deixa explicitamente de fora o produto gerenciado de DR cross-region que a AWS cobra caro para oferecer. Para a maioria dos workloads Tier 2-3 desta própria tabela — o catálogo de baixa criticidade, o painel interno — a DO com backup automático diário já é suficiente, e forçar uma arquitetura multi-região sobre ela seria construir, do zero, algo que a AWS já vende pronto. A pergunta certa nunca é “qual provedor é mais resiliente” — é “qual workload precisa de qual nível, e qual provedor entrega esse nível ao menor custo total”.

Necessidade de DRAWSDigitalOceanHonestidade
Multi-master cross-region (dado)DynamoDB Global Tables / Aurora Global DBSem paridade — replicação manualAWS tem produto; DO exige engenharia própria
Objeto cross-regionS3 Cross-Region Replication (nativo)rclone manual entre SpacesAWS automatiza; DO documenta workaround
Failover de DNS por health checkRoute 53DNS gerenciado sem failover nativo documentado — provider terceiroLacuna real, não hipótese
Reimplantação de stack inteira noutra região via IaCTerraform/CloudFormation com provider AWS maduro, multi-região trivialTerraform com provider DO, multi-região possível mas sem produto de orquestraçãoAmbos suportam IaC; AWS tem mais peças pra orquestrar automaticamente
Backup automático dentro da regiãoRDS/Aurora backup + PITR até 35 diasBackups automáticos diários, mesmo datacenterParidade real dentro da região (nota 05)

Azure e GCP — só nomenclatura

ConceitoAWSAzureGCP
Réplica multi-master cross-regionDynamoDB Global TablesCosmos DB multi-region writeCloud Spanner / Firestore multi-region
Objeto replicado cross-regionS3 Cross-Region ReplicationGeo-redundant Storage (GRS)Multi-region buckets (Cloud Storage)
Failover de DNS por health checkRoute 53Traffic ManagerCloud DNS + Load Balancing
Orquestração de DR (runbook automatizado)AWS Elastic Disaster Recovery (DRS)Azure Site RecoveryNão há produto direto equivalente — orquestração via scripts/Deployment Manager

Síntese do Bloco 4: cinco disciplinas, um único objetivo

O Bloco 3 desenhou a arquitetura. Este bloco a fez sobreviver em produção, e vale nomear como as cinco peças se encaixam, porque nenhuma isolada resolve “operar”:

  • IaC (galho 16) declara a arquitetura como código — sem isso, replicar a stack de Warm Standby numa segunda região seria recriar tudo manualmente no console, algo que nenhum RTO de minutos sobrevive.
  • Observabilidade (galho 17) enxerga o sistema — sem métricas e alarmes, um health check de Route 53 não teria o que monitorar, e você descobriria a queda de região pelo cliente reclamando, não pelo alarme.
  • Segurança (galho 18) protege cada camada — uma segunda região replicada é uma segunda superfície de IAM, VPC e segredo que precisa da mesma disciplina de profundidade da primeira, ou você dobrou o risco junto com a resiliência.
  • FinOps (galho 19) controla o custo — é a disciplina que impede o triângulo desta nota de virar “resiliência sem teto”, perguntando sempre se o SLA justifica o gasto.
  • Resiliência (este galho) garante que, quando as quatro disciplinas acima falharem juntas — código com bug, alarme silencioso, credencial vazada, orçamento estourado — ainda existe um plano de RTO/RPO para o pior dia.

Nenhuma das cinco substitui as outras. IaC sem observabilidade é infraestrutura cega. Segurança sem FinOps é um cofre caro demais para manter. Resiliência sem as quatro anteriores é um plano de papel que ninguém testou (nota 05) e ninguém paga para manter vivo. Operar em produção é a interseção das cinco, não a soma.

O que vem a seguir

Este capstone fecha o galho 20 e, com ele, o Bloco 4 inteiro desta trilha — os cinco galhos que ensinaram a manter uma arquitetura viva depois de desenhada. O Bloco 5 (Provedores e maestria) é onde a trilha para de tratar AWS e DigitalOcean como lentes paralelas e mergulha fundo em cada um: consolidação AWS, consolidação DigitalOcean, o panorama de multi-cloud e portabilidade real (o que significa, de fato, não ficar preso a um provedor), e finalmente a preparação para a certificação AWS Solutions Architect Associate — o exame que valida, formalmente, que todo esse conhecimento também é reconhecido pelo mercado.

Fontes