🧠FFVAcademy
📬

Messaging: SQS, SNS, EventBridge, Kinesis

13 min de leitura·+70 XP

Desacoplamento é o segredo de sistemas resilientes. Acoplar dois serviços via API síncrona sincroniza falhas — se o downstream cai, o upstream cai junto. AWS oferece 4 primitivos de messaging/streaming: SQS (filas), SNS (pub/sub broadcast), EventBridge (roteamento por regras) e Kinesis (streaming de dados). O SAA cobra quando usar cada um, features específicas (FIFO, DLQ, fanout) e combinações comuns.

📘 Resilient· 26%
📘 High-Performing· 24%

Mapa mental: qual serviço para qual problema?

🗺️ Decisão rápida de messaging
    "Preciso entregar mensagem para..."
                │
  ┌─────────────┼──────────────────┬──────────────────┐
  │             │                  │                  │
1 consumer   N consumers       Com filtros      Stream contínuo
  │             │              e roteamento      (analytics)
  ▼             ▼                  ▼                  ▼
 SQS         SNS → SQS        EventBridge         Kinesis
(fila)       (fanout)         (event bus)       (data stream)

SQS — filas para desacoplar producer de consumer

FeatureStandardFIFO
ThroughputIlimitado300 msg/s (3.000 com batching, 30.000 com high throughput mode)
OrdemBest-effortGarantida dentro do MessageGroupId
DuplicaçãoPossível (at-least-once)Exactly-once via DeduplicationId (5min window)
NamingqualquerObrigatório sufixo .fifo
CasoAlta escala, ordem não críticaPagamentos, workflows ordenados
Visibility TimeoutTempo (default 30s, max 12h) que uma mensagem fica "invisível" após ReceiveMessage. Consumer deve deletar antes de expirar ou a msg volta para fila.
Long PollingWaitTimeSeconds até 20s no ReceiveMessage. Reduz chamadas vazias e custo.
DLQ (Dead Letter Queue)Fila separada que recebe mensagens após maxReceiveCount falhas. Obrigatório em produção.
Message RetentionDefault 4 dias, max 14 dias. Após, mensagem é deletada se não consumida.
Message sizeAté 256KB no corpo. Para objetos maiores use SQS Extended Client + S3.
Delay QueueAtraso default de entrega 0–15min. Também por mensagem individual.
Server-side encryptionSSE-SQS (grátis) ou SSE-KMS.
⚠️
Visibility timeout é pegadinha: se o consumer demora mais que o timeout, a msg reaparece e outro consumer a pega também — dupla execução. Calcule: tempo de processing × 2 + margem. Ou use ChangeMessageVisibility para estender dinamicamente.
bash
# Criar FIFO com DLQ
aws sqs create-queue --queue-name jobs.fifo \
  --attributes FifoQueue=true,ContentBasedDeduplication=true,\
RedrivePolicy='{"deadLetterTargetArn":"arn:aws:sqs:...jobs-dlq.fifo","maxReceiveCount":"5"}'

# Consumir com long polling
aws sqs receive-message --queue-url ... \
  --wait-time-seconds 20 --max-number-of-messages 10

SNS — pub/sub para fanout

SNS é tópico: publisher publica uma mensagem, N subscribers recebem. Subscribers podem ser SQS, Lambda, HTTP/S, Email, SMS, Mobile Push, Kinesis Firehose.

🗺️ Fanout pattern: SNS → múltiplas SQS
     Publisher (app)
          │ PublishMessage
          ▼
    ┌─────────────┐
    │  SNS Topic  │
    │   orders    │
    └──┬──┬──┬────┘
       │  │  │
   ┌───┘  │  └────────┐
   ▼      ▼           ▼
 SQS    SQS        Lambda
notif  fulfillm.   audit
 │      │            │
 EC2   ECS         CloudWatch
Standard vs FIFOSNS também tem FIFO, compatível apenas com SQS FIFO como subscriber.
Message FilteringSubscribers aplicam filter policy em atributos da mensagem. Subscriber só recebe se bater o filtro.
Message AttributesAté 10 atributos nome-valor fora do payload. Usados para filtering e routing.
Delivery retriesHTTP/S retry com backoff configurável. SQS/Lambda tem retries nativos.
DLQ no SNSMensagens não entregues após retries vão para DLQ (SQS) do subscription.
Mobile pushAPNS (iOS), FCM (Android), Baidu, ADM, WNS. Feature nicho mas cobrada.

EventBridge — roteamento de eventos por regras

EventBridge é o evoluído do CloudWatch Events. É event bus: recebe eventos JSON, aplica regras declarativas (pattern matching em JSON) e despacha para até 5 targets por regra. Targets suportados: Lambda, Step Functions, SQS, SNS, Kinesis, ECS task, EC2 start/stop, Batch, API destination (HTTP), e ~20 outros.

