Instagram বা Facebook-এর মতো news feed ডিজাইন
Feed আপনার অনুসরণ করা মানুষদের পোস্ট দ্রুত দেখায়। মূল সিদ্ধান্ত: প্রতিটি user-এর feed কখন বানাবেন, লেখার সময় না পড়ার সময়।

লক্ষ্য: প্রতিটি user অনুসরণ করা অ্যাকাউন্টগুলোর সাম্প্রতিক পোস্টের feed দেখে, এক সেকেন্ডের অনেক কম সময়ে লোড হয়ে।
Requirement
- পোস্ট করা। অনুসরণ করা অ্যাকাউন্টের পোস্টের feed দেখা, নতুন বা ranked আগে।
- Feed দ্রুত লোড হবে, pagination সহ।
- User হাজারো অ্যাকাউন্ট অনুসরণ করে, আর কিছু অ্যাকাউন্টের লক্ষ-কোটি follower।
মূল সমস্যা
User A পোস্ট করলে তা প্রতিটি follower-এর feed-এ আসতে হবে। B অ্যাপ খুললে তার feed দ্রুত বানাতে হবে। দুটি উপায় আছে।
Fan-out on read (pull)
B feed খুললে সে যাদের অনুসরণ করে সবার সাম্প্রতিক পোস্ট এনে merge ও sort করা।
- Write সহজ, storage-এ ডুপ্লিকেট নেই।
- Read ধীর: B ১,০০০ অ্যাকাউন্ট অনুসরণ করলে প্রতি request-এ ১,০০০ lookup।
Fan-out on write (push)
A পোস্ট করলে প্রতিটি follower-এর আগে-বানানো feed-এ post ID ঢুকিয়ে দেওয়া (Redis বা database-এ একটি list)।
- Read খুব দ্রুত: শুধু নিজের list পড়ুন।
- Write ব্যয়বহুল: ১ কোটি follower-এর সেলিব্রিটি মানে প্রতি পোস্টে ১ কোটি insert।
- নিষ্ক্রিয় follower-দের জন্য অপচয়।
সাধারণ উত্তর: hybrid
- সাধারণ অ্যাকাউন্টের জন্য follower-দের feed-এ push।
- সেলিব্রিটির (নির্দিষ্ট follower সীমার ওপরে) জন্য push নয়। Read-এর সময় আগে-বানানো feed-এর সাথে সেলিব্রিটির পোস্টের দ্রুত pull মেলান।
- নিষ্ক্রিয় user-দের জন্য আগে-থেকে বানানো বাদ দিন।
Data model
posts(post_id, author_id, content, media_url, created_at)follows(follower_id, followee_id)feed(user_id) -> post_id-এর list, Redis-এ শেষ কয়েকশো entry পর্যন্ত।
Feed শুধু ID রাখে। আলাদা ধাপে পোস্টের বিবরণ, লেখকের তথ্য ও সংখ্যা লোড হয়, আদর্শভাবে cache থেকে।
পড়া ও pagination
পেজ নম্বরের বদলে cursor-ভিত্তিক pagination (post ID বা সময় দিয়ে) ব্যবহার করুন, যাতে নতুন পোস্ট পেজ সরিয়ে না দেয়।
Ranking
শুধু সময়ের ক্রম সবচেয়ে সহজ। Ranked feed recency, সম্পর্কের জোর ও engagement-এর মতো সংকেত দিয়ে পোস্টের score করে, সাধারণত ছোট candidate তালিকার ওপর আলাদা ranking service-এ।
Media
ছবি ও ভিডিও থাকে CDN-এর পেছনে object storage-এ। Feed শুধু URL বহন করে।
মূল কথা: hybrid fan-out, প্রতি user-এর list-এ ID, cache থেকে বিবরণ, cursor দিয়ে pagination, আর media CDN-এ।
System Design সিরিজ, পর্ব ৩ (case study): 4 নম্বর (মোট 16)। আগের লেখা: WhatsApp-এর মতো chat অ্যাপ ডিজাইন.


