在 aws spot 上调用异步命令不是 (PHP)


Calling an asynchronous command on a aws spot isntance (PHP)

我一直在研究某些作业的 AWS 竞价型实例,但是,我没有使用从 SQS 工作的静态集群,并通过主服务器上的 cronjob(或排序)进行维护,以确保服务器的数量和正在完成的作业等我希望让服务器创建和拆除我必须做的每个作业。

现在我明白了如何启动指定某个 AMI 的新 spot 实例,并且我在这个 AMI 上有一个 php 脚本,比如/home/ubuntu/称为 do_job.php但它需要一些参数(就像来自 SQS 消息一样)。

在我的服务器生成器中,有没有一种好方法可以在我确认新 spot 实例实际正在运行时调用异步命令,而不会锁定我的生成器?

也许我从错误的角度看待这个问题?我在 aws 集群上有点菜鸟,所以我可能在这里吠错了树......

我想

我会跟进这个问题。

不,没有简单的方法可以做到这一点。目前最简单的方法是在您的服务器上安装一个基本的 Apache 或 lightttp 或任何 Web 服务器,获取它的内部公有 DNS,并通过异步 cURL 方法或其他方法从您的生成 EC2 实例调用它。

执行类似操作的更可接受的方法是使用 MQ 或 SQS 并在作业服务器上创建可见性锁。当您在工作服务器或正在运行的任何 Spot/On-demand 实例上处理 MQ 以处理信息时,您可以设置脚本运行长度的可见性。您可以使用一个简单的发送器来执行此操作,该发送器使信息的处理转换为后台进程,而发送器每次检测到后台进程仍在运行时都会进入 while() 循环重置消息的可见性。这允许消息的单个服务器完整性。

为了使其正常工作,您必须根据Amazon Cloudwatch指标中MessagesVisible的大小和深度进行扩展,告诉您队列中可见的消息数量以及已经存在了一段时间的消息。最好在此指标上有一个延迟期,以便:

  • 每 60 秒检查一次指标
  • 每 10
  • 分钟平均大于 10 条可见消息 纵向扩展服务器。

这是扩展作业群集的更可接受的方法。