首页 文章

微服务中的会话管理

提问于
浏览
11

我们有以下设置 .

  • STM(Stingrey Traffic Manager)确实加载 balancer 会话粘性

  • Weblogic 'cluster'

  • 由第三方工具处理的身份验证

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

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

  • 将WAR请求路由到其他微服务的Gateway WAR

  • N x每个功能子域的微服务(WAR)

  • 只有API网关接收用户请求,并且无法从外部访问其他微服务

所以我的问题是

  • API网关应该是状态满的,而其他微服务是无状态的吗?

  • 如果是这样,应该如何在API网关和微服务之间共享用户会话数据?

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

1 回答

  • 15

    让我分享一下我的看法 .

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

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

    负责身份验证的网关可以生成一些唯一的会话标识符,以后可以将其用作密钥 . 此密钥可以传播到所有微服务,并成为API的一部分或其他东西 .

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

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

    • Redis . 在那里看看''hset''

    • Hazelcast . 它更像是一个内存网格,但如果解决方案只是java,你也可以实现所需的功能

    • Memcache.d . 它会给你一张旧的好 Map ,只是分发:)

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

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

    希望这可以帮助

相关问题