Ana içeriğe atla

Performance Optimization

Milyonlarca kullanıcı veya izin içeren bir üretim ortamında uygulandığında, Casbin'in uygulama performansında düşüşe yol açabilirsiniz. Genellikle iki nedeni vardır:

Yüksek Hacimli Trafik

Saniyedeki gelen istek sayısı çok yüksektir, örneğin, tek bir Casbin örneği için 10.000 istek/s. Bu gibi durumlarda, tek bir Casbin örneği genellikle tüm istekleri karşılamak için yeterli olmayabilir. İki olası çözüm bulunmaktadır:

  1. Makinedeki tüm çekirdekleri tam olarak kullanabilmek için çoklu iş parçacığı kullanarak birden fazla Casbin örneği etkinleştirin. Daha fazla detay için, bkz: Çoklu İş Parçacığı.

  2. Casbin örneklerini bir kümeye (birden fazla makineye) dağıtın ve tüm Casbin örneklerinin tutarlı olduğundan emin olmak için Watcher kullanın. Daha fazla detay için, bkz: Watchers.

not

Yukarıdaki her iki yöntemi aynı anda kullanabilirsiniz, örneğin, her bir makinede 5 iş parçacığı ile Casbin zorlama isteklerine eşzamanlı olarak hizmet veren 10 makine kümesine Casbin'i dağıtın.

Yüksek Sayıda Politika Kuralı

Bulut veya çok kiracılı bir ortamda, milyonlarca politika kuralı gerekebilir. Her zorlama çağrısı hatta politikaları başlangıç zamanında yüklemek bile çok yavaş olabilir. Bu tür durumlar genellikle birkaç yolla azaltılabilir:

  1. Casbin modelinizin veya politikanızın iyi tasarlanıp tasarlanmadığını kontrol edin. İyi yazılmış bir model ve politika, her kullanıcı/kiracı için çoğaltılan mantığı soyutlar ve kural sayısını çok düşük bir seviyeye (\< 100) indirger. Örneğin, tüm kiracılar arasında bazı varsayılan kuralları paylaşabilir ve kullanıcıların daha sonra kurallarını özelleştirmelerine izin verebilirsiniz. Özelleştirilmiş kurallar, varsayılan kuralları geçersiz kılabilir. Daha fazla sorunuz varsa, lütfen Casbin deposunda bir GitHub sorunu açın.

  2. Casbin zorlayıcısının yalnızca küçük bir kısmını yüklemesini sağlamak için parçalama yapın. Örneğin, enforcer_0, tenant_0'dan tenant_99'a kadar hizmet verebilirken, enforcer_1, tenant_100'den tenant_199'a kadar hizmet verebilir. Yalnızca tüm politika kurallarının bir alt kümesini yüklemek için, bkz: Policy Subset Loading.

  3. İzinleri doğrudan kullanıcılara değil, RBAC rollerine verin. Casbin'nun RBAC'si, bir rol kalıtım ağacı (önbellek olarak) tarafından uygulanmaktadır. Yani, Alice gibi bir kullanıcı verildiğinde, Casbin sadece RBAC ağacını sorgulamak ve uygulamayı gerçekleştirmek için O(1) zaman alır. Eğer g kurallarınız sık sık değişmiyorsa, o zaman RBAC ağacının sürekli güncellenmesi gerekmez. Bu tartışmanın detaylarını burada görebilirsiniz: https://github.com/casbin/casbin/issues/681#issuecomment-763801583

not

Yukarıdaki tüm yöntemleri aynı anda deneyebilirsiniz.