一、问题背景
微服务架构中,两个核心安全问题:
- 鉴权:如何快速判断一个请求是否有权限访问某资源?
- 限流:如何控制接口调用频率,防止系统被打垮?
两者背后都依赖经典数据结构与算法。
二、鉴权:快速权限判断
2.1 权限模型
Mermaid · 渲染中(下方为源码)
graph LR U[用户] --> R[角色] R --> P[权限] P --> API[接口资源]
典型 RBAC(基于角色的访问控制):
- 用户 → 角色(多对多)
- 角色 → 权限(多对多)
- 权限 → 接口 URL
2.2 数据结构选择
鉴权是超高频读操作(每个请求都要判断),需要 O(1) 查找:
| 数据结构 | 用途 |
|---|---|
| 散列表 | 用户 ID → 角色集合 |
| 散列表 | 角色 → 权限 URL 集合 |
| Trie 树 | URL 前缀匹配(/api/admin/*) |
| 位图 | 权限位掩码(权限数有限时) |