Solutions Architect

Desacoplamento e mensageria

Com baixo acoplamento, cada componente escala, falha e muda por conta própria. Esta é a tarefa 2.1 de Design Resilient Architectures, 26% do conteúdo pontuado.

SQS

Amazon Simple Queue Service

Página oficial

Fila totalmente gerenciada que segura o trabalho entre produtores e consumidores, para que um consumidor lento ou com falha não perca requisições. O consumidor consulta a fila e apaga cada mensagem depois de processá-la.

Pontos-chave

  • Standard vs FIFO: a standard tem vazão quase ilimitada, entrega pelo menos uma vez e ordem de melhor esforço. A FIFO mantém a ordem dentro de cada MessageGroupId e descarta duplicatas enviadas dentro de um intervalo de deduplicação de 5 minutos, com 300 chamadas por segundo por ação (3.000 mensagens por segundo em lotes de 10), mais no modo de alta vazão.
  • Visibility timeout: a mensagem recebida fica oculta por 30 segundos por padrão (de 0 segundo a 12 horas). Se o consumidor não apagá-la a tempo, ela reaparece e é processada de novo, então ajuste acima do tempo de processamento.
  • Retenção e tamanho: mensagens ficam 4 dias por padrão, de 1 minuto a 14 dias. Cada mensagem tem no máximo 1 MiB, e cargas maiores vão para o S3 com a Extended Client Library.
  • Long polling: WaitTimeSeconds de até 20 segundos reduz respostas vazias e custo. Filas com atraso adiam a entrega em até 15 minutos.
  • Dead-letter queue: depois de maxReceiveCount recebimentos (1 a 1.000) a mensagem vai para uma DLQ do mesmo tipo, na mesma conta e Região. Filas standard mantêm o horário original de entrada, então dê à DLQ uma retenção maior.
  • Escalar workers: escale um grupo do Auto Scaling pelo backlog por instância (ApproximateNumberOfMessages dividido pelas instâncias em serviço). Mensagens de uma instância encerrada voltam para a fila.

Na prova

"Desacoplar as camadas e absorver picos de tráfego" -> SQS standard. "Processar pedidos uma única vez e em ordem" -> SQS FIFO. Mensagem processada duas vezes indica visibility timeout menor que o processamento, não falta de DLQ.

SNS

Amazon Simple Notification Service

Página oficial

Publicação e assinatura: o produtor publica uma vez em um tópico e o SNS empurra uma cópia para cada assinante. Os assinantes não fazem polling.

Pontos-chave

  • Assinantes: filas SQS, funções Lambda, Amazon Data Firehose e endpoints HTTP/S, além de e-mail, SMS e push para pessoas.
  • Fan-out: um tópico com várias filas SQS assinadas, cada uma consumida pelo seu serviço. Um consumidor lento nunca atrasa os outros e suas mensagens esperam na fila dele.
  • Filtro de mensagens: uma filter policy na assinatura, aplicada aos atributos ou ao corpo da mensagem, entrega a esse assinante só o que combina.
  • Tópicos FIFO: ordem estrita e deduplicação, entregues apenas a filas SQS FIFO ou standard. E-mail, SMS, push e HTTP/S não podem assinar um tópico FIFO.

Na prova

"Um evento precisa disparar vários processos independentes" -> fan-out SNS + SQS. Gravar a mesma mensagem em várias filas pela aplicação é o distrator: acopla o produtor a todos os consumidores.

EventBridge

Amazon EventBridge

Página oficial

Roteador de eventos serverless: event buses recebem eventos de serviços da AWS, das suas aplicações e de software de terceiros, e regras os enviam a destinos.

Pontos-chave

  • Event bus e regras: a regra compara um event pattern e roteia para um ou mais destinos, com transformação opcional do evento. Feito para muitas origens e muitos destinos.
  • Pipes: integração ponto a ponto de uma origem para um destino, com filtro e enriquecimento opcionais, por exemplo uma fila SQS enriquecida por um API destination e enviada ao Step Functions. Só os eventos que passam no filtro são cobrados.
  • Scheduler: agendamentos serverless por cron, por intervalo ou de execução única, com janelas flexíveis e limite de tentativas.
  • Archive e replay: guarda eventos (indefinidamente por padrão) e os reenvia ao bus de origem para corrigir erros ou testar novos consumidores.

Na prova

"Reagir a uma mudança em um serviço da AWS" ou "rotear eventos pelo conteúdo para vários destinos" -> regra do EventBridge. "Rodar uma tarefa toda noite sem servidor" -> EventBridge Scheduler, não um cron em uma instância EC2.

Step Functions

AWS Step Functions

Página oficial

Orquestração de fluxos como máquina de estados: novas tentativas, tratamento de erro, ramos paralelos e esperas ficam declarados no fluxo, não codificados em cada serviço.

Pontos-chave

  • Standard: até 1 ano, execução exatamente uma vez, cobrado por transição de estado, histórico guardado por 90 dias. Serve para trabalho longo e não idempotente, como pagamentos.
  • Express: até 5 minutos, cobrado por execuções, duração e memória. Pelo menos uma vez no modo assíncrono, no máximo uma vez no síncrono. Serve para alto volume de eventos e ingestão de IoT.
  • Callbacks e jobs: só o Standard aceita os padrões .sync e .waitForTaskToken, por exemplo para esperar uma aprovação humana.
  • Tipo fixo: o tipo do fluxo não muda depois que a máquina de estados é criada.

Na prova

