使用 AWS 消息服务解耦
在 AWS 上开发应用
Ricardo Sueiras
Principal Technologist
Amazon SQS 基础
- 托管异步消息队列。
- 生产者将消息发送到队列。
- 消费者从队列检索消息。
- 消息保留,直至被消费者取走。
- 保留期:默认 4 天,最长 14 天。
- 消费者轮询队列并按自身速率处理。
消息可见性
- 消费者读取后,消息会变为不可见。
- 可见性超时控制其隐藏时长。
- 若处理失败且未删除消息:
- 可见性超时:默认 30 秒。
- 最大可见性超时为 12 小时。
消息大小
- 单条消息最大 256KB。
- 使用 SQS Extended Client 库可支持更大消息。
- 将大负载存储在 Amazon S3。
- 在消息负载中发送指向 S3 的指针。
短轮询
- 轮询策略影响成本与效率。
- 短轮询为默认。
- 查询部分 SQS 服务器,立即返回。
- 即便有消息也可能返回空。
- 导致更多 API 调用与更高成本。
长轮询
- 长轮询会查询所有 SQS 服务器。
- 最长等待 20 秒获取消息。
- 消除不必要的空响应。
- 减少 API 调用并降低成本。
FIFO 队列
- FIFO 队列:
- 默认 300 TPS。
- 通过批处理可升至 3,000,或用高吞吐模式更高。
- 按用例选择队列类型:
- 标准队列用于规模与吞吐。
- FIFO 用于有序与去重。
处理毒性消息
- 死信队列(DLQ)存放处理失败的消息。
- 超过
maxReceiveCount 后消息会移入 DLQ。
- 避免无限重试毒性消息。
- DLQ 必须与源队列类型相同。
- 可将消息移回源队列重新处理。
队列安全
- 传输中默认用 HTTPS 加密。
- 静态数据使用 AWS KMS 进行服务端加密。
- 可用 AWS Encryption SDK 在客户端加密负载。
- 通过 IAM 策略控制访问 SQS 队列。
- 基于资源的策略提供细粒度队列级控制。
Amazon SNS 基础
- 托管发布-订阅(pub/sub)服务。
- 使用推送模型。
- 发布者向主题发送消息。
- 消费者订阅主题。
- 订阅者被动接收消息。
扩展性
- 每个主题支持最多 1,250 万个订阅。
- 无消息保留:
- 订阅者不可用时,消息将丢失。
- 使用 DLQ 或持久订阅者(SQS 队列)避免丢失。
- 将单个事件分发给多个消费者(扇出)。
消息过滤
- SNS 支持消息过滤策略。
- 订阅仅接收关心的消息。
- 无过滤时,订阅会接收所有消息。
- 过滤策略作用于订阅级,而非主题级。
过滤逻辑与评估
- 过滤器以 JSON 定义。
- 与消息属性进行匹配。
- 多个条件按 AND 计算。
- 条件内多个取值按 OR 计算。
- 支持多种过滤操作:
SNS 安全
- 传输中默认用 HTTPS 加密数据。
- 静态数据使用 AWS KMS 服务端加密。
- 通过 IAM 策略进行访问控制。
Preparing Video For Download...