পাঠ্যক্রম খুলুন
অগ্রসর পর্যায়

Social Media Feed: fan-out ও ব্যক্তিগত তালিকা

Social Media Feed

এই পাঠের কুইজ ↓৬ মিনিট পড়াPHP 8.3+ · Laravel 12
এই পাঠের সূচিপত্র

এই পাঠে যা শিখবেন

  • Fan-out on write এবং read তুলনা করা
  • Celebrity hot spot ও hybrid feed design
  • Privacy, deletion ও cursor pagination সামলানো

সমস্যা দিয়ে শুরু

একজন user পাঁচশ friend follow করেন, আরেক celebrity-র কয়েক কোটি follower। সব post সব follower-এর inbox-এ লিখলে celebrity post বিশাল কাজ তৈরি করে। আবার প্রতিটি request-এ সব followed account-এর post merge করলে read ধীর। Requirements: follow graph, recent personalized feed, pagination, mute/block এবং post deletion। প্রথমে chronological feed নিন; machine-learning ranking আলাদা extension হিসেবে scope করুন।

সহজ করে বুঝি

Fan-out on write post তৈরি হলে follower inbox reference আপডেট করে; read দ্রুত কিন্তু write amplification বেশি। Fan-out on read request-এর সময় followed authors-এর post merge করে; write সস্তা কিন্তু read expensive। Hybrid সাধারণ author push করে, very-high-follower author read-time merge করে। Inbox-এ full post নয় reference রাখলে edit ও deletion handling সহজ হতে পারে, তবে hydration lookup লাগে।

পরিচিত একটি উপমা

প্রতিদিন সবার বাড়িতে পত্রিকা পৌঁছে দেওয়া fan-out on write। Library-তে গিয়ে পছন্দের সংবাদ একত্র করা fan-out on read। বিশাল বিশেষ সংখ্যাটি সবার বাড়িতে নকল না পাঠিয়ে আগ্রহী পাঠককে সংগ্রহ করতে দেওয়া hybrid-এর মতো।

নকশাটি দেখুন

Diagram লোড হচ্ছে…

Feed design read/write amplification-এর ভারসাম্য; celebrity traffic, pagination ও current visibility আলাদা করে সামলাতে হয়।
Diagram-এর text flow দেখুন
flowchart TD
 P[New post] --> D[(Post source)]
 D --> Q[Fanout queue]
 Q --> I[(Follower inbox references)]
 U[Feed request] --> I
 U --> C[Celebrity recent posts]
 I --> M[Merge rank and hydrate]
 C --> M
 M --> A[Privacy and deletion filter]

Post source authoritative। Worker normal author-এর followers-এ reference ছড়ায়। Read path inbox ও celebrity posts merge করে, hydrate করে এবং current visibility যাচাই করে। Deletion event inbox clean করতে পারে; তবু stale reference থেকে private content বের না হওয়ার final check দরকার। Fan-out backlog freshness কমায়, তাই feed age এবং completion lag মাপুন।

PHP ও Laravel-এ প্রয়োগ

Assumption: ১ লাখ daily writers, প্রত্যেকে ২ post ও average ১০০ recipient হলে দিনে প্রায় ২ কোটি inbox reference write, celebrity বাদে। GET /feed?cursor=...; posts, follows এবং feed_entries(user_id,post_id) unique pair। Laravel query fragment authenticated feed reader; PostPolicy visibility filter/hydration আলাদা লাগবে। cursorPaginate stable unique order চায়; mutable ranking score-এ snapshot strategy আলাদা।

php
use App\Models\FeedEntry;
$entries = FeedEntry::query()
    ->where('user_id', $request->user()->id)
    ->with('post.author')
    ->orderByDesc('id')
    ->cursorPaginate(20);
return response()->json($entries);

সুবিধা, সীমাবদ্ধতা ও trade-off

Write fan-out fast reads দেয় কিন্তু inactive user-এর জন্যও storage খরচ হয়। Read fan-out sparse engagement-এ উপকারী কিন্তু many-following user-এ expensive। Hybrid threshold workload থেকে নির্ধারণ করুন। Cache feed pages freshness বাড়ায়/কমায় trade-off আনে। Visibility filter consistency গুরুত্বপূর্ণ; stale cache private content দেখালে correctness breach, শুধু old timestamp নয়।

সাধারণ ভুল

  • Celebrity fan-out normal user-এর মতো unlimited queue-তে ছাড়া।
  • Deleted post reference hydrate করে permission না দেখা।
  • Mutable feed-এ offset pagination সবসময় duplicate-free ধরা।

আরও একটু গভীরে

Fan-out job chunked ও retryable করুন; unique inbox pair duplicate delivery সামলায়। Follow/unfollow concurrent post-এর inclusion semantics লিখুন। Ranking version বদলালে cursor stability এবং user repetition strategy দরকার। Partition user inbox owner key দিয়ে করা যায়, কিন্তু hot user ও celebrity source cache আলাদা bottleneck। Block action-এর দ্রুত effect SLA রাখুন এবং final permission check-এর cost budget করুন।

মনে রাখুন

Feed design read/write amplification-এর ভারসাম্য; celebrity traffic, pagination ও current visibility আলাদা করে সামলাতে হয়।

নিজে চেষ্টা করুন

Normal author এবং celebrity-র post-এর fan-out হিসাব করুন। Unfollow চলাকালে queued post এলে feed-এ থাকবে কি না policy লিখুন। Deleted private post cache-এ থাকলে final read path কী করবে পরীক্ষা করুন।

নিজের বোঝা যাচাই করুন

1. Fan-out on write কী?

Post creation-এ recipient inbox reference প্রস্তুত করা। Read দ্রুত হয়, recipient count অনুযায়ী write বাড়ে।

2. Hybrid কেন?

সাধারণ ও celebrity workload আলাদা। এক strategy সব account-এ দিলে resource amplification হয়।

3. Reference রাখব কেন?

Full duplicated content কমে ও source hydrate করা যায়। তবু lookup এবং current authorization check লাগে।

4. Cursor সব feed-এ সহজ?

Stable unique ordering-এ সুবিধা। Mutable ranking-এ snapshot বা ranking version policy দরকার।

5. Queue duplicate হলে?

Inbox user/post unique constraint ও idempotent chunk processing দিয়ে duplicate reference রোধ করুন।

আরও পড়ুন

এই পাঠের কুইজ

এই পাঠ থেকে ২টি প্রশ্ন। উত্তর দিয়ে ব্যাখ্যা দেখুন; অধ্যায়ের কুইজ আলাদাভাবে দিতে হবে।

এই পাঠের ২টি প্রশ্নের উত্তর দিন। পাস করতে দুটিই সঠিক হতে হবে।

জমা দেওয়ার পর সঠিক উত্তর ও ব্যাখ্যা দেখবেন। ফলাফল এই ব্রাউজারে সংরক্ষিত থাকবে। অনুশীলনের ফল অধ্যায় সম্পন্নের হিসাবে যোগ হয় না।

সব বিষয় মিলিয়ে অনুশীলন করুন →

অগ্রগতি এই ব্রাউজারে সংরক্ষিত থাকে। শুধু পাঠ খুললে সম্পন্ন হয় না।