我正在寻找构建一个Web应用程序,它需要在R中按需运行资源密集型MCMC(马尔可夫链蒙特卡罗)计算,以便为用户生成一些概率图.
约束:
显然,我不希望在与Web应用程序前端相同的服务器上运行资源密集型计算,因此需要将这些任务交给工作者实例.
这些计算需要运行大量的CPU,并且我希望将延迟保持在尽可能低的水平(希望是秒,而不是几分钟),所以我宁愿在更强大的硬件上运行计算.
我不能以~66¢/ hr x 24小时/天运行强大的EC2实例,因此可能需要按需或点请求实例.
以下是我提出的选项:
每天24小时运行廉价,经济实惠的工作实例,在Amazon SWF(或SQS)管理的时间内执行一项任务.
缺点:
每个任务生成一个更强大的工作者实例(每当作业添加到队列时旋转)并在完成时终止实例.
缺点:
与#2类似,但具有低出价的EC2现场请求.
缺点:
某种混合溶液中,我积极监测仡硬件工人实例及其负载并智能地旋转起来,并终止情况下的时间来维持的成本和可用性的最佳平衡
缺点:
我希望有一些服务,我可以在一分钟到一分钟而不是每小时支付高度可用的按需硬件.
所以我的问题如下:
你会如何推荐解决这个问题?
是否有一个好的EC2实例管理解决方案可以位于Amazon SWF之上并帮助我实现负载平衡并终止闲置工作人员?
现货请求出价是否可以解决我的问题,还是更适合那些不一定需要立即完成的任务?
无论引擎如何(例如InnoDB或MyISAM),这种"比较和交换"语句是否始终是原子的?:
UPDATE tbl_name SET locked=1 WHERE id=ID AND locked <> 1;
Run Code Online (Sandbox Code Playgroud)
我问这个是因为我打算使用这个语句进行与事务和非事务数据库表兼容的伪行级锁定.
这是MyISAM推荐的方法,但我不确定这是否适用于InnoDB,因为文档建议使用事务.