Coordenando serviços e gerenciando estado

Desenvolvendo Aplicações na AWS

Ricardo Sueiras

Principal Technologist

Coordenação de serviços

 

coordenação de serviços

  • Vários serviços precisam trabalhar juntos para concluir um fluxo.
  • Eles precisam de uma estratégia de coordenação.
  • Duas abordagens: orquestração e coreografia.
Desenvolvendo Aplicações na AWS

Orquestração

 

padrão de orquestração

  • Um orquestrador central coordena o fluxo.
  • O orquestrador define a sequência e decide qual serviço roda em seguida.
  • Útil para novas tentativas, lógica condicional e tratamento de erros.
  • Na AWS: implementado com Step Functions entre Lambda, ECS, DynamoDB.
Desenvolvendo Aplicações na AWS

Orquestração

 

padrão de orquestração

  • A lógica do fluxo fica em um único lugar, facilitando depuração e monitoramento.
  • Trade-off: introduz uma dependência central.
Desenvolvendo Aplicações na AWS

Coreografia

  • Sem controlador central.
  • Serviços reagem a eventos de forma independente.
  • Cada serviço escuta eventos relevantes e faz seu trabalho.
  • Nenhum serviço precisa conhecer todo o fluxo.
  • Melhora o baixo acoplamento e a escalabilidade.

 

coreografia

Desenvolvendo Aplicações na AWS

Coreografia

  • Na AWS: EventBridge, SNS, SQS.
  • Altamente escalável.
  • Trade-off: fica mais difícil entender e depurar conforme o fluxo cresce.

 

coreografia

Desenvolvendo Aplicações na AWS

Arquitetura orientada a eventos

  • Serviços se comunicam produzindo e consumindo eventos.
  • Promove baixo acoplamento entre serviços.
  • Promove alta escalabilidade.
  • Permite processamento paralelo de eventos.
  • Novos serviços podem assinar sem alterar os existentes.

 

arquitetura orientada a eventos

Desenvolvendo Aplicações na AWS

Arquitetura orientada a eventos

 

arquitetura orientada a eventos

  • Trade-offs ao implementar EDA:
  • Projetar para consistência eventual.
  • Implementar idempotência.
  • Tratamento de falhas é mais complexo.
Desenvolvendo Aplicações na AWS

Idempotência

 

idempotência

  • A mesma operação executada várias vezes produz o mesmo resultado.
  • Princípio crítico em sistemas assíncronos e orientados a eventos.
  • Sistemas distribuídos podem entregar eventos duplicados (retries, falhas de rede, reprocessamento).
  • Preserva a correção e a confiabilidade do sistema.
Desenvolvendo Aplicações na AWS

Filas de dead letter

 

dlq

  • Gerencia falhas na comunicação assíncrona.
  • Isole mensagens problemáticas "venenosas".
  • Após repetidas falhas de nova tentativa, a mensagem vai para a DLQ.
  • O fluxo principal segue rodando.
Desenvolvendo Aplicações na AWS

Filas de dead letter

  • Use quando a ordem das mensagens não é crítica.
  • Evite em sistemas não críticos onde perda ocasional de dados é aceitável.
  • Evite quando a ordem das mensagens deve ser preservada.

 

dlq

Desenvolvendo Aplicações na AWS

Gerenciando estado

  • Gerenciar estado é fundamental para apps cloud native.
  • Estado é qualquer dado preservado entre interações.
  • Guardar estado localmente no servidor limita escalabilidade e resiliência.

 

gerenciando estado

Desenvolvendo Aplicações na AWS

Gerenciando estado

  • O gerenciamento de estado envolve trade-offs conforme o que você constrói.
  • Estado externo melhora escalabilidade e resiliência.
  • Custos: latência e complexidade extras.
  • Considere: consistência, cache e padrões de acesso a dados.

 

gerenciando estado

Desenvolvendo Aplicações na AWS

Stateful

 

design stateful

  • Dados de sessão ficam no servidor.
  • Requisições devem ir para a mesma instância (sticky sessions).
  • Limita a flexibilidade de escala.
  • Se a instância falha, a sessão se perde.
Desenvolvendo Aplicações na AWS

Stateless

 

stateless

  • Cada requisição é tratada de forma independente.
  • Nenhum estado é armazenado no servidor.
  • O estado vive em sistemas externos.
  • Abordagem preferida para apps cloud native.
  • Qualquer instância pode atender qualquer requisição, facilitando escala horizontal.
Desenvolvendo Aplicações na AWS

Vamos praticar!

Desenvolvendo Aplicações na AWS

Preparing Video For Download...