البرمجيات والمنصّات
المجالُ كاملًا، وبقيّةُ القدرات ضمنه.
منتجاتٌ متعدّدة المستأجرين تُحسم فيها التعدّديةُ والقياسُ واستراتيجيةُ الإصدار في التصميم، لا تُكتشف بعد أوّل عميلٍ مؤسسي.
منتجُ SaaS قاعدةُ كودٍ واحدة تخدم عملاء كثيرين، ويكون فيها العزلُ والفوترةُ وعمليةُ الإصدار جزءًا من المنتج بقدر الميزات نفسها. نبني نموذجَ تعدّد المستأجرين (Multi-tenancy)، وسطحَ الانضمام والخدمة الذاتية، ونظامَ القياس (Metering) الذي تعتمد عليه الفوترة، وخطَّ التسليم الذي يتيح لكم الإصدارَ للجميع دفعةً واحدة.
تعدّدُ المستأجرين إن حُسم متأخّرًا كان إعادةَ كتابة، وإن حُسم مبكّرًا كان خيارًا تصميميًّا. والفرقُ الذي تجده الفرقُ التي تبدأ بمستأجرٍ واحد ثم تنوي التعميم لاحقًا هو غيابُ حدّ المستأجر عن كلّ استعلامٍ ومفتاحِ تخزينٍ مؤقّت ومهمّةٍ خلفية وسطرِ سجل. والقياسُ هو النصفُ الآخر من المشكلة نفسها: إن لم تُسجَّل الاستخداماتُ كأحداث، فأوّلُ تغييرٍ في تسعيرٍ قائم على الاستخدام يتطلّب إعادةَ بناء تاريخٍ غير موجود.
إن صدق أكثرُ من واحدةٍ ممّا يلي، فهذه عادةً نقطةُ البداية الصحيحة.
| المُخرَج | ما يحتويه |
|---|---|
| تصميمُ التعدّدية | نموذجُ العزل مكتوبًا مع تبعاته في الموطن والنسخ الاحتياطي والجار المزعج، بما في ذلك كيفيةُ تهيئة المستأجر وتصديرِ بياناته وحذفه. |
| تطبيقُ المنتج | التطبيقُ متعدّد المستأجرين وأسطحُ الانضمام والإدارة فيه وحزمةُ اختباراته، داخل مستودعكم منذ الأسبوع الأول. |
| القياسُ والفوترة | التقاطُ أحداث الاستخدام وتجميعُها والتكاملُ مع مزوّد الفوترة لديكم، مع مسارِ مطابقةٍ بين الأحداث الخام والفواتير الصادرة. |
| خطُّ التسليم | خطُّ CI/CD بطرحٍ مرحلي وترحيلاتٍ واعية بالمستأجر وإدارةٍ لأعلام الميزات ومراقبةٍ مقسَّمة حسب المستأجر. |
مرجعٌ لا قالب. بيئتُك هي التي تقرّر أيَّ أجزائه ينطبق، وبأيّ ترتيبٍ يصل.
تُتَّفق المستهدفاتُ معك قبل بدء العمل، ويُرفَع التقريرُ عليها طوال مدّته.
المخطّطُ المشترك بعمود مستأجرٍ هو الأرخصُ تشغيلًا والأسهلُ خطأً، إذ يكفي مرشّحٌ واحد ناقص ليقع تسريبُ بيانات. والمخطّطُ لكلّ مستأجر يمنح فصلًا أوضح بكلفة إجراء الترحيلات عبر مخطّطاتٍ كثيرة. وقاعدةُ البيانات لكلّ مستأجر تجيب مطالبَ الموطن والعزل لكنّها تضاعف التشغيل. نختار وفق متطلّباتكم التعاقدية الفعلية، ونكتب ما يكلّفه الاختيار.
يمكنكم، وهو أغلى ممّا يبدو. معرّفُ المستأجر يجب أن يظهر في كلّ استعلامٍ ومفتاحِ تخزينٍ مؤقّت ومهمّةٍ خلفية ومسارِ ملفٍّ وسطرِ سجل، وإضافتُه لاحقًا تعني لمسَها جميعًا والثقةَ بأنّ شيئًا لم يفلت. وإن كنتم تعلمون أنّ أكثر من عميلٍ قادم، فضعوا الحدَّ من أوّل دورةِ عمل ولو نشرتم لعميلٍ واحد.
يُعالَج ذلك بوصفه خاصيةَ نشرٍ لا تفريعًا في الكود: النسخةُ نفسها منشورةً في إقليم، مع توجيهٍ للمستأجرين يعرف أين يقيم كلُّ مستأجر. وهو أمرٌ مباشر إن كان نموذجُ التعدّدية قد توقّعه، ومؤلمٌ إن لم يفعل، ولهذا ينتمي موطنُ البيانات إلى أوّل حوارٍ عن البنية لا إلى مفاوضةٍ تعاقدية لاحقة.
نعم. يصبح مزوّدٌ مثل Stripe نظامَ السجلّ للفوترة، بينما يبقى تطبيقكم نظامَ السجلّ للاستخدام. والجزءُ المهمّ هو تخزينُ الاستخدام كأحداثَ غيرِ قابلة للتعديل، لتستطيعوا إعادةَ التجميع بعد تغيير التسعير وتفسيرَ أيّ فاتورة من البيانات الأصلية لا من جدول ملخّص.
تطويرٌ على فرعٍ رئيسي واحد، وترحيلاتُ قاعدة بياناتٍ متوافقة مع الخلف تُطبَّق قبل الكود الذي يحتاجها، وأعلامُ ميزاتٍ تفصل النشرَ عن الإطلاق، وطرحٌ مرحلي يبدأ بالمستأجرين الداخليين ومنخفضي المخاطر. والتراجعُ مصمَّمٌ كمسارٍ طبيعي، ما يعني أنّه لا يُسمح لأيّ ترحيلٍ بجعله مستحيلًا.
عمليًّا: تسجيلُ دخولٍ موحّد بـ SAML أو OIDC، وتزويدُ مستخدمين بـ SCIM، وصلاحياتٌ قائمة على الأدوار، وسجلُّ تدقيقٍ يقرؤه العميلُ بنفسه، وتصديرُ البيانات وحذفُها، والتزاماتُ جاهزيةٍ تستطيعون قياسَها فعلًا، وإجاباتٌ واضحة عن المعالِجين الفرعيين وموطن البيانات. لا شيء منها صعبٌ منفردًا، لكنّها جميعًا مكلفةٌ حين تُضاف تحت ضغط صفقة، وتلك هي حجّةُ ترتيبها قبل أن يتراكم خطُّ العملاء المؤسسيين.
المجالُ كاملًا، وبقيّةُ القدرات ضمنه.
تطبيقاتُ ويب تُبنى وفق ميزانيةٍ للأداء وإمكانية الوصول (Accessibility) منذ البداية: البنية، وطبقةُ الـ API، وخطُّ CI/CD، والمراقبة التي تملكونها.
تطبيقاتُ iOS وAndroid يُصمَّم فيها العملُ دون اتصال وقواعدُ المزامنة والتعارض، وطبقةُ الخدمة الخلفية، وخطُّ الإصدار إلى المتاجر، قبل أوّل شاشة.
أسرعُ طريقٍ إلى جوابٍ مفيد نظرةٌ قصيرةٌ محدَّدةُ النطاق على ما لديكم أصلًا.