我正在设计我的第一个Amazon AWS项目,我可以在队列处理方面使用一些帮助。
此服务通过ASP.net Web API服务或GUI网站(仅调用API)接受处理作业。每个作业都有一个或多个与之关联的文件以及有关作业类型的一些规则。我希望将每个作业排入队列,大概使用AWS SQS。然后,作业将由“worker”处理,这是一个带有.Net包装器的python脚本。 python脚本是一个现有的批处理器,无法为AWS更改/自定义,因此.Net中的包装器管理AWS部分并将正确的参数传递给python。
问题在于我们不会有大量的工作,但每项工作都是计算密集型的。转到AWS的原因之一是最大限度地降低基础架构成本。我打算在弹性beanstalk上运行前端网站(Web API + ASP.net MVC4站点)。但我宁愿没有一个专门的工人机器总是在线轮询工作,因为这些工人需要有点“更强”的实例(用于处理),并且我们花了很多钱,大多数情况下无所事事。
有没有办法只在beanstalk上运行web部分,然后只有在队列中有项目时才会启动工作进程?我意识到我可以有一个微型“控制器”实例总是在线轮询,然后让它控制计算旋转,但即便如此,似乎不应该需要它。可以基于非零SQS队列大小启动EC2实例吗?所以基本上web api会将作业添加到队列中,有些东西会监视队列并看到它非零,这会触发EC2工作程序启动,它会在启动时旋转并轮询队列。它一直处理直到队列为止,然后才会触发它关闭。