DEV Community

yqqwe
yqqwe

Posted on

تفكيك بنية الوسائط في Pinterest: بناء محرك استخراج عالي الأداء باستخدام Async I/O وFFmpeg

مقدمة

كمطورين، غالباً ما ننبهر بكيفية إدارة المنصات العالمية لتوزيع كميات هائلة من البيانات الوسائطية. Pinterest ليس مجرد موقع لمشاركة الصور؛ بل هو، من منظور هندسي، محرك اكتشاف بصري يعتمد على طبقة توزيع وسائط معقدة مصممة لتحسين الأداء بناءً على ظروف الشبكة المختلفة عبر تقنيات البث التكيفي (ABR).
ومع ذلك، بالنسبة للمطورين الذين يبنون أدوات الأرشفة أو مستخرجي الموارد عبر المنصات، فإن "الحديقة المسورة" لـ Pinterest - وخاصة الرندرة الديناميكية وبروتوكولات البث المجزأة - تشكل عائقاً تقنياً كبيراً. لسد هذه الفجوة، قمت بتطوير . في هذا المقال، سنغوص في "الصندوق الأسود" التقني: من الهندسة العكسية لهياكل بيانات Pinterest إلى تنفيذ دمج تدفقات HLS في الوقت الفعلي.

1. الغوص العميق في بنية وسائط Pinterest: تحدي HLS

لا يقوم Pinterest بخدمة الفيديو كرابط MP4 ثابت وبسيط. لضمان تجربة تشغيل سلسة، يستخدمون تقنية HLS (HTTP Live Streaming).
1.1 من معرف الـ Pin إلى رسم خرائط الوسائط
عندما يقوم النظام بمعالجة رابط Pin، فإنه يواجه واجهة أمامية HTML مشفرة بشدة. يقوم Pinterest بحقن بياناته بعدة طرق:
• حقن JSON-LD: يحتوي على البيانات الوصفية الأساسية لمحركات البحث.
• كتلة نص PWS_DATA: هذا هو قلب شجرة حالة Redux التي تحتوي على أكثر معلومات مصادر الوسائط شمولاً.
التحدي الهندسي: غالباً ما تكون النسخ عالية الدقة (مثل 1080p) مدفونة بعمق داخل كائنات متداخلة تتغير ديناميكياً. لقد قمنا بتطوير Schema Parser يقوم برسم خرائط أشجار حالة React هذه ديناميكياً لتحديد أعلى جودة متاحة.

2. بنية الخادم الخلفي: مدفوعة بـ Async I/O

للتعامل مع الطلبات العالمية بأقل زمن انتقال، تخلى الخادم الخلفي لـ عن نموذج الطلب التقليدي المحظور لصالح حزمة تقنية تعتمد بالكامل على Python Asyncio + FastAPI + Redis.
2.1 سلسلة الطلبات غير المتزامنة
تتبع استراتيجيات التحميل التقليدية من جهة الخادم نموذج "التحميل ثم إعادة التوجيه"، وهو هدر هائل للذاكرة والنطاق الترددي. لقد قمنا بتنفيذ Streaming Pipe:
• الدقة غير المحظورة: عندما يصل الطلب، يحرر المحرك "العامل" (Worker) فوراً، منتظراً استجابة CDN البعيدة عبر حلقة الأحداث (Event Loop).
• أنبوب التخزين الصفري (Zero-Storage Pipe): تمر البيانات من CDN الخاص بـ Pinterest عبر الذاكرة في شكل "قطع" (Chunks) ويتم توجيهها إلى المستخدم النهائي في الوقت الفعلي.
المؤشر التقني: قللت هذه البنية من استهلاك ذاكرة الخادم بنسبة تزيد عن 85% وقللت وقت الوصول لأول بايت (TTFB) إلى مستويات أقل من 200 مللي ثانية.

3. قهر أجزاء HLS وتوليف التدفق

