不存在所谓的一次且仅一次交付

主要观点:

  • Sequin 是具有“至少一次交付”和“恰好一次处理”保证的系统。
  • 区分了交付和处理,阐述了“最多一次交付”“至少一次交付”和“恰好一次交付”的概念及差异。
  • 强调“恰好一次处理”虽接近理想但无法完全实现,处理包含消息交付和成功确认。
  • 提及确认无法消除两阶段提交问题,介绍处理消息时的注意事项及应对措施。

关键信息:

  • Postgres 的 LISTEN/NOTIFY 是最多一次交付系统的例子。
  • 至少一次交付系统会持久化消息和交付状态,以保证交付。
  • 恰好一次交付是理想状态,难以完全实现。
  • 可通过使系统幂等、分割消息等方式减轻重复处理问题。
  • 可配置 SQS 和 Sequin 中消费者的可见性超时时间。

重要细节:

  • 最多一次交付系统中消息是短暂的,若订阅者未订阅或交付有网络问题,消息会丢失。
  • 至少一次交付系统中,在收到接收者已接收的确认前,消息可能会重新交付,存在两阶段提交或分布式事务问题。
  • 处理是消息的完整生命周期,包括交付、处理和确认。
  • 系统设计时可选择接受重复交付后果、使系统幂等或选择最多一次交付。
  • 要将消息分割为合适的工作单元,考虑多步工作流的幂等性。
  • 正确配置超时时间,给工作者足够时间处理且在超时后能确定工作者是否宕机。
阅读 11
0 条评论