Google App引擎如何冷启动处理全局变量?

时间:2018-11-08 14:33:35

标签: google-app-engine

我的python API初始化了一个全局变量,该变量大约需要10秒钟才能完全初始化,然后服务器才能开始运行。我想知道GAE初始化新实例时是否需要相同的初始化?还是可以跨多个实例访问同一变量?

2 个答案:

答案 0 :(得分:2)

这个答案只是对其他提到的方法的补充,在大多数情况下,即使不是全部,也可以将它们组合在一起。

如果您处于标准环境中,则可以利用warmup requests来...在大部分实际流量到达之前预热(大部分)实例。

在这种情况下,多线程的复杂性实际上并不重要,因为您知道,直到实例的初始化未完成(即它成功响应预热请求)之前,其他任何请求都无法命中该实例。因此,您可以针对这种情况进行优化,同时仍然可以安全(即使效率不高),以防少数情况下实例仍然启动并且可以并行获取多个请求。

在灵活的环境中预热请求aren't supported,但是:

  

要预热您的应用,请实施一个health check handler   在应用程序预热后返回ready status

     

例如,您可以创建一个准备就绪检查,以返回准备就绪的状态。   初始化缓存后的状态,因此您的应用不会收到流量   直到准备好。

答案 1 :(得分:1)

应用程序中的每个实例都是一个单独的解释器,因此需要针对每个实例初始化全局变量。

如果初始化的成本很高,但是计算出的值不经常更改,则可能值得将该值存储在内存缓存,数据存储区,数据库或其他一些全球可用的存储区中。从Memcache检索的速度很快,但不能保证持久性,因此您可能需要不时重新运行初始化。从数据存储区或数据库中检索通常较慢,但在正常情况下可以保证持久性。

如dhauptman在评论中所观察到的那样,this article包含一些关于延迟加载全局变量的建议。