Performance Optimization
백만 명 이상의 사용자 또는 권한이 있는 생산 환경에서 적용할 때, Casbin 집행에서 성능 저하를 겪을 수 있습니다. 보통 두 가지 원인이 있습니다:
고량 트래픽
초당 들어오는 요청 수가 너무 많습니다. 예를 들어, 단일 Casbin 인스턴스에 대해 10,000 요청/초입니다. 이런 경우에는, 단일 Casbin 인스턴스로는 모든 요청을 처리하는 데 충분하지 않을 수 있습니다. 두 가지 가능한 해결책이 있습니다:
멀티 스레딩을 사용하여 여러 Casbin 인스턴스를 활성화하면, 기계의 모든 코어를 최대한 활용할 수 있습니다. 자세한 내용은 다음을 참조하십시오: 멀티 스레딩.
Casbin 인스턴스를 클러스터(여러 대의 기계)에 배포하고 Watcher를 사용하여 모든 Casbin 인스턴스가 일관성을 유지하도록 합니다. 자세한 내용은 다음을 참조하십시오: Watchers.
위의 두 가지 방법을 동시에 사용할 수 있습니다. 예를 들어, Casbin을 각 기계가 동시에 5개의 스레드로 Casbin 집행 요청을 처리하는 10대의 기계 클러스터에 배포할 수 있습니다.
정책 규칙 수가 많음
클라우드 또는 멀티 테넌트 환경에서는 수백만 개의 정책 규칙이 필요할 수 있습니다. 각 집행 호출 또는 초기 시간에 정책 규칙을 로드하는 것이 매우 느릴 수 있습니다. 이런 경우에는 보통 여러 가지 방법으로 완화할 수 있습니다:
Casbin 모델 또는 정책이 잘 설계되었는지 확인합니다. 잘 작성된 모델과 정책은 각 사용자/테넌트에 대한 중복 로직을 추상화하고 규칙 수를 매우 작은 수준(\< 100)으로 줄입니다. 예를 들어, 모든 테넌트에 대해 일부 기본 규칙을 공유하고 사용자가 나중에 규칙을 사용자 정의할 수 있게 할 수 있습니다. 사용자 정의 규칙은 기본 규칙을 덮어쓸 수 있습니다. 더 궁금한 점이 있으면 Casbin 저장소에 GitHub 이슈를 열어 주세요.
샤딩을 수행하여 Casbin 집행자가 정책 규칙의 작은 집합만 로드하도록 합니다. 예를 들어, enforcer_0는 tenant_0에서 tenant_99까지 서비스할 수 있고, enforcer_1은 tenant_100에서 tenant_199까지 서비스할 수 있습니다. 모든 정책 규칙의 하위 집합만 로드하려면 다음을 참조하십시오: 정책 하위 집합 로딩.
RBAC 역할에 직접 사용자 대신 권한을 부여합니다. Casbin의 RBAC은 역할 상속 트리(캐시로) 구현됩니다. 따라서, Alice와 같은 사용자가 주어지면, Casbin은 역할-사용자 관계를 RBAC 트리에서 조회하고 집행을 수행하는 데 O(1) 시간만 소요됩니다. g 규칙이 자주 변경되지 않는다면, RBAC 트리를 계속 업데이트할 필요가 없습니다. 이 논의의 세부 사항은 여기에서 확인할 수 있습니다: https://github.com/casbin/casbin/issues/681#issuecomment-763801583
위의 모든 방법을 동시에 시도해 볼 수 있습니다.