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

The*_*chu 10 google-app-engine instance reset go data-loss

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

"此请求导致您的应用程序启动了一个新进程,从而导致您的应用程序代码首次加载.因此,此请求可能需要更长的时间并且使用的CPU比典型的应用程序请求更多."

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

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

编辑:

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

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

Pet*_*ego 15

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

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

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


rwy*_*and 5

您可以在其文档中阅读有关GAE实例的信息,请查看性能部分:

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

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

我关于保持GAE实例存活的建议,要么为Always-On服务付费,要么按照我的建议在此处使用cron:

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

我使用所谓的3、7、11分钟的Cron工作的“主要时间表”。

  • 如果您的设计不理想,希望能够在两次请求之间将状态保存在RAM中,则“始终启用”无济于事。在扩展以处理大量流量时,您仍然可以同时运行数十个实例,并且它们不会共享状态。 (2认同)