<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>احمد المُنَجّد — مقالات</title><description>أساعد الشركات الناشئة والمنشآت الصغيرة والمتوسطة والأعمال النامية على إطلاق برمجيات تصمد، وتحديث الأنظمة التي لم تعد تصمد، وتدريب الفرق التي تتولّى صيانتها.</description><link>https://www.almunajjed.biz/ar</link><language>ar</language><item><title>كيف تختار بين نظام جاهز ونظام مخصّص</title><link>https://www.almunajjed.biz/ar/blog/%D8%A7%D8%AE%D8%AA%D9%8A%D8%A7%D8%B1-%D9%86%D8%B8%D8%A7%D9%85-%D8%AC%D8%A7%D9%87%D8%B2-%D8%A3%D9%88-%D9%85%D8%AE%D8%B5%D8%B5</link><guid isPermaLink="true">https://www.almunajjed.biz/ar/blog/%D8%A7%D8%AE%D8%AA%D9%8A%D8%A7%D8%B1-%D9%86%D8%B8%D8%A7%D9%85-%D8%AC%D8%A7%D9%87%D8%B2-%D8%A3%D9%88-%D9%85%D8%AE%D8%B5%D8%B5</guid><description>القرار ليس بين السعرين، بل في الجهة التي ستتغيّر: عمليتك أم المنتج. قاعدة عملية للتفريق، والإشارات التي تدلّ على أن الجاهز بدأ يكلّفك أكثر ممّا يوفّر.</description><pubDate>Mon, 27 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;!--
  DRAFT — Arabic copy, unpublished until Ahmad has read it. Set `draft: false`
  to ship it, and delete this comment when you do.

  First post on the Arabic tree. Arabic calendar #4 in docs/seo-strategy.md §7,
  chosen ahead of #1–#3 for one reason: it is the only one of the six whose
  pillar page actually exists. The other five link up to service pages that are
  still `draft: true`, so their up-links would point at a 404.

  Sourcing: written from stated expertise and general engineering reasoning
  only. It names no client, quotes no metric, gives no date, and reports no
  specific project, because none have been supplied for it.

  Overlap check: /ar/services/تطوير-برمجيات-مخصصة carries an FAQ entry on when
  custom software beats buying. That is a one-paragraph answer; this is the
  decision procedure underneath it — the pillar/spoke relationship §7 intends.
  This post emits BlogPosting, not FAQPage, so no Q&amp;A markup is duplicated.
