Performance Optimization
Lorsqu'il est appliqué dans un environnement de production avec des millions d'utilisateurs ou de permissions, vous pouvez rencontrer une dégradation des performances dans l'application de Casbin. Il y a généralement deux causes :
Trafic à haut volume
Le nombre de requêtes entrantes par seconde est trop élevé, par exemple, 10 000 requêtes/s pour une seule instance de Casbin. Dans de tels cas, une seule instance de Casbin n'est généralement pas suffisante pour gérer toutes les requêtes. Il y a deux solutions possibles :
Utilisez le multi-threading pour activer plusieurs instances de Casbin, afin de pouvoir utiliser pleinement tous les cœurs de la machine. Pour plus de détails, voir : Multi-threading.
Déployez des instances de Casbin sur un cluster (plusieurs machines) et utilisez Watcher pour garantir la cohérence de toutes les instances de Casbin. Pour plus de détails, voir : Watchers.
Vous pouvez utiliser les deux méthodes ci-dessus en même temps, par exemple, déployer Casbin sur un cluster de 10 machines où chaque machine a 5 threads servant simultanément les requêtes d'application de Casbin.
Nombre élevé de règles de politique
Dans un environnement cloud ou multi-locataire, des millions de règles de politique peuvent être nécessaires. Chaque appel d'application ou même le chargement des règles de politique au moment initial peut être très lent. De tels cas peuvent généralement être atténués de plusieurs façons :
Vérifiez si votre modèle ou votre politique Casbin est bien conçu. Un modèle et une politique bien écrits résument la logique dupliquée pour chaque utilisateur/locataire et réduisent le nombre de règles à un niveau très faible (\< 100). Par exemple, vous pouvez partager certaines règles par défaut entre tous les locataires et permettre aux utilisateurs de personnaliser leurs règles plus tard. Les règles personnalisées peuvent remplacer les règles par défaut. Si vous avez d'autres questions, veuillez ouvrir un problème GitHub sur le dépôt Casbin.
Faites du sharding pour permettre à un exécuteur Casbin de ne charger qu'un petit ensemble de règles de politique. Par exemple, l'exécuteur_0 peut servir le locataire_0 au locataire_99, tandis que l'exécuteur_1 peut servir le locataire_100 au locataire_199. Pour ne charger qu'un sous-ensemble de toutes les règles de politique, voir : Chargement de sous-ensemble de politique.
Accordez des permissions aux rôles RBAC au lieu des utilisateurs directement. Le RBAC de Casbin est mis en œuvre par un arbre d'héritage de rôles (comme un cache). Ainsi, pour un utilisateur comme Alice, Casbin ne prend que O(1) temps pour interroger l'arbre RBAC pour la relation rôle-utilisateur et effectuer l'application. Si vos règles g ne changent pas souvent, alors l'arbre RBAC n'aura pas besoin d'être constamment mis à jour. Voir les détails de cette discussion ici : https://github.com/casbin/casbin/issues/681#issuecomment-763801583
Vous pouvez essayer toutes les méthodes ci-dessus en même temps.