كيف نُصمم بنية قابلة للتوسع
خمسة دروس من بناء منصات تخدم آلاف المستخدمين — دون أن نُفرط في التصميم من اليوم الأول.
كل شهر نُقابل فريقًا بنى نظامًا بأدوات «توسّع سحابي» — Kubernetes، ميكروسيرفيسز، صفوف رسائل — ثم اكتشف أن المستخدمين الفعليين كانوا أقل من ألف. التعقيد لم يحلّ مشكلة؛ صنع مشاكل جديدة.
درسنا الأول في بناء أنظمة قابلة للتوسع بسيط: لا تبنِ للتوسع الذي لا يحدث. ابنِ للتوسع التالي، ثم الذي بعده، ثم الذي بعده.
١. ابدأ بقاعدة بيانات واحدة
حتى اليوم، Postgres وحيد على آلة متوسطة الحجم يستطيع خدمة مئات آلاف المستخدمين يوميًا. قبل أن تُقسّم البيانات أو تُضيف طبقة تخزين مؤقت، اسأل: هل فعلًا نحتاج ذلك؟ في ٩ مشاريع من أصل ١٠، الإجابة لا.
٢. الملف الوحيد هو صديقك
الميكروسيرفيسز لم تُحلّ مشكلة تعقيد الكود — نقلت المشكلة إلى تعقيد الشبكة. في البدايات، خدمة واحدة بقوة تعمل أفضل من عشر خدمات بضعف. عندما تبدأ جزء من النظام في الحاجة إلى دورة نشر مختلفة، قُم بفصله — وليس قبل ذلك.
قسّم النظام عندما يؤلمك أنه غير مُقسّم. ليس قبل ذلك.
٣. القياس قبل التحسين
حدسك عن مكان البطء في النظام خاطئ ٧٠٪ من الوقت. ضع أدوات القياس منذ اليوم الأول: p95 و p99، وقت الاستجابة بالنقطة النهائية، استعلامات قاعدة البيانات البطيئة. ثم حسّن ما يُظهر الرقم فعلًا.
٤. التخزين المؤقت حل، وليس هروبًا
عندما يكون هناك استعلام بطيء، الرغبة الأولى هي إضافة Redis أمامه. لكن ٨٠٪ من الاستعلامات البطيئة يمكن إصلاحها بإضافة فهرس مناسب أو إعادة صياغة الاستعلام. التخزين المؤقت طبقة إضافية تُعقّد حياتك — لا تُضفها حتى تستحقها.
٥. التوسع الأفقي آخر خيار
قبل أن تُشغّل ١٠ نُسخ من خدمتك، جرّب: آلة أكبر، استعلام أفضل، فهرس مفقود، اتصال قاعدة بيانات مُعاد استخدامه. التوسع الأفقي يُضاعف تكلفتك وتعقيدك. اجعله الخيار الأخير، لا الأول.
خلاصة
أفضل بنية قابلة للتوسع هي التي لا تحتاج إلى التوسع حتى تستحقه. ابدأ بسيطًا. قِس. وسّع عند الحاجة الفعلية، بالخطوة التالية لا الخطوة النهائية. المنتجات العظيمة نادرًا ما تموت من قلة البنية — لكنها كثيرًا ما تموت من فرط التعقيد قبل أن تصل إلى أول ألف مستخدم.

