غوص عميق في التصميم: Chat وNotifications وFeed
في هذا الدرس نتدرّب على الإجابة عن أسئلة المقابلات مثل: بناء chat، وfeed (قائمة تحديثات أصدقائك، كما في وسائل التواصل الاجتماعي)، وnotifications (الرسائل التي تظهر فجأة على هاتفك). نتحدّث بلغة بسيطة عن fanout (نشر التحديث نفسه إلى عدد كبير من الأشخاص دفعة واحدة، مثل رسالة جماعية)، وعن ordering (التر
System Design (تخطيط كيفية بناء برمجيات كبيرة تعمل) يشبه تخطيط مدينة: طرق تنقل حركة المرور، ومستودعات للتخزين، وإشارات مرور تدير الحِمل، وفرق صيانة تُصلح الأعطال — بحيث تستمرّ المدينة في العمل بسلاسة حتى في أكثر ساعات الذروة ازدحامًا.
- أنظمة Real-time وfeed
- السؤال الكلاسيكي الذي نتدرّب عليه في هذا الدرس: تصميم الأنظمة في الزمن الحقيقي (real-time) — chat، وfeed (قائمة تحديثات الأصدقاء)، وnotifications. نمرّ على fanout (نشر تحديث واحد إلى عدد كبير من الأشخاص دفعة واحدة)، وordering (الترتيب الذي تظهر به الرسائل)، وdelivery guarantees (التأكّد من وصول الرسالة)، وpush (دفع تنبيه إلى الهاتف).
- Trade-off
- Trade-off (مقايضة) هو اختيار واعٍ بين أمرين جيدين عندما لا يمكنك الحصول على كليهما بالكامل — تمامًا مثل الاختيار بين السريع والرخيص. هناك دائمًا ثمن، وفي المقابلة تقوله بصوت عالٍ للمُقابِل.
- مقياس تشغيلي
- رقم يوضّح ما إذا كان القرار يعمل فعلًا لدى المستخدمين الحقيقيين (في الإنتاج — المنظومة الحيّة). على سبيل المثال: latency (كم من الوقت يستغرق الحصول على إجابة)، وerror rate (نسبة الطلبات التي تفشل)، وqueue lag (كم من العمل تراكم في انتظار الدور)، أو cache hit ratio (كم مرّة كانت الذاكرة السريعة تعرف الإجابة مسبقًا).