GAE Go - “此请求导致您的应用程序启动了一个新流程...”

时间:2012-03-06 03:18:28

标签: google-app-engine instance go reset data-loss

我现在第二次遇到这个问题,我想知道是否有任何解决方案。我正在Google App Engine上运行一个应用程序,该应用程序依赖于通过HTTP JSON RPC与网站的频繁通信。似乎GAE倾向于在日志中随机显示这样的消息:

  

“此请求导致您的应用程序启动了一个新进程,   因此导致您的应用程序代码首次加载。   因此,该请求可能花费更长时间并且使用比典型更多的CPU   请求申请。“

并在没有警告的情况下重置存储在RAM中的所有变量。无论我多次重新设置变量或将更新的代码上传到GAE,同样的过程都会反复发生,尽管增加应用版本号似乎可以解决问题。

如何获取有关此行为的更多信息,如何避免此行为并防止Google App Engine上的Golang应用程序丢失数据?

编辑:

存储在RAM中的变量是字符串,字节,bool和指针的小类。没有太复杂或太大。

谷歌应用引擎似乎在重大使用的几秒钟内“开始一个新的过程”,这应该不足以让应用程序因未被使用而关闭。应用程序上传到GAE,其变量集和创建的新进程之间的时间跨度不到一分钟。

3 个答案:

答案 0 :(得分:13)

您是否意识到GAE是一种云托管解决方案,可根据负载自动管理实例?这是人们使用它的主要特征和原因。

当负载增加时,GAE会创建一个新实例,当然,所有RAM变量都是空的。

解决方案不是期望变量可用或在请求结束时将它们存储到永久存储(会话,内存缓存,数据存储),如果在请求的开始时不存在则加载它们。

答案 1 :(得分:4)

您可以在此处阅读其文档中的GAE实例,请查看性能部分:

http://code.google.com/appengine/kb/java.html

在您拥有小数据的情况下,如果它是静态的,那么您可以在启动新实例时将其加载到内存中。如果是动态数据,则应使用api将其保存到数据库中。

我建议保持GAE实例存活,要么支付永远在线服务,要么按照我在cron中使用cron的建议:

http://rwyland.blogspot.com/2012/02/keeping-google-app-engine-gae-instances.html

我使用我称之为"黄金时间表"一个3,7,11分钟的cron工作。

答案 2 :(得分:2)

如果您希望长时间运行具有常驻内存的实例,则应考虑使用Backends

相关问题