微服务中的会话管理

Fah*_*ook 16 java cookies session weblogic microservices

我们有以下设置.

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

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

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

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

所以我的问题是

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

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

Mar*_*nik 22

让我分享一下我的看法.

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

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

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

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

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

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

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

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

希望这可以帮助

  • 好吧,我已经解释了机制,我想,无论如何,快速的谷歌搜索揭示了这一点:http://blog.cloudmagic.com/2014/02/18/session-handling-for-1-million-requests-per -hour/and this:http://stackoverflow.com/questions/10278683/how-safe-it-is-to-store-session-with-redis (2认同)

ind*_*ika 7

1)API网关是否应该是有状态的,而其他微服务是无状态的?

是的,在12 Factor App 指南中,所有服务都应该是无状态的。

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

您的 API 应该是无状态的,因此不要将会话状态共享给微服务。推荐的方法是设置一个Redis缓存来存储会话数据。

在此处输入图片说明