0

我试图完全理解何时/如何使用 CloudBees 的应用程序会话存储概念。

读完那篇文章后,我对它们的理解是,它们提供了一种让您的应用服务器的多个实例共享持久会话变量的方法。这样,您可以在每个服务器之间进行负载平衡,而您的用户被重定向到哪个实例并不重要;每个服务器实例都具有相同的共享会话状态(对于所有用户)。

所以首先,如果我的理解不正确或略有误导,请先纠正我!

假设我或多或少是正确的,那么我有以下问题:

  1. 这对性能或内存利用率有何影响?我想如果每台服务器必须为所有用户共享相同的缓存会话数据,它会变得有点笨重,甚至可能很昂贵......
  2. 有没有办法以编程方式 CRUD 会话状态(即刷新缓存、使用 JMX 进行检查等)?
  3. 有人可以为这个功能提供一个具体的用例,这样我就可以肯定我“明白”了吗?

提前致谢!

4

1 回答 1

1

会话存储允许您在集群周围复制 HttpSession,这样您就可以在多个实例上横向扩展应用程序负载,而无需将用户固定到特定服务器(这是您可以使用的另一个选项:配置粘性会话

从本质上讲,序列化 HttpSession 数据对性能有一些影响,但由于它使用 memcache 后端,所以影响很小。这也主要取决于您在用户会话中存储的对象的数量和大小。另外,请注意,这要求您在任何属性更改后显式将对象放入 HttpSession,即使该对象是从会话中检索到的 - 这是 JavaEE 集群的一般 API 问题。

您不能以编程方式查询会话存储(您可以使用足够的内存缓存客户端代码,但这没有多大意义)

两个具体用例

  • 应用程序分布在多个节点上,会话分布在集群周围,并且没有粘性会话,因此负载实际上是为所有用户分配的
  • 被重新部署的应用程序不会遭受用户会话丢失,以确保连续0停机服务。版本 N+1 应用程序然后会从版本 N 中检索 httpsession 数据,从序列化的角度来看需要兼容,但连接的用户不会注意到重新部署和版本升级
于 2013-05-15T05:22:18.347 回答