AWS

14 mai, 2026

AWS Cellular Architecture: Escalando Sistemas Event-Driven com DynamoDB, SNS e SQS

Publicidade

Na era cloud-native, escalar uma arquitetura frequentemente resulta em um sistema massivo e altamente interconectado, onde uma única falha pode causar uma indisponibilidade global. A Arquitetura Celular (Cellular Architecture) resolve esse problema ao decompor o sistema em domínios independentes e isolados de falha, chamados de cells.

Neste tutorial, você irá construir uma arquitetura altamente resiliente e orientada a eventos utilizando o padrão celular combinado com um fluxo assíncrono baseado em:

  • DynamoDB Streams

  • AWS Lambda

  • Amazon SNS

  • Amazon SQS

Em vez de operar com um único plano de dados monolítico, você implantará múltiplas cópias idênticas da infraestrutura (cells). Uma camada fina de roteamento na borda irá inspecionar as requisições de entrada e encaminhá-las para a célula apropriada com base em uma chave de partição, como o ID do tenant.

Se um evento problemático (poison pill) ou uma degradação localizada afetar uma célula específica, o impacto permanecerá restrito apenas àquela célula, garantindo máxima disponibilidade para os demais tenants do sistema.

Essa abordagem cria um limite definitivo de isolamento de falhas para sistemas distribuídos críticos.

2. Pré-requisitos

Para executar essa arquitetura, você precisará:

  • Uma conta AWS ativa com permissões administrativas.

  • Terraform versão 1.3.0 ou superior instalado.

  • AWS CLI configurado com suas credenciais.

  • Conhecimento sobre:

    • Control Plane vs Data Plane

    • Domain-Driven Design (DDD)

    • Arquiteturas orientadas a eventos

    • DynamoDB, Lambda, SNS e SQS

3. Passo a Passo

Passo 1: Definindo o módulo da célula do Data Plane

O que fazer

Crie um módulo reutilizável no Terraform encapsulando todo o pipeline orientado a eventos:

  • DynamoDB

  • SNS

  • SQS

  • Lambdas

Esse módulo representa uma célula isolada e autocontida.

Por que isso é importante

O principal fundamento da arquitetura celular é a repetibilidade.

Ao transformar o plano de dados em um módulo, cada célula se torna uma cópia idêntica e determinística da infraestrutura.

Isso garante que:

  • Uma fila SQS sobrecarregada na célula Alpha não impacte a Beta.

  • Um throttling no DynamoDB de uma célula não afete as demais.

  • O isolamento estrutural seja mantido.

Exemplo Terraform

variable "cell_id" {
description = "Identificador único da célula"
type = string
}
resource "aws_dynamodb_table" "cell_table" {
name = "app-data-cell-${var.cell_id}"
billing_mode = "PAY_PER_REQUEST"
hash_key = "id"
attribute {
name = "id"
type = "S"
}
stream_enabled = true
stream_view_type = "NEW_AND_OLD_IMAGES"
}
resource "aws_sns_topic" "cell_topic" {
name = "processing-topic-cell-${var.cell_id}"
}
resource "aws_sqs_queue" "cell_queue" {
name = "processing-queue-cell-${var.cell_id}"
}

Passo 2: Instanciando células independentes

O que fazer

No Terraform principal, instancie múltiplas células independentes.

Por que isso importa

Aqui você cria os limites físicos de isolamento.

Exemplo:

  • Clientes enterprise podem possuir células dedicadas.

  • Problemas de “noisy neighbor” deixam de existir.

  • Você prepara o ambiente para expansão multi-cloud ativa no futuro.

Exemplo

module "cell_alpha" {
source = "./modules/event_driven_cell"
cell_id = "alpha"
}
module "cell_beta" {
source = "./modules/event_driven_cell"
cell_id = "beta"
}
module "cell_gamma" {
source = "./modules/event_driven_cell"
cell_id = "gamma"
}

Passo 3: Criando o Control Plane

O que fazer

Crie uma tabela global no DynamoDB responsável por mapear:

  • Tenant ID

  • Cell ID

Por que isso importa

A camada de roteamento precisa descobrir dinamicamente para qual célula enviar cada requisição.

Esse mapeamento não pode ser hardcoded.


Exemplo

resource "aws_dynamodb_table" "tenant_routing_map" {
name = "global-tenant-cell-mapping"
billing_mode = "PAY_PER_REQUEST"
hash_key = "tenant_id"
attribute {
name = "tenant_id"
type = "S"
}
}

Passo 4: Implementando o Cell Router

O que fazer

Crie:

  • Amazon API Gateway

  • Lambda Router

Esse Lambda irá:

  1. Extrair o Tenant ID da requisição

  2. Consultar a tabela global de roteamento

  3. Descobrir a célula correta

  4. Inserir os dados no DynamoDB daquela célula

Por que isso importa

O roteador deve ser extremamente fino (thin router).

Ele não deve conter regras de negócio.

Toda lógica deve permanecer dentro das células.

Após o roteamento inicial, o pipeline assíncrono assume:

DynamoDB Streams
→ Producer Lambda
→ SNS
→ SQS
→ Consumer Lambda

Exemplo Terraform

resource "aws_lambda_function" "cell_router" {
function_name = "global-edge-router"
handler = "router.handler"
runtime = "nodejs20.x"
}

 Problemas comuns

Dependências entre células

O erro mais grave é permitir que células compartilhem recursos.

Exemplo errado:

  • Uma célula consultar dados diretamente de outra

  • Compartilhar um banco RDS centralizado

  • Compartilhar buckets críticos

Isso quebra completamente o isolamento.

Cada célula deve possuir seus próprios dados.

Gargalo no Control Plane

Se o Router consultar o DynamoDB a cada requisição:

  • A latência aumenta

  • O DynamoDB sofre throttling

Solução:

  • Implementar cache em memória no Lambda Router.

Poison Pills e falhas assíncronas

Se um payload inválido quebrar o Consumer Lambda:

  • A mensagem ficará circulando na fila SQS.

A vantagem da arquitetura celular é que isso afeta apenas uma célula.

A solução correta é utilizar:

  • Dead Letter Queue (DLQ)

5. Conclusão

Ao combinar arquitetura celular com sistemas orientados a eventos, você cria uma plataforma extremamente resiliente e com blast radius controlado.

A separação entre:

  • Control Plane global

  • Data Planes isolados

garante que falhas permaneçam matematicamente contidas.

Com Terraform Modules, você consegue:

  • Padronização

  • Escalabilidade linear

  • Reprodutibilidade

  • Isolamento de falhas

Conforme a arquitetura evoluir, você pode integrar:

  • Amazon Route 53 ARC

  • Estratégias de disaster recovery

  • Cell shifting automático

  • Arquiteturas multi-cloud ativas

O resultado é uma infraestrutura preparada para aplicações distribuídas de missão crítica em larga escala.