غالباً ما يتم توزيع موارد Pinterest عالية الجودة كقوائم تشغيل .m3u8. بالنسبة لأداة تحميل ويب، فإن توفير رابط m3u8 للمستخدم النهائي هو أمر عديم الفائدة؛ فهم يحتاجون إلى ملف MP4 واحد قابل للتشغيل.
3.1 خط أنابيب الدمج (Muxing) في الوقت الفعلي
قمنا بدمج FFmpeg runtime على مستوى النواة لمعالجة التدفقات بسرعة:

  1. الأجزاء القائمة على الذاكرة: يحافظ النظام على مخزن مؤقت دائري في الذاكرة لأجزاء TS (Transport Stream).
  2. الدمج بدون فقدان (Lossless Muxing): طالما أن التشفير (H.264/HEVC) يطابق المعايير، نستخدم خيار -c copy. هذا يغير الحاوية (من TS إلى MP4) دون إعادة حساب البكسلات، وهو أمر خفيف جداً على المعالج وفوري تقريباً.
  3. التحصيل المتوازي: باستخدام تجمع الكوروتين (Coroutine Pool)، يقوم النظام بجلب عشرات أجزاء TS في وقت واحد، مما يكمل توليف فيديو مدته 5 دقائق في ثوانٍ.

4. التعامل مع قيود السرعة وتجاوز WAF

يستخدم Pinterest جدار حماية لتطبيقات الويب (WAF) صارماً لمنع الكشط عالي التردد.
4.1 التوجيه الذكي وبصمات TLS
للحفاظ على وقت تشغيل بنسبة 99.9%، قمنا بتصميم طبقة وكيل (Proxy) ذاتية الإصلاح:
• محاكاة البصمة: نحن نحاكي بصمات TLS وخصائص إطارات HTTP/2 لتقليد سلوك المتصفح الحقيقي، مما يتجاوز اكتشاف الروبوتات الأساسي.
• إدارة الجلسات الموزعة: تقوم مجموعات Redis بتخزين أوراق اعتماد قصيرة العمر، مما يقلل الحاجة إلى مكالمات مصادقة متكررة ومثيرة للريبة.

5. تحسين الواجهة الأمامية: فلسفة Utility-First

يقدر قراء Dev.to الأداء في كلا طرفي الحزمة التقنية.
• تكامل Tailwind CSS: تضمن طبقة الأنماط خفيفة الوزن للغاية أن يكون زمن رسم المحتوى الأول (FCP) أقل من 0.5 ثانية.
• دعم PWA: الموقع هو تطبيق ويب تقدمي. يمكن للمستخدمين "تثبيته" على سطح المكتب للحصول على تجربة تطبيق أصلية دون ثقل حزمة التثبيت الفعلية.
• التحليل الصفري للجافا سكريبت: يتم تغليف جميع العمليات المعقدة في جهة الخادم. تعمل الواجهة الأمامية كعميل خفيف، مما يضمن التوافق مع الأجهزة المحمولة منخفضة المواصفات.

6. الخلاصة وتطلعات المشروع

بناء أداة عالية الأداء مثل هو أكثر من مجرد استدعاء API بسيط؛ إنه تمرين في فهم البروتوكولات الحديثة، إدارة I/O الشبكة، وتنسيق الموارد. من خلال تحسين منطق التوزيع والاستفادة من خادم خلفي غير متزامن، حققنا استخراجاً شبه فوري لموارد 4K.
إذا كنت مطوراً وتبحث عن وسيلة نظيفة، خالية من الإعلانات، وصلبة تقنياً لأرشفة موارد وسائط Pinterest، فنحن ندعوك لتجربة أداتنا.
👉 رابط المشروع: https://twittervideodownloaderx.com/pinterest_downloader_hi
ملخص الحزمة التقنية:
• Backend: Python / FastAPI / Redis / FFmpeg
• Core: Async Coroutine Pool + Real-time HLS Muxing Engine
• Architecture: Microservices via Docker
• Frontend: HTML5 / Tailwind CSS / Vanilla JS / PWA
• Infrastructure: Cloudflare / Nginx
ما هي أفكارك حول التعامل مع HLS أو هياكل أدوات الكشط واسعة النطاق؟ دعنا نناقش ذلك في التعليقات!

WebDev #Pinterest #Python #OpenSource #Programming #VideoStreaming #DevTools #SoftwareArchitecture

Top comments (0)