رویکرد بدون سرور برای توسعه سریع یک سرویس ویدیویی کارآمد

رویکرد بدون سرور برای توسعه سریع یک سرویس ویدیویی کارآمد

من در برون سپاری کار می کنم، جایی که اصل اصلی را می توان با عبارت «بفروش زیاد، سریع انجامش بده» توصیف کرد. هرچه سریعتر این کار را انجام دهیم، درآمد بیشتری کسب خواهیم کرد. و، مطلوب است که همه چیز نه روی چوب زیر بغل، بلکه با سطح کیفی قابل قبولی کار کند. من در مورد تجربه خود در زمانی که لازم بود یک سرویس تبلیغاتی در مدت زمان کوتاهی توسعه دهم به شما خواهم گفت.

داده شده: حساب ریشه در AWS، بدون محدودیت در انتخاب پشته فناوری، یک باطن و یک ماه برای توسعه.

چالش: یک سرویس تبلیغاتی را پیاده سازی کنید که در آن کاربران از یک تا چهار ویدیو به مدت یک تا چهار ثانیه آپلود می کنند که سپس در مجموعه ویدیوهای اصلی جاسازی می شوند.

تصمیم

نوشتن سرویس دوچرخه خود در این مدت کوتاه ایده خوبی نیست. علاوه بر این، برای اینکه سرویس بتواند از پس بار آن برآید و همه بتوانند ویدیوی مورد نظر را دریافت کنند، زیرساخت لازم است. و ترجیحا نه با برچسب قیمت از هواپیما. بنابراین، ما بلافاصله بر روی راه حل های آماده با حداقل سفارشی سازی تمرکز می کنیم.

راه حل استاندارد برای کار با ویدئو، FFmpeg است، یک ابزار کنسول بین پلتفرمی که از طریق آرگومان‌ها، به شما امکان می‌دهد صدا را برش داده و اوردوبال کنید. تنها کاری که باید انجام دهید این است که یک لفاف بنویسید و آن را در زندگی آزاد کنید. ما یک نمونه اولیه می نویسیم که دو ویدیو را به هم می چسباند و ... سرگرمی شروع می شود. این کتابخانه مبتنی بر NET Core 2 است، باید روی هر ماشین مجازی اجرا شود، بنابراین ما یک نمونه AWS EC2 می گیریم و همه چیز کار خواهد کرد.

متن پنهاننه، کار نخواهد کرد
.
اگرچه FFmpeg کار را ساده می کند، برای یک راه حل واقعاً کارآمد باید یک نمونه EC2 ایجاد کنید و یک زیرساخت شبکه برای آن طراحی کنید، از جمله یک Load Balancer. کار ساده استقرار از ابتدا "کمی" پیچیده تر می شود و زیرساخت بلافاصله شروع به تقاضای پول می کند - هر ساعت مبلغ زمان اجرا از حساب مشتری برداشت می شود.

خدمات ما شامل فرآیندهای طولانی مدت نیست، نیازی به پایگاه داده رابطه ای بزرگ و چرب ندارد و کاملاً با یک معماری مبتنی بر رویداد با زنجیره ای از تماس های میکروسرویس مطابقت دارد. راه حل خود را نشان می دهد - ما می توانیم EC2 را رها کنیم و یک برنامه بدون سرور واقعی، مانند Image Resizer استاندارد مبتنی بر AWS Lambda، پیاده سازی کنیم.

به هر حال، علیرغم عدم علاقه آشکار توسعه دهندگان AWS به دات نت، آنها از NET Core 2.1 به عنوان زمان اجرا پشتیبانی می کنند که طیف کاملی از فرصت های توسعه را فراهم می کند.

و گیلاس روی کیک - AWS یک سرویس جداگانه برای کار با فایل های ویدئویی - AWS Elemental MediaConvert ارائه می دهد.

ماهیت کار فوق‌العاده ساده است: ما یک پیوند S3 را به ویدیوی خروجی می‌گیریم، از طریق کنسول AWS، .NET SDK یا به سادگی JSON می‌نویسیم که می‌خواهیم با ویدیو چه کار کنیم و با سرویس تماس می‌گیریم. خودش صف‌هایی را برای پردازش درخواست‌های دریافتی پیاده‌سازی می‌کند، نتیجه را در خود S3 آپلود می‌کند و مهمتر از همه، یک رویداد CloudWatch برای هر تغییر وضعیت ایجاد می‌کند. این به ما امکان می دهد تا تریگرهای لامبدا را برای تکمیل پردازش ویدیو پیاده سازی کنیم.

