鉴权处理通常会有三种方案:

  • 微服务各自独立鉴权
  • 网关统一鉴权
  • 混合策略

其中最佳实践是混合策略,即先在网关把简单普遍必要的鉴权过一遍(如游客和已注册用户),再在微服务内部进行详细鉴权(如管理员和内容制作者)。这样即保证了普通用户的访问效率,也避免了代码重复。

权限信息获取

网关要进行统一鉴权首先要获取数据库中存贮的权限信息,而又由于统一大流量鉴权吞吐量大,可以考虑用 redis 缓存优化速度。

由此有一下几种获取流程:

方案优点缺点
网关直接查询数据库- 实时性强,确保每次请求获取最新权限数据。
- 结构简单,无需额外的缓存层或远程调用。
- 每次请求都访问数据库,导致数据库压力大,影响性能。
- 扩展性较差,用户和权限数据增多时数据库可能成为瓶颈。
网关先查 Redis,查不到再查数据库- 提高性能,大部分请求直接从 Redis 获取数据,减少数据库访问。
- 降低数据库压力,提高系统稳定性。
- 可能存在数据一致性问题,需要缓存更新机制。
- 需要额外处理 Redis 维护和更新逻辑,增加系统复杂性。
网关先查 Redis,查不到再 RPC 调用权限服务- 高性能,大部分请求从 Redis 获取,减少数据库和权限服务负担。
- 通过 RPC 访问权限服务,实现网关与权限服务解耦,提高系统灵活性和可维护性。
- 可能存在网络开销,缓存未命中时需要远程调用,增加通信成本。
- 需要处理 RPC 通信和容错机制,增加系统复杂性。
网关仅从 Redis 获取数据- 最高性能,所有请求直接从 Redis 读取,提升响应速度。
- 彻底减轻数据库压力,数据库负载最小。
- 可能存在数据一致性问题,必须确保 Redis 数据及时更新。
- 依赖 Redis,高可用性要求高,否则 Redis 故障会影响整个权限系统。

总结

  • 如果追求实时性,选择 直接查询数据库,但要注意数据库的性能瓶颈。
  • 如果想要平衡性能和实时性,选择 Redis + 数据库回源,适合大多数业务场景。
  • 如果系统解耦需求强,选择 Redis + RPC 调用权限服务,适用于微服务架构。
  • 如果对性能要求极高,选择 仅使用 Redis,但需要完善缓存更新和高可用机制。