Google App Engine: Backend vs Frontend Instances

2022-09-03 15:48:36

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

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

我对 GAE 工作原理的理解是,你上传应用(WAR 文件),然后它根据需要缩放(创建该应用的群集实例),或者直到它超过你定义的上限(用于预算等)。

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

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

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


答案 1

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

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

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

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

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


答案 2

推荐