Social Media Feed: fan-out ও ব্যক্তিগত তালিকা
Social Media Feed
এই পাঠের সূচিপত্র
এই পাঠে যা শিখবেন
- 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 লোড হচ্ছে…
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 আলাদা।
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 রোধ করুন।
আরও পড়ুন
এই পাঠের কুইজ
এই পাঠ থেকে ২টি প্রশ্ন। উত্তর দিয়ে ব্যাখ্যা দেখুন; অধ্যায়ের কুইজ আলাদাভাবে দিতে হবে।
এই পাঠের ২টি প্রশ্নের উত্তর দিন। পাস করতে দুটিই সঠিক হতে হবে।
জমা দেওয়ার পর সঠিক উত্তর ও ব্যাখ্যা দেখবেন। ফলাফল এই ব্রাউজারে সংরক্ষিত থাকবে। অনুশীলনের ফল অধ্যায় সম্পন্নের হিসাবে যোগ হয় না।
অগ্রগতি এই ব্রাউজারে সংরক্ষিত থাকে। শুধু পাঠ খুললে সম্পন্ন হয় না।