Performance Optimization
عند التطبيق في بيئة إنتاجية تحتوي على ملايين المستخدمين أو الأذونات، قد تواجه تراجعًا في أداء تنفيذ Casbin. عادةً ما يكون هناك سببان:
حجم الزيارات المرتفع
عدد الطلبات الواردة في الثانية الواحدة كبير جدًا، على سبيل المثال، 10,000 طلب/ثانية لكل نسخة Casbin. في مثل هذه الحالات، عادةً ما تكون نسخة Casbin الواحدة غير كافية لمعالجة جميع الطلبات. هناك حلان ممكنان:
استخدم التعددية الخيطية لتمكين عدة نسخ من Casbin، حتى تتمكن من استغلال جميع النوى في الجهاز بشكل كامل. لمزيد من التفاصيل، انظر: التعددية الخيطية.
نشر نسخ Casbin على مجموعة من الأجهزة (عدة آلات) واستخدام Watcher لضمان تناسق جميع نسخ Casbin. لمزيد من التفاصيل، انظر: المراقبون.
يمكنك استخدام كلا الطريقتين المذكورتين أعلاه في نفس الوقت، على سبيل المثال، نشر Casbin على مجموعة من 10 آلات حيث كل آلة تحتوي على 5 خيوط تخدم طلبات تنفيذ Casbin في نفس الوقت.
عدد كبير من قواعد السياسات
في بيئة سحابية أو متعددة المستأجرين، قد تكون هناك حاجة إلى ملايين قواعد السياسات. قد يكون كل استدعاء للتنفيذ أو حتى تحميل قواعد السياسات في الوقت الأولي بطيئًا جدًا. عادةً ما يمكن التخفيف من مثل هذه الحالات بعدة طرق:
تحقق مما إذا كان نموذج Casbin أو السياسة مصممة بشكل جيد. نموذج وسياسة مكتوبة بشكل جيد تجرد النطاق المكرر لكل مستخدم/مستأجر وتقلل عدد القواعد إلى مستوى صغير جدًا (\< 100). على سبيل المثال، يمكنك مشاركة بعض القواعد الافتراضية مع جميع المستأجرين والسماح للمستخدمين بتخصيص قواعدهم لاحقًا. يمكن للقواعد المخصصة أن تتجاوز القواعد الافتراضية. إذا كان لديك أي أسئلة أخرى، يرجى فتح مشكلة على مستودع Casbin في GitHub.
قم بالتجزئة لتتيح لمنفذ Casbin تحميل مجموعة صغيرة فقط من قواعد السياسات. على سبيل المثال، يمكن للمنفذ_0 خدمة المستأجر_0 إلى المستأجر_99، بينما يمكن للمنفذ_1 خدمة المستأجر_100 إلى المستأجر_199. لتحميل مجموعة فرعية فقط من جميع قواعد السياسات، انظر: تحميل مجموعة فرعية من السياسات.
منح الأذونات لأدوار RBAC بدلاً من المستخدمين مباشرة. يتم تنفيذ RBAC في Casbin من خلال شجرة وراثة الأدوار (كذاكرة تخزين مؤقتة). لذا، بالنسبة لمستخدم مثل Alice، يستغرق Casbin وقتًا O(1) فقط لاستعلام شجرة RBAC عن علاقة الدور بالمستخدم وتنفيذ الإجراء. إذا لم تتغير قواعد g الخاصة بك كثيرًا، فلن تحتاج شجرة RBAC إلى تحديث مستمر. انظر تفاصيل هذا النقاش هنا: https://github.com/casbin/casbin/issues/681#issuecomment-763801583
يمكنك تجربة جميع الطرق المذكورة أعلاه في نفس الوقت.