【发布时间】:2021-02-22 13:44:45
【问题描述】:
我正在 Spring-Boot 中实现一个以 Zuul 作为网关的微服务架构。我有一个具有身份验证和授权逻辑的 zuul 网关服务。此外,它还公开了 API,响应用户详细信息,如用户 ID-用户名映射、当前登录用户等。因此,我的其他服务对网关进行 API 调用以获取任何用户信息。我已标记 zuul.sensitiveHeaders=Cookie,Set-Cookie 以允许将承载令牌传递给非网关微服务。
问题陈述 - 在我的其他服务中,我只是在需要的地方存储用户 ID。然后,在将数据返回到前端时,我对网关服务进行 API 调用以获取用户 ID 的用户名。当我修改单个数据时,这很好用。
但是,当我必须返回批量数据(比如 1000 条记录)时,我会进行 1000 次 API 调用以根据每条记录的用户 ID 获取用户名。这会影响速度。
为了在 UI 上显示上述数据,我对网关进行了 8 次 API 调用,以获取每个用户 ID(created_by)的用户名。
有人可以帮我设计在这种情况下应该使用的架构吗?我想到的一些解决方案如下。但是我不太确定这些是否是最好的一个
- 登录后获取用户ID-用户名映射的哈希映射并存储在会话缓存中。但这会减慢登录调用速度
- 添加 OncePerPrequestFilter 以便在每次 API 调用时,都会获取用户 ID-用户名映射的哈希映射并将其传递给控制器。这是可行的,但在不需要此映射的 API 中,仍然会进行 API 调用,这将导致过载。
欢迎任何其他建议。
【问题讨论】:
标签: spring spring-boot spring-mvc spring-security netflix-zuul