如何确保数据修改事件以正确的顺序传递到SQS或Kinesis?

问题描述 投票:0回答:1

我们假设以下情况:

有一个后端服务,它具有用于“插入”、“更新”和“删除”请求的 CRUD 端点。

每个端点更新关系数据库,然后立即向 SQS(或 Kinesis)发送数据修改消息。

SQS 已配置为 FIFO,即记录将按照交付时的顺序被消耗,并且不会出现重复。而且 Kinesis 无论如何都是 FIFO 的。

现在假设三个请求按顺序到达。

  • 请求1:使用
    id=5
    创建一条记录,然后将插入事件发送到SQS
  • 请求2:使用
    id=5
    更新记录,然后将更新事件发送到SQS
  • 请求3:删除带有
    id=5
    的记录,然后将删除事件发送到SQS

我们还假设

request 1
在插入记录后立即被另一个任务抢占,例如被垃圾收集器抢占。

因此,插入事件最后到达 SQS,尽管按时间顺序最先执行(因此交付顺序为

update
,然后是
delete
,然后是
insert
)。

我的问题是,如何保证传递顺序与数据修改查询的实际顺序相同(在我的例子中,

insert
,后跟
update
,后跟
delete
)?

events queue amazon-sqs amazon-kinesis dml
1个回答
0
投票

查看 AWS Prescriptive Guidance 中的事务发件箱模式 https://docs.aws.amazon.com/prescriptive-guidance/latest/cloud-design-patterns/transactional-outbox.html

为了保证消息到 Amazon SQS(或 Kinesis)的传递顺序与数据库修改的实际顺序匹配,您可以实现发件箱模式。我们在我们的一个项目中考虑过这一点,并认为这是一种矫枉过正,但这似乎解决了订单问题

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.