java - 微服务中的 session 管理

标签 java session cookies weblogic microservices

我们有以下设置。

  1. STM(Stingrey 流量管理器)做负载平衡 + session 粘性
  2. Weblogic“集群”
  3. 由第三方工具处理的授权

因此,我不必担心与水平缩放/运行应用程序的多个实例有关的 session 。 STM/Weblogic 集群确保后续请求到达同一托管服务器。

我们目前拥有的是单体式应用程序,我们正在尝试转向微服务。我们也不想离开当前的基础设施(即 STM/Weblogic 集群/Auth 工具)。我们的计划是:

  1. 将请求路由到其他微服务的网关 WAR
  2. N x 每个功能子域的微服务 (WAR)
  3. 只有API网关接收用户请求,其他微服务无法从外部访问

所以我的问题是

  1. API 网关是否应该是全状态的,而其他微服务是无状态的?
  2. 如果是这样,用户 session 数据应如何在 API 网关和微服务之间共享?

请同时建议任何更好的替代方案和资源/链接。谢谢。

最佳答案

说说我的看法。

首先,如果您可以让您的应用程序保持无状态,请务必这样做 :) 就性能和可扩展性而言,这将是最佳解决方案。

现在,如果不可能,那么您应该维护一些分布式 session 管理层。

负责身份验证的网关可以生成一些唯一的 session 标识符,以后可以将其用作 key 。 这个 key 可以传播到所有微服务,并成为 API 或其他东西的一部分。

为了访问 session ,微服务可以通过键“获取”值并使用它。

在实现方面:我会看一下 NoSQL 解决方案。其中一些可以满足您的需要:

  1. Redis .看看那里的“hset”
  2. Hazelcast .它更像是一个内存网格,但如果解决方案仅是 java,您还可以实现所需的功能
  3. Memcache.d .它会给你一张旧的好 map ,刚刚分发:)

我相信还有其他解决方案。

现在,性能在这里至关重要,否则整个解决方案将太慢。因此,据我所知,在这里使用 RDBMS 并不好,而且可能更难将其扩展。

希望对你有帮助

关于java - 微服务中的 session 管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32741333/

相关文章:

php - 如何删除数据库中具有特定变量值(用户ID)的所有 session ?

session 固定 - 在 asp.net core 2 上更改 sessionId

ios - iOS 上的 libcurl + cookie

java - Android 中是否有用于将 Cookie 格式化为 CookieManager 值的类?

java - 如何从 GXT 2.2.3 迁移到 GXT 3.0.1

java - 我如何获得 LdapAttributes

java - Webapp 在 Eclipse 中运行,但在 Eclipse 外部直接从 Tomcat 运行时出现 404 错误

java - 流式 XPath 评估

php - 用于更新 session 的 Jquery 登录头不起作用

node.js - 与 HTML5 全局 sessionStorage 对象相比,使用express' session 有什么优势?