15

根据代码是在前端实例还是后端实例上运行,GAE 允许不同的限制。例如,它允许您在后端启动长时间运行的后台线程,而如果代码在前端实例上运行,这将超时并引发运行时异常。

我对如何设计应用程序感到非常困惑,以便您知道只有某些代码在后端实例(而不是前端实例)上执行。

我对 GAE 工作原理的理解是,您上传您的应用程序(WAR 文件)并根据需要或直到超过您定义的上限(用于预算等)扩展(创建集群实例)该应用程序。

但除非我弄错了,否则它不允许您为同一个应用程序上传不同的模块(多个 WAR),因此在前端实例上运行 1 个 WAR,在后端实例上运行另一个 WAR(以保证你只在后端运行后台线程!)。

所以我的问题是:您如何开发、打包和部署 GAE 应用程序,以便始终在正确的实例上执行正确的代码?与此相切的问题是如何指定在特定后端运行不同的长时间运行的作业。例如,如果您有一个后台线程应该在午夜运行,但您有 10 个后端,这是否意味着您每晚都会在所有 10 个实例上启动相同的后台线程?显然,在某些情况下,您只希望 1 个后端运行作业,而其他情况下每个后端的行为应该相同。

再一次,这一切都回到了:你如何确保正确的代码在正确的实例上部署和执行?提前致谢!

4

1 回答 1

7

后端可以通过名称直接寻址,尽管它们与您的应用程序中的其他常规/前端实例共享相同的代码和 servlet。

参考:https ://developers.google.com/appengine/docs/java/backends/overview

您可以将需要在后端运行的请求定向到 backendname.yourapp.appspot.com/someroute

您还可以在 backends.xml 中配置多个后端(使用不同的名称)并使用相同的逻辑,将针对特定后端的请求发送到其相应的 uri。

基本上相同的代码在所有实例上运行,但您可以设计路由以将特定请求定向到命名后端实例。

于 2012-08-09T17:25:33.577 回答