跳转至主要内容

Performance Optimization

在大规模场景下(用户多或规则多),两个常见瓶颈是 吞吐量 和 策略规模。下面是实用的缓解办法。

请求量大​

如果一个 enforcer 处理不过来(例如每秒 1 万以上的请求):

  1. 多线程:使用 SyncedEnforcer,运行多个工作线程 / 实例,充分利用所有 CPU 核。
  2. 集群:在多台机器上运行 Casbin,并用 Watcher 同步策略。两者可以结合,例如 10 个节点 × 每个 5 个线程。

策略规模大(规则多)​

规则达到数百万条时,判定和加载时间都会受影响:

  1. 模型和策略设计:优先使用 RBAC 和共享的默认规则,让大多数租户只用一小组规则(例如少于 100 条),只在必要时覆盖。相关讨论见 GitHub #681。
  2. 策略分片:通过 加载策略子集 只加载每个 enforcer 需要的规则(例如按租户或按域)。
  3. 用 RBAC 代替直接给用户授权:把权限授予角色;Casbin 会缓存角色树,角色查询为 O(1),策略规则也更少。

尽可能组合使用这些方法,效果最好。

Comments are powered by giscus and GitHub Discussions. They load from giscus.app and GitHub only after you click the button below.