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
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
MessageGroupIde 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:
WaitTimeSecondsde até 20 segundos reduz respostas vazias e custo. Filas com atraso adiam a entrega em até 15 minutos. - Dead-letter queue: depois de
maxReceiveCountrecebimentos (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 (
ApproximateNumberOfMessagesdividido 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
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
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
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
.synce.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
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
GETentram 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
| Tipo | Quando usar |
|---|---|
| REST API | Todos os recursos: API keys e usage plans, throttling por cliente, cache, validação de requisição, AWS WAF, endpoints privados. |
| HTTP API | Recursos mínimos por um preço menor: autorizadores JWT (Amazon Cognito), proxies para Lambda e HTTP, integrações privadas. |
| WebSocket API | Conexões bidirecionais em que o serviço envia dados: chat, colaboração, jogos multiplayer, trading. |
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
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
| Necessidade | Serviço |
|---|---|
| Fila de trabalho para um grupo de workers | SQS: o consumidor consulta, processa e apaga. |
| Uma mensagem para muitos assinantes | SNS: fan-out por push, muitas vezes para filas SQS. |
| Rotear eventos pelo conteúdo | EventBridge: regras, agendamentos, archive e replay. |
| Stream em tempo real, vários leitores, replay | Kinesis Data Streams: shards, até 365 dias. |
| Fluxo com várias etapas e estado | Step Functions: Standard ou Express. |
| Aplicações JMS, AMQP ou MQTT existentes | Amazon MQ: ActiveMQ ou RabbitMQ gerenciados. |
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.