"Coordenar várias funções Lambda com novas tentativas e uma etapa de aprovação manual" -> Step Functions Standard. Funções Lambda chamando umas às outras é o distrator. "Milhares de eventos curtos por segundo" -> Express.

API Gateway

Amazon API Gateway

Página oficial

Porta de entrada gerenciada para APIs que cuida de autorização, throttling e monitoramento na frente de Lambda, endpoints HTTP ou serviços da AWS.

Pontos-chave

  • Throttling: token bucket de 10.000 requisições por segundo com burst de 5.000 por conta por Região na maioria das Regiões. Acima disso o cliente recebe 429 Too Many Requests. Limites de stage, de método e de usage plan por cliente ficam abaixo dele.
  • Cache: só em REST APIs, por stage, TTL de 300 segundos por padrão e até 3.600. Por padrão só métodos GET entram no cache.
  • Timeout de integração: de 50 milissegundos a 29 segundos em REST APIs. APIs regionais e privadas podem aumentar, talvez com uma cota de throttling menor. Trabalhos longos ficam assíncronos com SQS ou Step Functions.
  • Tipos de endpoint: edge-optimized, regional e privado. Edge-optimized e privado existem só para REST APIs.

Na prova

"Limitar cada parceiro por API key com cota mensal" -> REST API com usage plans. "Proxy mais barato para Lambda com JWT" -> HTTP API. "O servidor envia atualizações aos clientes" -> WebSocket API, não polling.

Tipos de API

TipoQuando usar
REST APITodos os recursos: API keys e usage plans, throttling por cliente, cache, validação de requisição, AWS WAF, endpoints privados.
HTTP APIRecursos mínimos por um preço menor: autorizadores JWT (Amazon Cognito), proxies para Lambda e HTTP, integrações privadas.
WebSocket APIConexões bidirecionais em que o serviço envia dados: chat, colaboração, jogos multiplayer, trading.
Página oficial

Brokers Apache ActiveMQ e RabbitMQ gerenciados, para migrar aplicações que já usam protocolos padrão de mensageria sem reescrever esse código.

Pontos-chave

  • Protocolos: JMS, NMS, AMQP 0.9.1, AMQP 1.0, STOMP, MQTT e WebSocket.
  • Alta disponibilidade: brokers ActiveMQ ativo/standby replicados entre Availability Zones, clusters RabbitMQ de 3 nós com quorum queues distribuídas entre AZs.
  • Entre Regiões: a replicação entre Regiões do ActiveMQ copia mensagens de forma assíncrona para um broker réplica que pode ser promovido.
  • Projetos novos: para aplicações novas na nuvem a AWS recomenda SQS e SNS.

Na prova

"Migrar uma aplicação on-premises que usa JMS ou AMQP com o mínimo de mudança no código" -> Amazon MQ. Reescrever para SQS é o distrator quando a questão enfatiza manter o código.

Kinesis vs SQS

Amazon Kinesis Data Streams

Página oficial

Um stream de registros ordenados, guardados para replay e lidos por várias aplicações ao mesmo tempo. Prefira ao SQS quando muitos consumidores precisam dos mesmos dados ou de reprocessá-los.

Pontos-chave

  • Shards: cada shard recebe até 1 MB por segundo ou 1.000 registros por segundo de escrita e entrega até 2 MB por segundo de leitura. O modo on-demand gerencia os shards, o provisionado cobra por shard-hora.
  • Ordem: a partition key escolhe o shard e cada registro recebe um número de sequência nele, então registros relacionados mantêm a ordem.
  • Retenção e replay: 24 horas por padrão, até 365 dias. Cada aplicação lê de forma independente e pode reler, ao contrário do SQS, em que a mensagem apagada some.
  • Tamanho do registro: um blob de dados de até 1 MB.

Na prova

"Várias aplicações precisam processar o mesmo clickstream em tempo real e reprocessá-lo" -> Kinesis Data Streams. O SQS é o distrator: cada mensagem é processada por um consumidor e depois apagada.

Qual serviço

NecessidadeServiço
Fila de trabalho para um grupo de workersSQS: o consumidor consulta, processa e apaga.
Uma mensagem para muitos assinantesSNS: fan-out por push, muitas vezes para filas SQS.
Rotear eventos pelo conteúdoEventBridge: regras, agendamentos, archive e replay.
Stream em tempo real, vários leitores, replayKinesis Data Streams: shards, até 365 dias.
Fluxo com várias etapas e estadoStep Functions: Standard ou Express.
Aplicações JMS, AMQP ou MQTT existentesAmazon MQ: ActiveMQ ou RabbitMQ gerenciados.
Página oficial

Instâncias que não guardam dados de sessão podem ser criadas, trocadas ou encerradas a qualquer momento, e é isso que torna seguros o Auto Scaling e o balanceamento de carga.

Pontos-chave

  • Sessão fora da instância: guarde sessões no Amazon ElastiCache ou no DynamoDB para que qualquer instância atenda qualquer requisição e o scale-in não perca nada.
  • Sticky sessions: o ALB pode prender um cliente a um destino, mas uma sessão que existe só naquela instância se perde quando ela é encerrada.
  • Arquivos compartilhados: uploads vão para o S3 ou o Amazon EFS, nunca para o disco local de uma instância.
  • Horizontal antes de vertical: somar instâncias atrás de um load balancer escala sem o teto e sem a parada de redimensionar uma única instância.

Na prova

"Usuários são deslogados quando o Auto Scaling encerra uma instância" -> mova as sessões para ElastiCache ou DynamoDB. Ativar sticky sessions é o distrator: mantém o estado na instância.