让我解释一下。。。
我有2个SQS队列,它们接收执行light和heavy报告生成作业的请求。(为了不受重型作业的影响,引入了两个队列的分离。)
SQS在自动扩展组中发送作业,该组包含3名工人。
工人是按需EC2实例。我想更改启动配置并使用点实例。
问题是,一些产生报告的繁重工作可能长达4个小时。因此,如果这种工作在可能被终止的现场实例工作者上运行,则会出现额外的延迟和/或复杂情况。
我想使用spot实例作为工作者,但也要保证如果有作业在上面运行,工作者不会被终止。
我想出的方法如下:
1.以实例的按需价格竞标现货实例[它仍然不能防止终止,但将可能性降至最低]
2.使用特定周期的spot实例[例如6小时],但我仍然被限制在6小时内,实例终止。另外,我不知道我是否可以从启动配置中设置这种设置
我想使用spot实例作为工作者,但也要确保如果有作业在其上运行,工作者不会被终止。
您似乎明白这不是点实例工作的方式
他们是你的,直到价格超过出价
6小时的事情("定义的持续时间")在某些情况下可能会有所帮助,我想
脑海中浮现出两个想法
-
尝试在"长"队列中估计作业开始前的长度。然后选择最便宜的选项来运行
-
为您的工作实现事务系统。例如,当一个作业被提取时,SQS将时间/instanceid/job id添加到另一个持久化系统,即数据库表。然后每隔几分钟对表进行一次轮询,检查instanceid是否仍然存在。当作业最终成功完成时,让作业运行器将其从数据库表中删除。如果轮询注意到实例已消失,则将作业重新提交给SQS