مقابلة تصميم الأنظمة: صمّم Netflix
«صمّم Netflix» مسألة يغلب عليها القراءة، وتحكمها حقيقة واحدة: تقديم الفيديو على نطاق عالمي هو مسألة توصيل محتوى وتخزين أكثر بكثير من كونه مسألة حوسبة. يريد القائم بالمقابلة أن يراك تفصل بين مستوى التحكم (التصفح، البحث، التوصيات) ومستوى البيانات (بث البايتات فعليًا) وتفكّر في كيفية تسليم بيتابايتات من البيانات قريبًا من المستخدمين.
تعامل معها بالترتيب: وضّح المتطلبات، قدّر الحجم، صمّم خط أنابيب الرفع/إعادة الترميز، ثم مسار التشغيل عبر شبكة CDN، واختم بمعدل البت التكيفي والمقايضات. يتبع الشرح أدناه هذه البنية لتتمرّن على الاستدلال، لا على حفظ بنية معينة.
1. توضيح المتطلبات
افصل بين المتطلبات الوظيفية وغير الوظيفية وحدّد النطاق بدقة. الجزء الأساسي هو: يتصفح المستخدمون كتالوجًا ويشاهدون الفيديو بسلاسة عبر أجهزة وشروط شبكة مختلفة.
- وظيفي: تصفح/البحث في الكتالوج، بدء التشغيل، جودة تكيفية، الاستمرار من حيث توقفت، أجهزة متعددة.
- غير وظيفي: توافر مرتفع للغاية، كمون بدء منخفض، تشغيل سلس (بلا تقطّع)، انتشار عالمي.
- خارج النطاق (صرّح بذلك): التفاصيل الداخلية لتعلّم الآلة في التوصيات، الفوترة، تفاصيل DRM — اذكرها ثم أجّلها.
2. تقدير الحجم
هذه الأرقام تبرر تصميمًا يعتمد على CDN أولًا. افترض مئات الملايين من المشتركين وملايين كثيرة من التدفقات المتزامنة في وقت الذروة. يستهلك تدفق واحد عدة ميغابت في الثانية، فيصل الإخراج الإجمالي إلى عشرات التيرابت في الثانية — وهو أمر يستحيل تقديمه من عدد قليل من مراكز البيانات المركزية، مما يحفّز فورًا التخزين المؤقت عند الحافة.
3. خط أنابيب الاستيعاب وإعادة الترميز
تُعالَج النسخ الأصلية المرفوعة دون اتصال، لا على مسار التشغيل. يُعاد ترميز كل عنوان إلى نسخ كثيرة (renditions) — دقة ومعدلات بت متعددة — ويُقسَّم إلى أجزاء صغيرة (بضع ثوانٍ لكل منها) للبث التكيفي.
- مزرعة إعادة الترميز: تحوّل النسخة الأصلية إلى نسخ H.264/H.265/AV1 بمعدلات بت متعددة؛ وهذا عمل دفعي قابل للتوازي بسهولة شديدة.
- التقطيع والتعبئة: تقسّم كل نسخة إلى أجزاء قصيرة مع بيان (HLS/DASH) يصفها.
- تخزّن المخرجات في تخزين الكائنات (من نوع S3) كمصدر للحقيقة، ثم تدفع المحتوى الشائع إلى الحافة.
4. شبكة CDN ومسار التشغيل
يُقدَّم التشغيل من الحافة لا من المصدر. تُخزَّن أجزاء الفيديو مؤقتًا في عقد CDN قريبة جسديًا من المستخدمين (تشغّل Netflix أجهزة Open Connect الخاصة بها داخل مزوّدي خدمة الإنترنت). يجلب العميل البيان، ثم يسحب الأجزاء من أقرب عقدة حافة صحية.
مستوى التحكم (الكتالوج، البحث، ملفات المستخدمين، «الاستمرار في المشاهدة») هو مجموعة منفصلة من خدمات API عديمة الحالة مدعومة بقواعد بيانات وذاكرات تخزين مؤقت خاصة بها — يعيد البيانات الوصفية ورابط البيان فقط، وهو منفصل تمامًا عن تسليم البايتات الثقيل.
- ذاكرة التخزين المؤقت للحافة (CDN/Open Connect): تقدّم الغالبية العظمى من البايتات؛ تضع العناوين الشائعة مسبقًا حسب المنطقة قبل حدوث الطلب.
- تخزين المصدر: تخزين كائنات يدعم حالات عدم إيجاد البيانات في ذاكرة التخزين المؤقت.
- واجهات برمجة مستوى التحكم: الكتالوج، تفويض التشغيل، العلامات المرجعية — حمولات صغيرة، توسّع أفقي، مع ذاكرة تخزين مؤقت أمامها.
5. بث معدل البت التكيفي
التشغيل السلس تحت شبكات متغيرة يأتي من العميل، لا من الخادم. يراقب المشغّل الإنتاجية ومستوى المخزن المؤقت ويبدّل جودة الجزء صعودًا أو نزولًا بين الأجزاء باستخدام قائمة النسخ في البيان — معدل بت أعلى على الاتصالات السريعة، وأقل لتجنّب التقطّع على الاتصالات البطيئة.
6. مقايضات يجب التصريح بها
اختم بذكر التوترات التي يستمع إليها القائم بالمقابلة: تكلفة تخزين حساب كل النسخ مسبقًا مقابل كمون إعادة الترميز الفوري (تحسب Netflix مسبقًا — التخزين أرخص من تأخير البدء)؛ تخزين كل شيء مؤقتًا مقابل تخزين الشائع فقط عند الحافة (لا يمكن لكتالوج الذيل الطويل أن يعيش كاملًا في كل حافة)؛ والاتساق القوي مقابل الاتساق النهائي لبيانات مستوى التحكم مثل «الاستمرار في المشاهدة» (الاتساق النهائي مناسب). ذكر هذه الأمور هو ما يجعل الإجابة على مستوى أعلى.
تدرّب على تصميم نظام Netflix بمساعدة فورية
يمكن لـمساعد مقابلات تصميم الأنظمة من Natively أن يحافظ على تنظيمك خلال جولة مباشرة — يقترح البُعد التالي الذي يجب تغطيته ويعرض المقايضات في الوقت الفعلي، كل ذلك على جهازك الخاص.