Default busRecebe eventos de serviços AWS (EC2 state change, S3 events, CodePipeline, etc.).
Custom busPara seus próprios eventos de domínio (OrderPlaced, UserRegistered).
Partner busRecebe eventos de SaaS (Zendesk, Shopify, Datadog, Auth0, 50+ parceiros).
Event patternJSON matching com operadores exists, anything-but, numeric, prefix. Mais expressivo que SNS filter.
ScheduleEventBridge Scheduler substitui CloudWatch Events rule cron. Suporta one-time + recorrente + timezones.
PipesSource (SQS/Kinesis/DDB Stream/MSK) → optional filter/enrichment → Target. Substitui Lambda glue code.
Schema registryDescoberta automática de schemas + code binding para SDKs.
Archive + ReplayGuarda eventos para reprocessar depois.
Cross-accountResource policy no bus permite contas externas publicarem.
json
{
  "source": ["com.ffv.orders"],
  "detail-type": ["OrderPlaced"],
  "detail": {
    "amount": [{ "numeric": [">=", 1000] }],
    "region": ["BR", "AR"]
  }
}

SNS vs EventBridge — a diferença sutil

DimensãoSNSEventBridge
ConceitoPub/sub broadcastBus de eventos com roteamento inteligente
FiltrosPor atributos simplesPattern matching JSON complexo
ThroughputMuito alto (fanout amplo)Alto mas com overhead de matching
Targets~6 (SQS, Lambda, HTTP, email, SMS, push)20+ nativos AWS
LatênciaBaixíssima (<100ms)Baixa (~500ms)
Schema discoveryNãoSim
SaaS nativoNãoSim (Partner Event Sources)
Archive/ReplayNãoSim
Caso idealFanout simples para serviços conhecidosArquitetura event-driven complexa com múltiplas fontes

Kinesis — streaming de dados

VarianteFunçãoCaso de uso
Kinesis Data StreamsStream ordenado por shard, retenção 24h–365dReal-time ingest, múltiplos consumers independentes
Kinesis Data FirehoseDelivery managed para S3/Redshift/OpenSearch/SplunkETL simples, sem custom processing
Kinesis Data AnalyticsSQL/Flink sobre streamsAnalytics em janela de tempo (tumbling/sliding)
Kinesis Video StreamsIngest de vídeo/áudioCCTV, ML sobre vídeo, WebRTC
ShardUnidade de escalabilidade. 1MB/s ou 1.000 records/s de entrada. 2MB/s de saída por shard por consumer.
On-demand modeKinesis escala shards automaticamente. Paga por dados in/out.
Enhanced Fan-OutCada consumer ganha 2MB/s dedicado (sem dividir). Custo maior.
OrdemGarantida dentro de um shard. Use Partition Key para rotear mensagens relacionadas ao mesmo shard.
RetençãoDefault 24h, configurável até 365 dias.
ConsumersKCL (Kinesis Client Library) cuida de checkpoint em DynamoDB.
💡
SQS FIFO vs Kinesis: ambos ordenam, mas: FIFO é fila (1 consumer, remove mensagem após read); Kinesis é stream (N consumers independentes, mensagem persiste por retention). Para analytics com múltiplos pipelines lendo o mesmo dado → Kinesis. Para worker queue → SQS.

Padrões combinados comuns

📋 Evento 'NovoPedido' precisa: enviar email, debitar estoque, registrar em data warehouse

SNS → 3 SQS → 3 consumers independentes

Fanout via SNS garante que cada subscriber receba. SQS dá DLQ e desacoplamento. Se email cair, estoque e warehouse continuam.

Alt: EventBridge → 3 Lambdasmais moderno; útil se quer filtros por evento.

📋 Ingest de 1 milhão events/s de IoT para análise real-time + armazenar em S3 + alertas

Kinesis Data Streams → Lambda (alertas) + Firehose (S3)

Streams suporta throughput massivo e múltiplos consumers. Firehose entrega batches otimizados para S3. Lambda para regras ad-hoc.

Alt: MSK (Kafka managed)opção se já usa Kafka ecosystem.

Q&A estilo exame

Consumer SQS está falhando e mensagens ficam voltando. Como evitar infinite loop?

Configure uma DLQ e defina maxReceiveCount (ex: 5). Após 5 falhas, mensagem é movida para DLQ, onde você pode analisar e reprocessar manualmente.

Como garantir que mensagens SQS sejam criptografadas em trânsito e em repouso?

Em trânsito é automático (TLS obrigatório). Em repouso, habilite SSE-SQS (grátis, chave AWS) ou SSE-KMS (chave sua, com auditoria CloudTrail).

Qual serviço AWS é ideal para reagir a mudanças de estado de recursos (ex: EC2 state change, S3 put)?

EventBridge default bus recebe automaticamente esses eventos. Crie regras com pattern matching para disparar Lambda, Step Function, SNS, etc.

SQS FIFO está limitado a 300 msg/s. Como aumentar?

Ative “High Throughput for FIFO”: 3.000 msg/s por API action sem batching, 30.000 com batch de 10. Requer partitioning por MessageGroupId distribuído.
⚠️
Armadilhas: (1) SQS Standard é at-least-once — consumer deve ser idempotente; (2) FIFO ordem só dentro de MessageGroupId; (3) SNS sem SQS na ponta perde mensagens se subscriber cair; (4) Kinesis shards têm limites — planeje partition key; (5) EventBridge regra sem target é no-op silencioso.
Take-aways: SQS = fila 1:1, SNS = pub/sub N:M, EventBridge = roteamento inteligente com filtros e SaaS, Kinesis = stream real-time com retention. Combine: SNS→SQS para fanout durável; EventBridge→SQS/Lambda para event-driven moderno; Kinesis→Firehose→S3 para data lake.
🧩

Quiz rápido

3 perguntas · Acerte tudo e ganhe o badge 🎯 Gabarito