English

دراسة الحالة 04 · خدمات دورة الحياة الهندسية

خدمة تفويض واحدة لتطبيقات عديدة، مبنية بلغة Rust مع Casbin

قواعد الوصول محفوظة في خدمة واحدة، والقرار يُتخذ داخل كل تطبيق من نسخة مخزَّنة مؤقتًا. اختير الإطار بعد قياس أداء خمسة أطر عمل، وجرى التكامل مع التطبيقات واحدًا تلو الآخر.

الشريك
شركة استشارية متعددة الجنسيات
المدة
أقل من شهرين
أطر عمل قورنت
5
OPA وOpenFGA وSpiceDB وCerbos وCasbin
القرارات
داخل التطبيق
لا استدعاء عبر الشبكة في مسار الطلب
مدة التسليم
أقل من شهرين
من مراجعة أطر العمل حتى التكامل

التحدي

كان كل تطبيق يحتفظ بمنطق التفويض الخاص به. فكانت القواعد نفسها تُنفَّذ عدة مرات، وتتطلب التغييرات تحديث الشيفرة في كل تطبيق، وكانت بعض عمليات التحقق ترسل استعلامًا إلى قاعدة البيانات مع كل طلب في خدمات حساسة للأداء.

ما بنيناه

خدمة سياسات مركزية مبنية بلغة Rust وتستخدم Casbin، اختيرت بعد قياس أداء خمسة أطر عمل مفتوحة المصدر. تقرر التطبيقات الوصول داخل التطبيق نفسه من نسخة مخزَّنة مؤقتًا من السياسات، تحدّثها الخدمة خلال ثوانٍ من أي تغيير، فتبقى القواعد في مكان واحد دون إضافة استدعاء عبر الشبكة إلى كل طلب.

ما تم تسليمه

  • مصدر واحد موثوق لقواعد الوصول في جميع التطبيقات المرتبطة بالخدمة
  • تغييرات السياسات تُطبَّق مركزيًا، دون إصدارات جديدة للتطبيقات
  • قرارات الوصول تُتخذ داخل التطبيق، دون استدعاء عبر الشبكة لكل طلب

نبذة عن الشريك

شريكنا شركة استشارية متعددة الجنسيات تخدم مؤسسات بارزة، ما يفرض معيارًا عاليًا لأمن التطبيقات. وتخدم تطبيقاتها موارد بيانات مشتركة، وكانت بحاجة إلى تحكم دقيق ومتسق في من يمكنه الوصول إليها.

التحدي

التفويض في كل تطبيق

كان كل تطبيق ينفذ قواعد الوصول الخاصة به. فكانت القاعدة نفسها موجودة في عدة أماكن وقد تتباين مع الوقت.

زمن استجابة مع كل طلب

كانت بعض التطبيقات، ومنها خدمات Python الخاصة بتعلم الآلة، ترسل استعلامًا إلى قاعدة بيانات عند كل تحقق من الوصول، ما أضاف وقتًا إلى كل طلب.

قواعد حبيسة الشيفرة

كان تغيير أي سياسة يعني تعديل كل تطبيق متأثر وإصداره من جديد، ما حوّل التغييرات الصغيرة إلى عمل يتطلب التنسيق بين الفرق.

مركزية دون بطء

نقل القواعد إلى خدمة منفصلة يضيف عادةً استدعاءً عبر الشبكة إلى كل طلب. وكان على التصميم أن يجمع القواعد في مكان واحد دون تلك الكلفة.

الأهداف

  • توحيد قواعد التفويض في خدمة واحدة يستخدمها كل تطبيق مرتبط بها
  • اتخاذ قرارات الوصول دون إضافة استدعاء عبر الشبكة إلى كل طلب
  • تغيير القواعد دون إعادة نشر التطبيقات
  • استمرار عمل التطبيقات إذا تعذّر الوصول إلى خدمة السياسات لفترة قصيرة
  • فصل شؤون التفويض عن شيفرة التطبيقات

دورنا

قارنت كارسنترك أطر العمل المرشحة وقاست أداءها، وبنت الخدمة وأنجزت تكاملها مع تطبيقات الشريك، في أقل من شهرين.

النطاق والجدول الزمني

