用于短期任务的 Amazon EC2 按需工作人员
Posted
技术标签:
【中文标题】用于短期任务的 Amazon EC2 按需工作人员【英文标题】:Amazon EC2 On-Demand Workers for Short Tasks 【发布时间】:2012-06-13 17:05:44 【问题描述】:我正在寻找构建一个 Web 应用程序,该应用程序需要在 R 中按需运行资源密集型 MCMC (Markov chain Monte Carlo) 计算,以便为用户生成一些概率图。
约束:
显然我不想在与 Web 应用前端相同的服务器上运行资源密集型计算,因此需要将这些任务交给 worker 实例 .
这些计算需要大量的 CPU 才能运行,我希望尽可能降低延迟(希望是几秒钟,而不是几分钟),所以我更愿意在 更强大的硬件上运行这些计算。
我负担不起以约 66 美分/小时 x 24 小时/天的速度运行强大的 EC2 实例,因此可能需要按需或现场请求实例。
以下是我想出的选项:
每天 24 小时运行一个廉价、负担得起的工作实例,这需要 一次一个任务由 Amazon SWF(或 SQS)管理。缺点:
高延迟 - 更便宜的硬件,更长的等待时间。为每个任务生成一个更强大的工作实例(每当有工作时启动 被添加到队列中)并在完成时终止实例。缺点:
昂贵/浪费 - 我会在服务器上支付一个小时 每次仅使用秒进行计算 启动开销 - 会启动一个新的 EC2 实例 按需引入不可忽略的延迟(抵消 使用更强大的硬件的全部目的)?与 #2 类似,但 EC2 现货请求出价低。缺点:
启动开销 - 参见 #2 不一致? - 我以前从未处理过现场请求, 所以我不知道这样的解决方案有多不稳定或动手 会是......我是否必须不断调整我的出价才能使 确定我仍然可以在高峰时间完成任务吗?另外,我想 我必须密切监视我的流程以确保它们不是 计算中途中断。我主动监控的某种混合解决方案 强大的硬件工作者实例及其负载和智能 每小时启动和终止实例以保持最佳状态 成本和可用性的平衡缺点:
复杂且昂贵的设置 - 除非有良好的管理 那里的服务来处理这样的事情,我必须设置所有 所有这些基础设施都是我自己建立的......我希望有一些服务可以让我按分钟而不是按小时为高度可用的按需硬件付费。
所以我的问题如下:
您建议如何解决这个问题?
是否有一个很好的 EC2 实例管理解决方案可以位于 Amazon SWF 之上并帮助我进行负载平衡和终止闲置工作人员?
现场请求投标会解决我的问题还是更适合不一定需要立即完成的任务?
【问题讨论】:
如果可以在 Python 中实现您的 MCMC,您可以使用 Google App Engine。 App Engine 计费主要基于您的应用程序实际使用的资源,而不是 EC2 的实例租用。 不幸的是,我非常坚持使用 R... 它处理了大部分繁重的工作,而我正在与之合作的人是数学人员,而不是程序员,所以我需要维护它。 还有renjin project,旨在成为一个JVM R解释器。最终,您应该可以使用它在 Java App Engine 上运行 R,但目前我不知道它有多稳定。 可以提前准备吗?而不是按需? (即一系列选项的预定发布时间)? 不幸的是,没有。应用程序的工作方式是用户将他们的所有数据输入马尔可夫链中的最新计算,提交表单并期待结果。我总是可以给他们一条消息,说在 15 分钟后回来查看,但我希望能有更直接的消息。我想我可以分析一天中服务被大量使用的时间,并为此安排工作实例的正常运行时间,但它的使用是相当不可预测和零星的。 【参考方案1】:还有一个您可能不知道的选项。实际上我只是偶然发现了它:http://multyvac.com
我没有使用它的经验(所以我不能保证),但它看起来像是我见过的第一个真正提供真正“效用计算”的解决方案。它从 Python 开始,但现在支持任何语言。
【讨论】:
这看起来很完美!计算任务按比例分配到毫秒......我会玩弄它,看看它是否会运行我的应用程序。 优秀。我很想听听后续行动,看看是否有任何好处。 我已经编辑了这个答案 - 看起来 PiCloud 已关闭。我想我找到了合适的替代品:docs.multyvac.com/introduction.html#relation-to-picloud【参考方案2】:我希望有一些服务可以让我按分钟而不是按小时为高度可用的按需硬件付费。
该服务是AWS Lambda,当您提出问题时,该服务不可用:
Lambda 在高可用性计算基础架构上运行您的代码并执行计算资源的所有管理,包括服务器和操作系统维护、容量配置和自动扩展
Pricing:
根据对函数的请求数量和代码执行时间
向您收费持续时间从您的代码开始执行到它返回或以其他方式终止的时间计算,四舍五入到最接近的 100 毫秒。
Lambda 免费套餐包括每月 100 万次免费请求和每月 400,000 GB 秒的计算时间。
您还可以使用 HTTP endpoint 包装 Lambda 函数,可能会从您的应用程序中删除该层:
您可以通过使用 Amazon API Gateway 定义自定义 RESTful API 通过 HTTPS 调用 Lambda 函数。这为您的函数提供了一个端点,可以响应 GET、PUT 和 POST 等 REST 调用。阅读有关将 AWS Lambda 与 Amazon API Gateway 结合使用的更多信息。
警告:Lambda 目前仅支持 javascript、Java 和 Python,因此我不确定如何让 R 工作。您可能需要在其中一个运行时中托管 R。
【讨论】:
以上是关于用于短期任务的 Amazon EC2 按需工作人员的主要内容,如果未能解决你的问题,请参考以下文章
如何转换 Amazon EC2 实例以用于 Auto Scaling?
使用Learner Lab - 如何启动管理和监控Amazon EC2实例以及调整其大小
在Amazon ECS EC2任务中启动userland proxy:0.0.0.0:25时出错