【问题标题】:Uniqueness of Session ID in a Distributed environment?分布式环境中会话 ID 的唯一性?
【发布时间】:2016-01-04 10:22:08
【问题描述】:

我们正在为在分布式环境中运行的 Spring Boot 应用程序使用 Spring Session(由关键的 Gemfire 备份)。

在这样的分布式环境中,

Spring Session 是否确保一个唯一的 session id 用于新的 跨不同 JVM 创建会话?

【问题讨论】:

    标签: spring session spring-session


    【解决方案1】:

    只是查看旧的 SO 帖子以获得 Spring Session Pivotal GemFire 支持,所以我很抱歉您的问题没有得到及时的回答。

    简而言之,Spring Session 使用 UUID 类来生成“唯一”会话 ID。例如,请参阅here,或更一般地,here

    注意:Spring Session Data Redis 默认支持uses/wraps MapSession 类在 Redis 中存储 Session 状态。

    关于UUID 在集群中跨 JVM 的有效性,或者更确切地说是唯一性,似乎有很多 discussion。这个one in particular 虽然过时了,但引起了我的注意,因为它来自 Oracle Java 社区论坛。

    但是,请记住,最终确定 Session ID 是否唯一的是您的应用程序对 Spring Session 的使用;即它不依赖于 GemFire 集群中的节点数量,因为单个 GemFire 节点不会生成 Session ID(使用 Spring Session 的应用程序是)。

    因此,如果在使用 Spring Session 的情况下只有 1 个应用程序(可能不太可能处于世界的微服务状态),那么 UUID 就可能保证是唯一的。即便如此,基于可用的references,使用 Spring Session 的 2 个或更多“应用程序”节点似乎极不可能生成冲突的 ID(尽管,(几乎?)一切皆有可能 ;-)。

    不过,我想如果它是最重要的关注点/重要性,遵循 Spring 的美丽传统,扩展 GemFireOperationsSessionRepository 将是一件简单的事情并覆盖createSession() 方法,调用适当的GemFireSession constructor 以传入所需的会话ID。

    但是,在所有情况下(GemFire、Redis 等),会话 ID 唯一性问题与底层支持数据存储无关。

    希望这会有所帮助...

    干杯!

    【讨论】:

      猜你喜欢
      • 2010-09-13
      • 1970-01-01
      • 2010-10-23
      • 2015-01-12
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      相关资源
      最近更新 更多