从app引擎访问计算引擎

时间:2015-11-29 04:15:57

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

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

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

我想从网络应用程序调用此行并将图像传递到图像文件夹并返回对象列表。我该怎么做呢?

1 个答案:

答案 0 :(得分:2)

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

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

这两种方法都运作良好。如果使用Compute API并了解计算实例的IP,则可以限制轮询端点并命令调用对这些IP的请求以实现基本安全性。

我会尽量避免过多的民意调查,因为,让我给你一个引用:

  

积极投票是穷人开始工作流程的解决方案。 (javaworld.com

但是如果在完成工作负载后关闭计算实例,我就没有理由不使用轮询。如果不这样做,并且您将计算实例的数量增加到几个实例,那么您的App Engine应用程序将会加载,而不会产生任何费用。