当前位置: 首页 > 面试题库 >

微服务中的会话管理

华知
2023-03-14
问题内容

我们有以下设置。

  1. STM(Stingrey Traffic Manager)进行负载平衡+会话粘性
  2. Weblogic的“集群”
  3. 由第三方工具处理的身份验证

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

我们目前拥有的是一个整体应用程序,并且我们正在尝试转向微服务。同样,我们也不会离开当前的基础架构(即STM / Weblogic集群/
Auth工具)。我们计划的是:

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

所以我的问题是

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

请提出任何更好的选择以及资源/链接。谢谢。


问题答案:

让我分享我的看法。

首先,如果您可以使应用程序保持无状态,则请务必采取以下措施:)就性能和可伸缩性而言,这将是最佳的解决方案。

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

负责身份验证的网关可以生成一些唯一的会话标识符,以后可以将其用作密钥。该密钥可以传播到所有微服务,并且可以是API或其他内容的一部分。

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

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

  1. Redis。看看那里的“ hset”
  2. Hazelcast。它更像是一个内存网格,但是如果解决方案仅是Java,则还可以实现所需的功能
  3. Memcache.d。它会给你一张旧的好地图,只是散布的:)

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

现在,性能在这里至关重要,否则整个解决方案将太慢。因此,以我的理解,在这里使用RDBMS并不是一件好事,而且可能很难扩展它。

希望这可以帮助



 类似资料:
  • 下面是一个跨服务的会话管理的实例。在这个例子中有两个WebService类:LoginService和SearchService,代码如下: LoginService.java package service; import org.apache.axis2.context.MessageContext; import org.apache.axis2.context.ServiceGroup

  • 我的web应用程序的当前架构有一个网关服务器,它组织了一系列微服务,授权发生在网关,如果给定的原则被认证,它们可以与一些下游服务对话。 下游服务获取所需的数据,以标识给定的经过身份验证的客户端。然而,Spring证券违约行为开始出现,并引发了预期的: 假定我可以在任何给定的微服务中使用会话id和+XSRF令牌来验证用户是否经过身份验证,并知道哪个用户登录了(我目前使用的是Http Basic)。

  • 问题内容: 我正在研究GWT-ext应用程序。在此应用程序中,我管理了客户端会话。为此,我编写以下代码: 管理会话:import com.google.gwt.user.client.Timer; 获取用户活动: 这段代码可以正常工作,但是我的问题是:随着时间的推移,该代码将自动注销。对于我的代码,我希望单击或按下它即可注销。情况如下:如果用户登录并且注销时间为5分钟,则根据上述代码,用户现在没有

  • 成功登录后,我想用新的url继续进行进一步的请求处理。但url正在调用springmvc中的公开服务,其中的安全配置不会检查会话身份验证以获取传入url。请看下面的代码。 当jsp页面提交登录验证时,J_security_check调用目标url,该URL随后调用拦截器模式/home*并验证登录凭证。 如果我在登录之前调用公开的服务“/address/userid/”,它将直接调用服务方法,使其成

  • 我是Spring保安的新手。我有一个要求做一个基于URL的身份验证,其中用户需要被认证基于唯一的引用,将发送每次作为一个参数在URL。我将把这个引用传递给webservice,获取所需的数据,然后对用户进行身份验证(并设置角色)。身份验证和授权部分工作正常。 但是,当我再次尝试访问应用程序时(现在在URL中使用了不同的引用),它表示“SecurityContextholder没有用匿名令牌填充,因

  • 成功开发 Web 应用程序的难题之一是在一次用户访问,即会话期间,当用户在一个应用程序的页与页之间跳转的同时,维护用户信息。HTTP 是一种无状态协议,也就是说,Web 服务器将某页的每次访问都当作相互无关的访问来处理;服务器不保留前一次访问的任何信息,即使访问就发生在当前访问的几秒钟之前。正因为这种不记忆以前访问的特性使得编写联机目录之类的应用程序很困难,此类应用程序可能需要跟踪用户在目录的不同