Amazon EC2 按需工人用于短期任务

21

我打算建立一个 Web 应用程序,需要在 R 中按需运行资源密集型 MCMC (Markov chain Monte Carlo) 计算,以为用户生成一些概率图。

限制条件:

  1. 显然,我不希望在 Web 应用程序前端的同一服务器上运行资源密集型计算,因此这些任务需要交给工作实例处理。

  2. 这些计算需要很多 CPU 运行,我希望将延迟保持尽可能低(希望是秒而非分钟),因此我更愿意在 更强大的硬件 上运行计算。

  3. 我无法承担每天 ~66¢/hr x 24hrs 的强大 EC2 实例费用,因此可能需要使用按需或竞价实例。

以下是我提出的选项:

  1. 运行一个便宜、实惠的工作实例,全天候接受由Amazon SWF(或SQS)管理的一个任务。

    缺点:

    • 高延迟 - 更便宜的硬件,等待时间更长。




  2. 每个任务都产生一个更强大的工作实例(当一个作业被添加到队列时启动),并在完成后终止该实例。

    缺点:

    • 昂贵/浪费 - 每次我只使用几秒钟进行计算,但我需要支付服务器一小时的费用。


    • 启动开销 - 在需求时旋转新的EC2实例是否会引入不可忽略的延迟(抵消使用更强大的硬件的整个目的)?




  3. 像#2一样,但使用低价EC2 spot请求。

    缺点:

    • 启动开销 - 参见#2

    • 不一致性? - 我以前没有使用过spot请求,所以我不知道这样的解决方案有多么易变或手动...我是否必须不断调整我的出价,以确保我仍然可以在高峰时段完成任务?此外,我想我必须密切监视我的进程,以确保它们不会在计算中间被中断。




  4. 某种混合解决方案,我积极监控强大的硬件工作实例及其负载,并智能地旋转和终止实例,以维护成本和可用性的最佳平衡。

    缺点:

    • 复杂和昂贵的设置 - 除非有一个良好的托管服务来处理这些事情,否则我必须自己设置所有基础设施...


我希望有一种服务,可以按分钟计费,而不是按小时计费,提供高度可用的按需硬件。

所以我的问题如下:
  • 您如何推荐解决这个问题?

  • 是否有一个好的EC2实例管理解决方案,可以在Amazon SWF上运行,并帮助我负载均衡和终止空闲工作人员?

  • spot-request竞价是否能解决我的问题,还是更适用于不需要立即完成的任务?


如果您可以在Python中实现MCMC,那么您可以使用Google App Engine。App Engine的计费主要基于应用程序实际使用的资源,而不是EC2的实例租赁。 - jthetzel
不幸的是,我在R上被卡住了......它处理大部分繁重的工作,而我正在与一些数学人而非程序员合作,所以维护它将落到我身上。 - mikegreiling
1
还有一个Renjin项目,旨在成为JVM R解释器。最终,您应该能够在Java应用引擎上使用它来运行R,但我不知道目前它的稳定性如何。 - jthetzel
你能提前准备它们吗?而不是按需求?(即,安排一系列选项的发布时间)? - Brandon Bertelsen
很遗憾,不行。应用程序的工作方式是用户将输入马尔可夫链中最新计算的所有数据,提交表单并期望结果。我可以给他们一个消息,说15分钟后再来查看,但我希望有更即时的东西。我想我可以分析一天中服务被广泛使用的时间,并安排工作实例的正常运行时间,但它的使用相当不可预测和零散。 - mikegreiling
如果选择方案#2,您可能可以通过在用户访问网站时启动实例来改善第二个缺点。然而,这会使解决方案有些浪费(如果用户决定不提交任何内容)。 - Andres Riofrio
2个回答

5
我希望有一种服务,我可以按分钟而不是按小时支付高可用性的按需硬件。
这项服务就是AWS Lambda,当你提出问题时它还没有推出:
Lambda在高可用性计算基础设施上运行您的代码,并执行所有计算资源的管理,包括服务器和操作系统维护、容量规划和自动缩放。 定价
您根据您的函数请求数量以及代码执行时间收费。持续时间从您的代码开始执行到返回或以其他方式终止的时间计算,向最接近的100ms取整。Lambda免费配额每月包括100万次免费请求和400,000 GB秒的计算时间。
您还可以使用HTTP端点封装Lambda函数,可能会从应用程序中删除此层。

您可以使用Amazon API Gateway定义自定义RESTful API,通过HTTPS调用Lambda函数。这为您的函数提供了一个终端节点,可以响应REST调用,例如GET,PUT和POST。请阅读有关在Amazon API Gateway中使用AWS Lambda的更多信息。

注意:Lambda目前仅支持JavaScript、Java和Python,因此我不确定如何让R起作用。您可能需要在其中一个运行时中托管R。


4

你可能不知道还有另一种选择。我刚好偶然发现了它:http://multyvac.com

我没有使用过它(所以我不能保证它的可靠性),但它看起来是我见过的第一个真正提供“实用计算”的解决方案。它最初只支持Python,但现在支持任何语言。


看起来很完美!计算任务按毫秒分配...我会试着玩一下,看看它是否可以运行我的应用程序。 - mikegreiling
很好。我很感兴趣听一下后续,看看它是否好用。 - jman
我已经编辑了这个答案 - 看起来PiCloud已经关闭。我认为我找到了正确的替代品:http://docs.multyvac.com/introduction.html#relation-to-picloud - Kobi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接