python - 什么决定了动态实例的启动时间,如果代码相同,它可以在几周之间变化吗

标签 python google-app-engine

我们在我们的应用程序中遇到了奇怪的问题,我们得到的错误是:-

在尝试为您的请求提供服务的等待时间过长后,请求被中止。

之前,我们能够使用相同数量的空闲实例很好地扩展,但现在我们不能,我们也没有更改任何可能影响启动时间的代码。但是现在我们收到超时。

最佳答案

使用 Python 可以显着缩短实例启动时间,具体取决于应用的代码组织。

延迟加载请求处理程序代码仅在实例启动时加载包含触发实例启动的实际请求处理程序的 python 文件,而不是整个应用程序代码。因此,处理程序代码可以与模块的 .yaml 中提到的模块主文件分开。在任意多个文件中,甚至每个文件一个处理程序。

例如,在特定模块的 module_blah.py 文件中,您可以像这样只加载相应的 file1.pyfile2.pyrare.py 文件以及 module_blah.py 文件(根据模块的 .yaml 文件加载)并且仅当/当请求各自的路径时:

app = webapp2.WSGIApplication([
    ('/path1', 'file1.HandlerOne'),     # loads file1.py
    ('/path2', 'file2.HandlerTwo'),     # loads file2.py
    ('/pathX', 'rare.RareHandlerOne'),  # loads rare.py
    ('/pathY', 'rare.RareHandlerTwo'),  # loads rare.py
    ('/.*', ModuleBlahHandlerX)         # already loaded module_blah.py
], debug=True, config=apart_config)

您还可以将较重的/第 3 方库的必要导入语句放在使用它们的方法中,而不是放在文件的顶部,这也仅在调用受尊重的方法时加载这些文件。

缺点是某些请求的响应时间可能偶尔会出现峰值 - 当在处理这些请求的实例中按需加载相应代码时。由相同实例处理的后续请求会更快,因为代码已经加载。

我猜想 SDK 或 GAE 基础设施运行条件的变化(整体负载平衡事件、由于维护、中断等导致的更短或更长的瞬变)可能会导致实例启动时间的变化,潜在如果您的实例的启动时间足够接近允许的最大值,则会导致您描述的症状。我描述的技术可以帮助您的应用远离最大值,减少遇到问题的机会。

最后,配置更强大的instance class还可以加快相同应用程序代码的实例启动时间。

关于python - 什么决定了动态实例的启动时间,如果代码相同,它可以在几周之间变化吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34635012/

相关文章:

java - 为什么数组的索引/列表不以 1 开头?

python - python如何处理线程锁定/上下文切换?

javascript - 重用javascript代码的Django最佳实践

android - 从 Android 客户端将图像存储到 Blobstore 并检索 blobkey 并上传 url 以存储在 Datastore 中。 -GAE

google-app-engine - 如何使用 Java 指定遗留增量 ID

Python Selenium 循环

python - 如何在 Python 中向 YAML 文件添加注释

java - 图片从 Internet 到 AppEngine BlobStore (Java)

java - 使用 AppEngine 访问本地 map 数据

google-app-engine - 添加到 google-appengine 中的集合