رابط برنامهنویسی (API) جدید کلادفلر برای MoQ: امکان راهاندازی رلههای ایزولهشده و اختصاصی
سال گذشته، امکان استفاده از پروتکل «رسانه بر روی کوئیک» (Media over QUIC یا MoQ) را روی تمامی سرورهای کلادفلر (Cloudflare) فعال کردیم و این شبکه را برای تست همگانی گشودیم. این اقدام یک نقطه پایانی (Endpoint) جهانی برای MoQ فراهم کرد، اما فاقد ایزولهسازی و کنترلهای دسترسی لازم برای اجرای یک برنامه کاربردی در سطح عملیاتی بود.
امروز، این قابلیتهای ایزولهسازی و کنترل دسترسی را اضافه میکنیم. رابط برنامهنویسی (API) جدید راهاندازی MoQ به شما امکان میدهد برای برنامه خود یک رله (Relay) ایزولهشده ایجاد کرده و اعتبارسنجیهای مجزایی برای ناشران (Publishers) و مشترکان (Subscribers) صادر کنید. رلههای ایجادشده ظرف چند ثانیه در سراسر شبکه کلادفلر در دسترس قرار میگیرند، بدون اینکه نیازی به استقرار سرور، تنظیم اندازه (Sizing) یا مدیریت بار کاری (Load Balancing) باشد.
کلادفلر اکنون از نسخههای draft-14 و draft-16 پروتکل انتقال MoQ به همراه پشتیبانی از احراز هویت (Authentication) پشتیبانی میکند. شما میتوانید این رلهها را از طریق API و داشبورد کلادفلر ایجاد کنید. استفاده از آنها در طول دوره آزمایشی (Beta) کاملاً رایگان است.
یادآوری کوتاهی درباره MoQ
پروتکل MoQ (مخفف Media over QUIC) یک استاندارد باز جدید در حال توسعه در کارگروه مهندسی اینترنت (IETF) است؛ همان نهاد استانداردی که HTTP، TLS و QUIC را نیز استانداردسازی کرده است. این پروتکل به صورت کاملاً آزاد توسعه مییابد و به یک استاندارد عمومی و رایگان (RFC) تبدیل خواهد شد که هر کسی میتواند آن را پیادهسازی کند و هیچ شرکت واحدی مالک آن نیست.
پروتکل MoQ یک سیستم مبتنی بر الگوی انتشار/اشتراک (Publish/Subscribe) است. یک ناشر، جریانهای داده نامگذاریشده را ارسال میکند و مشترکان این جریانها را بر اساس نام درخواست میکنند. در این میان، رلهها (Relays) قرار دارند که همان سرورهای شبکه توزیع محتوا (CDN) هستند که هر جریان داده را برای تمام متقاضیان کپی میکنند. یک رله هرگز نیازی به بررسی محتوای درون دادههای عبوری ندارد؛ بنابراین یک ناشر میتواند بدون درگیر شدن با توزیع گسترده دادهها (Fan-out)، به مخاطبان بیشماری دست یابد.
از آنجا که رلهها اهمیتی به ماهیت دادهها نمیدهند، این پروتکل یکسان میتواند سامانه اصلی بسیاری از برنامههایی باشد که پیشتر به سیستمهای مجزا نیاز داشتند؛ مانند ویدیوی زنده، تماسهای تصویری، پیامرسانی با تاخیر بسیار کم و موارد دیگر. این پروتکل روی QUIC (بستر انتقال تحت HTTP/3) اجرا میشود که عامل اصلی پایین ماندن تاخیر است.
نتیجه عملی این است که شما نیازی به ساخت و مدیریت ناوگانی از سرورهای اختصاصی ندارید. شما از طریق یک API ساده محتوای خود را روی یک CDN منتشر میکنید و با هزینهای بسیار کمتر، از تاخیر پایین و مقیاسپذیری بالا بهرهمند میشوید.
مسیر طیشده: پیشنمایش عمومی MoQ
سال گذشته، نخستین شبکه جهانی رله MoQ را راهاندازی کردیم: تمام سرورهای کلادفلر در بیش از ۳۳۰ شهر به رلههای رایگان و آزاد MoQ تبدیل شدند. از آنجا که این نقطههای پایانی نیازی به احراز هویت نداشتند، برای تست پروتکل و توسعه کلاینتها ایدهآل بودند. هنوز هم روزانه بیش از ۱,۰۰۰ کلاینت منحصربهفرد برای تست به آنها متصل میشوند.
اما یک رله بدون احراز هویت برای محیط عملیاتی (Production) مناسب نیست؛ زیرا نمیتوانید تعیین کنید چه کسی منتشرکننده و چه کسی مشترک است. این موضوع امکان استفاده برای برنامههایی که به محرمانه بودن، کنترل دسترسی یا تفکیک واضح نقشهای ناشر و مشترک نیاز دارند را سلب میکند. برای نمونه، یک سایت حراج زنده را در نظر بگیرید که پیشنهادها باید در چند میلیثانیه به شرکتکنندگان برسند. MoQ برای این کار بسیار مناسب است، اما ناشران و مشترکان به مجوزهای متفاوتی نیاز دارند تا اعتبارات یک بیننده نتواند برای سرقت یا تغییر جریانهای ناشر استفاده شود.
رله در شبکه MoQ کلادفلر چیست؟
در بیشتر پیادهسازیهای فعلی MoQ، رله یک سرور اختصاصی یا یک پروسه اختصاصی روی سرور مشترک است. مقیاسپذیری این معماری به معنای اجرای نمونههای (Instances) بیشتر، تخصیص کلاینتها به آنها و افزودن متعادلکنندههای بار (Load Balancers) با تغییر میزان تقاضا است. این روشی نیست که خدمات کلادفلر (از جمله سرویس Realtime SFU WebRTC) بر اساس آن کار کنند.
راهاندازی (Provisioning) یک رله باعث شروع به کار یک ماشین مجازی، کانتینر یا پروسه اختصاصی نمیشود؛ بلکه یک محدوده ایزولهشده (Isolated scope) در سراسر شبکه جهانی موجود ایجاد میکند.
این محدوده، فضاهای نام (Namespaces)، ترکها (Tracks) و اشیاء (Objects) شما را از موارد متعلق به سایر رلهها تفکیک میکند. همچنین مشخص میسازد چه کسانی میتوانند وارد این محدوده شده و آیا مجاز به انتشار یا اشتراک هستند یا خیر. کلاینتها به نقطه پایانی انیکست (Anycast) متصل میشوند و کلادفلر مسیریابی آنها را در سراسر شبکه انجام میدهد.
اگر با میزبانی وب آشنایی داشته باشید، ایجاد یک رله کلادفلر بیشتر شبیه به افزودن یک میزبان مجازی (Virtual Host) است تا راهاندازی یک وبسرور جدید. از آنجا که زیرساخت از قبل در حال اجرا است، API راهاندازی فقط پیکربندی و اعتبارات برنامه شما را اضافه میکند. این امر باعث میشود رله بدون نیاز به انتخاب منطقه جغرافیایی، تخمین ظرفیت یا تنظیم Load Balancer فوراً در دسترس قرار گیرد.
رابط برنامهنویسی لایه کنترل برای MoQ در کلادفلر
API راهاندازی در واقع یک لایه کنترل (Control Plane) است: این API رلهها و توکنهای مورد استفاده برای دسترسی به آنها را مدیریت میکند و هرگز با رسانهای که از طریق آنها جریان مییابد در تماس نیست.
دو نوع منبع (Resource) در این سیستم وجود دارد:
- رله (Relay): همان محدوده ایزولهشدهای است که جریانهای یک برنامه را از برنامه دیگر کاملاً مجزا نگه میدارد.
- توکن (Token): اعتباری است که مجموعه عملیاتهای مشخصی (انتشار، اشتراک یا هر دو) را در یک رله اعطا میکند. ارائه توکنهای متفاوت به ناشران و مشترکان جلوی سوءاستفاده بینندگان از جریانهای پخشکننده را میگیرد.
هر توکن محدود به عملیاتی است که کلاینت به آن نیاز دارد؛ میتواند تاریخ انقضا داشته باشد و به صورت مستقل ابطال شود. این امر به شما امکان میدهد دقیقاً دسترسی لازم را اعطا کرده و بعداً بدون اختلال در کار دیگران، آن را لغو کنید.
در حال حاضر هر توکن برای یک رله کامل اعمال میشود و اجازه انتشار، اشتراک یا هر دو را میدهد. ما در حال همکاری با IETF و جامعه کاربری MoQ هستیم تا طرح جامعتری ارائه دهیم. در صورت داشتن نظر میتوانید با moq@cloudflare.com مکاتبه کنید.
نحوه راهاندازی یک رله
شما میتوانید از دو طریق رله ایجاد کنید: با استفاده از HTTP API یا در داشبورد کلادفلر.
از طریق API: ایجاد یک رله تنها با یک فراخوانی API و تعیین یک نام انجام میشود. کلادفلر یک شناسه رله (Relay ID) و دو توکن پیشفرض بازمیگرداند؛ توکن اول امکان انتشار و اشتراک را دارد و توکن دوم فقط اجازه اشتراک میدهد. برای دسترسی محدودتر میتوانید توکنهای اختصاصی بیشتری (مثلاً فقطاشتراک با تاریخ انقضای مشخص) ایجاد کنید.
از طریق داشبورد کلادفلر: به مسیر Media > Realtime > MoQ Relay بروید، گزینه Create relay را انتخاب کرده، نامی برای آن تعیین و تایید کنید.
اتصال ناشر و مشترک
میتوانید توکنها را مانند خود رله از طریق API یا داشبورد مدیریت کنید. توکن انتشار و اشتراک را به پخشکننده (Broadcaster) و توکن فقطاشتراک را به بینندگان بدهید. هر کلاینت هنگام شروع نشست (Session) MoQ، توکن خود را ارسال میکند و رله مجوزهای آن را بررسی خواهد کرد.
توکن در مسیر URL منتقل میشود. به عنوان مثال، با ابزارهای متنباز moq-rs، یک پخشکننده میتواند یک استریم MP4 را از طریق ffmpeg منتشر کند (از طریق ابزار moq-pub) و بیننده با ابزار moq-sub به آن متصل شود. رله هنگام باز شدن نشست، توکن را خوانده و اجازه عملیات درخواستشده را بررسی میکند.
تغییرات صورت گرفته برای پشتیبانی از نسخه draft-16
API راهاندازی تنها بخشی از تغییرات جدید است. خود پروتکل انتقال MoQ به سرعت در حال پیشرفت است و کلادفلر اکنون از نسخه draft-16 مشخصات IETF MoQ پشتیبانی میکند. این پیشنویس دو ویژگی مهم برای انتشار و اشتراک اضافه کرده است:
- دستور PUBLISH: به ناشر اجازه میدهد قبل از درخواست بیننده، یک ترک را به رله بفرستد. بدون این دستور، اولین درخواست اشتراک باید از زنجیره رله بگذرد تا به ناشر برسد و ارسال آغاز شود، اما با PUBLISH، رله هنگام اتصال اولین بیننده، ترک را آماده در اختیار دارد.
- دستور SUBSCRIBE_NAMESPACE: به مشترک اجازه میدهد بهجای درخواست تکتک ترکها، تمام ترکهای اعلانشده تحت یک فضای نام (Namespace) را یکجا درخواست کند. این اشتراک شامل ترکهای بعدی (مانند کیفیت ویدیویی جدید یا ترک صوتی جدید در طول پخش زنده) نیز میشود.
توسعه به صورت آزاد و شفاف
پروتکل MoQ یک استاندارد باز است که در IETF توسط مهندسان صنعت توسعه مییابد تا قابلیت تعاملپذیری (Interoperability) حفظ شود. ما نیز طراحی این API را در پیشنویس اینترنتی MoQ CDN Provisioning مستندسازی میکنیم. هدف این است که چندین ارائهدهنده CDN و رله بتوانند از یک مدل راهاندازی مشترک پشتیبانی کنند.
هماکنون در دسترس و رایگان در نسخه بتا
API راهاندازی رله MoQ هماکنون به عنوان بخشی از بتای MoQ در دسترس است و استفاده از آن در هر مقیاسی در طول این دوره پیشنمایش رایگان خواهد بود.
این API همراه با توسعه ما تغییر خواهد کرد، بنابراین پیشنهاد میکنیم مستندات توسعهدهندگان را برای بهروزرسانیها بررسی کنید. برای شروع میتوانید مستندات راهنما و مرجع API را مطالعه کرده، با ایمیل moq@cloudflare.com در تماس باشید یا به دیسکورد توسعهدهندگان کلادفلر بپیوندید.