Performance Optimization
Wenn es in einer Produktionsumgebung mit Millionen von Benutzern oder Berechtigungen angewendet wird, können Sie eine Leistungseinbuße bei der Casbin-Durchsetzung feststellen. Es gibt normalerweise zwei Ursachen:
Hohes Verkehrsaufkommen
Die Anzahl der eingehenden Anfragen pro Sekunde ist zu groß, zum Beispiel 10.000 Anfragen/s für eine einzelne Casbin-Instanz. In solchen Fällen reicht eine einzelne Casbin-Instanz normalerweise nicht aus, um alle Anfragen zu bearbeiten. Es gibt zwei mögliche Lösungen:
Verwenden Sie Multithreading, um mehrere Casbin-Instanzen zu aktivieren, damit Sie alle Kerne in der Maschine voll ausnutzen können. Weitere Details finden Sie unter: Multi-threading.
Implementieren Sie Casbin-Instanzen in einem Cluster (mehrere Maschinen) und verwenden Sie Watcher, um sicherzustellen, dass alle Casbin-Instanzen konsistent sind. Weitere Details finden Sie unter: Watchers.
Sie können beide oben genannten Methoden gleichzeitig verwenden, zum Beispiel Casbin auf einem 10-Maschinen-Cluster bereitstellen, auf dem jede Maschine 5 Threads gleichzeitig Casbin-Durchsetzungsanfragen bedient.
Hohe Anzahl von Richtlinienregeln
In einer Cloud- oder Multi-Tenant-Umgebung können Millionen von Richtlinienregeln erforderlich sein. Jeder Durchsetzungsaufruf oder sogar das Laden der Richtlinienregeln zu Beginn kann sehr langsam sein. Solche Fälle können normalerweise auf verschiedene Weisen gemildert werden:
Überprüfen Sie, ob Ihr Casbin-Modell oder Ihre Richtlinie gut gestaltet ist. Ein gut geschriebenes Modell und eine gut geschriebene Richtlinie abstrahieren die doppelte Logik für jeden Benutzer/Mieter und reduzieren die Anzahl der Regeln auf ein sehr kleines Niveau (\< 100). Zum Beispiel können Sie einige Standardregeln für alle Mieter teilen und den Benutzern später erlauben, ihre Regeln anzupassen. Angepasste Regeln können die Standardregeln überschreiben. Wenn Sie weitere Fragen haben, eröffnen Sie bitte ein GitHub-Issue im Casbin-Repository.
Führen Sie Sharding durch, um einem Casbin-Durchsetzer nur eine kleine Menge von Richtlinienregeln zu laden. Zum Beispiel kann enforcer_0 tenant_0 bis tenant_99 bedienen, während enforcer_1 tenant_100 bis tenant_199 bedienen kann. Um nur einen Teil aller Richtlinienregeln zu laden, siehe: Policy Subset Loading.
Gewähren Sie Berechtigungen für RBAC-Rollen anstelle von Benutzern direkt. Casbins RBAC wird durch einen Rollenvererbungsbaum (als Cache) implementiert. Also, gegeben ein Benutzer wie Alice, benötigt Casbin nur O(1) Zeit, um den RBAC-Baum für die Rolle-Benutzer-Beziehung abzufragen und die Durchsetzung durchzuführen. Wenn Ihre g-Regeln nicht oft geändert werden, muss der RBAC-Baum nicht ständig aktualisiert werden. Sehen Sie die Details dieser Diskussion hier: https://github.com/casbin/casbin/issues/681#issuecomment-763801583
Sie können alle oben genannten Methoden gleichzeitig ausprobieren.