我们希望使我们的API成为无状态。
现在,用户令牌在登录时通过第三者提供,并存储在应用程序内存中。
只要令牌在使用中,它就一直有效。直到它成为 idle 一段可配置的时间。
在第三方(令牌提供者)上,此令牌的有效期更长(例如:无论使用情况如何,每月都有一个月,而我们的空闲时间为20分钟)。
意味着,每次使用此令牌都会更新应用程序内存中的时间戳。
在使我们的API变为无状态的过程中,我遇到了一个问题:
假设我们将有多个应用程序和一个负载均衡器, 如何维护2个应用程序之间的用户管理?
如果令牌不在应用程序内存中,但我知道如何恢复用户个人资料/详细信息(但在第三方仍然有效),但是我不知道它的最后使用时间戳。
我认为我要么必须在应用程序之间同步缓存,要么要管理另一项服务上的用户。
我希望我的解释很清楚。
我的问题是:
预先感谢
答案 0 :(得分:0)
从体系结构的角度来看,最好使用单独的用户管理器。在这种情况下,您将永远不会直接求助于第三方令牌提供者,而是通过自己的存储令牌和时间戳的管理器来进行。但是,这可能需要进行认真的重构。
因此,我可以提供的其他解决方案可能是使用在进程和机器之间提供共享内存的工具。例如,您可以使用Hazelcast。使用非常用户友好的API可以很容易地启动工具。例如,如果现在在地图中存储从令牌到时间戳的映射,则唯一需要更改的就是创建地图的位置。使用Hazelcast地图工厂而不是new HashMap<>()
,您的令牌将神奇地分布在您的应用程序中。