我有一个作业队列并运行处理作业的AWS EC2实例。我们为现场和按需版本的每个c4。*实例类型都有一个AutoScaling组。
每个实例的功率都是一个等于CPU实例数的数字。 (例如c4.large的power = 2,因为它有2个CPU)。
我们所需的确切功率只需根据队列中的作业数量计算得出。
我想实现一种算法,该算法会定期检查队列中的作业数量,并通过AWS SDK更改特定AutoScaling组的所需值,以节省尽可能多的资金并保持实例的总功率已完成的工作。
特别是:
似乎问题真的很难处理。有人有经验或类似的解决方案实施?
答案 0 :(得分:1)
您当然可以编写自己的代码来有效地告诉Auto Scaling组何时添加/删除实例。
另外,请注意,使用竞价型实例降低成本的一个好策略是要了解现货实例的价格因而异:
因此,如果c4.xlarge
的现货价格在一个AZ中上涨,则在另一个AZ中可能仍然是相同的成本。此外,c4.2xlarge
的价格可能低于c4.xlarge
,价格是其两倍。
因此,您应该针对多个AZ和多个实例类型的多样性您的专色实例。这意味着现货价格的变化只会影响您车队的一小部分,而不是一次性影响。
您可以使用Spot Fleet来协助此{甚至是第三方产品,例如SpotInst。
它还值得关注AWS Batch(目前并非在每个地区都可用),它旨在智能地为批处理作业提供容量。
答案 1 :(得分:0)
自动缩放组允许您使用在自动缩放组之外定义的警报和指标。
如果您正在使用SNS,您应该能够在SNS队列上设置警报并使用它来扩展和缩小您的缩放组。
如果您使用的是自定义队列系统,则可以将指标推送到cloudwatch以创建类似的警报。
您可以确定缩放操作发生的频率,但可能很难将运行时间缩短到一小时。