跳转到主要内容

性能优化

在规模较大时(用户很多或规则很多),两个常见的瓶颈是吞吐量和policy 体积。以下是几种实用的缓解办法。

高请求量​

如果一个 enforcer 跟不上(例如 10k+ req/s):

  1. 多线程 —— 使用 SyncedEnforcer,并运行多个工作线程/实例,以利用所有核心。
  2. 集群 —— 运行多台装有 Casbin 的机器,并使用 Watcher 同步 policy。两者也可以结合使用:例如 10 个节点 × 每个节点 5 个线程。

庞大的 policy(规则很多)​

当规则达到百万级时,执行和加载耗时都可能受到影响:

  1. model 和 policy 设计 —— 优先采用 RBAC 和共享的默认配置,让大多数租户只使用少量规则(例如 < 100 条规则),仅在需要时才做覆盖。相关讨论参见 GitHub #681。
  2. policy 分片 —— 只加载每个 enforcer 需要的规则(例如按租户或按域),通过 加载 Policy 子集 实现。
  3. 用 RBAC 取代直接的用户权限 —— 把权限分配给角色;Casbin 会缓存角色树,从而实现 O(1) 的角色查找,并减少 policy 规则数量。

尽可能组合使用上述方法,以获得最佳效果。