التصاميم · فصل ١١

تصميم News Feed

Fanout on write · fanout on read · hybrid · feed cache
🎯 الهدف: الفيد يبان بسرعة للناس العادية، ومن غير ما بوست المشهور يكتب ملايين مرات.

مسارين

الـ feed هو البوستات اللي بتظهرلك من صحابك وبتتحدث باستمرار. عندنا مسارين: النشر (publishing) وبناء الفيد (building).

فين نوزّع البوست؟

Fanout on Write — Push

أول ما تنشر، البوست يتحط في فيد كل صحابك على طول.

  • القراية سريعة جدًا، والفيد جاهز real-time.
  • مشكلة المشاهير: واحد عنده ملايين متابعين = ملايين كتابات. وشغل ضايع على ناس مش بتفتح.
Fanout on Read — Pull

الفيد يتبني لما حد يفتحه.

  • مفيش شغل ضايع على يوزرز مش نشطين، ومفيش مشكلة مشاهير.
  • فتح الفيد بيبقى أبطأ.

تفاصيل مهمة

في كاش الفيد خزّن IDs بس (post_id و user_id) مش البوست كامل، عشان توفر ميموري. وخلّي الحد الأقصى للبوستات صغير — أغلب الناس بتشوف الجديد بس.

علاقات الصداقة ممكن تتخزن في Graph DB.

طبقات الكاش: News Feed، Content، Social Graph، Actions (لايك/رد)، و Counters.

القراية: تجيب الـ IDs من الكاش، وبعدين تكمّلها ببيانات اليوزر والبوست. والصور والفيديو من CDN.

Checklist الـ Feed

🧠 اختبر نفسك
١) ليه fanout on write بيقع مع المشاهير؟
لأن بوست واحد بيتكتب في فيد ملايين المتابعين دفعة واحدة.
٢) الحل الهجين بيعمل إيه مع المشهور؟
بوستاته مش بتتوزع وقت الكتابة. بتيجي وقت ما حد يفتح الفيد (pull).
٣) ليه نخزن IDs في كاش الفيد مش البوست نفسه؟
عشان الميموري. البوست والنص والصور بتتجاب بعد كده من كاش تاني و CDN.
٤) فتح الفيد بيعدي على كام خطوة تقريبًا؟
IDs من كاش الفيد، ثم بيانات اليوزر والبوست، والوسائط من CDN.