أساسيات مقابلة تصميم الأنظمة
دورة عملية لإتقان خارطة الطريق والتقديرات وقابلية التوسع وقواعد البيانات وواجهات البرمجة والخدمات المصغرة والموثوقية في مقابلات تصميم الأنظمة.
ما ستتعلمه
- شرح خارطة طريق مقابلة تصميم الأنظمة
- تقدير QPS وسعة التخزين بحسابات بسيطة
- تطبيق موازنة الحمل والتخزين المؤقت وCDN لتوسيع الخدمات
- مقارنة قواعد البيانات والتقسيم والاتساق باستخدام CAP
- تصميم واجهات وخدمات مصغرة وقوائم رسائل وأنظمة موثوقة قابلة للمراقبة
قبل أن تبدأ
- معرفة أساسية بالبرمجة
- إلمام بـ HTTP وواجهات البرمجة وقواعد البيانات
- لا حاجة لخبرة سابقة في مقابلات تصميم الأنظمة
درس 1 خارطة طريق مقابلة تصميم الأنظمة
مقابلة تصميم الأنظمة تقيس قدرتك على تحويل متطلب واسع إلى معمارية مبررة. ابدأ بتحديد المتطلبات الوظيفية وغير الوظيفية: المستخدمون، العمليات الرئيسية، زمن الاستجابة المتوقع، التوافر، وحجم الحركة قبل رسم أي مكوّن.
استخدم خارطة طريق قابلة للتكرار: التوضيح، التقدير، تصميم المكونات، التعمق، ثم الملخص. يقدر القائمون على المقابلة طرح الأسئلة حول القيود وشرح المقايضات بصوت عالٍ بدلاً من حفظ المخططات.
يبدأ التقدير عادة بحسابات تقريبية: قدّر المستخدمين النشطين وQPS وسعة التخزين. على سبيل المثال، مليون مستخدم يومي مع 20 طلباً لكل مستخدم تعطي نحو 20 مليون طلب ومتوسط يقارب 230 QPS.
انتقل من الطلبات إلى الموارد: احسب القراءات والكتابات ومتوسط حجم السجل وعدد أيام الاحتفاظ لتقدير السعة بوحدات GB أو TB. قرّب للأعلى واذكر هامش النمو.
اختتم بالأولويات: حدد عنق الزجاجة الأكثر احتمالاً واقترح التحسين الأكبر تأثيراً. تُظهر الإجابة الجيدة الوضوح والتواصل والحكم الهندسي، وليس المخطط الأكثر تعقيداً.
نصيحة تدريبية خارطة طريق مقابلة تصميم الأنظمة: راجع هذا الدرس في جلسات قصيرة يوميًا. بعد كل تمرين، اذكر القاعدة أو الخطوة التي استخدمتها؛ إذا لم تستطع، راجع الموضوع قبل المتابعة. الاستمرارية تثبت المادة أفضل من جلسة طويلة.
مثال
سؤال مقابلة: "صمّم خلاصة شبكة اجتماعية لمئة مليون مستخدم". الجواب: وضح حالة الاستخدام، وقدّر QPS، وافصل القراءات عن الكتابات، واقترح تخزيناً مؤقتاً للخلاصة، ثم حدد استراتيجية التخزين قبل اختيار التقنيات.
قرار محدد: استخدم fan-out لكتابة الخلاصة في التخزين المؤقت للمتابعين النشطين، واترك القراءة عند الطلب للمستخدمين غير النشطين لتقليل الكتابات دون التضحية بزمن الاستجابة.
أعد قراءة السؤال قبل الانتهاء وتأكد من معنى إجابتك.
درس 2 التوسع، موازنة الحمل، والتخزين المؤقت
قابلية التوسع هي القدرة على خدمة حركة أكبر دون تدهور التجربة. التوسع الرأسي يضيف موارد إلى خادم واحد، بينما التوسع الأفقي يضيف نسخاً إضافية ويشكل غالباً أساس الأنظمة الموزعة.
موازن الحمل يوزع الحركة بين نسخ سليمة ويجري فحوصات الصحة لاستبعاد العقد الفاشلة. يمكن استخدام خوارزميات مثل round-robin أو least connections أو consistent hashing حسب الحالة.
التخزين المؤقت يحفظ النتائج المكلفة قرب المستهلك. مخازن الذاكرة مثل Redis أو Memcached تقلل حمل قاعدة البيانات، بينما شبكة توصيل المحتوى (CDN) تخزن المحتوى الثابت في عقد طرفية لتقليل زمن الاستجابة.
اختر الاستراتيجية بعناية: cache-aside يحمّل عند الطلب، وwrite-through يكتب في المخزن أولاً، بينما write-back يؤجل الكتابة مع احتمال فقدان البيانات. حدد سياسة انتهاء الصلاحية وخطة للإبطال.
المفتاح هو القياس قبل التحسين: حدد عنق الزجاجة، وطبّق التخزين المؤقت حيث تكون نسبة القراءة/الكتابة عالية، واختبر الأثر بحركة حقيقية.
نصيحة تدريبية التوسع، موازنة الحمل، والتخزين المؤقت: راجع هذا الدرس في جلسات قصيرة يوميًا. بعد كل تمرين، اذكر القاعدة أو الخطوة التي استخدمتها؛ إذا لم تستطع، راجع الموضوع قبل المتابعة. الاستمرارية تثبت المادة أفضل من جلسة طويلة.
مثال
سؤال مقابلة: "متى نستخدم CDN بدلاً من تخزين مؤقت في التطبيق؟" الجواب: يقدم CDN المحتوى الثابت والصور قرب المستخدم، بينما يخزن التخزين المؤقت للتطبيق نتائج الاستعلامات الديناميكية ويقلل حمل المصدر.
قرار محدد: بالنسبة إلى كتالوج كثير القراءة، استخدم cache-aside بانتهاء صلاحية قصير وconsistent hashing لتوزيع المخزن دون إبطال الكتلة كلها عند كل كتابة.
أعد قراءة السؤال قبل الانتهاء وتأكد من معنى إجابتك.
درس 3 قواعد البيانات، التقسيم، والاتساق
اختيار قاعدة البيانات يعتمد على نموذج البيانات والعمليات السائدة. القواعد الارتباطية تستخدم SQL ومخططات صارمة وخواص ACID؛ أما قواعد NoSQL فتقدم مخططات مرنة وتوسعاً أفقياً وفق نموذجها: مستندات، مفتاح-قيمة، أعمدة، أو رسوم بيانية.
التقسيم (sharding) يقسم البيانات إلى أجزاء موزعة باستخدام مفتاح مثل user_id. مفتاح التقسيم الجيد يوزع الحمل بتوازن ويتجنب الاستعلامات التي تعبر عدة أجزاء.
مبرهنة CAP تقول إن النظام الموزع يختار اثنين من ثلاثة: الاتساق، التوافر، وتحمل الانقسام. عملياً يُختار عادة CP أو AP لأن الشبكة قد تنقطع.
للاتساق درجات: قوي، ونهائي، وقراءة كتاباتك. النسخ المتزامن يعطي اتساقاً قوياً بزمن انتظار أعلى؛ النسخ غير المتزامن أسرع لكنه قد يقدم بيانات قديمة.
اجمع بين الأنماط: نسخاً للقراءة لتوسيع SELECT، وفهارس للاستعلامات المتكررة، وdenormalization للتقارير. وثّق مقايضات كل قرار.
نصيحة تدريبية قواعد البيانات، التقسيم، والاتساق: راجع هذا الدرس في جلسات قصيرة يوميًا. بعد كل تمرين، اذكر القاعدة أو الخطوة التي استخدمتها؛ إذا لم تستطع، راجع الموضوع قبل المتابعة. الاستمرارية تثبت المادة أفضل من جلسة طويلة.
مثال
سؤال مقابلة: "لماذا تمنع مبرهنة CAP الاتساق والتوافر معاً أثناء انقطاع الشبكة؟" الجواب: عندما تنقسم الشبكة لا يعرف العقدة هل تلقت عقدة أخرى الكتابة؛ فيمكن رفض العملية (CP) أو الاستجابة ببيانات قديمة محتملة (AP).
قرار محدد: بالنسبة إلى سلة التسوق فضّل التوافر مع اتساق نهائي؛ وبالنسبة إلى أرصدة البنوك فضّل الاتساق القوي حتى لو زاد زمن الاستجابة.
أعد قراءة السؤال قبل الانتهاء وتأكد من معنى إجابتك.
درس 4 واجهات REST، الخدمات المصغرة، وقوائم الرسائل
واجهات REST تمثل الموارد بعمليات مثل GET وPOST وPUT وDELETE. لكل مورد رابط واضح، واستجابات برمز حالة، ودون حالة (stateless): لا يحفظ الخادم سياق جلسة العميل.
الخدمات المصغرة تقسم النظام إلى خدمات صغيرة قابلة للنشر بشكل مستقل وذات حدود مجال واضحة. تتواصل عبر HTTP أو RPC أو قوائم الرسائل، ويمكن لكل فريق تطوير خدمته على حدة.
قوائم الرسائل تفصل المنتجين عن المستهلكين، وتمتص الذروات، وتسمح بإعادة المحاولة. خدمات مثل RabbitMQ أو Kafka أو SQS توفر تسليماً بدرجات مختلفة من الترتيب والمتانة.
إدارة الواجهات تشمل إصدارات وrate limiting والمصادقة والتوثيق. بوابة API مركزية تدير المصادقة والتوجيه والقياس قبل وصول الطلب إلى الخدمات.
بالنسبة إلى التطوير والتشغيل، أتمت CI/CD وانشر كل خدمة على حدة واستخدم فحوصات الصحة لتوجيه الحركة. فضّل عقود واجهات صريحة حتى لا تكسر التغييرات المستهلكين.
نصيحة تدريبية واجهات REST، الخدمات المصغرة، وقوائم الرسائل: راجع هذا الدرس في جلسات قصيرة يوميًا. بعد كل تمرين، اذكر القاعدة أو الخطوة التي استخدمتها؛ إذا لم تستطع، راجع الموضوع قبل المتابعة. الاستمرارية تثبت المادة أفضل من جلسة طويلة.
مثال
سؤال مقابلة: "متى نستخدم قائمة رسائل بدلاً من استدعاء REST متزامن؟" الجواب: استخدم قائمة للعمل الذي يتحمل التأخير أو لذروات الحمل أو للعمليات التي تحتاج إعادة محاولة؛ واستخدم REST عندما يحتاج العميل استجابة فورية.
قرار محدد: لإرسال البريد، تنشر خدمة الطلبات حدثاً في Kafka وتستهلكه خدمة الإشعارات، فلا يحجب فشل البريد عملية الشراء.
أعد قراءة السؤال قبل الانتهاء وتأكد من معنى إجابتك.
درس 5 الموثوقية، المراقبة، والأمان في الأنظمة
الموثوقية تُصمَّم وتُقاس. حدد أهدافاً مثل SLO (هدف مستوى الخدمة) وSLI (مؤشر مستوى الخدمة) وSLA (اتفاقية مستوى الخدمة) لتعرف متى يحقق النظام وعده.
قلل الأعطال بـالتكرار: نسخ احتياطية ومناطق توافر وتحويل الفشل. اقبل أن المكونات ستفشل، وصمم تدهوراً تدريجياً مع timeouts وretries بتراجع تدريجي وقواطع الدارة.
المراقبة تجمع المقاييس والسجلات والتتبعات. مقاييس مثل زمن الاستجابة ومعدل الأخطاء والإشباع تكشف الاتجاهات؛ والتتبعات الموزعة تساعد في تحديد مكان التأخير.
بالنسبة إلى الأمان، طبّق الدفاع في العمق: مصادقة، وتفويضاً بأقل صلاحية، وتشفيراً أثناء النقل وعند التخزين، وحماية الأسرار. حدّث التبعيات ودقّق الوصول.
إدارة الحوادث تحتاج أدلة تشغيل وتنبيهات قابلة للتنفيذ ومراجعات بعد الحادث. تدرب على الاسترداد: استعادة النسخ الاحتياطية، وتحويل الفشل، واختبارات الفوضى للتحقق من افتراضات التصميم.
نصيحة تدريبية الموثوقية، المراقبة، والأمان في الأنظمة: راجع هذا الدرس في جلسات قصيرة يوميًا. بعد كل تمرين، اذكر القاعدة أو الخطوة التي استخدمتها؛ إذا لم تستطع، راجع الموضوع قبل المتابعة. الاستمرارية تثبت المادة أفضل من جلسة طويلة.
مثال
سؤال مقابلة: "خدمة تظهر معدل أخطاء مرتفعاً لعشر دقائق؛ ماذا تفحص أولاً؟" الجواب: راجع مقاييس زمن الاستجابة والإشباع، وافحص أحدث نسخة منشورة وسجلات الأخطاء، ثم قرر بين rollback أو تخفيف جزئي.
قرار محدد: حدد SLO بتوافر 99.9% وميزانية أخطاء للسماح بالنشر، واجعل التنبيهات مبنية على تلك الميزانية وليس فقط على حدود ثابتة.
أعد قراءة السؤال قبل الانتهاء وتأكد من معنى إجابتك.