ازاي Netflix بيـStream فيلم واحد لـ100 مليون يوزر في نفس اللحظه منغير ما يكراش او يقع؟
كان عندي تاسك في بروجيكت عندي في الشغل في حته ليها علاقه بالـ Attachments ف هي كانت بتترفع على AWS S3 Buckets ف انا كنت عايز افهم الحته دي عشان مش فاهم Cloud وانا مبحبش اقابل حاجه مفهمهاش واعديها كده، ف سرشت على اليويتوب لحد ما لاقيت واحد هندي عامل بروجيكت لنتفلكس وايه هي التيكنولوجي اللي ورا ستريم الافلام والمسلسلات لكل اليوزرز دول منغير ما السيرفر يقع ومنغير ما يحصل اي هاك
في الاول كده تخيل معايا ان في عندك فيلم 5 جيجا ومدته 3 ساعات
ازاي هتخليني اشوفه منغير ما اضطر احمله عندي وفي نفس الوقت ايه هي الداتا بيز اللي ممكن تشيل في Raw واحد فايل بالحجم ده؟
طب لو 10 افلام؟
طب لو 1000 فيلم؟
اكيد السيرفر هيقع والداتا بيز هتقع ولو موقعتش ف ده Cost$$ عالي جدا
فا ده هيخلينا نقابل مشكله اسمها SSQ
S -> Storage
وهي دي مشكله اننا منقدرش نsave فيديو بالحجم ده في اي داتا بيز لانه هيكون مكلف وهيوقع السيرفر
S -> Streaming
دلوقتي اليوزر عايز يتفرج على الفيلم منغير ما يحمله ف ازاي هيعمل كده؟
ايه التيكنولوجي اللي تخليه يعمل حاجه زي كده؟
Q -> Quality
دلوقتي اليوزرز سرعه النت عندهم مختلفه عن بعض ازاي نتفليكس بتـSwitch الكواليتي وتقللها لما النت يبتدي يبطئ؟
خلينا نمشي واحده واحده من اول ما الفايل دلوقتي عندي على الهارد ديسك وعايز استريمه..
في الاول انا محتاج اسيف الـ Metadata بتاعت الفيلم في مكان والفيلم نفسه في مكان وهنعرف كمان شويه ليه.. بس خلينا الاول نبقا عارفين اننا عندنا Microservice كل مهمتها اني هرفع عليها داتا الافلام والكاتيجوريز وكل فيلم تبع انهي كاتيجوري وما الى ذلك، حلو كده متفقين؟
اهو دي اول مايكروسيرفيس معانا في البروجيكت وهي content-service ومعمولها connect بـ MySQL داتا بيز، كل وظيفتها اني محتاج اسيف الميتا داتا فيها وعشان تـGenerate ليا ID للفيلم (وده اصلا اهم حاجه هنحتاجها اصلا)
خلصنا كده اول مايكروسيرفيس من الـ4
نيجي للتانيه بقا وهي video-service
دلوقتي احنا كريتنا الميتا داتا بتاعت الفيلم وعملنا الid بتاعه، ماشي وبعدين؟ فين الفيلم؟
المايكروسيرفيس دي هي الزبد كله هي والجايه
دلوقتي احنا اتفقنا اننا مش هنعرف نحط الفليم ده في داتا بيز لان مفيش اي Raw هيتسحمل الحجم ده كله ف احنا هنرفعه على الكلاود على حاجه اسمها S3 جوه AWS ودي عباره زي ما تقول كده انها الهارد ديسك بتاعك بس على الكلاود وهنكريت كده s3 key كده عشان نميز الفيلم ونديله زي الid بتاع الداتا بيز بس هيبقا بتاع الكلاود، حلوه كده؟
دلوقتي برضو معرفناش طب وبعدين ما احنا لسه عندنا نفس المشكله انا عايز استريم منغير ما احمل الفيديو كله برضو، فرقت ايه بقا لما احطه على كلاود ولا على اللابتوب بتاعي ما هي هي
هقولك هنا هيجي دور اهم مايكروسيرفيس عندنا هي اللي في التيكنولوجي اصلا اللي بتعمل قصه الستريم كله، ألا وهي encoding-service
ايه يا سيدي بقا قصه الانكودينج ده منغير اي لعبكه كتير
دلوقتي المايكروسيرفيس دي بتشتغل اول لما الفيديو بيترفع على طول على S3 عن طريق اننا بنناديها من video-service microservice عن طريق event من Kafka
ايه Kafka ده برضو؟
ده اللي بيخلي المايكروسيرفسيس تتواصل مع بعض، دلوقتي كل مايكروسرفيس دي تعتبر بروجيكت منفصل، ف انا ازاي هنادي على method من بروجيكت تاني غير اللي انا فيه؟ اكيد غير منطقي ف جاتلنا تيكنولوجي event messaging دي بكل بساطه بتحطها في كل المايكروسيرفسيس بتاعتك اللي هيتواصلو مع بعض وبتديها حاجه اسمها Topic وبتبعته للمايكروسيرفيس التانيه وهي هتنادي على الميثود اللي انت عايزها، حلو كده؟
دلوقتي بعد ما وصلنا للencoding-service ايه اللي بيحصل بقا؟
احنا بناخد الفيلم اللي على الs3 ده وبتبتدي التيكنولوجي بتاعتنا FFmpeg تقسمه chunks صغيره كل 10 ثواني فيديو صغير، يعني الفيلم الساعتين بيتحول ل chunks صغيره كل تشانك عباره عن 10 ثواني
طب ثانيه واحده هو الكواليتي فين في الموضوع ده؟
هقولك بقا ان الفيلم بيتقسم chunks وكل كواليتي بيتعملها فايل فيها التشانكس بتاعت الكواليتي دي، يعني كواليتي ال1080p بتتحط في فولدر لوحدها وال 720p في فولدر لوحدها
حلو جدا ودي خطوه جميله جدا
دلوقتي بقا جه دور اهم تيكنولوجي معانا وهي الـHLS
HTTP Live Streaming
هي دي يا باشا اللي لما بتدوس على الفيلم بتبتدي تديك اول 10 ثواني من الفيلم بتاعك ومش بس كده ده على حسب سرعه النت بتديك الكواليتي كمان ودي حاجه اسمها: Adaptive bitrate streaming
وفي خلال ما الفيلم شغال بتفضل تحمل هي ال10 ثواني اللي بعده وهكذا، عشان كده لما النت بتاعك بيبقا بطيئ بتلاقي الفيلم وقف، ده عشان سرعه النت مش كفايه انها تنزل الchunk الجايه
طب دلوقتي انا ازاي هشغل الفيلم، يعني فين لينك الفيلم في كل ده؟
هنا هيجي دور اخر مايكروسيرفيس معانا وهي streaming-service
دي يا باشا بتكريتلك لينك للستريم وبتديله انه يأكسباير خلال وليكن ساعه، ماهو لو مش بيأكسباير كده هتكون الداتا accessible لكل الناس وكمان اللينك ده بيبقا بتاعك انت بس بالداتا بتاعتك انت بس عشان محدش يقدر يفتحه من براوزر تاني لو مش بنفس اكونتك
واللينك ده بيتسيف في الcache بتيكنولوجي اسمها redis عن طريق اننا بنسيف اللينك فيها بحيث لما تعمل ريفريش ميضطرش كل شويه يكلم aws ياخد منه اللينك وبنخلي الاكسباير بتاعه اقل من اللينك بتاع الكلاود بحوالي 5 دقايق عشان لما ياكسباير في الكاش يقوم مكلم aws على طول ويكريتلك لينك جديد ويسيفه في الكاش، لانه لو معلمش كده بمجرد ما اللينك بتاعك ياكسباير الفيلم هيقفل في وشك وهتضطر تفتحه من الاول وجديد
وبس، طبعا الموضوع في تفاصيل كتيره جدا وانا رفعت الكود هنا:
https://t.co/rEwjOmczHg
وكمان عملت سكيتشينج ودوكيومينتينج كده للبروجيكت عشان تفهو الفلو منه برضو:
https://t.co/tDJxTnpwp4
@abs_WaleedM بيقولك مفيش غير ٦٠ مكان (او ٦ اماكن مش فاكر) في العالم كله بيعرض IMax 70mm
ومفيش منهم في مصر لا
فيه في المانيا وامريكا وشوية دول تانية كدا
امبارح كنت راكب اوبر وعدينا على قهوة فيها الماتش ف بنقول مين في النهائي وكدا قالي الارجنتين اكيد في النهائي، قلتله بس انجلترا قوية بردو مش خصم سهل
قالي لا هما هيكسبوا ميسي عشان الكلمة اللي قالها، قلتله قال ايه، قالي "دا قبل ماتش مصر قال لو كسبنا هتبرع لاخواتي في اسرائيل"
@abs_WaleedM دلوقتي بشكل كامل الـ how بقى اسهل ما يمكن
لكن سؤال why بياخد كل مجهودك
عندنا بالفعل فريق الـ product بدأ يعمل demos وخلافه لكن ستيل لا غنى عن الـ software engineer في الـ process
أكونت الgmail و القناة اللي أختي عاملاها ع اليوتيوب اتهكرو.. الهاكر عمل ٢٠ محاولة و نجح في واحدة و غير كل أرقام الrecovery ... حد يعرف نعمل إيه غير صفحة الrecovery بتاعت gmail ؟