7

我目前正在使用谷歌应用引擎作为我的移动应用程序后端。我有一些在 gae 环境下无法执行的任务(主要是使用 opencv 进行图像识别)。我的目的是保留 gae 并使用 AWS 来执行这些特定任务。

有没有一种简单的方法可以将特定任务从 gae 传递到 AWS?例如任务队列?

4

5 回答 5

2

您可以将任务从 GAE 推送到 AWS,或者让您的 AWS 实例从 GAE 中提取任务。

如果您将任务从 GAE 推送到 AWS,您可以使用URLFetch将您的数据推送到您的 AWS 实例。

如果您希望让您的 AWS 实例从 GAE 中提取任务,您可以让您的 GAE 实例将它们的任务放在 GAEPull Queue中,然后让您的 AWS 实例使用Task Queue REST API来从队列中租用任务。

在任何一种情况下,AWS 实例都可以通过简单的 POST 请求向您的 GAE servlet 报告处理结果,或者通过上述插入任务,这些任务REST API稍后将由您的 GAE 实例租用。如果您想控制 GAE 应用程序处理结果的速率,后者可能很有用。

于 2013-03-31T21:30:07.113 回答
2

免责声明:我是 AppScale 项目的首席开发人员。

您可以采用的一种方法是使用AppScale——它是在 Amazon EC2(以及其他云)上运行的 App Engine API 的开源实现。由于它是开源的,您可以更改我们随附的 AppServer 以启用 OpenCV。这将要求您在 AWS 中运行您的 App Engine 应用程序,但您可以发挥创意并让您的应用程序副本与 Google 一起运行,并让它仅在您需要时向您在 AWS 中运行的应用程序版本发送任务队列请求使用 OpenCV 库。

于 2013-04-01T14:33:59.167 回答
1

当然。AppEngine 有一个任务队列,您可以通过简单地实现DeferredTask将任务放入其中。在该任务中,您可以向 AWS发出请求。

于 2013-03-31T09:40:27.560 回答
1

您是否考虑过使用亚马逊简单的队列服务? http://aws.amazon.com/sqs/

您应该能够使用标准的 http clint 从 gae 将项目添加到队列中。

于 2013-03-31T08:01:34.097 回答
0

您打算在 GAE 中保留应用程序并使用 AWS 执行一些无法在 GAE 中执行的任务,这对我来说似乎是一个正确的方案。

我想分享一些想法以及一些资源来回答您问题的主要部分:

有没有一种简单的方法可以将特定任务从 gae 传递到 AWS?例如任务队列?

如果您需要 GAE 和 AWS 一直 (24/7) 执行任务,那么您的应用程序肯定会依赖批处理计划或任务队列。它们由 GAE 提供。

但是,如果您可以安排在 GAE 中提取任务并由 AWG 以间隔为基础执行(例如每天两次,每次少于一小时),您可能不需要使用它们,只要您可以管理 GAE将数据放在谷歌云存储 (GCS) 作为公共.

对于这种情况,您需要为开/关计划设置 AWS EC2 实例,并让实例使用 cloud-init 运行启动脚本,以通过指向 GCS (c.storage.googleapis.com) 的域收集数据,例如所以:

wget -q --read-timeout=0.0 --waitretry=5 --tries=400 \\
--background http://your.domain.com/yourfile?q=XXX... 

通过从 GCS 获取数据,AWS 可以执行这些特定任务。让它启动 GAE 以清理数据并将结果放回 GCS 以准备用作您的移动应用程序后端。

以下是一些需要考虑的选项:

  • 您应该注意,并非所有 EC2 类型都适用于开/关计划。如果您想为开/关计划设置 AWS EC2 实例,我建议使用EC2-VPC/EBS
  • 如果您可以将AWS Lambda设置为在没有 EC2 的情况下执行任务,您可能不需要设置EC2。成本更便宜,每天运行两次的任务通常不到 3 秒,内存消耗高达 128MB,通常成本不到 0.0004 美元/月
  • 作为在 GAE 中重新安排您的应用程序并设置 AWG 执行某些任务的结果,它最终可能会提高您的计费率,请尝试优化 GAE 中的实例类
于 2016-07-20T18:53:07.853 回答