Перейти к основному содержимому

Оптимизация производительности

В масштабе (множество пользователей или правил) двумя частыми узкими местами являются пропускная способность и размер политики. Ниже приведены практические методы смягчения этих проблем.

Высокий объем запросов​

Если один enforcer не справляется (например, более 10 тыс. req/s):

  1. Multi-threading — Используйте SyncedEnforcer и запускайте несколько рабочих потоков/экземпляров, чтобы использовать все ядра процессора.
  2. Cluster — Запустите несколько машин с Casbin и используйте Watchers для синхронизации политик. Вы можете комбинировать оба подхода: например, 10 узлов × 5 потоков на каждом.

Большая политика (множество правил)​

При наличии миллионов правил производительность проверки доступа и время загрузки могут ухудшиться:

  1. Model and policy design — Отдавайте предпочтение RBAC и общим настройкам по умолчанию, чтобы большинство арендаторов использовали небольшой набор правил (например, < 100 правил); переопределяйте их только там, где это необходимо. Обсуждение см. в GitHub #681.
  2. Policy sharding — Загружайте только те правила, которые нужны каждому энфорсеру (например, по арендаторам или доменам), используя Policy subset loading.
  3. RBAC over direct user permissions — Назначайте разрешения ролям; 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.