Google App Engine:预热/加载请求并始终开启

时间:2012-10-24 00:33:18

标签: java google-app-engine

我对热身请求的理解是一个请求“准备”一个新的前端/后端实例(或者它们只适用于前端?)准备在不久的将来某个时候使用。

我对加载请求的理解是它是一个启动新实例的请求,因为它现在需要 。因此,提前尝试“预热”实例,以使加载延迟更少,这是理所当然的。

所以我的第一个问题是:我对这些请求类型的理解是否正确,如果没有(或者如果我在这里遗漏任何值得注意的东西),那么请先澄清/纠正我!

接下来我很好奇:你如何让你的GAE服务器端代码“处理”预热或加载请求?是否存在我需要实现的特定接口(在Java EE领域,您需要实现ServiceContextListener web / app容器在部署/启动应用程序时查找和调用。如果是这样,这样做的API是什么?否则,GAE应用程序的“切入点”是什么?基本上我想知道什么类/方法应该处理预热/加载请求。

最后,我问:在处理预热请求和加载请求之间的启动过程中,哪些(一般)活动应该有所不同?他们不一样吗?我问,因为我对使用GAE的“Always On”高级功能很感兴趣,并且不确定我应该将启动代码放在哪里,以便始终打开实例。

1 个答案:

答案 0 :(得分:7)

预热请求是一种让实例准备好处理流量的方法,这样您的用户就不必等待Java或Python应用程序加载其所有导入,然后执行任何特定于实例的初始化(包括缓存)它需要做的事情。预热请求适用于前端和后端。

如何执行此操作的详细信息取决于语言,但基本上您需要一个处理程序来处理/_ah/warmup的请求,这些请求会产生500响应之外的其他内容。有关详情,Google会针对“App引擎热身请求”并选择合适的结果。默认情况下,为Java启用预热请求,但对于Python,您必须在app.yaml中启用它们。我还没有尝试过Go。

据我所知,'加载请求'只是一个实例必须处理的第一个请求的名称。 https://developers.google.com/appengine/kb/java#What_Is_A_Loading_Request有一些细节。