Skip to Content
সিস্টেম ডিজাইনে স্বাগতম 🎉
DocumentationDesign A News Feed SystemPropose High Level Design and Get Buy In

ধাপ ২ - উচ্চ-স্তরের (high-level) ডিজাইন প্রস্তাব করা এবং সম্মতি নেওয়া

ডিজাইনটিকে দুটি প্রবাহে (flow) ভাগ করা হয়েছে: ফিড পাবলিশিং (feed publishing) এবং নিউজফিড বিল্ডিং (news feed building)।

  • ফিড পাবলিশিং: যখন একজন ব্যবহারকারী একটি পোস্ট পাবলিশ করেন, তখন সংশ্লিষ্ট ডেটা ক্যাশ এবং ডাটাবেসে লেখা হয়। একটি পোস্ট তার বন্ধুদের নিউজ ফিডে পপুলেট (ছড়িয়ে) দেওয়া হয়।
  • নিউজফিড বিল্ডিং: সরলতার জন্য, ধরে নেওয়া যাক যে নিউজ ফিডটি রিভার্স ক্রোনোলজিক্যাল অনুসারে বন্ধুদের পোস্টগুলো একত্রিত করে তৈরি করা হয়।

নিউজফিড এপিআই (Newsfeed APIs)

নিউজ ফিড এপিআইগুলো হলো ক্লায়েন্টদের সার্ভারের সাথে যোগাযোগ করার প্রাথমিক উপায়। এই এপিআইগুলো HTTP-ভিত্তিক যা ক্লায়েন্টদের স্ট্যাটাস পোস্ট করা, নিউজ ফিড পুনরুদ্ধার করা, বন্ধু যুক্ত করা ইত্যাদি অ্যাকশন সম্পাদন করতে দেয়। আমরা দুটি সবচেয়ে গুরুত্বপূর্ণ এপিআই নিয়ে আলোচনা করব: ফিড পাবলিশিং এপিআই এবং নিউজ ফিড রিট্রিভাল এপিআই।

ফিড পাবলিশিং এপিআই (Feed publishing API)

একটি পোস্ট পাবলিশ করতে, সার্ভারে একটি HTTP POST রিকোয়েস্ট পাঠানো হবে। এপিআইটি নিচে দেখানো হলো: POST /v1/me/feed প্যারামিটার:

  • content: content হলো পোস্টের টেক্সট।
  • auth_token: এটি এপিআই রিকোয়েস্ট প্রমাণীকরণ (authenticate) করতে ব্যবহৃত হয়।

নিউজফিড রিট্রিভাল এপিআই (Newsfeed retrieval API)

নিউজ ফিড পুনরুদ্ধার করার এপিআইটি নিচে দেখানো হলো: GET /v1/me/feed প্যারামিটার:

  • auth_token: এটি এপিআই রিকোয়েস্ট প্রমাণীকরণ করতে ব্যবহৃত হয়।

ফিড পাবলিশিং (Feed publishing)

চিত্র ২ ফিড পাবলিশিং প্রবাহের উচ্চ-স্তরের ডিজাইন দেখায়।

চিত্র ২ (Figure 2) — ফিড পাবলিশিং ফ্লো: User → Load Balancer → Web Servers → Post Service / Fanout Service / Notification Service → Post Cache / News Feed Cache → Post DB।

  • ইউজার: একজন ব্যবহারকারী ব্রাউজার বা মোবাইল অ্যাপে নিউজ ফিড দেখতে পারেন। একজন ব্যবহারকারী এপিআই-এর মাধ্যমে “Hello” কন্টেন্টের একটি পোস্ট করেন: /v1/me/feed?content=Hello&auth_token={auth_token}
  • লোড ব্যালেন্সার: ওয়েব সার্ভারগুলোতে ট্রাফিক বিতরণ করে।
  • ওয়েব সার্ভার: ওয়েব সার্ভারগুলো ট্রাফিক বিভিন্ন ইন্টারনাল সার্ভিসে রিডাইরেক্ট করে।
  • পোস্ট সার্ভিস (Post service): ডাটাবেস এবং ক্যাশে পোস্ট সংরক্ষণ (persist) করে।
  • ফ্যানআউট সার্ভিস (Fanout service): বন্ধুদের নিউজ ফিডে নতুন কন্টেন্ট পুশ করে। নিউজফিড ডেটা দ্রুত পুনরুদ্ধারের জন্য ক্যাশে সংরক্ষণ করা হয়।
  • নোটিফিকেশন সার্ভিস (Notification service): বন্ধুদের জানায় যে নতুন কন্টেন্ট পাওয়া গেছে এবং পুশ নোটিফিকেশন পাঠায়।

নিউজফিড বিল্ডিং (Newsfeed building)

এই বিভাগে, আমরা আলোচনা করব কীভাবে পর্দার আড়ালে নিউজ ফিড তৈরি করা হয়। চিত্র ৩ উচ্চ-স্তরের ডিজাইন দেখায়:

চিত্র ৩ (Figure 3) — নিউজফিড রিট্রিভাল ফ্লো: User → Load Balancer → Web Servers → News Feed Service → News Feed Cache।

  • ইউজার: একজন ব্যবহারকারী তার নিউজ ফিড পুনরুদ্ধার করার জন্য একটি রিকোয়েস্ট পাঠায়। রিকোয়েস্টটি এমন দেখায়: /v1/me/feed
  • লোড ব্যালেন্সার: লোড ব্যালেন্সার ট্রাফিক ওয়েব সার্ভারগুলোতে রিডাইরেক্ট করে।
  • ওয়েব সার্ভার: ওয়েব সার্ভারগুলো রিকোয়েস্ট নিউজফিড সার্ভিসে রুট করে।
  • নিউজফিড সার্ভিস: নিউজ ফিড সার্ভিস ক্যাশ থেকে নিউজ ফিড নিয়ে আসে (fetch)।
  • নিউজফিড ক্যাশ: নিউজ ফিড রেন্ডার করার জন্য প্রয়োজনীয় নিউজ ফিড আইডিগুলো সংরক্ষণ করে।