我希望构建一个Web应用程序,它需要在R中按需运行资源密集型MCMC(Markov chain Monte Carlo)计算,以便为用户生成一些概率图 .
约束:
-
显然,我不想在与Web应用程序前端相同的服务器上运行资源密集型计算,因此需要将这些任务交给 worker instance .
-
这些计算需要运行大量的CPU,我希望尽可能保持延迟(希望是秒,而不是几分钟),所以我宁愿在 beefier hardware 上运行计算 .
-
我不能以~66¢/ hr x 24小时/天运行一个强大的EC2实例,因此可能需要 on-demand 或点请求实例 .
以下是我提出的选项:
- 每天24小时运行廉价,经济实惠的工作人员实例,在Amazon SWF(或SQS)管理的时间内执行一项任务 .
Cons:
-
高延迟 - 硬件更便宜,等待时间更长 .
-
为每个任务生成一个更强大的工作者实例(每当将作业添加到队列时旋转)并在完成时终止实例 .
Cons:
-
昂贵/浪费 - 我每次都要在服务器上支付一个小时的费用,而且我的计算只需要几秒钟
-
启动开销 - 按需启动新的EC2实例会引入不可忽略的延迟(抵消利用更强大的硬件的整个目的)?
-
与#2类似但具有低出价EC2现货请求 .
Cons:
-
启动开销 - 见#2
-
不一致? - 我必须密切监视我的进程,以确保它们在计算中不会被中断 .
-
某种混合解决方案,我主动监控强大的硬件工作者实例及其负载,并在一小时内智能地启动和终止实例,以保持成本和可用性的最佳 balancer
Cons:
- 复杂而昂贵的设置 - 除非's a good managed service out there to handle stuff like this, I'必须自己设置所有的基础设施......
我希望有一些服务,我可以在一分钟到一分钟而不是每小时支付高度可用的按需硬件 .
所以我的问题如下:
-
您如何建议解决此问题?
-
是否有一个好的EC2实例管理解决方案可以放在Amazon SWF之上,帮助我实现负载 balancer 并终止闲置工作人员?
-
现货请求出价是否可以解决我的问题,还是更适合那些不一定需要立即完成的任务?
2 回答
还有一个你可能不知道的选择 . 我实际上偶然发现了它:http://multyvac.com
我没有使用它的经验(所以我不能担保它),但它看起来像我见过的第一个解决方案实际上提供了真正的“效用计算” . 它始于Python,但现在支持任何语言 .
该服务是AWS Lambda,当您提出问题时,该服务无法使用:
Pricing:
您还可以使用HTTP endpoint包装Lambda函数,可能会从您的应用程序中删除此图层:
警告:Lambda目前仅支持JavaScript,Java和Python,因此我不确定如何让R工作 . 您可能需要在其中一个运行时中托管R.