Amazon ec2 用于作业服务器的Amazon自动伸缩API

Amazon ec2 用于作业服务器的Amazon自动伸缩API,amazon-ec2,amazon-web-services,autoscaling,Amazon Ec2,Amazon Web Services,Autoscaling,我已经阅读了几乎所有的文档,甚至超过了AWSASAPI,以理解所有的AS内容 然而,我仍然想知道(由于我想先从某人那里了解这一点,所以还没有实际使用API),我的场景是否适用于AS 假设我在一个AS组中设置了一组工作服务器,每个服务器都在处理一个工作,突然之间(我不知道,AVG CPU大于或在另一种情况下小于80%)需要放大或缩小 我最担心的是失去一份正在进行的工作。也许用一个例子可以更好地解释这一点: 我启动了5个作业服务器,上面有5个作业 一个作业在1点完成,并在AmazonAPI中触发一

我已经阅读了几乎所有的文档,甚至超过了AWSASAPI,以理解所有的AS内容

然而,我仍然想知道(由于我想先从某人那里了解这一点,所以还没有实际使用API),我的场景是否适用于AS

假设我在一个AS组中设置了一组工作服务器,每个服务器都在处理一个工作,突然之间(我不知道,AVG CPU大于或在另一种情况下小于80%)需要放大或缩小

我最担心的是失去一份正在进行的工作。也许用一个例子可以更好地解释这一点:

  • 我启动了5个作业服务器,上面有5个作业
  • 一个作业在1点完成,并在AmazonAPI中触发一个缩放触发器
  • 亚马逊开始缩小规模
  • 我丢失了一个实际正在运行作业的作业服务器(90%完成,必须重新启动)
考虑到这一点,我只使用AmazonSpot实例/EC2API并管理自己的扩展是否更好,或者AmazonSpot API如何判断服务器终止是否有什么遗漏

老实说,我宁愿按SQS等待量进行扩展,而不是按服务器上的某些健康数据进行扩展:

  • 每等待100条消息,群集容量增加20%
但这对AS来说似乎也不太可行

那么,AWS AS API不是正确的解决方案,还是我遗漏了一些关于它如何工作的重要信息


谢谢,

经过一番搜索后,我发现有两种公认的方法可以作为API或作为作业的一般方式进行管理:

一种方法是直接从工作进程内部操纵服务器的运行状况。这是相当多的站点所做的,并且是有效的,当您的工作人员在系统中检测到没有更多的作业或冗余时,它会将其所在的服务器标记为不健康。这样一来,AS API就会出现,并在一段时间后自动将其取下

因此,使用此方法,您将根据一段时间内的SQS队列大小制定一个扩展策略(例如,每5分钟的SQS消息超过100个,则添加2台服务器;每10分钟的SQS消息超过500个,则网络容量增加50%)。缩减将由代码而不是主动策略来处理

这种方法也适用于零集群,因此在不使用集群的情况下,您可以将集群一直关闭到没有服务器,从而使其非常经济高效

优点:

  • 易于设置
  • 使用AWS API函数
  • 可能是最快的设置
  • 使用AWS托管API为您管理群集大小
缺点:

  • 如果不使用完整的AWS API就很难管理,即在创建新服务器时,如果不执行完整的API命令返回所有instanceid,就无法获取其instanceid。如果您想要对集群进行自我控制,AWS AS API还会在其他情况下妨碍您,使您的生活更加艰难
  • 依靠亚马逊知道什么最适合你的钱包。您依赖于AmazonAPI来正确扩展,这对许多人来说是一个优势,但对某些人来说是一个劣势
  • worker必须包含一些服务器池代码,这意味着worker不是泛型的,不能在不更改配置的情况下立即移动到另一个集群
考虑到这一点,还有第二个选择,DIY。您可以使用EC2 Spot实例和按需实例API,根据自定义规则创建自己的AS API。这很容易解释:

  • 您有一个cli脚本,当运行启动时,例如10台服务器
  • 您有一个cronjob,当检测到满足某些条件时,服务器会停机或停机更多
优点:

  • 轻松干净地管理您的终端
  • 可以做普通工人
  • 服务器池可以开始管理多个集群
  • 你可以制定一些规则和一些不太复杂的东西,从AWS的指标中获取数据,并将它们与比较和时间范围结合使用,以了解情况是否应该改变
缺点:

  • 难以获得多个区域(由于SQS是单个区域,所以对SQS来说还不错)
  • 难以处理区域容量和工作量方面的错误
  • 您必须依靠自己的服务器正常运行时间和自己的代码来确保cronjob按其应有的方式运行,并按其应有的方式配置服务器,并在应时将其分解
因此,这似乎真的是一场对最终用户来说更舒适的战争。我个人仍然在考虑这两个问题,并且已经创建了一个小型的自托管服务器池,它可以为我工作,但同时我很想尝试在AWS自己的API上使用它

希望这能帮助人们

编辑:注意,使用这两种方法中的任何一种方法,您仍然需要一个函数来预测您应该如何投标,因此您需要在spot类型(EC2类型)上调用投标历史API并计算如何投标


另一种编辑:自动检测系统中冗余的另一种方法是检查SQS队列的空响应度量。这是工作人员ping队列但未收到响应的次数。如果你在工作期间在应用程序中使用独占锁,这是非常有效的。

我刚刚遇到了同样的问题,我和一个亚马逊的家伙谈过终止保护。 事实上,如果一个实例激活了终止保护,它就不能被终止。触发缩放时,应用程序将从自动缩放组中删除,但不会终止。 要终止它,您必须禁用终止保护,然后终止它(例如,您可以在工作结束时这样做)

总而言之,您需要做的是:

  • 在AMI中添加启动脚本以激活终止保护
  • 保持你的自动缩放规则(