【问题标题】:Access compute engine from app engine从应用引擎访问计算引擎
【发布时间】:2016-03-02 22:52:24
【问题描述】:

我有一个在 Compute Engine 上运行的实例,它使用 Torch 来预测图像中的对象。我想制作一个简单的 Web 界面,用户可以使用该界面上传图像,将图像发送到服务器(计算引擎),预测对象并将列表返回给用户。 在我的计算引擎(Ubuntu 14.04)中,这行代码用于预测图像中的对象。 (所有其他设置已在计算引擎中完成。)

th eval.lua -model /path/to/model -image_folder /path/to/image/directory -num_images 10 

我想从 Web 应用程序调用此行并将图像传递到图像文件夹并取回对象列表。我该怎么办?

【问题讨论】:

  • 基本上,您需要运行一个应用程序,该应用程序将为命令行和文件提供 http 接口。我相信github上有很多。

标签: google-app-engine lua google-compute-engine torch


【解决方案1】:

在过去的项目中,我讨论并使用了不同的方法在 Google App Engine 和 Google Compute Engine 之间进行通信。一般来说,两个常见的嫌疑人是:

  • 来自 App Engine 的编排:在这种方法中,App Engine 应用程序是活动部分,并将请求发送到计算实例上的服务。这就是Igor Artamonov 在他的评论中已经描述的内容。我们在计算实例上使用了一个 tomcat 实例,该实例运行了一个完整的 rest api 来调用实例上的命令。可能的帮手:
    • 使用 App Engine 中的Google Compute API 时,您可以获得计算实例的外部 IP 地址。这样您就知道您的请求必须去哪里。
  • 从计算实例轮询:由于您知道 App Engine 应用程序的应用程序 ID,因此您可以在计算实例上编写一个简单的循环,从 App Engine 应用程序请求新作业。我将这种方法与一个编排结合使用,该编排将向不再需要的实例发送关闭命令,从而减少应用引擎上的轮询负载。如果创建了新作业,我将启动一个新的计算实例,然后它会轮询,直到它再次收到关闭命令。

这两种方法都运作良好。如果您使用 Compute API 并且知道计算实例的 IP,则可以将轮询端点和命令调用请求限制在这些 IP 上,以实现基本安全。

我会尽量避免过多的投票,因为,让我给你一个报价:

主动轮询是穷人启动工作流程的解决方案。 (javaworld.com)

但是,如果您在计算实例完成工作负载后关闭它们,我看不出您不应该使用轮询的充分理由。如果您不这样做,并且将计算实例的数量增加到几个实例,那么您将在 App Engine 应用程序上加载,除了成本之外没有任何收获。

【讨论】:

    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 2016-07-24
    • 2018-11-15
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    相关资源
    最近更新 更多