
أعمل في مجال الاستعانة بمصادر خارجية ، حيث يمكن وصف المبدأ الرئيسي بعبارة "بيع الكثير ، افعل ذلك بسرعة". كلما أسرعنا ، زاد كسبنا. ومن المرغوب فيه أن كل شيء لا يعمل على العكازات والمجازر ، ولكن بمستوى مقبول من الجودة. سأخبر عن تجربتي عندما كان من الضروري في وقت قصير تطوير خدمة ترويجية.
المقدمة: حساب جذر على AWS ، لا توجد قيود على اختيار كومة التكنولوجيا ، خلفية واحدة ، وشهر واحد للتنمية.
الهدف: تنفيذ خدمة ترويجية حيث يقوم المستخدمون بتحميل واحد إلى أربعة مقاطع فيديو تدوم من واحد إلى أربع ثوان ، ثم يتم تضمينها في تسلسل الفيديو الأصلي. أي أننا نستبدل شظايا الفيديو الأصلي (شاشة توقف السلسلة) بأخرى مخصصة. ميزة القاتل - القدرة على إرسال اسمك ، والذي في شكل نص جميل يتراكب مع جزء الفيديو المقابل. بالإضافة إلى ذلك ، يمكن للمستخدم تحميل مقطع فيديو من 4 إلى 30 ثانية ، وسيتم خفضه على جانب الخدمة إلى 4 ثوانٍ.
قرار
كتابة خدمة الدراجة الخاصة بك في مثل هذا الإطار الزمني الضيق هو فكرة. بالإضافة إلى ذلك ، لكي تتعامل الخدمة مع الأحمال وأي شخص يريد استلام الفيديو المطلوب ، ستكون البنية الأساسية مطلوبة. ويفضل أن لا يكون سعرها من الطائرة. لذلك ، نركز على الفور على الحلول الجاهزة بأقل قدر من التخصيص.
الحل القياسي للعمل مع الفيديو هو FFmpeg ، وهي أداة مساعدة لوحدة تحكم مشتركة تسمح لك ، من خلال الوسائط ، بتشريح الصوت وتراكبه. الشيء الصغير هو كتابة غلاف ووضعه موضع التنفيذ. نكتب نموذجًا أوليًا يجمع مقطعين فيديو و ... تبدأ المتعة. يجب أن تدور المكتبة الموجودة على .NET Core 2 على أي جهاز افتراضي ، لذلك نأخذ مثيل AWS EC2 وسيعمل كل شيء
FFmpeg ، على الرغم من أنه يبسط المهمة ، ولكن للحصول على حل فعال فعلاً تحتاج إلى إنشاء مثيل EC2 ، قم بتصميم بنية أساسية للشبكة ، بما في ذلك Load Balancer. مهمة النشر البسيطة من نقطة الصفر معقدة للغاية ، وتبدأ البنية التحتية في طلب الأموال على الفور - يتم سحب مبلغ وقت التشغيل من حساب العميل كل ساعة.
لا تشتمل خدمتنا على عمليات التشغيل الطويل ، ولا تتطلب قاعدة بيانات علائقية كبيرة وجريئة ، وتتوافق تمامًا مع بنية الحدث مع سلسلة من مكالمات الخدمات الميكروية. يقترح الحل نفسه - يمكننا التخلي عن EC2 وتطبيق تطبيق بدون خادم حقيقي ، مثل Image Resizer القياسي القائم على AWS Lambda.
بالمناسبة ، على الرغم من الكراهية الواضحة لمطوري AWS لـ .NET ، فإنهم يدعمون .NET Core 2.1 كوقت تشغيل ، مما يوفر مجموعة كاملة من فرص التطوير.
والكرز على الكعكة - AWS يوفر خدمة منفصلة للعمل مع ملفات الفيديو - AWS Elemental MediaConvert.
جوهر العمل بسيط للغاية: نأخذ رابط S3 إلى الفيديو الصادر ، من خلال AWS Console ، .NET SDK أو JSON فقط اكتب ما نريد القيام به مع الفيديو واتصل بالخدمة. هو نفسه ينفذ قوائم الانتظار لمعالجة الطلبات الواردة ، ويقوم بإلغاء تحميل النتيجة في S3 ، والأهم من ذلك أنه ينشئ حدث CloudWatch لكل تغيير في الحالة. هذا يسمح لنا بتنفيذ مشغلات lambda لاستكمال معالجة الفيديو.
تبدو النسخة النهائية للعمارة مثل هذايتم وضع الخلفية بأكملها في اثنين من lambdas. آخر هو لتناوب أشرطة الفيديو العمودية ، لأنه لا يمكن القيام بهذا العمل دفعة واحدة.
تم تراكب النص من خلال تقديم صورة شفافة أثناء الطيران وفقًا لقرار الفيديو. مكتبة SixLabors.ImageSharp مثالية لهذا الغرض ، وتجاوز مشاكل تسرب الذاكرة بشكل أنيق دورة حياة لامدا.
سيتم وضع الجزء الأمامي في شكل تطبيق SPA المكتوب بلغة JS وتجميعه عبر الصلصال في سلة S3 العامة. لتنزيل مقاطع الفيديو نفسها ، لا نحتاج إلى أي كود خادم - فقط افتح نقاط REST النهائية التي يوفرها لنا S3. الشيء الوحيد - لا تنس أن تكوين السياسات و CORS.
المزالق
- AWS MediaConvert لسبب غير معروف يفرض الصوت فقط على كل مقطع فيديو بشكل فردي ، ونحن بحاجة إلى أغنية قوية من شاشة التوقف بأكملها.
- تحتاج مقاطع الفيديو العمودية إلى معالجتها بشكل منفصل. AWS لا يحب خطوط سوداء ويضع بكرات عند 90 درجة.
حلبة سهلة
على الرغم من جمال Stateless ، تحتاج إلى متابعة ما يجب القيام به مع الفيديو: صوت غراء أو تراكب على تسلسل فيديو انتهى بالفعل. لحسن الحظ ، تدعم MediaConvert نقل البيانات التعريفية من خلال Job ، ويمكننا دائمًا تطبيق علامة بسيطة مثل "isMasterSoundJob" ، مع تحليل هذه البيانات الوصفية في أي مرحلة.
Serverless يجعل NoOps يعمل بشكل جيد - وهو نهج يفترض الحاجة إلى فريق منفصل مسؤول عن البنية التحتية للمشروع. لذلك ، كان الأمر بسيطًا - فنحن ننشر الحل على AWS دون مشاركة مسؤولي النظام ، الذين لديهم دائمًا ما يقومون به.
وبغية تسريع كل شيء ، نقوم تلقائيًا بتطبيق النص البرمجي للنشر على AWS CloudFormation قدر الإمكان ، مما يسمح لك بنشر زر واحد مباشرةً من VS. نتيجةً لذلك ، يسمح لك الملف الذي يحتوي على 200 سطر من التعليمات البرمجية بتطبيق حل جاهز ، على الرغم من أن بناء جملة CloudFormation يمكن أن يكون صادماً في العادة.
في المجموع
Serverless ليس حلا سحريا. لكنه سيسهل بشكل كبير الحياة في المواقف ذات ثلاثة حدود: "موارد محدودة - وقت قصير - القليل من المال".
خصائص التطبيقات المناسبة للخادم- دون عمليات طويلة الأمد. من الصعب بوابة API الحد - 29 ثانية ، من الصعب الحد امدا - 15 دقيقة ؛
- وصفها الحدث يحركها العمارة.
- ينقسم إلى مكونات فضفاضة إلى حد ما حسب نوع الخدمية ؛
- لا يتطلب الكثير من العمل مع حالته ؛
- مكتوب في. NET الأساسية. للعمل مع .NET Framework ، ستظل بحاجة إلى عامل ميناء على الأقل مع وقت التشغيل المناسب.
فوائد النهج بدون خادم- يقلل من تكاليف البنية التحتية ؛
- يقلل من تكلفة تقديم الحل ؛
- التدرجية السيارات
- التنمية في طليعة التقدم التكنولوجي.
العيوب ، على سبيل المثال ملموسة- تتبع الموزعة وقطع الأشجار - حل جزئي من خلال AWS X-Ray و AWS CloudWatch ؛
- تصحيح غير مريح؛
- بداية باردة في غياب الحمل ؛
- AWS واجهة المستخدم العدائية هي مشكلة عالمية :)