Transmissão de dados com DynamoDB

Desenvolvendo Aplicações na AWS

Ricardo Sueiras

Principal Technologist

Fundamentos do DynamoDB Streams

 

fundamentos

  • Reaja a mudanças no banco quase em tempo real.
  • Baseado em padrões orientados a eventos.
  • Cada insert, modify ou delete gera um registro no stream.
  • Crie apps reativos sem fazer polling na tabela.
  • Desativado por padrão: ative com StreamSpecification.
  • Cada stream tem seu próprio ARN, distinto do ARN da tabela.
Desenvolvendo Aplicações na AWS

Período de retenção

 

retenção

  • Registros do stream ficam retidos por 24 horas.
    • A retenção é fixa e não pode ser configurada.
  • Mudar o tipo de visualização exige recriar o stream.
    • Um novo stream gera um novo ARN de stream.
Desenvolvendo Aplicações na AWS

Streams e unidades de capacidade de leitura do DynamoDB

 

rcu

  • Leituras do stream NÃO consomem suas RCUs (read capacity units).
  • Ativar streams não impacta o throughput provisionado.
Desenvolvendo Aplicações na AWS

Registros do stream

  • Cada registro de stream traz metadados descrevendo a mudança.
  • Streams capturam três tipos de evento:
    • INSERT
    • MODIFY
    • REMOVE

 

registros de stream

Desenvolvendo Aplicações na AWS
  • Tipos de visualização controlam quais dados vão para cada registro.
    • KEYS_ONLY: apenas as chaves de partição e ordenação.
    • NEW_IMAGE: o item completo após a mudança.
    • OLD_IMAGE: o item completo antes da mudança.
    • NEW_AND_OLD_IMAGES: o item antes e depois.
  • NEW_AND_OLD_IMAGES é o padrão para auditoria.
  • Obrigatório para DynamoDB Global Tables.

visualizações de stream

Desenvolvendo Aplicações na AWS
  • Streams preservam a ordem por chave de partição.
  • Lambda processa registros em lotes.
    • Faz checkpoint do progresso após cada lote bem-sucedido.
    • Lotes com falha são reprocessados.
    • As tentativas continuam até sucesso ou expirar.

 

ordenação

Desenvolvendo Aplicações na AWS

 

streams e aws lambda

  • Lambda é o consumidor de stream mais comum.
  • Usa um mapeamento de fonte de eventos baseado em polling.
  • Lê registros do stream.
  • Invoca sua função com lotes de registros.
Desenvolvendo Aplicações na AWS

Padrão arquitetural

 

padrões de arquitetura

  • Um padrão ponta a ponta comum:
    • Uma atualização de item chega ao DynamoDB.
    • A mudança gera um registro no stream.
    • O registro aciona o Lambda para processamento.
Desenvolvendo Aplicações na AWS

Escalabilidade

 

escalabilidade

  • Streams são divididos internamente em shards.
    • Semelhante ao Kinesis Data Streams.
  • Cada shard permite até dois consumidores simultâneos.
    • Ultrapassar esse limite causa throttling de leitura.
Desenvolvendo Aplicações na AWS
  • A simultaneidade do Lambda escala com a contagem de shards.
  • Faça tuning do processamento com:
    • BatchSize: máx. de registros por invocação.
    • MaximumBatchingWindow: espera antes de um lote parcial.
    • MaximumRetryAttempts: tentativas antes do destino de falhas.
    • MaximumRecordAgeInSeconds: descarta registros após essa idade.
    • ParallelizationFactor: processamento concorrente por shard (máx. 10).

escalando com lambda

Desenvolvendo Aplicações na AWS

Filtragem e tumbling windows

  • Lambda oferece critérios de filtragem.
    • Descarte registros antes de invocar a função.
    • Reduz invocações desnecessárias e custo.
  • Lambda oferece tumbling windows.
    • Agregue estado entre lotes em um shard.

 

filtragem e tumbling windows

Desenvolvendo Aplicações na AWS

Gerenciando registros duplicados

  • Streams capturam cada mudança exatamente uma vez.
  • O Lambda processa com semântica at-least-once.
    • Repetições podem reprocessar o mesmo registro.
  • Projete consumidores idempotentes.
  • Padrão comum: armazenar eventID ou SequenceNumber processados.
    • Pule registros já tratados.
    • Ambos ficam estáveis em novas tentativas.
    • Chaves de idempotência confiáveis.

 

gerenciando registros duplicados

Desenvolvendo Aplicações na AWS

Tratando falhas

 

tratando falhas

  • ReportBatchItemFailures tenta novamente só os registros com falha.
  • Trate falhas no Lambda com:
    • BisectBatchOnFunctionError para bissetar o lote.
    • Controles de repetição.
    • Destinos de falha para lotes problemáticos que esgotam as tentativas.
Desenvolvendo Aplicações na AWS

Integração de DynamoDB com Kinesis

 

integração

  • Tabelas podem enviar mudanças direto para Kinesis Data Streams.
    • Via o recurso Kinesis Data Streams for DynamoDB.
    • Capacidade separada e paralela, não encadeada.
    • Eventos NÃO passam pelo DynamoDB Streams.
  • Ambos podem rodar na mesma tabela ao mesmo tempo.
    • Operam de forma independente.
    • Alimenta arquiteturas mais amplas de streaming e analytics.
Desenvolvendo Aplicações na AWS

Monitoramento: problemas comuns

 

solução de problemas

  • Problemas operacionais comuns para observar:
    • Partições quentes.
    • Repetições com falha.
    • Processamento duplicado.
    • Throttling e atraso do consumidor.
Desenvolvendo Aplicações na AWS

Monitoramento: métricas do CloudWatch

  • Principais métricas do CloudWatch para monitorar:
    • Lambda Errors: expõem falhas de código ou downstream.
    • IteratorAge: valores altos indicam consumidores lentos.
    • Métricas de throttling: limites de leitura excedidos.
    • Falhas em processamento de lotes: registros enviados a uma DLQ.

 

solução de problemas

Desenvolvendo Aplicações na AWS

Segurança

  • O acesso aos streams é controlado por permissões IAM.
  • Streams herdam as configurações de criptografia da tabela.
    • Inclui criptografia no servidor em repouso com KMS.
  • Aplique políticas de menor privilégio a consumidores e processadores downstream.

 

segurança

Desenvolvendo Aplicações na AWS

Vamos praticar!

Desenvolvendo Aplicações na AWS

Preparing Video For Download...