بدأ المشروع بمقارنة خمسة أطر تفويض مفتوحة المصدر، بما في ذلك قياسات الأداء ونماذج إثبات المفهوم، ثم التنفيذ والتكامل. واكتمل العمل في أقل من شهرين.

مراحل التسليم في أقل من شهرين
مراحل التسليم في أقل من شهرين

المنهجية

الاختيار بالأدلة

قورنت OPA وOpenFGA وSpiceDB وCerbos وCasbin من حيث ملاءمة نموذج السياسات في كل منها لموارد الشريك، وزمن اتخاذ القرار، وكلفة التشغيل، واختُبرت في نماذج إثبات المفهوم. واختير Casbin لأنه يحتفظ بالقواعد على هيئة بيانات يمكن تغييرها أثناء التشغيل، ويستطيع اتخاذ القرار داخل التطبيق.

قواعد مركزية وقرارات محلية

خدمة Rust هي المصدر الموثوق للسياسات. ويحتفظ كل تطبيق بمنفّذ Casbin (enforcer) مخزَّن مؤقتًا، ويتلقى تغييرات السياسات عبر مراقب (watcher) يعمل بآلية النشر والاشتراك في Redis، فيصبح التحقق بحثًا محليًا لا استدعاءً عبر الشبكة. ويعيد كل تطبيق أيضًا تحميل مجموعة السياسات كاملة عند إعادة الاتصال وعلى فترات ثابتة، فلا تؤدي رسالة فائتة إلى بقائه على سياسات قديمة.

Rust للخدمة

تمنح Rust خدمة السياسات أداءً متوقعًا واستهلاكًا منخفضًا للذاكرة، وتنفّذ casbin-rs نموذج Casbin نفسه الذي تطبّقه التطبيقات.

التنفيذ

التطبيقات قبل المركزية وبعدها
التطبيقات قبل المركزية وبعدها

مراجعة أطر العمل وقياس أدائها

رُوجعت أطر العمل مفتوحة المصدر من حيث القدرات وقيس أداؤها، مع نماذج إثبات مفهوم مقابل متطلبات الشريك.

الخدمة المركزية

بُنيت الخدمة بلغة Rust مع casbin-rs، وهي تخزّن السياسات، وتتحقق من صحة التغييرات، وتنشرها إلى كل تطبيق متصل. وتعمل على Azure Container Apps بثلاث نسخ متماثلة على الأقل.

السلوك عند الأعطال

تواصل التطبيقات اتخاذ القرارات من سياساتها المخزَّنة مؤقتًا إذا تعذّر الوصول إلى الخدمة، وترفض الوصول إذا لم تتمكن من تحميل السياسات من الخدمة عند بدء تشغيلها.

التكامل

فُصلت نماذج بيانات الموارد عن منطق التطبيقات ووُصفت في خدمة السياسات. ورُبطت التطبيقات واحدًا تلو الآخر لتجنب تعطيل العمليات.

الأدوات والتقنيات

الأداةالغرض
Rust وcasbin-rsخدمة السياسات
Casbinنموذج السياسات وتطبيقها داخل التطبيق
النشر والاشتراك في Redisإشعارات تغيير السياسات
Azure Container Appsالاستضافة، بثلاث نسخ متماثلة على الأقل

ما تم تسليمه

أطر عمل قورنت
5
القرارات
داخل التطبيق
تغيير السياسات
أثناء التشغيل
مدة التسليم
أقل من شهرين
  • خدمة سياسات مركزية تستخدمها تطبيقات الشريك
  • تغيير السياسات دون إعادة نشر التطبيقات
  • قرارات وصول تُتخذ داخل التطبيق من سياسات مخزَّنة مؤقتًا
  • اختيار لإطار العمل تدعمه قياسات الأداء ونماذج إثبات المفهوم

لماذا يهم ذلك

تميل قواعد التفويض إلى التكاثر بصمت عبر التطبيقات حتى لا يعود أحد قادرًا على أن يحدد بثقة من يمكنه الوصول إلى ماذا. وجمعها في مكان واحد يجعل الإجابة عن هذا السؤال ممكنة من جديد، ويجعل كل تغيير لاحق في السياسات خطوة واحدة مضبوطة.

إذا كانت مؤسستكم تواجه تحديًا مشابهًا، يسعدنا أن نناقشه معكم.