- العزل يفرض في مستوى البيانات لا في مستوى الكود وحده.
- قاعدة مشتركة أوفر وأسهل تشغيلا، ومنفصلة أقوى عزلا وأغلى.
- كل استعلام يجب أن يقيد بمعرف المستأجر بلا استثناء.
- التخصيص لعميل واحد في الكود يفسد المنتج للجميع.
ثلاثة نماذج
| النموذج | العزل | الكلفة | يناسب |
|---|---|---|---|
| قاعدة مشتركة بمعرف مستأجر | منطقي | الأقل | أغلب المنتجات |
| مخطط منفصل لكل مستأجر | متوسط | متوسطة | عملاء أكبر بمتطلبات عزل |
| قاعدة منفصلة لكل مستأجر | كامل | الأعلى | مؤسسات بمتطلبات تنظيمية |
والأشيع عمليا نموذج مختلط: الأغلبية على قاعدة مشتركة، وعملاء محددون بمتطلبات خاصة على قواعد منفصلة، بالكود نفسه.
فرض العزل
الاعتماد على تذكر المطور لإضافة شرط المستأجر في كل استعلام وصفة مؤكدة للتسريب: سيسهو أحدهم يوما. والصواب فرض العزل في طبقة أدنى — سياسات أمان على مستوى الصفوف في قاعدة البيانات، أو طبقة وصول تضيف الشرط تلقائيا ولا يمكن تجاوزها.
واختبر ذلك صراحة: اختبار آلي يحاول الوصول لبيانات مستأجر آخر ويجب أن يفشل. وهذا الاختبار يجب أن يشغل مع كل تغيير.
التخصيص بلا تشعيب
- اجعل الاختلافات إعدادات لا كودا: مفاتيح تفعيل مميزات، وقوالب، وحقول مخصصة.
- لا تنشئ فرعا في الكود لعميل واحد — سيصير عبئا دائما على كل تغيير.
- إن طلب عميل كبير شيئا خاصا، ابنه كميزة عامة تفعل له وحده.
- وثق كل تخصيص وراجعه دوريا: كثير منها يمكن حذفه بعد سنة.
الجار الصاخب
عميل واحد يشغل تقريرا ثقيلا قد يبطئ الجميع في نموذج مشترك. وعالج ذلك بحدود استهلاك لكل مستأجر، وطوابير منفصلة للمهام الثقيلة، ومراقبة الاستهلاك لكل مستأجر لتعرف من يستهلك أكثر مما يدفع.
الترقيات والترحيل
تحديث قاعدة مشتركة يشمل الجميع دفعة واحدة، وهذا سهل وخطر معا. وترحيل مخططات القواعد المنفصلة يحتاج أتمتة صارمة وإلا تباعدت النسخ. وفي الحالتين: ترحيلات مرقمة قابلة للتراجع، ونشر تدريجي يبدأ بشريحة صغيرة.
أسئلة شائعة
أي نموذج نختار في البداية؟
القاعدة المشتركة بمعرف مستأجر هي الافتراض المعقول لأغلب المنتجات: أبسط تشغيلا وأقل كلفة. ويصمم النظام بحيث يمكن نقل عميل إلى قاعدة منفصلة لاحقا إن استدعى الأمر.
كيف نتعامل مع طلب عزل كامل من عميل؟
بتقديمه بوصفه باقة مؤسسية بسعر يعكس كلفته الحقيقية في التشغيل والصيانة. وقبوله بسعر الباقة العادية يعني خسارة مستمرة قد لا تظهر إلا بعد سنة.
ما أخطر خطأ في التنفيذ؟
وجود مسار واحد في الكود لا يطبق شرط المستأجر: تقرير، أو مهمة خلفية، أو نقطة نهاية قديمة. ولهذا يجب أن يفرض العزل في الطبقة الأدنى لا أن يترك لانضباط كل مطور.
- تعدد المستأجرين
- multi-tenancy
- معمارية SaaS
- عزل البيانات
- قابلية التوسع
- أمن البيانات
- تصميم الأنظمة
- منتجات SaaS