【问题标题】:Using amazon web services as google app engine back end使用亚马逊网络服务作为谷歌应用引擎后端
【发布时间】:2013-03-21 13:55:07
【问题描述】:

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

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

【问题讨论】:

    标签: google-app-engine amazon-web-services backend


    【解决方案1】:

    您打算在 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 以准备用作您的移动应用程序后端。

    以下是一些可供考虑的选项:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        您可以将任务从 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 应用处理结果的速率,后者可能会很有用。

        【讨论】:

          【解决方案4】:

          当然。 AppEngine 有一个Task Queue,您可以通过简单地实现DeferredTask 将您的任务放入其中。在该任务中,您可以make requests 到 AWS。

          【讨论】:

            【解决方案5】:

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-03-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多