Langkau ke kandungan utama

Performance Optimization

Apabila digunakan dalam persekitaran pengeluaran dengan berjuta-juta pengguna atau kebenaran, anda mungkin menghadapi penurunan prestasi dalam penguatkuasaan Casbin. Biasanya terdapat dua punca:

Traffik Isi Penuh

Bilangan permintaan masuk sesaat terlalu besar, contohnya, 10,000 permintaan/s untuk satu contoh Casbin. Dalam keadaan seperti ini, satu contoh Casbin biasanya tidak mencukupi untuk mengendalikan semua permintaan. Terdapat dua penyelesaian yang mungkin:

  1. Gunakan pelbagai benang (multi-threading) untuk membolehkan beberapa contoh Casbin, supaya anda dapat menggunakan sepenuhnya semua teras dalam mesin. Untuk maklumat lanjut, lihat: Multi-threading.

  2. Gunakan contoh Casbin ke dalam kluster (berbilang mesin) dan gunakan Watcher untuk memastikan semua contoh Casbin adalah konsisten. Untuk maklumat lanjut, lihat: Watchers.

nota

Anda boleh menggunakan kedua-dua kaedah di atas pada masa yang sama, misalnya, gunakan Casbin ke dalam kluster 10 mesin di mana setiap mesin mempunyai 5 benang secara serentak melayani permintaan penguatkuasaan Casbin.

Bilangan Tinggi Peraturan Polisi

Dalam persekitaran awan atau multi-penyewa, berjuta-juta peraturan polisi mungkin diperlukan. Setiap panggilan penguatkuasaan atau bahkan memuatkan peraturan polisi pada masa awal boleh menjadi sangat perlahan. Kes-kes sebegini biasanya boleh dikurangkan dalam beberapa cara:

  1. Semak jika model Casbin atau polisi anda direka dengan baik. Model dan polisi yang ditulis dengan baik mengabstrak logik yang diduplikasi untuk setiap pengguna/penyewa dan mengurangkan bilangan peraturan ke tahap yang sangat kecil (\< 100). Sebagai contoh, anda boleh berkongsi beberapa peraturan lalai merentasi semua penyewa dan membenarkan pengguna menyesuaikan peraturan mereka kemudian. Peraturan yang disesuaikan boleh mengatasi peraturan lalai. Jika anda mempunyai sebarang pertanyaan lanjut, sila buka isu GitHub di repositori Casbin.

  2. Lakukan sharding untuk membolehkan enforcer Casbin hanya memuatkan sekumpulan kecil peraturan polisi. Sebagai contoh, enforcer_0 boleh melayani penyewa_0 hingga penyewa_99, manakala enforcer_1 boleh melayani penyewa_100 hingga penyewa_199. Untuk memuatkan hanya subset daripada semua peraturan polisi, lihat: Policy Subset Loading.

  3. Berikan kebenaran kepada peranan RBAC bukannya kepada pengguna secara langsung. Casbin's RBAC diimplementasikan oleh pokok warisan peranan (sebagai cache). Oleh itu, diberikan pengguna seperti Alice, Casbin hanya mengambil masa O(1) untuk menanyakan pokok RBAC mengenai hubungan peranan-pengguna dan melaksanakan penguatkuasaan. Jika peraturan g anda tidak berubah sering, maka pokok RBAC tidak perlu dikemas kini secara berterusan. Lihat butiran perbincangan ini di sini: https://github.com/casbin/casbin/issues/681#issuecomment-763801583

nota

Anda boleh mencuba semua kaedah di atas pada masa yang sama.