التصاميم · فصل ١٤

تصميم YouTube

Upload · transcoding · CDN · streaming · DAG
🎯 الهدف: ترفع فيديو، يتحول لصيغ كتير، ويتشغّل من أقرب CDN من غير ما اليوزر يستنى التحميل كله.

مسارين كبار

رفع الفيديو، وتشغيله. واستخدام خدمات جاهزة (blob storage و CDN) قرار ذكي بدل ما تبني كل حاجة من الصفر.

الرفع

بالتوازي: الـ metadata (العنوان والوصف والحالة) بتتحدث في الـ DB والكاش، وبعد التحويل بيتبعت إشعار “الفيديو جاهز” عن طريق queue.

التشغيل

الفيديو بيتشغّل من أقرب CDN بـ streaming — يعني مش لازم يتحمّل كله الأول — عن طريق بروتوكولات زي MPEG-DASH و HLS.

تحسينات

النوعالفكرة
Speedقسّم الفيديو chunks وارفعها بالتوازي. لو النت فصل، كمّل من مكانك. ومراكز رفع قريبة من اليوزر
SafetyPre-signed URL عشان اليوزر المصرّح له بس يرفع مباشرة على الـ storage. وحماية المحتوى بـ DRM أو تشفير أو watermark
Costالـ CDN غالي. الفيديوهات المشهورة بس على الـ CDN، والباقي من سيرفراتك. الفيديوهات القليلة المشاهدة ممكن تتحوّل عند الطلب، والمحتوى المحلي في CDN الريجن بتاعه
ErrorsRecoverable (فشل شبكة) → retry. Non-recoverable (صيغة بايظة) → وقّف ورجّع error لليوزر

Checklist الفيديو

🧠 اختبر نفسك
١) ليه نعمل transcoding مش نسيّب الفيديو زي ما هو؟
عشان يشتغل على شاشات وسرعات نت مختلفة، من 360p لـ 4K.
٢) إيه الـ DAG هنا؟
رسمة مهام: صوت وفيديو وثامبنيل ووترمارك يشتغلوا بالتوازي وبعدين يتجمعوا.
٣) ليه streaming مش تحميل الملف كله؟
عشان اليوزر يبتدي يتفرج فورًا، ومتدفعش نقل فيديو ممكن يقفله بعد دقيقة.
٤) فيديو اتشاف ١٠ مرات في السنة. تحطه على CDN؟
غالبًا لأ. الـ CDN غالي، فسيب القليل المشاهدة يتحول أو يتسحب عند الطلب.