Lewati ke konten utama

Performance Optimization

Ketika diterapkan dalam lingkungan produksi dengan jutaan pengguna atau izin, Anda mungkin mengalami penurunan kinerja dalam penegakan Casbin. Biasanya ada dua penyebab:

Lalu Lintas Volume Tinggi

Jumlah permintaan masuk per detik terlalu besar, misalnya, 10.000 permintaan/s untuk satu instance Casbin. Dalam kasus seperti ini, satu instance Casbin biasanya tidak cukup untuk menangani semua permintaan. Ada dua solusi yang mungkin:

  1. Gunakan multi-threading untuk mengaktifkan beberapa instance Casbin, sehingga Anda dapat sepenuhnya memanfaatkan semua core di mesin tersebut. Untuk detail lebih lanjut, lihat: Multi-threading.

  2. Deploy instance Casbin ke sebuah kluster (beberapa mesin) dan gunakan Watcher untuk memastikan semua instance Casbin konsisten. Untuk detail lebih lanjut, lihat: Watchers.

catatan

Anda dapat menggunakan kedua metode di atas secara bersamaan, misalnya, deploy Casbin ke kluster 10 mesin di mana setiap mesin memiliki 5 thread yang secara bersamaan melayani permintaan penerapan Casbin.

Jumlah Aturan Kebijakan yang Tinggi

Dalam lingkungan cloud atau multi-tenant, jutaan aturan kebijakan mungkin diperlukan. Setiap panggilan penerapan atau bahkan memuat aturan kebijakan pada waktu awal dapat sangat lambat. Kasus seperti ini biasanya dapat dikurangi dengan beberapa cara:

  1. Periksa apakah model Casbin atau kebijakan Anda dirancang dengan baik. Model dan kebijakan yang ditulis dengan baik mengabstraksi logika duplikat untuk setiap pengguna/penyewa dan mengurangi jumlah aturan ke tingkat yang sangat kecil (\< 100). Misalnya, Anda dapat membagikan beberapa aturan default di seluruh penyewa dan mengizinkan pengguna untuk menyesuaikan aturan mereka nanti. Aturan yang disesuaikan dapat menggantikan aturan default. Jika Anda memiliki pertanyaan lebih lanjut, silakan buka masalah GitHub di repositori Casbin.

  2. Lakukan sharding agar enforcer Casbin hanya memuat sebagian kecil dari aturan kebijakan. Misalnya, enforcer_0 dapat melayani penyewa_0 hingga penyewa_99, sementara enforcer_1 dapat melayani penyewa_100 hingga penyewa_199. Untuk memuat hanya sebagian dari semua aturan kebijakan, lihat: Policy Subset Loading.

  3. Berikan izin kepada peran RBAC bukan kepada pengguna secara langsung. RBAC Casbin diimplementasikan oleh pohon warisan peran (sebagai cache). Jadi, diberikan pengguna seperti Alice, Casbin hanya membutuhkan waktu O(1) untuk menanyakan pohon RBAC mengenai hubungan peran-pengguna dan melakukan penegakan. Jika aturan g Anda tidak sering berubah, maka pohon RBAC tidak perlu diperbarui secara terus-menerus. Lihat detail diskusi ini di sini: https://github.com/casbin/casbin/issues/681#issuecomment-763801583

catatan

Anda dapat mencoba semua metode di atas secara bersamaan.