4

我正在设计我的第一个 Amazon AWS 项目,我可以在队列处理方面使用一些帮助。

该服务通过 ASP.net Web API 服务或 GUI 网站(仅调用 API)接受处理作业。每个作业都有一个或多个与之关联的文件以及一些关于作业类型的规则。我想在每个作业进入时对其进行排队,大概是使用 AWS SQS。然后这些作业将由一个“worker”处理,它是一个带有 .Net 包装器的 python 脚本。python 脚本是一个现有的批处理器,不能为 AWS 更改/定制,因此 .Net 中的包装器管理 AWS 部分并将正确的参数传递给 python。

问题是我们不会有大量的工作,但每个工作都在某种程度上是计算密集型的。选择 AWS 的原因之一是最大限度地降低基础设施成本。我计划让前端网站(Web API + ASP.net MVC4 站点)在弹性 beanstalk 上运行。但我不希望有一个专门的工作机器总是在线轮询工作,因为这些工作人员需要有点“更强大”的实例(用于处理),而且我们大部分时间什么都不做会花费我们很多。

有没有办法只在 beanstalk 上运行 web 部分,然后只有在队列中有项目时才让工作进程启动?我意识到我可以拥有一个始终在线轮询的微型“控制器”实例,然后让它控制计算启动,但即使这样似乎也不需要它。EC2 实例是否可以基于非零 SQS 队列大小启动?所以基本上 web api 将作业添加到队列中,一些东西监视队列并看到它是非零的,这会触发 EC2 工作程序启动,它启动并在启动时轮询队列。它一直处理直到队列为空,然后触发它关闭。

4

1 回答 1

6

您可以将Autoscaling与 SQS 结合使用来动态启动和停止 EC2 实例。有一篇AWS 博客文章描述了您正在考虑的架构。

于 2012-12-20T20:00:59.797 回答