为短期工作负载添加 Spot EC2 实例的建议

Recommendations for adding spot EC2 instances for short-term workload

我有一个 php/Laravel 应用程序部署到 AWS t2.small EC2 机器作为我的网络服务器。一天中 98% 的时间,这台小机器都能很好地处理 HTTP 和 mySQL 工作负载。但是,我需要每天 运行 一个巨大的 processing/batch/calc 工作大约一个小时,并且正在探索如何利用亚马逊的现货定价来每天为这个日常工作量启动服务器。

我的应用程序使用队列来触发不同的作业,我希望我可以使用 AWS SDK 自动发出 spot 请求,然后将其添加到集群以完成我的队列处理。

我只是有点不确定我将要经历的过程来实现这一点,我想我会向这个社区询问任何指示或教程,以说明人们将如何解决在这个短期内使用 Spot 实例的问题工作负载处理?

在此先感谢您的任何指点或建议!

如果您的 "huge processing/batch/calc" 工作可以中断,那么 Spot 实例可能对您有好处。但是,如果这个工作必须在第二天之前完成并且不能被打断,我会避免使用 Spot 实例。

当您请求 Spot Instance 时,您输入了出价。如果您的出价低于 Spot 价格,您将无法获得 Spot 实例。此外,如果没有足够的未使用容量,那么您将无法获取 Spot 实例。

您最好的选择是创建并启动一个更大的按需实例来每晚执行此作业。

现货价格可能因不同的 AZ 而异。在请求现货之前,找出哪个 AZ 的价格最优惠。每隔几分钟循环一次,直到满足以下条件之一:a)现货价格低于您在子网中的出价或 b)达到阈值时间。如果您在阈值时间之前无法获得现货价格,请切换到按需并继续。

注意阈值时间要非常保守。 Spot 实例可能会失败(由于价格上涨)- 因此您应该考虑到切换到按需实例的额外时间,并且仍然满足处理时间(SLA 等)。

查看现货价格: http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-spot-price-history.html

请求现货实例: http://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-instances.html