مقالات

كيف تُوسّع منصّة SaaS دون إعادة بنائها

الاختناق الأول في منصّات البرمجيات كخدمة يكون في قاعدة البيانات لا في الخوادم، وغالباً بسبب مستأجر واحد. كيف تجد الاختناق الحقيقي قبل أن تشتري حلاً لا تحتاجه.

التوسّع في منصّة برمجيات كخدمة نادراً ما يكون مسألة «خوادم أكثر». الاختناق الأول يظهر في قاعدة البيانات في أغلب الحالات، ويسبّبه غالباً مستأجر واحد يستخدم النظام بشكل مختلف عن البقية — لا الحمل الكلّي. ولهذا يكون شراء حلٍّ للتوسّع قبل قياس مصدر البطء أكثر الطرق شيوعاً لإنفاق ثلاثة أشهر دون أن يتحسّن شيء.

هذه المادة أصل محاضرة قدّمتها في Arabic Dev Group Malaysia.

لماذا يكون المستأجر الواحد هو المشكلة؟

في نظام لعميل واحد، البيانات تنمو نمواً متجانساً تقريباً. وفي نظام متعدّد المستأجرين، التوزيع غير متكافئ دائماً: تسعون بالمئة من عملائك لديهم مئات السجلّات، وواحد لديه ملايين. والاستعلام الذي يعمل ممتازاً لتسعين بالمئة منهم هو نفسه الذي يستهلك موارد الخادم كلّها حين ينفّذه ذلك الواحد.

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

أول ما يُبنى ليس حلّاً للتوسّع، بل القدرة على الإجابة عن سؤال: أي مستأجر، أي استعلام، أي مزوّد.

ما الذي يتعطّل أولاً، بالترتيب

الترتيب متكرّر بما يكفي ليكون قابلاً للتوقّع:

  1. استعلام واحد بلا فهرس مناسب. يظهر مع نمو أكبر مستأجر، لا مع نمو عدد المستأجرين. أرخص إصلاح متاح، وأكثر ما يُشخَّص خطأً على أنه «حاجة إلى خوادم أكبر».
  2. N+1 في مسار يعالج قوائم. غير محسوس بعشرين سجلّاً، وقاتل بعشرين ألفاً. لوحات التقارير هي موطنه المعتاد.
  3. مهام خلفية تعالج كل المستأجرين تسلسلياً. تعمل جيداً حتى يصير مجموع الوقت أطول من الفترة بين تشغيلتين، فتتراكم.
  4. اتّصالات قاعدة البيانات. كل نسخة تطبيق تحتفظ بمجموعة اتّصالات؛ مضاعفة عدد النسخ تضاعف الضغط على القاعدة، فيصير التوسّع الأفقي سبباً للبطء لا علاجاً له.
  5. الخوادم نفسها. آخر القائمة عادةً، لا أولها.

الأربعة الأولى مسائل شيفرة وبيانات، ولا يحلّها إنفاق أكبر على البنية التحتية. وحين يُشترى حلّ التوسّع قبل تشخيصها، تبقى موجودة — لكن كلفتها الشهرية صارت أعلى.

ماذا تفعل بالمستأجر الكبير؟

حين يكون مستأجر واحد سبب الضغط، الخيارات ثلاثة، ولكلٍّ منها ثمن صريح:

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

الخيار الثالث هو الأقلّ استخداماً والأكثر إغفالاً. السقوف ليست عقاباً؛ هي ما يمنع مستأجراً واحداً من إسقاط تجربة البقية. والفارق بين سقف مقبول وآخر مستفزّ هو أن يكون معلوماً في الخطّة من البداية لا مفروضاً بعد شكوى.

أين يفيد التخزين المؤقّت وأين يضرّ

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

القاعدة بسيطة: مُعرّف المستأجر جزء من كل مفتاح، بلا استثناء، ويُفرض ذلك في الطبقة التي تبني المفاتيح لا في انضباط من يكتب الشيفرة.

وبعد ذلك، الترتيب النافع:

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

متى تُفصل خدمة فعلاً؟

الفصل قرار له مُحفّزات محدّدة، لا شعور بأن النظام «صار كبيراً»:

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

أمّا «قد نحتاج التوسّع يوماً ما» فليس منها. والوحدة التي تملك بياناتها وتعرض واجهة ضيّقة تكون قد قطعت معظم الطريق إلى أن تصير خدمة حين يتحقّق أحد المحفّزات فعلاً — وهذا هو الفارق بين نواة أحادية معيارية وكتلة متشابكة.

الخلاصة

التوسّع مسألة قياس قبل أن يكون مسألة معمارية. القياس مقسوماً على المستأجر، ثم الاستعلامات والفهارس، ثم المهام الخلفية، ثم الاتّصالات — وأخيراً البنية التحتية. والترتيب المعكوس، وهو الشائع، يشتري حلولاً لمشاكل لم تُشخَّص.

هذا ما أبنيه للعملاء، وما أُشغّله بنفسي في مَكّوك.

العودة إلى المدونة ←