性能优化
在规模较大时(用户很多或规则很多),两个常见的瓶颈是吞吐量和policy 体积。以下是几种实用的缓解办法。
高请求量
如果一个 enforcer 跟不上(例如 10k+ req/s ):
- 多线程 —— 使用 SyncedEnforcer,并运行多个工作线程/实例,以利用所有核心。
- 集群 —— 运行多台装有 Casbin 的机器,并使用 Watcher 同步 policy。两者也可以结合使用:例如 10 个节点 × 每个节点 5 个线程。
庞大的 policy(规则很多)
当规则达到百万级时,执行和加载耗时都可能受到影响:
- model 和 policy 设计 —— 优先采用 RBAC 和共享的默认配置,让大多数租户只使用少量规则(例如 < 100 条规则),仅在需要时才做覆盖。相关讨论参见 GitHub #681。
- policy 分片 —— 只加载每个 enforcer 需要的规则(例如按租户或按域),通过 加载 Policy 子集 实现。
- 用 RBAC 取代直接的用户权限 —— 把权限分配给角色;Casbin 会缓存角色树,从而实现 O(1) 的角色查找,并减少 policy 规则数量。
尽可能组合使用上述方法,以获得最佳效果。