جدول المحتويات[يخفي][يعرض]
Instagram Feed هو نظام أساسي للمشاركة والتواصل مع الأشخاص والأشياء التي تهمك. عند فتح Instagram أو تحديث خلاصتك ، ستظهر الصور ومقاطع الفيديو التي نعتقد أنك ستهتم بها في الأعلى.
موجز الأخبار عبارة عن مجموعة من العناصر التي تحتوي على نصوص أو صور أو مقاطع فيديو تم إنشاؤها بواسطة كيانات أخرى في النظام والتي تستهدفك لقراءتها. إنه يتغير دائمًا ، بينما تقوم المنظمات الأخرى بعمل مشاركات جديدة.
في هذا المنشور ، سنلقي نظرة فاحصة على تصميم نظام موجز Instagram. لذا ، لنبدأ.
1. المتطلبات
ضرورة وظيفية
- يتم إنشاء موجز أخبار المستخدم من منشورات من كيانات أخرى في النظام الذي تابعه المستخدم أو يهتم به.
- يمكن العثور على النصوص والصور ومقاطع الفيديو في المنشورات.
- يجب تحديث موجز أخبار المستخدم بالمنشورات الجديدة التي أنشأها الآخرون.
معيار غير وظيفي
- يجب أن يتم إنشاء موجز الأخبار في الوقت الفعلي. يجب أن يواجه المستخدم النهائي 12 ثانية فقط من التأخير.
- إلحاق منشور جديد: لن يستغرق الأمر أكثر من 5 ثوانٍ حتى يظهر منشور جديد في طلب موجز الأخبار بعد إرساله إلى النظام.
2. تقدير السعة
- اعتبارًا من مارس 2021 ، بلغ عدد سكان العالم 7.8 مليار نسمة فقط. يشير إلى أن 21 ٪ من سكان العالم هم Facebook DAU (مستخدم نشط يوميًا) و 32 ٪ مستخدم Facebook MAU (مستخدم نشط شهريًا) (مستخدم نشط شهريًا). هذا مدهش.
- لنتخيل أن النظام الذي نقوم ببنائه يحتوي على مليار DAU لتسهيل الأمور.
- افترض أن شخصًا ما يتابع 500 شخص أو شركة على Facebook. يمكن اعتبار مجموعة أو صفحة كيانًا.
حركة المرور المقدرة
افترض أن مستخدمًا واحدًا يقوم بتنزيل موجز الأخبار 10 مرات كل يوم في المتوسط. إذن ، هناك ما يقرب من 116 ألف طلب في الثانية و 1e10 طلبًا يوميًا.
تقديرات التخزين
لنفترض أننا نحتفظ بـ 500 مشاركة من موجز الأخبار لكل مستخدم في الذاكرة في المتوسط للاسترجاع السريع ، وأن حجم كل منشور 1 كيلوبايت. لذا 500 كيلوبايت لكل مستخدم ، و 500 تيرابايت لجميع DAUs ، و 5000 جهاز كمبيوتر مع 100 جيجابايت من ذاكرة الوصول العشوائي لكل منها.
3. واجهات برمجة التطبيقات للأنظمة
userId (GUID): المستخدم الذي يتم جلب موجز الأخبار الخاص به.
الحقول التالية متاحة في معلمة الخيارات الاختيارية:
- afterPostId (GUID): احصل على موجز الأخبار من المنشور الذي يلي هذا. إذا لم يتم تحديدها ، احصل على أحدث المشاركات.
- count (number): الحد الأقصى لعدد المشاركات التي يمكن لكل طلب إرجاعها. تقوم الواجهة الخلفية بتعيين الحد الأقصى الافتراضي للرقم إذا لم يتم توفير أي منها.
- استبعاد الردود (قيمة منطقية): يمنع تضمين الردود في موجز الأخبار.
- يحتوي JSON الذي تم إرجاعه على قائمة بعناصر موجز الأخبار.
4. تصميم قاعدة بيانات
الكيانات
- مستخدم
- معرف الكيان والاسم والوصف والطابع الزمني كلها حقول مطلوبة.
- الحقول التالية مطلوبة: PostId والعنوان والنص ومعرّف المؤلف والطابع الزمني.
- الطابع الزمني و url و mediaId
العلاقات
- يمكن متابعة المستخدمين أو الكيانات الأخرى من قبل المستخدم. (م: ن)
- منشور المؤلف: يمكن لكل من المستخدمين والكيانات إنشاء منشورات. افترض أن المستخدمين فقط هم من يمكنهم إنشاء منشورات من أجل البساطة. (1: n ؛ معرف المؤلف قابل للتضمين).
- كل منشور مصحوب بنوع من الوسائط. (1: ن)
5. تصميم رفيع المستوى
معمار
مهام سير العمل
إنتاج الأعلاف
عندما تطلب Jay تدفق الأخبار الخاص بها ، سيقوم النظام بما يلي:
- استرجع معرّفات كل الأشخاص والأشياء التي يتبعها جاي.
- المشاركات المجمعة: عند منح هذه المعرفات ، احصل على أحدث المشاركات وأكثرها شهرة وذات صلة.
- رتب المنشورات حسب ملاءمتها وتوقيتها.
- ذاكرة التخزين المؤقت: احفظ الخلاصات التي تم إنشاؤها وأرسل إلى جاي أفضل 20 مشاركة.
- عندما ينتهي جاي من قراءة أول 20 منشورًا ، يتم إرسال طلب آخر للحصول على المشاركات العشرين التالية.
توزيع الأعلاف
افترض أن جاي يتابع Aayush وأن Aayush ينشر أي شيء جديد. يجب تحديث موجز أخبار جاي بواسطة النظام:
- استرجع هويات أتباع عيوش.
- إضافة مقالات جديدة: أضف منشور Aayush إلى مجموعة موجز الأخبار لمتابعي هذه المعرفات.
- رتب المنشورات حسب ملاءمتها وتوقيتها.
- تحديث ذاكرة التخزين المؤقت لمنصب الترتيب.
- يجب إخطار المتابعين عند نشر مشاركات جديدة.
المحتوى
يتم الحفاظ على اتصالات المستخدمين بواسطة خوادم الويب.
يتم تنفيذ الإجراءات المشار إليها أعلاه بواسطة خادم التطبيق.
ذاكرة التخزين المؤقت وقاعدة البيانات:
- مستخدم / كيان قاعدة البيانات العلائقية
- قاعدة البيانات العلائقية (وظيفة)
- سمة الصورة / الفيديو: مخزن عيوش
- البيانات الوصفية لقاعدة البيانات العلائقية
الخدمات الشخصية:
- إنتاج الأعلاف
- إخطار الأعلاف
6. التصميم التفصيلي
توليد الأعلاف
Fan-out قراءة تنفيذ ساذج:
تتضمن مشكلات هذا التنفيذ غير المتقن ما يلي:
- سيلاحظ المستخدمون الذين لديهم عدد كبير من الأصدقاء / المتابعين تباطؤًا كبيرًا حيث يتعين علينا غربلة عدد كبير من المنشورات ودمجها وتصنيفها.
- عندما يقوم المستخدم بتحميل صفحته ، فإننا نبني الجدول الزمني. يمكن أن يكون هذا بطيئًا ولديه الكثير من وقت الاستجابة.
- سينتج عن كل تحديث للحالة تحديثات موجز لجميع المتابعين للحصول على تحديثات مباشرة. يمكن أن يتسبب هذا في تأخيرات كبيرة في خدمة إنشاء ملف الأخبار لدينا.
يمكننا إنشاء التسلسل الزمني مسبقًا وحفظه في الذاكرة لزيادة الكفاءة.
الإنتاج دون اتصال بالإنترنت (مراوح الكتابة)
يمكن أن يكون لدينا خوادم مخصصة تعمل باستمرار على إنشاء وتخزين موجز الأخبار للمستخدمين في الذاكرة. يمكننا فقط تقديم موجز الأخبار من الموقع المحفوظ والذي تم إنشاؤه مسبقًا متى أراد المستخدم ذلك.
كم عدد عناصر التغذية التي يجب تخزين خلاصة المستخدم في الذاكرة؟
تكيف بناءً على سلوك الاستخدام الخاص بك.
هل يجب أن نصنع ملفًا إخباريًا لجميع المستخدمين (ونحفظه في الذاكرة)؟
- بالنسبة للأشخاص الذين لا يسجلون الدخول كثيرًا.
- التخزين المؤقت المستند إلى LRU هو نهج بسيط.
- الحل الأفضل هو معرفة كيفية تسجيل دخول المستخدمين. متى يتم ذلك؟ ما هي أيام الأسبوع التي تتحدث عنها؟
نشر الأعلاف
Fanout هي عملية إرسال منشور إلى جميع متابعيك.
قراءة Fanout (سحب)
عندما تطلب موجز أخبار ، يتلقى النظام طلب قراءة. ترسل قراءة Fanout طلب قراءة إلى جميع متابعيك ، وتطلب منهم قراءة المحتوى الخاص بهم.
الايجابيات:
- إجراء الكتابة غير مكلف.
- عند قراءة البيانات ، من الأسهل استخدام خوارزميات التجميع المتنوعة.
سلبيات:
- بالنسبة لشخص لديه الكثير من المتابعين ، تكون عملية القراءة باهظة الثمن إلى حد ما.
- لن يرى المستخدمون بيانات حديثة حتى يسحبونها.
- عندما نسحب لجلب أحدث المنشورات على أساس منتظم ، من الصعب العثور على إيقاع السحب المناسب ، وستقوم معظم طلبات السحب بإرجاع إجابة فارغة ، مما يؤدي إلى إهدار الموارد.
كتابة Fanout (دفع)
يتم تقديم طلب كتابة إلى النظام عند إرسال منشور جديد. يتم إرسال طلب الكتابة إلى جميع متابعيك لتحديث موجز الأخبار الخاص بهم باستخدام الكتابة المعجبين.
برو
- عملية القراءة غير مكلفة.
مع
- بالنسبة إلى مستخدم لديه ملايين المتابعين ، فإن اكتب الإجراء مكلف للغاية.
رتبة العلف
بدلاً من مجرد طلب الخلاصات ترتيبًا زمنيًا ، تحاول خوارزميات الترتيب الحالية أيضًا ضمان إعطاء الأولوية للعناصر ذات الصلة الأكبر.
- اختر العوامل التي يمكن أن تساعدك في تحديد مدى ملاءمة عنصر الخلاصة ، مثل عدد الإعجابات والتعليقات والمشاركات ووقت آخر تحديث للعنصر إذا كانت المقالة تحتوي على صور أو مقاطع فيديو وما إلى ذلك.
- احسب النتيجة بناءً على الخصائص.
- استخدم النتيجة لترتيب المشاركات.
قم بإعداد مؤشرات الأداء الرئيسية مثل الاحتفاظ بالمستخدمين ودخل الإعلانات وما إلى ذلك لمعرفة مدى فعالية نظام التصنيف لدينا.
وفي الختام
على الرغم من حقيقة أن Instagram أو الشركة الأم ، Facebook هي شركة ضخمة ، إلا أنها تفهم بشكل أفضل تصميم النظام.
لقد حاولت جاهدًا أن أقدم لك ملخصًا عالي المستوى لخلاصة Instagram.
آمل أن يكون هذا مفيدًا وأن تستخدمه جيدًا.
اترك تعليق