【发布时间】:2013-03-21 13:55:07
【问题描述】:
我目前使用谷歌应用引擎作为我的移动应用程序后端。我有一些在 gae 环境中无法执行的任务(主要是使用 opencv 进行图像识别)。我的意图是保留 gae 并使用 AWS 来执行这些特定任务。
有没有一种简单的方法可以将特定任务从 gae 传递到 AWS?例如。任务队列?
【问题讨论】:
标签: google-app-engine amazon-web-services backend
我目前使用谷歌应用引擎作为我的移动应用程序后端。我有一些在 gae 环境中无法执行的任务(主要是使用 opencv 进行图像识别)。我的意图是保留 gae 并使用 AWS 来执行这些特定任务。
有没有一种简单的方法可以将特定任务从 gae 传递到 AWS?例如。任务队列?
【问题讨论】:
标签: google-app-engine amazon-web-services backend
您打算在 GAE 中保留应用程序并使用 AWS 执行一些在 GAE 中无法执行的任务,这对我来说似乎是一个正确的方案。
我想分享一些想法以及一些资源来回答您问题的主要部分:
有没有一种简单的方法可以将特定任务从 gae 传递到 AWS?例如。任务队列?
如果您需要 GAE 和 AWS 一直(24/7)执行任务,那么您的应用程序肯定会依赖批处理计划或任务队列。它们由 GAE 提供。
但是,如果您可以安排在 GAE 中拉取任务并由 AWG 以间隔为基础执行(比如每天两次,每次不到一小时),您可能不需要使用它们,只要您可以管理 GAE 到 @ 987654321@。
对于这种情况,您需要为 On/Off Schedule 设置 AWS EC2 实例,并让实例 to run a boot script using 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 以准备用作您的移动应用程序后端。
以下是一些可供考虑的选项:
【讨论】:
免责声明:我是 AppScale 项目的首席开发人员。
您可以采用的一种方法是使用AppScale - 它是在 Amazon EC2(以及其他云)上运行的 App Engine API 的开源实现。由于它是开源的,您可以更改我们随附的 AppServer 以启用 OpenCV。这将要求您在 AWS 中运行您的 App Engine 应用程序,但您可以发挥创意并让您的应用程序副本与 Google 一起运行,并让它仅在您需要时将任务队列请求发送到您在 AWS 中运行的应用程序版本使用 OpenCV 库。
【讨论】:
您可以将任务从 GAE 推送到 AWS,或者让您的 AWS 实例从 GAE 拉取任务。
如果您将任务从 GAE 推送到 AWS,您可以使用 URLFetch 将您的数据推送到您的 AWS 实例。
如果您更喜欢让您的 AWS 实例从 GAE 中提取任务,您可以让您的 GAE 实例将它们的任务放入 GAE Pull Queue,然后让您的 AWS 实例使用 Task Queue REST API 从队列中租用任务。
在任何一种情况下,AWS 实例都可以通过简单的 POST 请求向您的 GAE servlet 报告处理结果,或者通过上述REST API 插入任务,这些任务稍后将由您的 GAE 实例租用。如果您想控制 GAE 应用处理结果的速率,后者可能会很有用。
【讨论】:
当然。 AppEngine 有一个Task Queue,您可以通过简单地实现DeferredTask 将您的任务放入其中。在该任务中,您可以make requests 到 AWS。
【讨论】:
您是否考虑过使用亚马逊简单的队列服务? http://aws.amazon.com/sqs/
您应该能够使用标准 http clint 从 gae 将项目添加到队列中。
【讨论】: