0

我正在使用 Canoo 的 RIA Suite 在 GAE 上构建一个丰富的应用程序。此包将 Java Swing 组件拆分为服务器端和客户端部分。在服务器上,它看起来像一个“桌面”Java 应用程序。客户端在这些部分之间保留自己的地图。当 GAE 启动一个新实例时,客户端部分不知道它——如果他们发送的下一个请求被路由到错误的实例,就会发生坏事。

我想如果我做以下两件事之一,我可以解决这个问题:

  1. 强制 GAE 实例只提供一个 HTTP 会话。
  2. 将每个 HTTP 请求定向到特定的 GAE 实例。

我的问题是,在 GAE 环境中,这些都可以做到吗?

4

2 回答 2

1

这两个选项都不能解决您的问题,因为 App Engine 实例随时可能死亡并被替换。

如果您可以将服务器端“一半”的状态保存在数据存储中,则可以在请求命中“错误”实例时加载它,但这可能不是一个非常有效的解决方案。

您最好使用Compute Engine实例。

于 2014-06-09T16:54:50.257 回答
0

我同意这两个选项都不适合你。您当前设计的含义是您将状态存储在实例的内存中,这不适用于 GAE(或任何自动缩放分布式系统)。您应该将任何状态放入某个分布式数据存储中,无论是 memcache(易失性)、数据存储还是 cloudSQL

GAE/J 内置了对 java 会话的支持,会话状态跨请求保存在数据存储中,因此它在任何实例上都有效。为此,存储在会话中的所有内容都需要可序列化。

您可以按照这些说明启用此功能。

否则,您可以自己管理将服务器状态持久化到由 memcache 加速的数据存储中,并将其链接到带有 cookie 的“会话”。如果您走这条路,请确保您了解 GAE 数据存储中最终一致性的含义。

于 2014-06-09T22:56:07.753 回答