【问题标题】:Best practice of solving race issue with pubsub architecture使用 pubsub 架构解决竞争问题的最佳实践
【发布时间】:2021-08-13 10:35:37
【问题描述】:

假设我有这个微服务架构并且它们都使用 pubsub 进行交互。

基本上,如果进行汽车销售,它会执行任务 1,这会导致任务 2a 和 2b,如果皮革座椅可用,则会执行任务 3。 请注意,任务 2a 和 2b 是同时发生的,因为它是一个 pubsub

理论上,这很有效,但在实践中,我发现任务 2b 和 3 在执行 2a 之前执行的情况。这会导致任务 3 导致错误,因为尚未从任务 2a 生成 CAR 123。

我正在考虑在执行任务 2b 时添加延迟,但我想知道是否有解决此类问题的“更标准”的方法?

(不,我们不能将任务 3 更改为 upsert 命令)

【问题讨论】:

  • 为什么要标记 3 种完全不同的流/通知解决方案?你实际使用的那个会影响答案。具体来说,您不应该查询座位服务的状态(至少不认为它是一个完整的事件),直到它收到来自座位服务的更新
  • 您好,对不起,我不明白您的评论。此外,这个基础设施是我公司在我之前完成的。
  • 您标记了 SQS、SNS 和 Kafka,它们完全不同,任何建议都取决于您实际使用哪一个来发送数据
  • 我明白了,很抱歉,我实际上在这个架构中使用了 SNS 和 SQS 的组合。我修改了标签

标签: amazon-sqs publish-subscribe amazon-sns


【解决方案1】:

要让它按您的意愿工作,您可以让销售和皮革座椅服务发布到同一个主题。

如果主题有一个分区,那么销售消息将始终在座位服务产生的消息之前。

如果主题有多个分区,则在两条消息上设置相同的值(某种 ID,最好是 uuid,以不创建热分区)作为分区键,这样两条消息都可以在同一个分区上生成并且仍然保持您需要的订单。

【讨论】:

  • 这是有道理的!谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
  • 2013-01-04
  • 2013-05-07
  • 2022-01-16
  • 2015-07-13
相关资源
最近更新 更多