使用 AWS 消息服务解耦

在 AWS 上开发应用

Ricardo Sueiras

Principal Technologist

Amazon SQS 基础

 

sqs overview

  • 独立于生产者处理突发流量。
  • 托管异步消息队列。
  • 生产者将消息发送到队列。
  • 消费者从队列检索消息。
  • 消息保留,直至被消费者取走。
  • 保留期:默认 4 天,最长 14 天。
  • 消费者轮询队列并按自身速率处理。
在 AWS 上开发应用

消息可见性

  • 消费者读取后,消息会变为不可见。
  • 可见性超时控制其隐藏时长。
  • 若处理失败且未删除消息:
    • 它将再次可见。
    • 可被重新处理。
  • 可见性超时:默认 30 秒。
  • 最大可见性超时为 12 小时。

 

message visibility

在 AWS 上开发应用

消息大小

 

image size

  • 单条消息最大 256KB。
  • 使用 SQS Extended Client 库可支持更大消息。
  • 将大负载存储在 Amazon S3。
  • 在消息负载中发送指向 S3 的指针。
在 AWS 上开发应用

短轮询

  • 轮询策略影响成本与效率。
  • 短轮询为默认。
  • 查询部分 SQS 服务器,立即返回。
  • 即便有消息也可能返回空。
  • 导致更多 API 调用与更高成本。

 

polling

在 AWS 上开发应用

长轮询

  • 长轮询会查询所有 SQS 服务器。
  • 最长等待 20 秒获取消息。
  • 消除不必要的空响应。
  • 减少 API 调用并降低成本。

 

polling

在 AWS 上开发应用

标准队列

  • SQS 提供两种队列类型。
  • 标准队列:
    • 至少一次投递。
    • 尽力有序。
    • 近乎无限吞吐。

 

queue types

在 AWS 上开发应用

FIFO 队列

 

queue types

  • FIFO 队列:
    • 精确一次处理。
    • 严格消息顺序。
    • 内置去重。
  • 默认 300 TPS。
    • 通过批处理可升至 3,000,或用高吞吐模式更高。
  • 按用例选择队列类型:
    • 标准队列用于规模与吞吐。
    • FIFO 用于有序与去重。
在 AWS 上开发应用

处理毒性消息

 

dlq

  • 死信队列(DLQ)存放处理失败的消息。
  • 超过 maxReceiveCount 后消息会移入 DLQ。
  • 避免无限重试毒性消息。
  • DLQ 必须与源队列类型相同。
  • 可将消息移回源队列重新处理。
在 AWS 上开发应用

队列安全

 

securing SQS

  • 传输中默认用 HTTPS 加密。
  • 静态数据使用 AWS KMS 进行服务端加密。
  • 可用 AWS Encryption SDK 在客户端加密负载。
  • 通过 IAM 策略控制访问 SQS 队列。
  • 基于资源的策略提供细粒度队列级控制。
在 AWS 上开发应用

Amazon SNS 基础

  • 托管发布-订阅(pub/sub)服务。
  • 使用推送模型。
  • 发布者向主题发送消息。
    • 最大消息大小为 256KB。
  • 消费者订阅主题。
  • 订阅者被动接收消息。

 

sns overview

在 AWS 上开发应用

扩展性

  • 每个主题支持最多 1,250 万个订阅。
  • 无消息保留:
    • 订阅者不可用时,消息将丢失。
    • 使用 DLQ 或持久订阅者(SQS 队列)避免丢失。
  • 将单个事件分发给多个消费者(扇出)。

 

scaling sns

在 AWS 上开发应用

消息过滤

  • SNS 支持消息过滤策略。
  • 订阅仅接收关心的消息。
  • 无过滤时,订阅会接收所有消息。
  • 过滤策略作用于订阅级,而非主题级。

 

filter

在 AWS 上开发应用

过滤逻辑与评估

 

filter polices

  • 过滤器以 JSON 定义。
  • 与消息属性进行匹配。
  • 多个条件按 AND 计算。
  • 条件内多个取值按 OR 计算。
  • 支持多种过滤操作:
    • 精确字符串、数值、前缀、排除与区间匹配。
在 AWS 上开发应用

SNS 安全

 

sns security

  • 传输中默认用 HTTPS 加密数据。
  • 静态数据使用 AWS KMS 服务端加密。
    • 授权 SNS 使用该 KMS 密钥。
  • 通过 IAM 策略进行访问控制。
    • 管理可向主题发布或从主题订阅的主体。
在 AWS 上开发应用

让我们一起练习吧!

在 AWS 上开发应用

Preparing Video For Download...