【问题标题】:google app engine : new instance with no user data谷歌应用引擎:没有用户数据的新实例
【发布时间】:2013-01-12 08:09:25
【问题描述】:

当用户请求被重定向到新实例时,我的谷歌引擎 java 应用程序丢失了所有用户数据:

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

因为这是非常不方便的行为,我尝试设置 一个常驻实例,所以我将“空闲实例”设置为 1-1,但这并不能解决我的问题,我得到了一个常驻实例并且总是会创建新的(动态)实例来服务一些请求......(这家伙有同样的问题:Why GAE launched a second instance with Max Idle Instances set to 1

我根本不想使用动态实例(我的应用总是负载低,用户不多)。我只需要为用户提供一个常驻实例。可以在 GAE 中设置吗?如果没有,是否有任何方便且可靠的方式如何在页面之间保存数据(例如将它们存储在数据存储中?)。我在页面之间传递了很多 POST 参数。

【问题讨论】:

    标签: java google-app-engine session google-api


    【解决方案1】:

    Google App Engine 是一个云平台。如果没有动态实例,您的应用程序设计将无法获得云平台的所有优势。

    要解决您的数据传输问题,您可以使用以下方法之一:

    1. 使用标准 Java EE 会话对象。会话存储在数据存储中,因此您不会丢失它。但您不应忘记,由于 DataStore 实体大小限制,您的会话对象应该是 SERIALIZABLE 且小于 1MB。

    2. 手动将数据存储在 DataStore 中并在页面之间传输实体 ID。同样适用 1MB 实体大小限制。

    3. 使用 BlobStore 或 Cloud Storage 将数据存储为文件并在页面之间传输文件标识符。这将有助于消除 1Mb 的限制。

    这些方法中的任何一种都允许在请求之间持久化数据,但有其自身的局限性。您需要提供您的要求的详细信息以获得明确的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-05
      • 2014-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多