分布式环境中会话ID的唯一性?

2024-03-29

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

在这样的分布式环境中,

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


只是回顾旧的 SO 帖子春季会议 关键宝石火支持,所以很抱歉您的问题从未得到及时答复。

简而言之,春季会议使用UUID http://docs.oracle.com/javase/8/docs/api/java/util/UUID.html类来生成“唯一”会话 ID。例如,参见here https://github.com/spring-projects/spring-session/blob/1.2.0.RELEASE/spring-session/src/main/java/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.java#L380,或者更一般地说,here https://github.com/spring-projects/spring-session/blob/1.2.0.RELEASE/spring-session/src/main/java/org/springframework/session/MapSession.java#L66.

NOTE: Spring会话数据Redis支持使用/包装 https://github.com/spring-projects/spring-session/blob/1.2.0.RELEASE/spring-session/src/main/java/org/springframework/session/data/redis/RedisOperationsSessionRepository.java#L682 the MapSession默认情况下,在 Redis 中存储会话状态的类。

似乎有很多关于有效性,或者说独特性UUID跨集群中的 JVM。这特别是一个 https://community.oracle.com/thread/1326404?tstart=0虽然已经过时,但引起了我的注意,因为它源自 Oracle Java 社区论坛。

但是,请记住,这是您的应用程序使用的春季会议最终确定会话 ID 是否唯一;即,它不依赖于 GemFire 集群中的节点数量,因为各个 GemFire 节点不会生成会话 ID(使用春季会议 are).

因此,如果只有 1 个应用程序(在微服务世界中可能不太可能)存在春季会议在使用中,那么 UUID 在概率上保证是唯一的。即便如此,基于可用,似乎不太可能有 2 个或更多使用 Spring Session 的“应用程序”节点生成冲突的 ID(尽管,(几乎?)一切皆有可能;-)。

不过,我想如果这是最重要的关注/重要性,那么遵循美丽的传统Spring,这将是一件简单的事情extend the GemFireOperationsSessionRepository并覆盖创建会话() https://github.com/spring-projects/spring-session/blob/1.2.0.RELEASE/spring-session/src/main/java/org/springframework/session/data/gemfire/GemFireOperationsSessionRepository.java#L110-L112方法,调用适当的GemFireSession 构造函数 https://github.com/spring-projects/spring-session/blob/1.2.0.RELEASE/spring-session/src/main/java/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.java#L384-L388传递所需的会话 ID。

然而,在所有情况下(GemFire、Redis 等),会话 ID 唯一性问题与底层后备数据存储无关。

希望这可以帮助...

Cheers!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分布式环境中会话ID的唯一性? 的相关文章

