Performance Optimization
在大规模场景下(用户多或规则多),两个常见瓶颈是 吞吐量 和 策略规模。下面是实用的缓解办法。
请求量大
如果一个 enforcer 处理不过来(例如每秒 1 万以上的请求):
- 多线程:使用 SyncedEnforcer,运行多个工作线程 / 实例,充分利用所有 CPU 核。
- 集群:在多台机器上运行 Casbin,并用 Watcher 同步策略。两者可以结合,例如 10 个节点 × 每个 5 个线程。
策略规模大(规则多)
规则达到数百万条时,判定和加载时间都会受影响:
- 模型和策略设计:优先使用 RBAC 和共享的默认规则,让大多数租户只用一小组规则(例如少于 100 条),只在必要时覆盖。相关讨论见 GitHub #681。
- 策略分片:通过 加载策略子集 只加载每个 enforcer 需要的规则(例如按租户或按域)。
- 用 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.