gpt4 book ai didi

amazon-ec2 - SQS/SNS 和一次性计算架构(EC2 SPOT 实例)

转载 作者:行者123 更新时间:2023-12-04 23:52:44 24 4
gpt4 key购买 nike

我有一个应用程序,它从 SQS 读取消息(我们称队列为“p”),进行计算量大的图像处理(步骤 #1),将结果上传到 S3 并从队列“p”中删除消息,然后发送一个通知到 SNS 主题(此 SNS 主题将消息路由到另一个名为“q”的队列)。还有另一个应用程序从队列“q”中读取并执行图像处理的第二阶段(从 S3 下载步骤 #1 的结果并对该结果执行额外的数学运算)。

我有一个运行第 1 步应用程序的常规实例 + Spot 实例的组合。
我知道(因为 SQS 可见性超时概念)如果 SQS 实例在图像处理阶段关闭,SQS 会使消息再次对其他消费者可见,因此非 Spot EC2 实例最终将完成 Spot 实例的工作由于系统关闭,实例未能完成。

现在我的问题是:如果 Spot 实例恰好在删除之后但在消息发送到 SNS 之前关闭,会发生什么?我们怎样才能从这样的事件中恢复过来?

# PSEUDO CODE
msg = read message from queue
result = doWork(msg)
upload result to S3
delete msg
publish to sns about result

干杯!

最佳答案

首先,进程 A 不应从其 SQS 队列中删除消息,直到它发送 SNS 消息以启动第二个进程。从队列中删除消息是你应该做的最后一件事来表示“我的工作已经完成”。在发送 SNS 消息之前,工作还没有完成。

其次,在设计此类流程时(尤其是在使用 Spot 实例时)您需要考虑的关键事项之一是 的概念。幂等 :http://en.wikipedia.org/wiki/Idempotence

A unary operation (or function) is idempotent if, whenever it is applied twice to any value, it gives the same result as if it were applied once



更多信息: http://aws.amazon.com/sqs/faqs/#How_many_times_will_I_receive_each_message

Amazon SQS is engineered to provide “at least once” delivery of all messages in its queues. Although most of the time each message will be delivered to your application exactly once, you should design your system so that processing a message more than once does not create any errors or inconsistencies.



这最终意味着,无论 SQS 实例是否在进程中关闭,SQS 队列中的给定消息都可能同时传递给多个工作进程或多次传递给同一个进程,要么是因为 SQS 发送了两次,要么在 SNS 消息发送后但在 SQS 队列更新之前点失败。

在不确切知道您的处理需要什么的情况下,我无法告诉您如何使您的流程具有幂等性,但不要试图解决“如果现场实例在中途关闭会发生什么”的问题,请考虑“我该如何设计”过程中的每个步骤都可以多次运行,使用相同的输入并且不会引起任何问题 - 如果你这样做,你将用一颗石头杀死两只鸟。

关于amazon-ec2 - SQS/SNS 和一次性计算架构(EC2 SPOT 实例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20186480/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com