使用 Spring Boot 在微服务架构中管理会话的位置

Where to manage session in microservices architecture with Spring Boot

我是微服务架构方面的新手。我一直在尝试使用 Spring Boot、Spring Cloud 和 Netflix OSS 库构建微服务堆栈。 我想知道存储会话的正确方法和位置是什么。

以下是我创建的基础架构的概述:

  1. OAuth2 支持 Authorization/Authentication 服务器
  2. UI服务(Spring引导,前端服务)
  3. 后端服务-1
  4. 后端服务-2
  5. 用于存储会话和其他可缓存数据的 Redis 服务器
  6. 发现服务器 (eureka)

目前,我正在尝试通过配置 UI 服务来将会话存储在 Redis 中。它似乎工作正常,尽管我还没有机会为多个服务实例尝试它。但是,我在开发时已经遇到 serialization/deserialization 问题。 顺便说一句,尝试将会话存储在前端应用程序上是正确的做法,还是应该在 Authorization/Authentication 服务中完成,因为在该服务中处理了身份验证?

这是我在 UI 服务(前端服务)

中的会话配置
@Configuration
@EnableRedisHttpSession
public class SessionConfig extends 
AbstractHttpSessionApplicationInitializer {

    public SessionConfig() {
        super(RedisConfig.class);
    }
}

总而言之,我期待在这个项目中实现并使用最佳实践。将不胜感激。

一般服务器端用户会话和微服务风格架构的想法不能很好地结合在一起。原因是您可能会打破您使用的分离服务域边界的关注点分离。

请记住,每个服务都应该自主解决特定领域的问题——包括所有必需的数据持久性。因此,例如,如果用户连接的设备有什么需要记住的,您将在负责这些设备连接的一项服务中完成,而不是在其他任何地方。该服务将负责处理这些请求并保持设备所需的任何状态。同样,当需要记住用户授权时,您可以在授权服务中执行此操作。

关于是否使用 Redis 的问题 - 在微服务架构中,存储系统的选择将取决于服务架构师。也许一个服务将其数据存储在关系数据库中,也许另一个使用键值存储,还有一个可能使用事件队列系统或时间序列数据库。

所以总而言之,您必须问问自己您的会话真正用于什么,并让相应的服务负责以特定于域的方式保留该信息。 (如果你在你的问题中提供更多细节,我可以给你我的意见)。