وڏي پيماني تي آن لائين ايپليڪيشنون گذريل ٻن ڏهاڪن ۾ هڪ ڊگهو رستو وٺي آيون آهن. انهن جدت اسان جي سافٽ ويئر ڊولپمينٽ جي تصور کي تبديل ڪري ڇڏيو آهي. Facebook، Instagram، ۽ Twitter، مثال طور، سڀ اسپيبلبل پليٽ فارم آھن.
اهي سسٽم لازمي طور تي ٽرئفڪ ۽ ڊيٽا جي وڏي مقدار کي منظم ڪرڻ لاءِ تعمير ڪيا وڃن ڇاڪاڻ ته اربين ماڻهو انهن کي سڄي دنيا ۾ هڪ ئي وقت استعمال ڪندا آهن. هي آهي جڏهن سسٽم ڊيزائن تصوير ۾ داخل ٿي.
سسٽم لاءِ آرڪيٽيڪچر، انٽرفيس، ۽ ڊيٽا کي قائم ڪرڻ جو عمل جيڪو ڪجهه معيارن تي پورو لهي ٿو ان کي سسٽم ڊيزائن طور سڃاتو وڃي ٿو. مربوط ۽ موثر سسٽم ذريعي، سسٽم ڊيزائن توهان جي ڪاروبار يا تنظيم جي مطالبن کي پورو ڪري ٿو.
هڪ دفعو توهان جي ڪمپني يا تنظيم پنهنجي معيار کي طئي ڪيو آهي، توهان انهن کي شامل ڪرڻ شروع ڪري سگهو ٿا هڪ فزيڪل سسٽم ڊيزائن ۾ جيڪو توهان جي صارفين جي مطالبن کي پورو ڪري ٿو.
ڇا توھان چونڊيو ٿا بيسپوڪ ڊولپمينٽ، تجارتي حل، يا ٻنھي جو ميلاپ سان، توھان پنھنجي سسٽم کي ڪيئن ٺاھيو ٿا اھو طئي ڪندو ته توھان ان کي ڪيئن ٺاھيو.
اسان هن پوسٽ ۾ Twitter ٽائم لائن جي سسٽم ڊيزائن تي تفصيلي نظر ڪنداسين، هڪ سبق سان مڪمل ڪريو. اچو ته شروع ڪريون.
قدم 1: آئوٽ لائن استعمال ڪيس ۽ رڪاوٽون
ڪيس استعمال ڪريو
- هڪ صارف هڪ ٽوئيٽ اپ لوڊ ڪري ٿو.
- خدمت موڪلي ٿو پش اطلاعن ۽ اي ميلون ٽوئيٽس جي پوئلڳن کي.
- استعمال ڪندڙ جي ٽائم لائن ڏٺو ويو آهي (استعمال ڪندڙ کان سرگرمي)
- استعمال ڪندڙ گھر جي ٽائم لائن تي نظر اچي ٿو (ماڻھن جي سرگرمي جيڪا استعمال ڪندڙ جي پٺيان آھي)
- لفظ استعمال ڪندڙ طرفان ڳولها ويندا آهن.
- خدمت واقعي دستياب آهي.
دائري کان ٻاهر
- Tweets ڏانهن موڪليا ويا آهن Twitter Firehose ۽ ٻين اسٽريمز کي هن خدمت کي استعمال ڪندي.
- خدمت صارف جي نمائش جي سيٽنگن جي بنياد تي ٽوئيٽس کي هٽائي ٿو.
- جيڪڏهن صارف ان شخص جي پيروي نه ڪري رهيو آهي جنهن کي جواب ڏنو پيو وڃي، جواب کي لڪايو.
- مشاهدو ڪريو 'ريٽويٽ لڪايو' اختيار.
- تجزياتي
پابنديون ۽ فرض
رياستي فرض
- ٽريفڪ برابر منتشر نه آهي.
- اهو هڪ ٽوئيٽ موڪلڻ لاء سادو هجڻ گهرجي.
- جيستائين توهان جا لکين پيروڪار نه آهن، توهان جي سڀني پوئلڳن ڏانهن هڪ ٽوئيٽ موڪلڻ جلدي ٿيڻ گهرجي.
- 100 ملين فعال استعمال ڪندڙ آھن.
- هر مهيني 15 بلين ٽوئيٽس يا هر روز 500 ملين ٽوئيٽس
- هر ٽوئيٽ ۾ اوسط 10 ترسيل جو فين آئوٽ آهي.
- هر روز، fanout 5 بلين ٽوئيٽس پهچائي ٿو.
- Fanout هر مهيني 150 بلين ٽوئيٽس فراهم ڪري ٿو.
- 250 بلين مهيني پڙهڻ جون درخواستون
- 10 بلين مھينا ڳولها
مقرر وقت
- ٽائيم لائن کي نيوڻ لاء آسان هجڻ گهرجي.
- Twitter لکڻ کان وڌيڪ پڙهڻ بابت آهي.
- تڪڙي ٽوئيٽ پڙهڻ لاءِ بهتر ڪريو
- ٽوئيٽ جو استعمال وقت سازي آهي.
ڳولا
- ڳولا جو عمل تيز ٿيڻ گهرجي.
- اهو ڳولڻ لاء وقت سازي آهي.
استعمال جو اندازو لڳايو
هر ٽوئيٽ جو سائز:
- 8 بائيٽ ٽوئيٽ آئي ڊي
- 32 بائيٽ يوزر-اي ڊي
- متن جا 140 بائيٽ
- ميڊيا - اوسط 10 KB
- ڪل: ~10 KB
هر مهيني، 150 TB تازو ٽوئيٽ مواد ٺاهي ٿو.
- * 500 ملين ٽوئيٽس هر روز * 30 ڏينهن في مهيني * 10 KB في ٽوئيٽ
- ٽن سالن ۾، تازو ٽوئيٽ مواد جو 5.4 پي بي ڪيو ويو آهي.
هر سيڪنڊ ۾ 100,000 پڙهيل درخواستون آهن.
- * (400 درخواستون في سيڪنڊ / 1 بلين درخواستون في مهيني) 250 بلين درخواستون هر مهيني پڙهو
هر سيڪنڊ ۾ 6,000 ٽوئيٽس آهن.
- * (400 درخواستون في سيڪنڊ / 1 بلين درخواستون هر مهيني) 15 بلين ٽوئيٽس هر مهيني
فين آئوٽ تي، هر سيڪنڊ ۾ 60 هزار ٽوئيٽس موڪليا ويندا آهن.
- Fanout هر مهيني 150 بلين ٽوئيٽس فراهم ڪري ٿو * (400 درخواستون في سيڪنڊ / 1 بلين درخواستون هر مهيني).
معلومات لاءِ 4,000 درخواستون هر سيڪنڊ
- * (400 درخواستون في سيڪنڊ / 1 بلين درخواستون في مهيني) 10 بلين ڳولها هر مهيني
ڪجھ مفيد تبديليون
- هر مهيني، 2.5 ملين سيڪنڊ گذري ٿو.
- 2.5 ملين درخواستون هر مهيني 1 درخواست في سيڪنڊ تي
- 100 ملين درخواستون هر مهيني x 40 درخواستون في سيڪنڊ
- 1 بلين درخواستون في مهيني = 400 درخواستون في سيڪنڊ
قدم 2: اعلي سطحي ڊراگرام
قدم 3: بنيادي اجزاء جي وضاحت ڪرڻ
اسان صارف جي ٽائم لائن کي آباد ڪرڻ لاءِ استعمال ڪندڙ جي پنهنجي ٽوئيٽس کي محفوظ ڪري سگھون ٿا (استعمال ڪندڙ کان سرگرمي) هڪ تعلقي ڊيٽابيس ۾ جيڪڏهن اهي ٽوئيٽ جمع ڪن. ٽوئيٽس پهچائڻ ۽ گهر جي ٽائم لائن کي ڊولپ ڪرڻ وڌيڪ ڏکيو آهي (انهن ماڻهن جي سرگرمي جيڪا استعمال ڪندڙ جي پيروي ڪري ٿي).
هڪ عام لاڳاپو وارو ڊيٽابيس سڀني پيروڪارن کي ٽوئيٽس کي فيننگ ڪندي ختم ڪيو ويندو (هر سيڪنڊ ۾ 60 هزار ٽوئيٽس پهچايو). اسان شايد جلدي لکڻ جي ڊيٽا اسٽوريج سان گڏ وڃڻ چاهيون ٿا جهڙوڪ NoSQL ڊيٽابيس يا ميموري ڪيش.
ميموري مان ترتيب وار 1 MB پڙهڻ لڳ ڀڳ 250 مائيڪرو سيڪنڊ لڳن ٿا، پر SSD کان پڙهڻ 4 ڀيرا ڊگهو آهي، ۽ ڊسڪ مان پڙهڻ ۾ 80 ڀيرا ڊگهو وقت آهي.
هڪ آبجیکٹ اسٽور ڊيٽا کي ذخيرو ڪرڻ لاءِ استعمال ٿي سگهي ٿو جهڙوڪ تصويرون ۽ وڊيوز.
- ويب سرور، جيڪو هڪ ريورس پراکسي طور ڪم ڪري رهيو آهي، ڪلائنٽ کان هڪ ٽوئيٽ وصول ڪري ٿو.
- درخواست موڪلي وئي آهي Write API سرور ڏانهن ويب سرور طرفان.
- Write API استعمال ڪندڙ جي ٽائم لائن ۾ ٽوئيٽ کي SQL ڊيٽابيس ۾ محفوظ ڪري ٿو.
فين آئوٽ سروس Write API سان رابطو ڪيو ويو آهي، ۽ اهو هيٺين ڪمن کي انجام ڏئي ٿو.
- ميموري ڪيش ۾ استعمال ڪندڙ جي پوئلڳن کي ڳولي ٿو استعمال ڪندڙ گراف سروس کان سوال ڪندي.
- ميموري ڪيش تي، ٽوئيٽ صارف جي پوئلڳن جي گهر واري ٽائم لائن ۾ محفوظ ڪئي وئي آهي.
- 1,000 پوئلڳ = 1,000 ڏسندڙ ۽ داخل ڪرڻ = O (n) آپريشن.
- ٽوئيٽ جلدي ڳولا لاءِ سرچ انڊيڪس سروس ۾ محفوظ ٿيل آهي.
- آبجیکٹ اسٽور ميڊيا کي ذخيرو ڪرڻ لاء استعمال ڪيو ويندو آهي.
- نوٽيفڪيشن سروس ذريعي پوئلڳن کي پش الرٽ موڪلي ٿو.
- انتباہ موڪلڻ لاءِ هم وقت سازي، اهو استعمال ڪري ٿو قطار.
اسان استعمال ڪري سگھون ٿا ھڪڙي اصلي ريڊس لسٽ ھيٺ ڏنل ڍانچي سان جيڪڏھن اسان جي ميموري ڪيش ريڊيس آھي:
استعمال ڪندڙ جي گهر واري ٽائم لائن کي نئين ٽوئيٽ سان اپڊيٽ ڪيو ويندو، جيڪو ميموري ڪيش ۾ محفوظ ڪيو ويندو. اسان هيٺ ڏنل عوامي REST API استعمال ڪنداسين:
استعمال ڪندڙ ٽائم لائن استعمال ڪندڙ طرفان ڏٺو ويو آهي.
- ويب سرور ڪلائنٽ کان صارف جي ٽائم لائن جي درخواست وصول ڪري ٿو.
- درخواست موڪلي وئي آهي ريڊ API سرور ڏانهن ويب سرور طرفان.
- ريڊ API استعمال ڪندڙ وقت جي فريم لاءِ SQL ڊيٽابيس کي سوال ڪري ٿو.
REST API گهر جي ٽائم لائن تي ساڳيو ڪم ڪندو، استثنا سان ته سڀئي ٽوئيٽس استعمال ڪندڙ کان نڪرندا بلڪه انهن جي پيروي ڪندڙ ماڻهن کان.
هڪ استعمال ڪندڙ لفظن جي ڳولا ڪري ٿو:
- ويب سرور کي ڪلائنٽ کان ڳولا جي درخواست ملي ٿي.
- درخواست ويب سرور پاران سرچ API سرور ڏانهن موڪلي وئي آهي.
قدم 4: Twitter ٽائم لائن
ٽائيم لائن ٺاهڻ هڪ ڏکيو ڪم آهي. ھڪڙو ٽائم لائن ٺاھيندڙ سرور جيڪو ويب يا ايپليڪيشن سرورز سان ڳنڍيندو آھي گھربل آھي.
هر دفعي صارف سائن ان ٿئي ٿو، ٽائم لائن سروس فالورز جي ٽيبل ۾ استعمال ڪندڙن جي نئين ٽوئيٽس جي ٽريڪ کي برقرار رکي ٿي ۽ صارف جي ٽائم لائن کي اپڊيٽ يا ريفريش ڪري ٿي.
اسان هتي ڪنهن به قسم جي درجه بندي سسٽم لاڳو نٿا ڪريون؛ ان جي بدران، اسان اهو فرض ڪريون ٿا ته صارف جي پوئلڳن کان مٿين 5 ٽوئيٽس تخليق جي وقت جي ترتيب ۾ ٽائم لائن ۾ پيش ڪيا ويا آهن. اسان هڪ 50-ٽيوٽ ريفريش ڪٽ آف برقرار رکي سگهون ٿا. اسان اڃا تائين ريفريش ڪرڻ يا ٽائم لائن ٺاهڻ بند ڪريون ٿا ان حد تائين پهچڻ کان پوءِ جيستائين صارف صفحي کي ريفريش نه ڪري.
هاء ويڪرائي ۽ ڪارڪردگي خدشات لائيو صارف فيڊ ٺاهڻ کان ايندا. ان جي بدران، هڪ آف لائن وهڪرو ٺاهڻ جيڪو فوري طور تي پيش ڪري سگهجي ٿو ڪارڪردگي بهتر ڪرڻ جو بهترين طريقو آهي. وقف ٿيل ٽائم لائن سرورز کي ھلايو جيڪو باقاعده بنياد تي ايپليڪيشن سرور کي پنگ ڪري فيڊ کي ريفريش ڪرڻ لاءِ ان وقت جي بنياد تي جيڪو ٺاھيو ويو.
درجه بندي جي الگورتھم کي اھم اشارن کي غور ۾ رکڻ گھرجي ۽ وزن مهيا ڪرڻ گھرجي ته جيئن ضمانت ڏني وڃي ته صارف جي ٽائم لائن تي ھڪڙي يا وڌيڪ اڪائونٽن جي مواد تي غلبہ نه آھي جن جي اھي پيروي ڪندا آھن.
وڌيڪ واضح طور تي، اسان چونڊ ڪري سگھون ٿا خاصيتون لاڳاپيل ڪنهن به فيڊ آئٽم جي مطابقت سان، جهڙوڪ پسند، تبصرو، شيئرز، ۽ تازه ڪاري جو تعداد. انهن مان هر هڪ معيار کي استعمال ڪيو وڃي ٽوئيٽ جي شرح ڪرڻ لاءِ، ۽ پوءِ اهو درجو استعمال ڪيو وڃي ٽائم لائن تي ٽوئيٽس ڏيکارڻ لاءِ.
ڇا اسان کي صارفين کي مسلسل خبردار ڪرڻ گهرجي جڏهن انهن جي نيوز فيڊ لاء نئين مواد دستياب ٿي وڃي؟ صارفين ان کي فائدو حاصل ڪري سگھن ٿا خبردار ڪيو وڃي جڏهن نئين ڊيٽا دستياب ٿي وڃي. موبائل ڊوائيسز تي، جڏهن ته، ڊيٽا جو استعمال ڪافي قيمتي آهي، اهو بينڊوڊٿ ضايع ڪري سگهي ٿو.
نتيجي طور، اسان اختيار ڪري سگھون ٿا ته ڊيٽا کي موبائيل ڊوائيسز ڏانهن نه ڌڪيو ۽ ان جي بدران صارفين کي نئين پوسٽنگ لاء "ريفريش ڪرڻ لاء ڇڪيو" جي اجازت ڏين.
قدم 5: اسڪيلنگ ڊيزائن
هڪ امڪاني رڪاوٽ Fanout سروس آهي. لکين پوئلڳن سان Twitter استعمال ڪندڙن کي انهن جي ٽوئيٽس کي رول آئوٽ ڪرڻ لاءِ ڪيترن ئي منٽن جو انتظار ڪرڻو پوندو. اهو شايد ٽوئيٽ جي جوابن سان هڪ نسل جو سبب بڻجي سگهي ٿو، جنهن کي اسين خدمت جي وقت تي ٽوئيٽس کي ٻيهر ترتيب ڏيڻ کان بچائي سگهون ٿا.
اسان وڏي تعداد ۾ پيروڪار رکندڙ ماڻهن کان ٽوئيٽس پکيڙڻ کان به روڪي سگهون ٿا. ان جي بدران، اسان ڪري سگھون ٿا ڳولا لاءِ ٽوئيٽس لاءِ انتهائي پيروي ڪيل ماڻهن کان، ڳولا جي نتيجن کي استعمال ڪندڙ جي گهر جي ٽائم لائن نتيجن سان گڏ، ۽ پوءِ خدمت جي وقت تي ٽوئيٽس کي ٻيهر ترتيب ڏيو.
اضافي اضافو شامل آهن:
- هر گھر جي ٽائم لائن لاءِ ميموري ڪيش ۾ صرف چند سو ٽوئيٽس رکو.
- ميموري ڪيش ۾، صرف فعال استعمال ڪندڙن جي گھر جي ٽائم لائن معلومات محفوظ ڪئي وئي آھي.
- جيڪڏهن ڪو استعمال ڪندڙ اڳئين 30 ڏينهن ۾ سرگرم نه هجي ها ته اسان SQL ڊيٽابيس مان ڪرنالوجي کي ٻيهر ٺاهي سگهون ٿا.
- اهو معلوم ڪرڻ لاءِ ته صارف ڪير آهي، استعمال ڪريو يوزر گراف سروس.
- ميموري ڪيش ۾ ٽوئيٽس شامل ڪريو انھن کي SQL ڊيٽابيس مان حاصل ڪندي.
- Tweet Info Service صرف هڪ مهيني جي ٽئٽس جي قيمت بچائي سگهي ٿي.
- يوزر انفارميشن سروس ۾، صرف فعال استعمال ڪندڙ محفوظ ڪيا ويا آهن.
- ويڪرائي گھٽ رکڻ لاءِ، سرچ ڪلستر کي اڪثر ضرورت پوندي ته ٽائٽس کي ميموري ۾ برقرار رکڻو پوندو.
ٿڪل
جيتوڻيڪ Twitter هڪ وڏو ادارو آهي، ان ۾ هڪ بهتر آهي سسٽم جي ڊيزائن کي سمجھڻ. مون توهان کي Twitter ٽائم لائن جو هڪ اعليٰ سطحي جائزو مهيا ڪرڻ جي پوري ڪوشش ڪئي.
مون کي اميد آهي ته توهان ان مان مفيد معلومات حاصل ڪئي ۽ ان کي سٺي استعمال ۾ وجهي سگهو ٿا.
جواب ڇڏي وڃو