Amazon ec2 用于作业服务器的Amazon自动伸缩API
我已经阅读了几乎所有的文档,甚至超过了AWSASAPI,以理解所有的AS内容 然而,我仍然想知道(由于我想先从某人那里了解这一点,所以还没有实际使用API),我的场景是否适用于AS 假设我在一个AS组中设置了一组工作服务器,每个服务器都在处理一个工作,突然之间(我不知道,AVG CPU大于或在另一种情况下小于80%)需要放大或缩小 我最担心的是失去一份正在进行的工作。也许用一个例子可以更好地解释这一点: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中触发一
- 我启动了5个作业服务器,上面有5个作业
- 一个作业在1点完成,并在AmazonAPI中触发一个缩放触发器
- 亚马逊开始缩小规模
- 我丢失了一个实际正在运行作业的作业服务器(90%完成,必须重新启动)
- 每等待100条消息,群集容量增加20%
谢谢,经过一番搜索后,我发现有两种公认的方法可以作为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不是泛型的,不能在不更改配置的情况下立即移动到另一个集群
- 您有一个cli脚本,当运行启动时,例如10台服务器
- 您有一个cronjob,当检测到满足某些条件时,服务器会停机或停机更多
- 轻松干净地管理您的终端
- 可以做普通工人
- 服务器池可以开始管理多个集群
- 你可以制定一些规则和一些不太复杂的东西,从AWS的指标中获取数据,并将它们与比较和时间范围结合使用,以了解情况是否应该改变
- 难以获得多个区域(由于SQS是单个区域,所以对SQS来说还不错)
- 难以处理区域容量和工作量方面的错误
- 您必须依靠自己的服务器正常运行时间和自己的代码来确保cronjob按其应有的方式运行,并按其应有的方式配置服务器,并在应时将其分解
另一种编辑:自动检测系统中冗余的另一种方法是检查SQS队列的空响应度量。这是工作人员ping队列但未收到响应的次数。如果你在工作期间在应用程序中使用独占锁,这是非常有效的。我刚刚遇到了同样的问题,我和一个亚马逊的家伙谈过终止保护。 事实上,如果一个实例激活了终止保护,它就不能被终止。触发缩放时,应用程序将从自动缩放组中删除,但不会终止。 要终止它,您必须禁用终止保护,然后终止它(例如,您可以在工作结束时这样做) 总而言之,您需要做的是:
- 在AMI中添加启动脚本以激活终止保护
- 保持你的自动缩放规则(