我有一个关于微服务架构的问题。 我有的例子:
- 提供JWT(例如Keycloak(的授权和身份验证服务器
- 2个微服务,通过REST在它们之间进行通信。
- 1 微服务是一种用户服务,它在我的数据库中对 Keycloak 的每个新用户创建一个新用户(可能是明天我们有 Google 或 Github,记住这一点很重要(。当我创建用户时,我将他的声明主题存储在特定字段中。
- 1个微服务,用于存储创建者ID,用于博客文章的updateById示例。
是否最好将主题存储在我的 creatorId 中并更新 ById(像这样,我不需要要求我的用户服务来确定谁是创建者(或存储来自我的用户服务的 userId 以及每次从我的后服务调用哪个是发出请求的用户(所以我每次都发出休息请求,以获取通过将 JWT 令牌传递给用户来发送请求的用户服务(。
IMO,每次发送休息请求都会增加用户服务的负载,但对于Google,Github和Keycloak,不同用户的主题ID可以相同。
我会执行以下操作,以便您将来可以移动到不同的授权服务器(Google/Github(而不会产生太大影响:
用户- 服务在其"用户表"中为每个新用户创建一行,并将数据库代理键作为主用户 ID
- 此用户 ID 将保存到您的创建者 ID/updateById 字段中
- 同时,OAuth Id/Sub 声明是用户表中的一列,但不是业务逻辑中的主要用户标识符
如果在帖子服务中缓存声明,则帖子服务可以避免在每个请求上调用用户服务。我的一些资源可能会给你一些想法,你可以应用到你自己的解决方案中:
- 用户管理博客文章
- 声明缓存博客文章
- 声明缓存代码