انسٹاگرام فیڈ لوگوں اور آپ کے لیے اہم چیزوں کے ساتھ اشتراک اور جڑنے کا ایک پلیٹ فارم ہے۔ جب آپ انسٹاگرام کھولتے ہیں یا اپنی فیڈ کو ریفریش کرتے ہیں، تو وہ تصاویر اور ویڈیوز جن میں ہمارے خیال میں آپ کی دلچسپی ہوگی وہ سب سے اوپر نظر آئیں گی۔
نیوز فیڈ آئٹمز کا مجموعہ ہے جس میں سسٹم میں موجود دیگر اداروں کے ذریعہ بنائے گئے متن، تصاویر یا ویڈیوز شامل ہیں جنہیں آپ کے پڑھنے کے لیے ہدف بنایا گیا ہے۔ یہ ہمیشہ تبدیل ہوتا رہتا ہے، جبکہ دوسری تنظیمیں تازہ پوسٹس بنا رہی ہیں۔
اس پوسٹ میں، ہم انسٹاگرام کی فیڈ کے سسٹم ڈیزائن کو قریب سے دیکھیں گے۔ تو، چلو شروع کرتے ہیں.
1. ضروریات
فنکشنل ضرورت
- صارف کی نیوز فیڈ سسٹم میں موجود دیگر اداروں کی پوسٹس سے بنائی جاتی ہے جن کی صارف نے پیروی کی ہے یا اس میں دلچسپی ہے۔
- متن، تصاویر اور ویڈیوز سبھی پوسٹس میں مل سکتے ہیں۔
- صارف کی نیوز فیڈ کو دوسروں کے ذریعہ تخلیق کردہ نئی پوسٹنگ کے ساتھ اپ ڈیٹ کیا جانا چاہئے۔
غیر فعال معیار
- نیوز فیڈز کی تخلیق حقیقی وقت میں ہونی چاہیے۔ اختتامی صارف کو صرف 12 سیکنڈ کی تاخیر کا سامنا کرنا چاہئے۔
- نئی پوسٹ کو شامل کرنا: سسٹم میں جمع کرائے جانے کے بعد ایک نئی پوسٹ کو نیوز فیڈ کی درخواست میں ظاہر ہونے میں 5 سیکنڈ سے زیادہ نہیں لگنا چاہیے۔
2. صلاحیت کا تخمینہ
- مارچ 2021 تک، دنیا کی آبادی صرف 7.8 بلین افراد پر مشتمل ہے۔ اس سے ظاہر ہوتا ہے کہ دنیا کی 21% آبادی فیس بک DAU (ڈیلی ایکٹو یوزر) ہے اور 32% فیس بک MAU (ماہانہ فعال صارف) (ماہانہ فعال صارف) ہے۔ یہ حیرت انگیز ہے.
- آئیے دکھاوا کرتے ہیں کہ ہم جو سسٹم بنا رہے ہیں اس میں چیزوں کو آسان بنانے کے لیے 1 بلین DAU ہے۔
- فرض کریں کہ ایک شخص فیس بک پر 500 لوگوں یا کاروبار کو فالو کرتا ہے۔ ایک گروپ یا صفحہ کو ایک ہستی سمجھا جا سکتا ہے۔
متوقع ٹریفک
فرض کریں کہ ایک صارف روزانہ اوسطاً 10 بار نیوز فیڈ ڈاؤن لوڈ کرتا ہے۔ تو یہ تقریباً 116K QPS اور 1e10 درخواستیں ہر روز ہے۔
ذخیرہ کرنے کا تخمینہ
فرض کریں کہ ہم فوری بازیافت کے لیے ہر صارف کے نیوز فیڈ سے اوسطاً 500 پوسٹس کو میموری میں برقرار رکھتے ہیں، اور ہر پوسٹ کا سائز 1KB ہے۔ لہذا فی صارف 500 KB، تمام DAUs کے لیے 500 TB، اور 5000 GB RAM کے ساتھ 100 کمپیوٹرز۔
3. سسٹمز کے لیے APIs
userId (GUID): وہ صارف جس کی نیوز فیڈ حاصل کی جا رہی ہے۔
اختیاری اختیارات کے پیرامیٹر میں درج ذیل فیلڈز دستیاب ہیں:
- afterPostId (GUID): اس کے بعد پوسٹ سے نیوز فیڈ حاصل کریں۔ اگر بیان نہیں کیا گیا ہے تو تازہ ترین پوسٹس حاصل کریں۔
- شمار (نمبر): پوسٹس کی زیادہ سے زیادہ تعداد جو ہر درخواست واپس کر سکتی ہے۔ اگر کوئی بھی فراہم نہیں کیا جاتا ہے تو پسدید ایک ڈیفالٹ زیادہ سے زیادہ نمبر سیٹ کرتا ہے۔
- excludeReplies (بولین): جوابات کو نیوز فیڈ میں شامل ہونے سے روکتا ہے۔
- واپس کردہ JSON نیوز فیڈ آئٹمز کی فہرست پر مشتمل ہے۔
4. ڈیٹا بیس کو ڈیزائن کرنا
اداروں
- رکن کا
- entityId، نام، تفصیل اور ٹائم اسٹیمپ سبھی مطلوبہ فیلڈز ہیں۔
- درج ذیل فیلڈز درکار ہیں: پوسٹ آئی ڈی، ٹائٹل، ٹیکسٹ، مصنف آئی ڈی، اور ٹائم اسٹیمپ۔
- ٹائم اسٹیمپ، یو آر ایل، اور میڈیا آئی ڈی
تعلقات
- دوسرے صارفین یا اداروں کی پیروی صارف کے ذریعہ کی جاسکتی ہے۔ (m:n)
- مصنف پوسٹ: صارف اور ادارے دونوں ہی پوسٹس بنا سکتے ہیں۔ فرض کریں کہ صرف صارف ہی سادگی کی خاطر پوسٹس بنا سکتے ہیں۔ (1: n؛ مصنف کی شناخت سرایت کے قابل ہے)۔
- ہر پوسٹ کے ساتھ میڈیا کی کوئی نہ کوئی شکل ہوتی ہے۔ (1:n)
5. ہائی لیول ڈیزائن
آرکیٹیکچر
ورکشاپ
فیڈ کی پیداوار
جب جے اپنے نیوز اسٹریم کی درخواست کرے گا، تو سسٹم درج ذیل کام کرے گا:
- ان تمام لوگوں اور چیزوں کی آئی ڈی بازیافت کریں جن کی جے پیروی کرتا ہے۔
- مجموعی پوسٹس: ان IDs کو دیکھتے ہوئے، تازہ ترین، مقبول اور متعلقہ پوسٹس حاصل کریں۔
- پوسٹس کو ان کی مطابقت اور وقت کے مطابق درجہ بندی کریں۔
- کیش: تخلیق کردہ فیڈز کو محفوظ کریں اور جے کو ٹاپ 20 پوسٹس بھیجیں۔
- جب جے پہلی 20 پوسٹس پڑھ چکا ہے، تو اگلی 20 پوسٹس حاصل کرنے کے لیے ایک اور درخواست بھیجی جاتی ہے۔
فیڈ کی تقسیم
فرض کریں جے آیوش کی پیروی کر رہا ہے اور آیوش کچھ بھی نیا پوسٹ کرتا ہے۔ جے کی نیوز فیڈ کو سسٹم کے ذریعہ اپ ڈیٹ کرنے کی ضرورت ہوگی:
- آیوش کے پیروکاروں کی آئی ڈی بازیافت کریں۔
- نئے مضامین شامل کریں: آیوش کی پوسٹ کو ان IDs کے پیروکاروں کے نیوز فیڈ پول میں شامل کریں۔
- پوسٹس کو ان کی مطابقت اور وقت کے مطابق درجہ بندی کریں۔
- رینکنگ پوسٹ کے کیشے کو اپ ڈیٹ کریں۔
- نئی پوسٹس شائع ہونے پر پیروکاروں کو مطلع کیا جانا چاہئے۔
اجزاء
صارفین کے رابطے ویب سرورز کے ذریعے برقرار رکھے جاتے ہیں۔
اوپر بتائے گئے طریقہ کار کو ایپلیکیشن سرور کے ذریعے عمل میں لایا جاتا ہے۔
کیشے اور ڈیٹا بیس:
- متعلقہ ڈیٹا بیس صارف/ہستی
- متعلقہ ڈیٹا بیس (پوسٹ)
- تصویر/ویڈیو وصف: آیوش اسٹورج
- متعلقہ ڈیٹا بیس میٹا ڈیٹا
ذاتی نوعیت کی خدمات:
- فیڈ کی پیداوار
- فیڈز کی اطلاع
6. تفصیلی ڈیزائن
فیڈ کی نسل
فین آؤٹ پڑھیں بولی نفاذ:
اس میلا نفاذ کے ساتھ مسائل میں شامل ہیں:
- دوستوں/فالورز کی ایک بڑی تعداد کے ساتھ صارفین ایک نمایاں سست روی دیکھیں گے کیونکہ ہمیں پوسٹنگ کی ایک بڑی تعداد کو چھاننا، انضمام اور درجہ بندی کرنا ہوگی۔
- جب کوئی صارف اپنا صفحہ لوڈ کرتا ہے تو ہم ٹائم لائن بناتے ہیں۔ یہ سست ہو سکتا ہے اور اس میں بہت زیادہ تاخیر ہو سکتی ہے۔
- ہر اسٹیٹس اپ ڈیٹ کے نتیجے میں لائیو اپ ڈیٹس کے لیے تمام پیروکاروں کے لیے فیڈ اپ ڈیٹس ہوں گے۔ یہ ہماری نیوز فیڈ جنریشن سروس میں نمایاں تاخیر کا سبب بن سکتا ہے۔
ہم تاریخ کو پہلے سے تیار کر سکتے ہیں اور کارکردگی کو بڑھانے کے لیے اسے میموری میں محفوظ کر سکتے ہیں۔
آف لائن پیداوار (فین آؤٹ لکھنا)
ہمارے پاس ایسے سرشار سرور ہو سکتے ہیں جو صارفین کی نیوز فیڈز کو میموری میں مسلسل تخلیق اور ذخیرہ کر رہے ہیں۔ جب بھی صارف چاہے تو ہم پہلے سے تیار کردہ، محفوظ کردہ مقام سے نیوز فیڈ فراہم کر سکتے ہیں۔
صارف کی فیڈ کی کتنی چیزیں میموری میں محفوظ کی جانی چاہئیں؟
اپنے استعمال کے رویے کی بنیاد پر موافقت کریں۔
کیا ہمیں تمام صارفین کے لیے ایک نیوز فیڈ بنانا چاہیے (اور اسے میموری میں محفوظ کرنا چاہیے)؟
- ان لوگوں کے لیے جو اکثر لاگ ان نہیں ہوتے ہیں۔
- LRU پر مبنی کیشنگ ایک سادہ طریقہ ہے۔
- ایک بہتر حل یہ معلوم کرنا ہے کہ صارف کیسے لاگ ان ہوتے ہیں۔ یہ کب ہے؟ آپ کن ہفتے کے دنوں کی بات کر رہے ہیں؟
فیڈ کی اشاعت
Fanout آپ کے تمام پیروکاروں کو ایک پوسٹ بھیجنے کا عمل ہے۔
Fanout پڑھنا (کھینچنا)
جب آپ نیوز فیڈ کی درخواست کرتے ہیں، تو سسٹم کو پڑھنے کی درخواست موصول ہوتی ہے۔ Fanout read آپ کے تمام پیروکاروں کو پڑھنے کی درخواست بھیجتا ہے، ان سے ان کا مواد پڑھنے کو کہتا ہے۔
پیشہ:
- لکھنے کا طریقہ سستا ہے۔
- ڈیٹا کو پڑھتے وقت، مختلف ایگریگیشن الگورتھم استعمال کرنا آسان ہوتا ہے۔
Cons:
- بہت سے پیروکاروں کے ساتھ ایک شخص کے لئے، پڑھنے کا آپریشن بہت مہنگا ہے.
- صارفین کو تازہ ڈیٹا اس وقت تک نظر نہیں آئے گا جب تک وہ اسے کھینچ نہ لیں۔
- جب ہم تازہ ترین پوسٹنگز کو مستقل بنیادوں پر حاصل کرنے کے لیے کھینچتے ہیں، تو مناسب پل کیڈنس تلاش کرنا مشکل ہوتا ہے، اور زیادہ تر پل کی درخواستیں وسائل کو ضائع کرتے ہوئے خالی جواب دیں گی۔
Fanout لکھنا (دھکا)
جب آپ کوئی نئی پوسٹ بھیجتے ہیں تو سسٹم کو لکھنے کی درخواست کی جاتی ہے۔ لکھنے کی درخواست آپ کے تمام پیروکاروں کو بھیجی جاتی ہے تاکہ وہ فین آؤٹ رائٹ کا استعمال کرتے ہوئے اپنی نیوز فیڈ کو اپ ڈیٹ کریں۔
فی
- پڑھنے کا عمل سستا ہے۔
ساتھ
- لاکھوں پیروکاروں والے صارف کے لیے، لکھنا طریقہ کار بہت مہنگا ہے.
فیڈ کا درجہ
فیڈز کو صرف تاریخ کے مطابق ترتیب دینے کے بجائے، آج کے درجہ بندی کے الگورتھم اضافی طور پر اس بات کی ضمانت دینے کی کوشش کرتے ہیں کہ زیادہ متعلقہ اشیاء کو ترجیح دی جاتی ہے۔
- ایسے عوامل کا انتخاب کریں جو آپ کو فیڈ آئٹم کی مطابقت کا فیصلہ کرنے میں مدد دے سکتے ہیں، جیسے لائکس، تبصرے اور شیئرز کی تعداد، آئٹم کو آخری بار کب اپ ڈیٹ کیا گیا تھا اگر مضمون میں تصاویر یا ویڈیوز شامل ہوں، وغیرہ۔
- خصوصیات کی بنیاد پر اسکور کا حساب لگائیں۔
- پوسٹس کی درجہ بندی کرنے کے لیے اسکور کا استعمال کریں۔
یہ دیکھنے کے لیے کہ ہمارا درجہ بندی کا نظام کتنا موثر ہے جیسے صارف کی برقراری، اشتہار کی آمدنی وغیرہ جیسے KPIs کو ترتیب دیں۔
نتیجہ
اس حقیقت کے باوجود کہ انسٹاگرام یا اس کا بنیادی کاروبار فیس بک ایک بہت بڑا کارپوریشن ہے، اس کی بہتر سمجھ ہے۔ نظام ڈیزائن.
میں نے آپ کو انسٹاگرام فیڈ کا اعلیٰ سطحی خلاصہ فراہم کرنے کی پوری کوشش کی۔
مجھے امید ہے کہ یہ مددگار تھا اور آپ اسے اچھے استعمال میں ڈالیں گے۔
جواب دیجئے