رویکرد بدون سرور برای توسعه سریع یک سرویس ویدیویی کارآمد
این چیزی است که معماری نهایی به نظر می رسد:

کل قسمت پشتی در دو لامبدا قرار دارد. یکی دیگر برای چرخش فیلم های عمودی است، زیرا چنین کاری را نمی توان با یک گذر انجام داد.

ما قسمت جلویی را در قالب یک برنامه SPA که با JS نوشته شده و از طریق pug در یک سطل عمومی S3 کامپایل شده است قرار می دهیم. برای دانلود خود ویدیوها، به هیچ کد سرور نیاز نداریم - فقط باید نقاط پایانی REST را که S3 در اختیار ما قرار می دهد باز کنیم. تنها چیز این است که پیکربندی سیاست ها و CORS را فراموش نکنید.

مشکلات

  • AWS MediaConvert، به دلایلی نامعلوم، فقط صدا را برای هر قطعه ویدیو به طور جداگانه اعمال می کند، اما ما به یک آهنگ شاد از کل محافظ صفحه نیاز داریم.
  • فیلم های عمودی باید جداگانه پردازش شوند. AWS نوارهای سیاه را دوست ندارد و غلتک ها را در 90 درجه قرار می دهد.

پیست اسکیت آسان

علی‌رغم همه زیبایی‌های «بدون وضعیت»، باید کارهایی را که باید با این ویدیو انجام دهید پیگیری کنید: چسب بزنید یا صدا را به دنباله ویدیوی نهایی اضافه کنید. خوشبختانه MediaConvert از انتقال ابرداده از طریق Jobs خود پشتیبانی می‌کند و ما همیشه می‌توانیم از یک پرچم ساده به شکل "isMasterSoundJob" استفاده کنیم و این ابرداده را در هر مرحله تجزیه کنیم.

بدون سرور کاملاً اجازه کار با NoOps را می دهد - رویکردی که غیرضروری بودن یک تیم جداگانه مسئول زیرساخت پروژه را فرض می کند. بنابراین، این یک موضوع کوچک بود - ما راه حل را در AWS بدون مشارکت مدیران سیستم، که همیشه کاری برای انجام دادن دارند، مستقر می کنیم.
و برای سرعت بخشیدن به همه اینها، اسکریپت استقرار را تا حد امکان در AWS CloudFormation خودکار می کنیم، که به شما امکان می دهد با یک دکمه مستقیماً از VS مستقر شوید. در نتیجه، یک فایل 200 خطی کد به شما امکان می دهد یک راه حل آماده ارائه دهید، اگرچه اگر به آن عادت نداشته باشید، نحو CloudFormation می تواند شوکه کننده باشد.

در کل

بدون سرور نوشدارویی نیست. اما زندگی را در موقعیت‌هایی با سه محدودیت بسیار آسان‌تر می‌کند: «منابع محدود – کوتاه مدت – پول کم».

ویژگی های برنامه های کاربردی مناسب برای بدون سرور

  • بدون فرآیندهای طولانی مدت محدودیت سخت API Gateway 29 ثانیه است، محدودیت سخت لامبدا 5 دقیقه است.
  • توصیف شده توسط معماری رویداد محور.
  • به مؤلفه‌هایی که با هم جفت شده‌اند مانند SOA تجزیه می‌شود.
  • با شرایط شما به کار زیادی نیاز ندارد.
  • نوشته شده در NET Core. برای کار با دات نت فریم ورک، همچنان به حداقل Docker با زمان اجرا مناسب نیاز دارید.

مزایای رویکرد بدون سرور

  • کاهش هزینه های زیرساختی؛
  • هزینه ارائه راه حل را کاهش می دهد.
  • مقیاس پذیری خودکار؛
  • توسعه در لبه پیشرفت فناوری.

معایب، با یک مثال خاص

  • ردیابی و ورود به سیستم توزیع شده - تا حدی از طریق AWS X-Ray و AWS CloudWatch حل شده است.
  • اشکال زدایی ناخوشایند؛
  • شروع سرد هنگامی که بار وجود ندارد.
  • رابط کاربری خصمانه AWS یک مشکل جهانی است :)

منبع: www.habr.com

اضافه کردن نظر