随机推荐

  • 从 dplyr 中选择函数时出错

    当我使用 dplyr 中的 select 函数时 它不起作用 并给出一个错误 指出我要选择的列名称是未使用的参数 但是 如果我在函数调用之前指定 dplyr 如 s dplyr select 那么它会正常工作 这是一个示例 df sampl
  • GCE:如何创建从外部端口80到内部端口5555的转发规则

    我第一次使用谷歌计算引擎 我想设置一个网络负载平衡器 具有静态IP 侦听端口80 但转发到侦听端口5555的后端服务器 我发现的所有示例都显示转发80到80 这在以下方面没有帮助我的情况 ref https cloud google com
  • 许多元素上的 ngClass 使网站非常慢

    我目前正在我的 Angular 6 应用程序中制作一个树视图 我正在使用它 嵌套和所有内容 我遇到的问题之一是 当我的页面有很多元素 几千个 并且它们都有 ngClass 在它们上 根据所选节点显示不同的颜色 页面往往会挂起很多 我创建了一
  • 通过鼠标单击并拖动绘制矩形 - javascript

    我试图在 Javascript 中绘制一个矩形 实际上是一个选择框 以选择选择中的 SVG 元素 我尝试修复单击并拖动矩形的代码 http jsfiddle net 7uNfW 26 http jsfiddle net 7uNfW 26 但
  • 如何在同一应用程序中运行 Spring Boot 管理客户端和服务器

    我想在同一个应用程序中运行 spring boot 管理服务器和客户端 我更改了服务器端口 当我更改服务器端口时 spring admin 将访问我更改的端口 这样我就可以运行管理服务器 但我看不到我的网络应用程序页面 我需要这样的输出 本
  • 根据请求更改表单字段

    应用程序有一个类别字段 可以在会话中设置 也可以不设置 如果是 我不想看到表单上的字段 只需将其作为隐藏字段 其值等于请求中的值 如果未设置 那么我想显示一个下拉菜单 我已经设置了表单以包含下拉列表 这是该字段的默认设置 我的问题是 将小部
  • 将扰乱的 PDF 字符重新映射为可读文本

    我确实遇到了一个问题 因为 cups PDF 创建的 PDF 文档中的字符被映射到奇怪的符号 在 Ubuntu Linux 14 04 和 16 04 上 我认为它是某种 unicode 即使 Python 告诉我它的字符串类型 type
  • Magento CE :: 第一次订购有折扣吗?

    是否有任何合理的方式可以为客户的第一笔订单提供折扣 我想这会要求用户注册一个免费帐户 这很好 但在那之后 我就陷入了困境 Magento 中的促销功能无法满足此类需求 Google 也找不到任何好的潜在客户 Ideas 没有任何开箱即用的方
  • 如果在 Inno Setup 中更新安装,则排除 ssPostInstall 步骤中的部分代码部分

    我尝试对两者使用相同的安装程序 全新安装和更新 因此 如果用户第一次尝试安装我的应用程序 它将运行完整安装 包括 MySQL 安装程序作为先决条件 以及 MySQL 安装的一部分 Code 就会正常执行 但是 如果用户已经安装了我的应用程序
  • 通过 Vertex AI 用户管理笔记本中的启动后脚本创建自定义内核

    我正在尝试使用启动后脚本创建一个 Vertex AI 用户管理笔记本 其 Jupyter Lab 在首次启动时有一个专用的虚拟环境和相应的计算内核 我已成功创建实例 然后作为 Jupyter Lab gt Terminal 中的第二个手动步
  • 在 IE8 中,jquery-ui 的对话框将其内容的高度设置为零。我怎样才能解决这个问题?

    我正在使用 jquery UI 的对话框小部件在我的 Web 应用程序中呈现模式对话框 我通过将所需 DOM 元素的 ID 传递到以下函数来实现此目的 var setupDialog function eltId eltId dialog
  • 集成 bootstrap-select 以与 Ember 配合使用

    我想得到引导选择 https github com silviomoreto bootstrap select使用 Ember js Ember 对视图对象的管理存在一些问题 导致其无法按预期工作 JSFiddle http jsfiddl
  • 不兼容的 firebase 库

    我使用的是最新版本com google firebase firebase core 16 0 3和最新版本的com google firebase firebase messaging 17 3 1 但它们取决于不同的版本com goog
  • 列出 Google Fonts API 中的所有可变字体?

    我需要通过 Google Fonts API 获取所有可用的可变字体的列表 我可以从这个端点获取所有字体名称 您可以添加一些参数 但我认为其中不包括可变字体过滤器 我认为在进行 API 调用后我无法过滤结果 这里的 Open Sans 是一
  • 创建的 Iframe 和扩展、google chrome 扩展之间的通信

    我尝试从从我的扩展程序加载的 iframe 发送消息到我的扩展程序 后台脚本或内容脚本 创建的 Iframe 通过内容脚本从扩展加载 我正在寻找一种沟通方式 但我所有的尝试都失败了 清单 json author background pag
  • 在 Pandas DataFrame 上滚动应用速度更快?

    改进这个问题 https stackoverflow com questions 21040766 python pandas rolling apply two column input into function它提供了一个巧妙的解决方
  • 使用泛型类型反射执行类

    我想在使用反射 查找接口实现 找到它之后 在使用泛型类型的类上动态执行方法 下面是我陷入困境的一个例子 非常感谢您的帮助 Setup public interface IActionRequired
  • 关于在 Perl 中将混合编码文件转换为 UTF8 的问题

    我正在将我们大学中国研究系古老的基于 DOS 的图书馆程序生成的文件转换为更有用和更易于访问的文件 我正在处理的问题之一是导出的文本文件 大小约为 80MB 采用混合编码 我在 Windows 上 我认为德语元音变音和其他高级 ASCII
  • 如何为 SwiftUI 列表中的各个行设置动画?

    我想显示一个列表 其中每一行都显示不透明动画并且延迟逐渐增加 因此 第一行应在 0 1 秒后出现 第二行应在 0 3 秒后出现 第三行应在 0 5 秒后出现 依此类推 我尝试了以下方法 但它不起作用 因为所有行都会同时出现并且没有动画 任何
  • 分布式环境中会话ID的唯一性?

    我们正在使用 Spring Session 由关键的 Gemfire 备份 来运行在分布式环境中的 Spring Boot 应用程序 在这样的分布式环境中 Spring Session 是否确保新的会话使用唯一的会话 id 跨不同 JVM