--&gt;
&lt;p&gt;الفرق بين النظام الجاهز والنظام المخصّص ليس في قائمة المزايا ولا في السعر المعلن، بل في
الجهة التي ستتغيّر. مع النظام الجاهز تُعدّل طريقة عملك لتناسب المنتج، ومع النظام المخصّص
يُبنى المنتج حول طريقة عملك. والقاعدة العملية التي أبدأ منها: اشترِ الجاهز لكل ما لا
يميّزك عن منافسيك، وابنِ المخصّص للجزء الذي تكسب منه المال.&lt;/p&gt;
&lt;p&gt;وأكثر ما يُفسد هذا القرار أنه يُطرح مرّة واحدة عن الشركة كلها، بينما هو في الحقيقة قرار
يُتخذ لكل جزء من النظام على حدة. الشركة نفسها قد تشتري نظام محاسبتها جاهزاً وتبني نظام
توزيعها من الصفر، ويكون كلا القرارين صحيحاً.&lt;/p&gt;
&lt;h2 id=&quot;متى-يكون-الجاهز-هو-الخيار-الصحيح&quot;&gt;متى يكون الجاهز هو الخيار الصحيح&lt;/h2&gt;
&lt;p&gt;حين تكون العملية قياسية، ولا تريد أن تتميّز فيها، وكلفة الانتقال عنها لاحقاً منخفضة.
المحاسبة والرواتب والبريد أمثلة واضحة: لا أحد يفوز في سوقه لأن نظام رواتبه أفضل من نظام
جاره. شراء الجاهز هنا ليس تنازلاً، بل هو الاستخدام الصحيح للمال — تدفع ثمن مشكلة حلّها
غيرك آلاف المرات، وتوجّه انتباه فريقك إلى مكان آخر.&lt;/p&gt;
&lt;p&gt;وهناك سبب ثانٍ أقل ذكراً: النظام الجاهز يأتي بجمهور من المستخدمين يشاركونك المشكلات.
حين يظهر خلل، من المرجّح أن أحداً قد أبلغ عنه قبلك.&lt;/p&gt;
&lt;h2 id=&quot;الإشارة-التي-تدلّ-على-أن-الجاهز-بدأ-يكلّفك&quot;&gt;الإشارة التي تدلّ على أن الجاهز بدأ يكلّفك&lt;/h2&gt;
&lt;p&gt;المؤشّر الذي أبحث عنه ليس شكوى من النظام. الناس يشتكون من كل نظام. المؤشّر هو &lt;strong&gt;عدد
الأشخاص الذين يعملون حول النظام بدل أن يعملوا داخله&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;جداول جانبية يُحتفظ فيها بما لا يستوعبه النظام&lt;/li&gt;
&lt;li&gt;إدخال البيانات مرّتين، مرّة في النظام ومرّة في مكان يُستخرج منه التقرير الحقيقي&lt;/li&gt;
&lt;li&gt;موظّف يقضي صباح كل أحد في تجميع تقرير يدوياً&lt;/li&gt;
&lt;li&gt;خطوة في العملية لا تُسجَّل في أي مكان لأن النظام لا يعرفها، فتُدار عبر مجموعة محادثات&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;كل واحدة من هذه التفافات صغيرة ومحتملة وحدها. مجتمعةً هي نظامك الحقيقي، وهو يعمل خارج
البرنامج الذي تدفع اشتراكه.&lt;/p&gt;
&lt;h2 id=&quot;السؤال-الذي-يحسم-القرار&quot;&gt;السؤال الذي يحسم القرار&lt;/h2&gt;
&lt;p&gt;سؤال واحد يختصر أكثر النقاشات: &lt;strong&gt;أي جزء من عملك لو نسخه منافس حرفياً لتوقّف تميّزك عنه؟&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ذلك الجزء هو المرشّح للبناء المخصّص. وما عداه مرشّح للشراء. إن كان الجواب «طريقة تسعيرنا
للشحنات» أو «طريقة إدارتنا لمندوبينا في الميدان»، فتلك عملية تستحقّ نظاماً يُمثّلها كما
هي، لا نظاماً يطلب منها أن تتغيّر. وإن كان الجواب «خدمة العملاء لدينا أسرع»، فالمشكلة
غالباً ليست في البرمجيات أصلاً.&lt;/p&gt;
&lt;h2 id=&quot;الخيار-الثالث-الذي-يُغفل-غالباً&quot;&gt;الخيار الثالث الذي يُغفل غالباً&lt;/h2&gt;
&lt;p&gt;القرار يُطرح عادةً كأنه بين طرفين، وهو في الأغلب ثلاثة: جاهز، أو مخصّص، أو &lt;strong&gt;جاهز في
الأطراف ومخصّص في النواة&lt;/strong&gt;. تشتري المحاسبة والمخازن، وتبني الجزء الذي يميّزك، وتربط
بينهما.&lt;/p&gt;
&lt;p&gt;هذا الخيار هو الصحيح في حالات كثيرة، لكنه ليس مجانياً: التكامل نفسه شيء يُبنى ويُصان،
وتصير جهة أخرى مسؤولة عن نصف نظامك. القاعدة التي أتّبعها أن يبقى التكامل عند حدود قليلة
وواضحة. حين يبدأ نظامان في تعديل البيانات نفسها، فأنت لا تملك نظامين مترابطين، بل نظاماً
واحداً موزّعاً على جهتين لا تنسّقان بينهما.&lt;/p&gt;
&lt;h2 id=&quot;كيف-تقرّر-عملياً&quot;&gt;كيف تقرّر عملياً&lt;/h2&gt;
&lt;p&gt;قبل أن تطلب عرض سعر من أي طرف:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;اكتب العملية التي تُدرّ المال، خطوة بخطوة، كما تجري اليوم فعلاً لا كما يُفترض أن تجري.&lt;/li&gt;
&lt;li&gt;علّم الخطوات التي تُدار حالياً خارج أي نظام.&lt;/li&gt;
&lt;li&gt;اعرض العملية على منتج جاهز واحد جادّ، واسأل سؤالاً واحداً: أي خطوة منها تحتاج إلى أن
تتغيّر ليقبلها المنتج؟&lt;/li&gt;
&lt;li&gt;انظر في الخطوات التي طُلب تغييرها. إن كانت هامشية، اشترِ. وإن كانت هي الخطوات التي
تكسب منها، فقد وجدت الجزء الذي يستحقّ البناء.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;الخطوة الأولى هي الأصعب والأكثر فائدة. أكثر الشركات التي تسألني عن هذا القرار لا تملك
وصفاً مكتوباً لعمليتها، وكتابته وحدها تكشف نصف الجواب قبل أن يُذكر أي منتج.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;هذا هو المدخل الذي أبدأ منه في &lt;a href=&quot;/ar/services/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D9%85%D8%AE%D8%B5%D8%B5%D8%A9&quot;&gt;تطوير البرمجيات المخصّصة&lt;/a&gt;:
تحليل العملية أولاً، ثم قرار ما يُشترى وما يُبنى، ثم البناء.&lt;/p&gt;</content:encoded></item><item><title>كيف تُوسّع منصّة SaaS دون إعادة بنائها</title><link>https://www.almunajjed.biz/ar/blog/%D8%AA%D9%88%D8%B3%D9%8A%D8%B9-%D9%85%D9%86%D8%B5%D8%A9-saas</link><guid isPermaLink="true">https://www.almunajjed.biz/ar/blog/%D8%AA%D9%88%D8%B3%D9%8A%D8%B9-%D9%85%D9%86%D8%B5%D8%A9-saas</guid><description>الاختناق الأول في منصّات البرمجيات كخدمة يكون في قاعدة البيانات لا في الخوادم، وغالباً بسبب مستأجر واحد. كيف تجد الاختناق الحقيقي قبل أن تشتري حلاً لا تحتاجه.</description><pubDate>Mon, 27 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;التوسّع في منصّة برمجيات كخدمة نادراً ما يكون مسألة «خوادم أكثر». الاختناق الأول
يظهر في قاعدة البيانات في أغلب الحالات، ويسبّبه غالباً مستأجر واحد يستخدم النظام
بشكل مختلف عن البقية — لا الحمل الكلّي. ولهذا يكون شراء حلٍّ للتوسّع قبل قياس مصدر
البطء أكثر الطرق شيوعاً لإنفاق ثلاثة أشهر دون أن يتحسّن شيء.&lt;/p&gt;
&lt;p&gt;هذه المادة أصل محاضرة قدّمتها في &lt;bdi&gt;Arabic Dev Group Malaysia&lt;/bdi&gt;.&lt;/p&gt;
&lt;h2 id=&quot;لماذا-يكون-المستأجر-الواحد-هو-المشكلة&quot;&gt;لماذا يكون المستأجر الواحد هو المشكلة؟&lt;/h2&gt;
&lt;p&gt;في نظام لعميل واحد، البيانات تنمو نمواً متجانساً تقريباً. وفي نظام متعدّد
المستأجرين، التوزيع غير متكافئ دائماً: تسعون بالمئة من عملائك لديهم مئات السجلّات،
وواحد لديه ملايين. والاستعلام الذي يعمل ممتازاً لتسعين بالمئة منهم هو نفسه الذي
يستهلك موارد الخادم كلّها حين ينفّذه ذلك الواحد.&lt;/p&gt;
&lt;p&gt;هذا ما يجعل متوسّط زمن الاستجابة مقياساً مضلّلاً. المتوسّط يبقى ممتازاً بينما تجربة
أكبر عملائك — وغالباً أكثرهم دفعاً — تنهار. القياس الذي يكشف هذا هو &lt;strong&gt;زمن الاستجابة
عند المئين التسعين والتاسع والتسعين، مقسوماً على المستأجر&lt;/strong&gt;. وإن لم يكن مُعرّف
المستأجر مسجَّلاً مع كل قياس، فهذا التقسيم غير ممكن أصلاً.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;أول ما يُبنى ليس حلّاً للتوسّع، بل القدرة على الإجابة عن سؤال: أي مستأجر، أي
استعلام، أي مزوّد.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;ما-الذي-يتعطّل-أولاً-بالترتيب&quot;&gt;ما الذي يتعطّل أولاً، بالترتيب&lt;/h2&gt;
&lt;p&gt;الترتيب متكرّر بما يكفي ليكون قابلاً للتوقّع:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;استعلام واحد بلا فهرس مناسب.&lt;/strong&gt; يظهر مع نمو أكبر مستأجر، لا مع نمو عدد
المستأجرين. أرخص إصلاح متاح، وأكثر ما يُشخَّص خطأً على أنه «حاجة إلى خوادم أكبر».&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‏&lt;bdi&gt;N+1&lt;/bdi&gt; في مسار يعالج قوائم.&lt;/strong&gt; غير محسوس بعشرين سجلّاً، وقاتل بعشرين
ألفاً. لوحات التقارير هي موطنه المعتاد.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;مهام خلفية تعالج كل المستأجرين تسلسلياً.&lt;/strong&gt; تعمل جيداً حتى يصير مجموع الوقت
أطول من الفترة بين تشغيلتين، فتتراكم.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;اتّصالات قاعدة البيانات.&lt;/strong&gt; كل نسخة تطبيق تحتفظ بمجموعة اتّصالات؛ مضاعفة عدد
النسخ تضاعف الضغط على القاعدة، فيصير التوسّع الأفقي سبباً للبطء لا علاجاً له.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الخوادم نفسها.&lt;/strong&gt; آخر القائمة عادةً، لا أولها.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;الأربعة الأولى مسائل شيفرة وبيانات، ولا يحلّها إنفاق أكبر على البنية التحتية. وحين
يُشترى حلّ التوسّع قبل تشخيصها، تبقى موجودة — لكن كلفتها الشهرية صارت أعلى.&lt;/p&gt;
&lt;h2 id=&quot;ماذا-تفعل-بالمستأجر-الكبير&quot;&gt;ماذا تفعل بالمستأجر الكبير؟&lt;/h2&gt;
&lt;p&gt;حين يكون مستأجر واحد سبب الضغط، الخيارات ثلاثة، ولكلٍّ منها ثمن صريح:&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;الخيار&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;متى يصلح&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;الثمن&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;تحسين الاستعلام أو الفهرس&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;دائماً، وهو أول ما يُجرَّب&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;وقت هندسي، وحدود لما يمكن بلوغه&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;فصل ذلك المستأجر إلى بنية مستقلّة&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;عميل مؤسّسي كبير يبرّر الكلفة&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;نشران يجب أن يبقيا متطابقين&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;سقوف وحصص على مستوى المستأجر&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;حين يكون الاستهلاك غير معقول لا كبيراً&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;محادثة تجارية مع عميل يدفع&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;الخيار الثالث هو الأقلّ استخداماً والأكثر إغفالاً. السقوف ليست عقاباً؛ هي ما يمنع
مستأجراً واحداً من إسقاط تجربة البقية. والفارق بين سقف مقبول وآخر مستفزّ هو أن يكون
معلوماً في الخطّة من البداية لا مفروضاً بعد شكوى.&lt;/p&gt;
&lt;h2 id=&quot;أين-يفيد-التخزين-المؤقّت-وأين-يضرّ&quot;&gt;أين يفيد التخزين المؤقّت وأين يضرّ&lt;/h2&gt;
&lt;p&gt;التخزين المؤقّت في نظام متعدّد المستأجرين له فخّ لا يوجد في النظام أحادي المستأجر:
&lt;strong&gt;مفتاح تخزين نسي مُعرّف المستأجر يُسرّب بيانات عميل إلى عميل آخر.&lt;/strong&gt; وهذا ليس عطلاً
في الأداء بل خرقاً للعزل، وهو من أسوأ ما يمكن أن يحدث لمنصّة.&lt;/p&gt;
&lt;p&gt;القاعدة بسيطة: مُعرّف المستأجر جزء من كل مفتاح، بلا استثناء، ويُفرض ذلك في الطبقة
التي تبني المفاتيح لا في انضباط من يكتب الشيفرة.&lt;/p&gt;
&lt;p&gt;وبعد ذلك، الترتيب النافع:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ما يُقرأ كثيراً ويتغيّر نادراً&lt;/strong&gt; — الإعدادات، والخطط، وبيانات المستأجر نفسه.
أفضل عائد بأقل خطر.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;نتائج التقارير الثقيلة&lt;/strong&gt; — بصلاحية قصيرة، لأن التقرير القديم بدقيقة مقبول
والتقرير الخاطئ ليس كذلك.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ما يتغيّر مع كل كتابة&lt;/strong&gt; — الأسوأ. تعقيد إبطال التخزين المؤقّت يفوق ما يوفّره.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;متى-تُفصل-خدمة-فعلاً&quot;&gt;متى تُفصل خدمة فعلاً؟&lt;/h2&gt;
&lt;p&gt;الفصل قرار له مُحفّزات محدّدة، لا شعور بأن النظام «صار كبيراً»:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;جزء يحتاج عتاداً أو زمن تشغيل مختلفاً — معالجة الصور، والتقارير الطويلة.&lt;/li&gt;
&lt;li&gt;جزء يحتاج توسّعاً على محوره الخاص، وتوسيع التطبيق كلّه لخدمته أغلى من تشغيله
منفصلاً.&lt;/li&gt;
&lt;li&gt;فريق ثانٍ يتولّى ملكية جزء، فيصير خطّ النشر المشترك طابوراً ينتظر فيه الجميع.&lt;/li&gt;
&lt;li&gt;متطلّب امتثال أو إقامة بيانات يفرض العزل.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;أمّا «قد نحتاج التوسّع يوماً ما» فليس منها. والوحدة التي تملك بياناتها وتعرض واجهة
ضيّقة تكون قد قطعت معظم الطريق إلى أن تصير خدمة حين يتحقّق أحد المحفّزات فعلاً —
وهذا هو الفارق بين نواة أحادية معيارية وكتلة متشابكة.&lt;/p&gt;
&lt;h2 id=&quot;الخلاصة&quot;&gt;الخلاصة&lt;/h2&gt;
&lt;p&gt;التوسّع مسألة قياس قبل أن يكون مسألة معمارية. القياس مقسوماً على المستأجر، ثم
الاستعلامات والفهارس، ثم المهام الخلفية، ثم الاتّصالات — وأخيراً البنية التحتية.
والترتيب المعكوس، وهو الشائع، يشتري حلولاً لمشاكل لم تُشخَّص.&lt;/p&gt;
&lt;p&gt;هذا ما أبنيه للعملاء، وما أُشغّله بنفسي في مَكّوك.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;الخدمة: &lt;a href=&quot;/ar/services/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%85%D9%86%D8%B5%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D9%83%D8%AE%D8%AF%D9%85%D8%A9&quot;&gt;تطوير منصّات البرمجيات كخدمة&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;المادة المرتبطة:
&lt;a href=&quot;/ar/blog/%D9%85%D8%B9%D9%85%D8%A7%D8%B1%D9%8A%D8%A9-%D8%AA%D8%B9%D8%AF%D8%AF-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%A3%D8%AC%D8%B1%D9%8A%D9%86&quot;&gt;معمارية تعدّد المستأجرين&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;إن كان فريقك هو من يحتاج هذه المادة: &lt;a href=&quot;/ar/services/%D8%AA%D8%AF%D8%B1%D9%8A%D8%A8-%D8%A7%D9%84%D9%81%D8%B1%D9%82&quot;&gt;تدريب الفرق&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>معمارية تعدّد المستأجرين: القرارات التي لا يمكن التراجع عنها</title><link>https://www.almunajjed.biz/ar/blog/%D9%85%D8%B9%D9%85%D8%A7%D8%B1%D9%8A%D8%A9-%D8%AA%D8%B9%D8%AF%D8%AF-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%A3%D8%AC%D8%B1%D9%8A%D9%86</link><guid isPermaLink="true">https://www.almunajjed.biz/ar/blog/%D9%85%D8%B9%D9%85%D8%A7%D8%B1%D9%8A%D8%A9-%D8%AA%D8%B9%D8%AF%D8%AF-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%A3%D8%AC%D8%B1%D9%8A%D9%86</guid><description>تعدّد المستأجرين ليس طبقة تُضاف لاحقاً. أربعة قرارات تُحسم قبل أول خاصية — العزل، وتحديد المستأجر، والهوية، والكلفة — ولماذا يصعب التراجع عن كلٍّ منها.</description><pubDate>Mon, 27 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;تعدّد المستأجرين هو أن يخدم نشرٌ واحد عملاء كثيرين، يرى كلٌّ منهم النظام وكأنه له
وحده. والمسألة التي تجعل هذه المعمارية صعبة ليست تقنية بحتة: أربعة قرارات تُحسم في
الشهر الأول، وكلها تمتدّ إلى نموذج البيانات وكل استعلام وكل مهمّة خلفية — فيصير
التراجع عنها بعد أن يحتفظ عملاء حقيقيون ببياناتهم في النظام أشبه بإعادة بناء منه
بتعديل.&lt;/p&gt;
&lt;p&gt;هذه المادة أصل محاضرة قدّمتها في &lt;bdi&gt;Arabic Dev Group Malaysia&lt;/bdi&gt;، وهي مكتوبة
هنا بتوسّع أكبر ممّا يسمح به نصف ساعة.&lt;/p&gt;
&lt;h2 id=&quot;ما-الذي-يعنيه-معزول-فعلاً&quot;&gt;ما الذي يعنيه «معزول» فعلاً؟&lt;/h2&gt;
&lt;p&gt;العزل ليس خياراً ثنائياً بين قاعدة بيانات لكل عميل وقاعدة واحدة مشتركة؛ بل طيف،
وموضعك عليه قرار تجاري يرتدي ثياباً تقنية:&lt;/p&gt;





























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;النموذج&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;العزل&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;الكلفة لكل مستأجر&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;الترحيلات&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;قاعدة بيانات لكل مستأجر&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;الأقوى&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;تنمو مع عدد العملاء&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;تُنفَّذ ن مرّة، وقد تفشل جزئياً&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;مخطَّط لكل مستأجر&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;قوي&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;متوسطة&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;ن مرّة، لكن على خادم واحد&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;جداول مشتركة بمُعرّف مستأجر&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;يعتمد على انضباط الشيفرة&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;قريبة من الصفر&lt;/td&gt;&lt;td align=&quot;left&quot;&gt;مرّة واحدة&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;الخطأ الشائع هو اختيار الأقوى عزلاً لأنه «الأأمن». وهو فعلاً الأأمن أمام عميل
مؤسّسي يشترط ذلك في العقد، لكنه يربط كلفتك التشغيلية بعدد عملائك — وإن كانت لديك
خطّة مجانية، فأنت تدفع عن كل حساب لا يدفع لك شيئاً.&lt;/p&gt;
&lt;p&gt;في مَكّوك، الخطّة المجانية دائمة وبلا عمولة. هذا القيد وحده استبعد كل تصميم تنمو
كلفته مع عدد المستأجرين، فتبعت المعمارية النموذج التجاري لا العكس. وهذا هو الترتيب
الصحيح: النموذج التجاري أولاً، ثم العزل.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;لماذا يصعب التراجع:&lt;/strong&gt; الانتقال من جداول مشتركة إلى قواعد منفصلة يعني ترحيل بيانات
كل عميل على حدة مع إبقاء النظام يعمل. والاتجاه المعاكس أسوأ: دمج قواعد منفصلة يعني
إعادة توليد المفاتيح الأساسية في كل جدول مرتبط.&lt;/p&gt;
&lt;h2 id=&quot;كيف-يعرف-النظام-أي-مستأجر-يخاطبه&quot;&gt;كيف يعرف النظام أي مستأجر يخاطبه؟&lt;/h2&gt;
&lt;p&gt;قبل أي منطق عمل، على كل طلب أن يُحلَّ إلى مستأجر واحد محدّد. الطرق المتاحة ثلاث،
ولها آثار متباينة:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;نطاق فرعي أو نطاق مخصّص&lt;/strong&gt; — الأوضح للعميل، والأقرب إلى شعوره بأن المنتج له.
وثمنه أن تصير إدارة الشهادات وسجلّات &lt;bdi&gt;DNS&lt;/bdi&gt; جزءاً من منتجك.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;مسار في الرابط&lt;/strong&gt; — الأبسط تشغيلياً، والأضعف في الإحساس بالملكية.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;من هوية المستخدم&lt;/strong&gt; — يعمل داخل التطبيق، ويفشل في كل ما لا يحمل جلسة: الويب
هوك، والمهام المجدولة، وواجهات التكامل.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;الحالة التي تُنسى دائماً هي &lt;strong&gt;ما لا يأتي من متصفّح&lt;/strong&gt;. مهمّة ليلية تعالج كل
المستأجرين لا تملك سياقاً واحداً؛ ويب هوك من مزوّد دفع يصل بمُعرّف المزوّد لا
بمُعرّفك. إن لم يكن تحديد المستأجر مسألةً مركزية في التصميم، ظهرت هذه الحالات
متفرّقة لاحقاً، وعولجت كلٌّ منها بطريقة مختلفة.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;القاعدة العملية:&lt;/strong&gt; اجعل تسريب استعلام عبر المستأجرين مستحيلاً افتراضياً لا
ممنوعاً بالمراجعة. مرشّح على مستوى الوصول إلى البيانات يُطبَّق تلقائياً، والاستثناء
منه يحتاج تصريحاً صريحاً في الشيفرة — وهذا أنفع من أي عدد من مراجعات الأقران، لأنه
يفشل على الفرع لا في التشغيل الفعلي.&lt;/p&gt;
&lt;h2 id=&quot;هل-المستخدم-يخصّ-مستأجراً-واحداً&quot;&gt;هل المستخدم يخصّ مستأجراً واحداً؟&lt;/h2&gt;
&lt;p&gt;أسهل افتراض هو أن كل مستخدم ينتمي إلى مستأجر واحد، وأول عميل جادّ سيكسره: محاسب
يخدم ثلاث شركات، أو موظّف انتقل بين فرعين، أو شريك يحتاج وصولاً محدوداً إلى حسابات
عملائه.&lt;/p&gt;
&lt;p&gt;الفصل الذي يحلّ هذا هو بين &lt;strong&gt;من أنت&lt;/strong&gt; و&lt;strong&gt;ماذا يحقّ لك، وأين&lt;/strong&gt;. الهوية تخصّ الشخص
ولا تتكرّر، والعضوية هي الرابط بين شخص ومستأجر، وهي التي تحمل الصلاحيات. بهذا يصير
انضمام المستخدم إلى مستأجر ثانٍ إضافة سجلّ، لا حساباً جديداً ببريد بديل.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;لماذا يصعب التراجع:&lt;/strong&gt; حين يكون البريد الإلكتروني مفتاحاً فريداً داخل جدول مرتبط
بمستأجر، فإن فصل الهوية عن العضوية لاحقاً يعني دمج حسابات موجودة يملك كلٌّ منها
بيانات وسجلّ نشاط — وهي عملية تحتاج قراراً بشرياً في كل حالة متعارضة.&lt;/p&gt;
&lt;h2 id=&quot;هل-يقيس-النظام-الاستهلاك-من-البداية&quot;&gt;هل يقيس النظام الاستهلاك من البداية؟&lt;/h2&gt;
&lt;p&gt;الخطط والسقوف تبدو مسألة فوترة، وهي في الحقيقة مسألة قياس. إن لم يكن النظام يعرف كم
استهلك كل مستأجر — عدد الطلبات، حجم التخزين، عدد المستخدمين، عدد الرسائل — فلا يمكن
فرض سقف ولا تسعير حسب الاستهلاك ولا حتى معرفة أي عميل يكلّفك أكثر ممّا يدفع.&lt;/p&gt;
&lt;p&gt;وجمع هذا لاحقاً ممكن، لكن التاريخ يبدأ من لحظة الجمع. أما التسعير فيحتاج بيانات عن
الماضي لا عن الأسبوع القادم.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;القرار الأدنى المطلوب في البداية:&lt;/strong&gt; أن يكون لكل عملية ذات كلفة مُعرّف مستأجر
مسجَّل معها. لا حاجة إلى نظام فوترة في الشهر الأول؛ الحاجة إلى ألّا تكون البيانات
مفقودة حين يُبنى ذلك النظام.&lt;/p&gt;
&lt;h2 id=&quot;ما-الذي-يمكن-تأجيله-فعلاً&quot;&gt;ما الذي يمكن تأجيله فعلاً&lt;/h2&gt;
&lt;p&gt;ليس كل شيء في تعدّد المستأجرين قراراً مبكراً، ومعرفة ما يمكن تأجيله تحرّر وقتاً
للقرارات الأربعة السابقة:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;السِّمات البصرية والتخصيص&lt;/strong&gt; — يمكن أن تبدأ بحدّها الأدنى وتتوسّع، ما دامت
إعدادات لا شيفرة تعمل لعميل واحد.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;لوحة الإدارة الذاتية للمستأجر&lt;/strong&gt; — يمكن أن تكون في البداية عملية يدوية تقوم بها
أنت، شرط أن تكون ممكنة دون عميل قاعدة بيانات.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;العزل على مستوى البنية التحتية&lt;/strong&gt; — إن صُمِّم الوصول إلى البيانات بمرشّح مركزي
من البداية، بقي الانتقال إلى عزل أقوى ممكناً لاحقاً لعميل واحد يشترطه.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;الخيط الجامع بين الأربعة الأولى أنها تلمس كل شيء، وبين هذه الثلاثة أنها موضعية.&lt;/p&gt;
&lt;h2 id=&quot;الخلاصة&quot;&gt;الخلاصة&lt;/h2&gt;
&lt;p&gt;القرارات الأربعة — أين تقف على طيف العزل، وكيف يُحدَّد المستأجر في كل مسار بما فيه
ما لا يحمل جلسة، وهل الهوية منفصلة عن العضوية، وهل الاستهلاك مقيس — تُحسم قبل أول
خاصية أو تُدفع كلفتها إعادةَ بناء لاحقاً. وثلاثتها الأولى بالذات لا تظهر أعراضها
مبكراً: النظام يعمل تماماً بعميل واحد، ثم بعشرة، ثم يظهر العميل الذي يكسر الافتراض.&lt;/p&gt;
&lt;p&gt;هذا ما أبنيه للعملاء، وما أُشغّله بنفسي في مَكّوك، وما أُدرّسه للفرق الهندسية.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;الخدمة: &lt;a href=&quot;/ar/services/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%85%D9%86%D8%B5%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D9%83%D8%AE%D8%AF%D9%85%D8%A9&quot;&gt;تطوير منصّات البرمجيات كخدمة&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;المادة المرتبطة:
&lt;a href=&quot;/ar/blog/%D8%AA%D9%88%D8%B3%D9%8A%D8%B9-%D9%85%D9%86%D8%B5%D8%A9-saas&quot;&gt;كيف تُوسّع منصّة SaaS دون إعادة بنائها&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;إن كان فريقك هو من يحتاج هذه المادة: &lt;a href=&quot;/ar/services/%D8%AA%D8%AF%D8%B1%D9%8A%D8%A8-%D8%A7%D9%84%D9%81%D8%B1%D9%82&quot;&gt;تدريب الفرق&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item></channel></rss>