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

Performance Optimization

При використанні в продакшн-середовищі з мільйонами користувачів або дозволів, ви можете зіткнутися зі зниженням продуктивності при виконанні перевірок Casbin. Зазвичай є дві причини:

Великий об'єм трафіку

Кількість вхідних запитів в секунду занадто велика, наприклад, 10 000 запитів/с для одного екземпляру Casbin. У таких випадках одного екземпляру Casbin зазвичай недостатньо для обробки всіх запитів. Є два можливі рішення:

  1. Використовуйте багатопоточність, щоб включити кілька екземплярів Casbin, таким чином ви зможете повністю використовувати всі ядра машини. Для отримання додаткової інформації дивіться: Багатопоточність.

  2. Розгорніть екземпляри Casbin на кластер (кілька машин) та використовуйте Watcher, щоб забезпечити консистентність всіх екземплярів Casbin. Для отримання додаткової інформації дивіться: Watchers.

примітка

Ви можете використовувати обидва вищезазначені методи одночасно, наприклад, розгорнути Casbin на 10-машинний кластер, де кожна машина одночасно обслуговує запити на виконання Casbin з 5 потоками.

Велика кількість правил політики

У хмарному або багатокористувацькому середовищі може знадобитися мільйони правил політики. Кожен виклик для виконання або навіть завантаження правил політики на початковому етапі може бути дуже повільним. Такі випадки зазвичай можна пом'якшити кількома способами:

  1. Перевірте, чи ваша модель Casbin або політика добре спроектовані. Добре написана модель та політика абстрагують дубльовану логіку для кожного користувача/орендаря та зменшують кількість правил до дуже малого рівня (\< 100). Наприклад, ви можете поділитися деякими загальними правилами між усіма орендарями та дозволити користувачам налаштовувати свої правила пізніше. Спеціалізовані правила можуть перевизначати загальні правила. Якщо у вас є додаткові питання, будь ласка, створіть issue на GitHub репозиторії Casbin.

  2. Робіть шардінг, щоб Casbin enforcer завантажував лише невелику кількість правил політики. Наприклад, enforcer_0 може обслуговувати tenant_0 до tenant_99, тоді як enforcer_1 може обслуговувати tenant_100 до tenant_199. Щоб завантажити лише підмножину всіх правил політики, дивіться: Завантаження підмножини політики.

  3. Надавайте дозволи ролям RBAC замість безпосередньо користувачам. RBAC Casbin реалізовано за допомогою дерева наслідування ролей (як кеш). Отже, маючи користувача на кшталт Alice, Casbin потребує лише O(1) часу для запиту дерева RBAC про відносини роль-користувач та виконання перевірки. Якщо ваші правила g не змінюються часто, то дерево RBAC не потребуватиме постійного оновлення. Деталі цієї дискусії дивіться тут: https://github.com/casbin/casbin/issues/681#issuecomment-763801583

примітка

Ви можете спробувати всі вищезазначені методи одночасно.