2017-06-13 52 views
0

我有一个作业队列并运行处理作业的AWS EC2实例。我们为每个c4。*实例类型提供了现场和按需版本的AutoScaling组。通过AWS降低价格(EC2和现货实例)

每个实例的电源数量等于CPU的实例数量。 (例如c4.large具有2个CPU的功率= 2)。

我们需要的确切功率只是根据队列中的作业数量计算出来的。

我想实现一种算法,它可以定期检查队列中的作业数量,并通过AWS SDK更改特定AutoScaling组的期望值,以节省尽可能多的资金并保持实例的总功率保持作业处理。

特别:

  1. 我宁愿现货实例点播,因为它们更便宜
  2. EC2实例每小时收费,我们想只在最后一分钟关闭实例在其1小时正常运行时间。
  3. 如果可能,我们希望通过现场实例替换按需实例。所以,在55分钟增加spot-group时,在58检查新的实例正在运行,如果是的话,减少按需组。
  4. 如果出价太高,我们希望按照需求替换现货实例。只需关闭点播,然后打开现场。

似乎问题确实很难处理。任何人有任何经验或类似的解决方案实施?

回答

0

自动调节组允许您使用在自动调节组外部定义的报警和指标。

如果您使用的是SNS,您应该能够在SNS队列中设置警报,并使用它来扩大和缩小缩放组。

如果您使用自定义队列系统,则可以将指标推送到cloudwatch以创建类似的警报。

您可以确定缩放操作确实发生的频率,但可能很难将运行时间精确到一小时。

+0

我尝试过报警,结果是报警很慢。最多需要5分钟才能启动新实例。另外,你将如何处理现货实例?我们运行的EC2实例的数量应该是大约。 QueueSize/C,其中C是一个常数。你不能用闹钟做到这一点。 – smrt28

1

您当然可以编写自己的代码来执行此操作,从而有效地告诉Auto Scaling组何时添加/删除实例。

而且,请注意,降低成本与现货实例一个好的策略是要意识到,的价格为现货例如通过变化:

  • 地区
  • 可用性区域
  • 实例类型

因此,如果c4.xlarge的现货价格上涨到一个AZ,它可能仍然是相同的成本我另一个AZ。此外,c4.2xlarge的价格可能会低于c4.xlarge,功率是其两倍。

因此,您应该瞄准多样性您的现场实例跨多个AZ和多个实例类型。这意味着现货价格的变化只会影响您的车队的一小部分,而不是一次性完成。

您可以使用Spot Fleet来帮助您,甚至第三方产品,如SpotInst

它也值得看AWS Batch(目前不是在每个地区都可用),它旨在智能地提供批量作业的能力。