微服务中的会话管理

我们有以下设置。

  1. STM(Stingrey Traffic Manager)负载平衡+会话粘性
  2. Weblogic’集群’
  3. Auth由第三方工具处理

因此,我不必担心有关水平扩展/运行应用程序的多个实例的会话。 STM / Weblogic集群确保后续请求来到同一个受管服务器。

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

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

所以我的问题是

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

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

让我分享一下我的看法。

首先,如果你可以保持你的应用程序无状态,那么一定要这样做:)它将是性能和可扩展性方面的最佳解决方案。

现在,如果它不可能,那么你应该维护一些分布式会话管理层。

负责身份validation的网关可以生成一些唯一的会话标识符,以后可以将其用作密钥。 这个密钥可以传播到所有的微服务,并成为API的一部分。

为了访问会话,微服务可以通过密钥“获取”值并使用它。

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

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

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

现在,性能在这里至关重要,否则整个解决方案将会太慢。 所以在我的理解中,使用RDBMS在这里并不好,而且可能更难以扩展它。

希望这可以帮助