微服务中的会话管理
问题内容:
我们有以下设置。
- STM(Stingrey Traffic Manager)进行负载平衡+会话粘性
- Weblogic的“集群”
- 由第三方工具处理的身份验证
因此,我不必担心有关水平缩放/运行应用程序多个实例的会话。STM / Weblogic集群确保后续请求到达同一托管服务器。
我们目前拥有的是一个整体应用程序,并且我们正在尝试转向微服务。同样,我们也不会离开当前的基础架构(即STM / Weblogic集群/
Auth工具)。我们计划的是:
- 将请求路由到其他微服务的网关WAR
- 每个功能子域的N x个微服务(WAR)
- 仅API网关接收用户请求,并且其他微服务无法从外部访问
所以我的问题是
- API网关应该是全状态的,而其他微服务是无状态的吗?
- 如果是这样,如何在API网关和微服务之间共享用户会话数据?
请提出任何更好的选择以及资源/链接。谢谢。
问题答案:
让我分享我的看法。
首先,如果您可以使应用程序保持无状态,则请务必采取以下措施:)就性能和可伸缩性而言,这将是最佳的解决方案。
现在,如果不可能,那么您应该维护一些分布式会话管理层。
负责身份验证的网关可以生成一些唯一的会话标识符,以后可以将其用作密钥。该密钥可以传播到所有微服务,并且可以是API或其他内容的一部分。
为了访问会话,微服务可以通过键“获取”价值并使用它。
在实现方面:我将看一下NoSQL解决方案。其中一些可以满足您的需求的是:
- Redis。看看那里的“ hset”
- Hazelcast。它更像是一个内存网格,但是如果解决方案仅是Java,则还可以实现所需的功能
- Memcache.d。它会给你一张旧的好地图,只是散布的:)
我相信还有其他解决方案。
现在,性能在这里至关重要,否则整个解决方案将太慢。因此,以我的理解,在这里使用RDBMS并不是一件好事,而且可能很难扩展它。
希望这可以帮助