Instagram বা Facebook-এর মতো news feed ডিজাইন

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

অনেক follower-এর কাছে পৌঁছানো পোস্টের স্রোত

লক্ষ্য: প্রতিটি 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 অ্যাপ ডিজাইন.

আরও পড়ুন

Recursion ও backtracking সহজ উদাহরণে

Recursion সমস্যার ছোট কপি সমাধান করে সমাধান করে। অনেক interview সমস্যায় ব্যবহৃত চিন্তার ধাপ ও backtracking টেমপ্লেট শিখুন।

Interview ও DSA•৩ মিনিটে পড়া