Vai al contenuto principale

Performance Optimization

Quando applicato in un ambiente di produzione con milioni di utenti o permessi, potresti riscontrare un degrado delle prestazioni nell'applicazione di Casbin. Di solito ci sono due cause:

Alto Volume di Traffico

Il numero di richieste in ingresso al secondo è troppo elevato, ad esempio, 10.000 richieste/s per una singola istanza di Casbin. In casi come questi, una singola istanza di Casbin di solito non è sufficiente per gestire tutte le richieste. Ci sono due soluzioni possibili:

  1. Utilizzare il multithreading per abilitare più istanze di Casbin, così da poter sfruttare appieno tutti i core della macchina. Per maggiori dettagli, vedi: Multithreading.

  2. Distribuire istanze di Casbin in un cluster (più macchine) e utilizzare Watcher per garantire che tutte le istanze di Casbin siano coerenti. Per maggiori dettagli, vedi: Watchers.

nota

Puoi utilizzare entrambi i metodi sopra menzionati contemporaneamente, ad esempio, distribuire Casbin in un cluster di 10 macchine dove ogni macchina ha 5 thread che servono simultaneamente le richieste di applicazione dei criteri di Casbin.

Alto Numero di Regole di Politica

In un ambiente cloud o multi-tenant, potrebbero essere necessarie milioni di regole di politica. Ogni chiamata di applicazione dei criteri o anche il caricamento delle regole di politica all'inizio può essere molto lento. Tali casi possono solitamente essere mitigati in diversi modi:

  1. Verifica se il tuo modello o policy di Casbin è ben progettato. Un modello e una policy ben scritti astraggono la logica duplicata per ogni utente/tenant e riducono il numero di regole a un livello molto basso (\< 100). Ad esempio, puoi condividere alcune regole predefinite tra tutti i tenant e consentire agli utenti di personalizzare le loro regole successivamente. Le regole personalizzate possono sovrascrivere le regole predefinite. Se hai ulteriori domande, per favore apri un issue su GitHub nel repository di Casbin.

  2. Esegui sharding per far caricare a un enforcer di Casbin solo un piccolo insieme di regole di policy. Ad esempio, enforcer_0 può servire tenant_0 a tenant_99, mentre enforcer_1 può servire tenant_100 a tenant_199. Per caricare solo un sottoinsieme di tutte le regole di policy, vedi: Caricamento Subset di Policy.

  3. Concedi permessi ai ruoli RBAC invece che direttamente agli utenti. L'RBAC di Casbin è implementato da un albero di ereditarietà dei ruoli (come cache). Quindi, dato un utente come Alice, Casbin richiede solo tempo O(1) per interrogare l'albero RBAC per la relazione ruolo-utente e per eseguire l'applicazione. Se le tue regole g non cambiano spesso, allora l'albero RBAC non avrà bisogno di essere aggiornato costantemente. Vedi i dettagli di questa discussione qui: https://github.com/casbin/casbin/issues/681#issuecomment-763801583

nota

Puoi provare tutti i metodi sopra menzionati contemporaneamente.