ElasticSearch سان هاء لوڊ پروجيڪٽ تي لوڊ اصلاح

اي حبر! منهنجو نالو Maxim Vasiliev آهي، مان FINCH ۾ هڪ تجزيه نگار ۽ پروجيڪٽ مينيجر طور ڪم ڪريان ٿو. اڄ مان توهان کي ٻڌائڻ چاهيان ٿو ته ڪيئن، ElasticSearch استعمال ڪندي، اسان 15 منٽن ۾ 6 ملين درخواستن تي عمل ڪرڻ جي قابل هئاسين ۽ اسان جي هڪ ڪلائنٽ جي سائيٽ تي روزاني لوڊ کي بهتر بڻايو. بدقسمتي سان، اسان کي نالن کان سواء ڪرڻو پوندو، ڇاڪاڻ ته اسان وٽ اين ڊي اي آهي، اسان کي اميد آهي ته مضمون جو مواد هن کان متاثر نه ٿيندو. اچو ته هلون.

پروجيڪٽ ڪيئن ڪم ڪري ٿو

اسان جي پس منظر تي، اسان خدمتون ٺاهيندا آهيون جيڪي اسان جي ڪلائنٽ جي ويب سائيٽن ۽ موبائل ايپليڪيشن جي ڪارڪردگي کي يقيني بڻائين. عام ڍانچي جي شڪل ۾ ڏسي سگهجي ٿو:

ElasticSearch سان هاء لوڊ پروجيڪٽ تي لوڊ اصلاح

ڪم جي عمل ۾، اسان وڏي تعداد ۾ ٽرانزيڪشن تي عمل ڪندا آهيون: خريداري، ادائگي، صارف جي بيلنس سان آپريشن، جنهن لاء اسان ڪيترائي لاگز محفوظ ڪندا آهيون، انهي سان گڏ هن ڊيٽا کي درآمد ۽ برآمد ڪريو خارجي سسٽم ڏانهن.

اتي پڻ ريورس پروسيس آهن جڏهن اسان ڪلائنٽ کان ڊيٽا وصول ڪندا آهيون ۽ ان کي صارف ڏانهن منتقل ڪندا آهيون. ان کان علاوه، ادائگي ۽ بونس پروگرامن سان ڪم ڪرڻ لاء اڃا تائين عمل آهن.

مختصر پس منظر

شروعات ۾، اسان PostgreSQL کي صرف ڊيٽا اسٽور طور استعمال ڪيو. DBMS لاءِ ان جا معياري فائدا: ٽرانزيڪشن جي موجودگي، ترقي يافته ڊيٽا نموني جي ٻولي، انضمام لاءِ اوزارن جو وسيع سلسلو؛ سٺي ڪارڪردگي سان گڏ هڪ ڊگهي وقت تائين اسان جي ضرورتن کي پورو ڪيو.

اسان Postgres ۾ بلڪل سمورو ڊيٽا محفوظ ڪيو: ٽرانزيڪشن کان خبرون تائين. پر صارفين جو تعداد وڌي ويو، ۽ ان سان گڏ درخواستن جو تعداد.

سمجھڻ لاءِ، 2017 ۾ صرف ڊيسڪ ٽاپ سائيٽ تي سيشنن جو سالياني تعداد 131 ملين آھي. 2018 ۾ - 125 ملين. 2019 وري 130 ملين. ٻيو 100-200 ملين شامل ڪريو سائيٽ جي موبائل ورزن ۽ موبائل ايپليڪيشن مان، ۽ توھان درخواستن جو هڪ وڏو تعداد حاصل ڪندو.

پروجيڪٽ جي ترقي سان، پوسٽ گريس لوڊ سان مقابلو ڪرڻ بند ڪيو، اسان وٽ وقت نه هو - مختلف سوالن جو هڪ وڏو تعداد ظاهر ٿيو، جنهن لاء اسان ڪافي تعداد ۾ انڊيڪس ٺاهي نه سگهياسين.

اسان سمجھيو ته اتي ٻين ڊيٽا اسٽورن جي ضرورت ھئي جيڪا اسان جي ضرورتن کي مهيا ڪندي ۽ PostgreSQL کي لوڊ ڪندي. Elasticsearch ۽ MongoDB کي ممڪن اختيارن طور سمجهيو ويو. بعد ۾ هيٺين نقطن تي گم ٿي ويو:

  1. سست انڊيڪسنگ جي رفتار جيئن انڊيڪس ۾ ڊيٽا جو مقدار وڌي ٿو. لچڪدار سان، رفتار ڊيٽا جي مقدار تي منحصر نه آهي.
  2. مڪمل متن جي ڳولا ناهي

تنهنڪري اسان پاڻ لاء لچڪدار چونڊيو ۽ منتقلي لاء تيار ڪيو.

لچڪدار ڏانهن منتقلي

1. اسان پوائنٽ آف سيل سرچ سروس کان منتقلي شروع ڪئي. اسان جي ڪلائنٽ وٽ مجموعي طور تي 70 پوائنٽس جو وڪرو آهي، ۽ ان لاءِ سائيٽ ۽ ايپليڪيشن ۾ ڪيترن ئي قسمن جي ڳولا جي ضرورت آهي:

  • شهر جي نالي سان متن جي ڳولا
  • ڪجهه نقطي کان ڏنل ريڊيس اندر جيوسرچ. مثال طور، جيڪڏهن صارف ڏسڻ چاهي ٿو ته وڪرو جا ڪهڙا نقطا سندس گهر جي ويجهو آهن.
  • ڏنل چورس ذريعي ڳولھيو - استعمال ڪندڙ نقشي تي چورس ٺاھي ٿو، ۽ ھن ريڊيس ۾ سڀ نقطا کيس ڏيکاريا ويا آھن.
  • اضافي فلٽر ذريعي ڳولھيو. وڪري جا نقطا هڪ ٻئي کان مختلف آهن ترتيب ۾

جيڪڏهن اسان تنظيم جي باري ۾ ڳالهايون ٿا، پوء پوسٽ گريس ۾ اسان وٽ نقشي ۽ خبرن لاء ڊيٽا جو ذريعو آهي، ۽ لچڪدار سنيپ شاٽ ۾ اصل ڊيٽا مان ورتو ويو آهي. حقيقت اها آهي ته شروعاتي طور تي پوسٽ گريس سڀني معيارن جي ڳولا سان مقابلو نه ڪري سگهيو. نه رڳو اتي ڪيترائي انڊيڪس هئا، اهي به اوورليپ ٿي سگهن ٿا، تنهنڪري پوسٽ گريس شيڊولر گم ٿي ويو ۽ سمجهي نه سگهيو ته ڪهڙي انڊيڪس استعمال ڪجي.

2. ايندڙ قطار ۾ خبرون سيڪشن هو. اشاعت هر روز سائيٽ تي ظاهر ٿيندا آهن ته جيئن صارف معلومات جي وهڪري ۾ گم نه ٿئي، ڊيٽا کي جاري ڪرڻ کان پهريان ترتيب ڏيڻ گهرجي. اھو آھي جنھن لاءِ ڳولا آھي: توھان ڳولھي سگھو ٿا سائيٽ کي ٽيڪسٽ ميچ ذريعي، ۽ ساڳئي وقت اضافي فلٽر ڳنڍي، ڇو ته اھي پڻ لچڪدار ذريعي ٺاھيا ويا آھن.

3. پوء اسان ٽرانزيڪشن پروسيسنگ کي منتقل ڪيو. صارفين سائيٽ تي هڪ خاص پراڊڪٽ خريد ڪري سگهن ٿا ۽ انعام جي ڊرا ۾ حصو وٺي سگهن ٿا. اهڙين خريداري کان پوء، اسان ڊيٽا جي وڏي مقدار تي عمل ڪندا آهيون، خاص طور تي هفتيوار ۽ موڪلن تي. مقابلي لاء، جيڪڏهن عام ڏينهن تي خريداري جو تعداد 1,5-2 ملين جي وچ ۾ آهي، پوء موڪلن تي اهو انگ 53 ملين تائين پهچي سگهي ٿو.

ساڳئي وقت، ڊيٽا کي گهٽ ۾ گهٽ ممڪن وقت ۾ پروسيس ڪيو وڃي - صارفين ڪيترن ئي ڏينهن تائين نتيجن جو انتظار ڪرڻ پسند نه ڪندا آهن. Postgres ذريعي اهڙيون آخري حدون حاصل ڪرڻ جو ڪو به طريقو ناهي - اسان کي اڪثر لاڪ مليا آهن، ۽ جڏهن اسان سڀني درخواستن تي عمل ڪري رهيا هئاسين، صارف چيڪ نه ڪري سگهيا ته کين انعام مليا يا نه. اهو ڪاروبار لاءِ تمام خوشگوار نه آهي ، تنهن ڪري اسان پروسيسنگ کي Elasticsearch ڏانهن منتقل ڪيو.

دشمني

ھاڻي تازه ڪاريون ترتيب ڏنل آھن واقعي جي بنياد تي، ھيٺ ڏنل شرطن جي مطابق:

  1. وڪرو پوائنٽون. جيئن ئي اسان هڪ خارجي ذريعن کان ڊيٽا حاصل ڪندا آهيون، اسان فوري طور تي تازه ڪاري شروع ڪندا آهيون.
  2. خبرون. جيئن ئي سائيٽ تي ڪا به خبر ايڊٽ ٿيندي آهي ته اها پاڻمرادو ايلاسٽڪ ڏانهن موڪلي ويندي آهي.

هتي وري به لچڪدار جي فائدن جو ذڪر ڪرڻ ضروري آهي. Postgres ۾، جڏهن هڪ درخواست موڪلي، توهان کي انتظار ڪرڻو پوندو جيستائين اهو ايمانداري سان سڀني رڪارڊ تي عمل ڪري. توهان موڪلي سگهو ٿا 10 رڪارڊ لچڪدار ڏانهن ۽ فوري طور تي ڪم ڪرڻ شروع ڪريو، رڪارڊ جي سڀني شارڊ ۾ ورهائڻ جو انتظار ڪرڻ کان سواءِ. يقينا، ڪجهه شارڊ يا ريپليڪا شايد ڊيٽا کي ڏسي نه سگھندا، پر هر شيء تمام جلد دستياب ٿي ويندي.

انضمام جا طريقا

لچڪدار سان ضم ڪرڻ جا ٻه طريقا آهن:

  1. TCP مٿان هڪ اصلي ڪلائنٽ ذريعي. اصلي ڊرائيور آهستي آهستي ختم ٿي رهيو آهي: اهو هاڻي سهڪار نه آهي، اهو هڪ تمام ڏکيو نحو آهي. تنهن ڪري، اسان عملي طور تي استعمال نه ڪندا آهيون ۽ ان کي مڪمل طور تي ڇڏڻ جي ڪوشش ڪندا آهيون.
  2. هڪ HTTP انٽرفيس ذريعي جيڪو استعمال ڪري سگھي ٿو JSON درخواستون ۽ Lucene نحو. آخري هڪ ٽيڪسٽ انجڻ آهي جيڪو استعمال ڪري ٿو لچڪدار. هن نسخي ۾، اسان کي حاصل ڪرڻ جي صلاحيت حاصل ڪري بيچ ذريعي JSON درخواستن تي HTTP تي. هي اختيار آهي جيڪو اسان استعمال ڪرڻ جي ڪوشش ڪري رهيا آهيون.

HTTP انٽرفيس جي مهرباني، اسان لائبريريون استعمال ڪري سگھون ٿا جيڪي HTTP ڪلائنٽ جي غير مطابقت واري عمل کي مهيا ڪن ٿيون. اسان فائدو وٺي سگھون ٿا Batch ۽ asynchronous API، جنهن جي نتيجي ۾ اعليٰ ڪارڪردگي، جنهن وڏي پروموشن جي ڏينهن ۾ تمام گهڻي مدد ڪئي (هيٺ ڏنل وڌيڪ)

مقابلي لاءِ ڪجھ نمبر:

  • پوسٽ گريس باونٽي استعمال ڪندڙن کي 20 ٿريڊن ۾ محفوظ ڪرڻ بغير گروپ ڪرڻ: 460713 رڪارڊ 42 سيڪنڊن ۾
  • لچڪدار + رد عمل واري ڪلائنٽ 10 موضوعن لاءِ + بيچ 1000 عناصر لاءِ: 596749 رڪارڊ 11 سيڪنڊن ۾
  • لچڪدار + رد عمل وارو ڪلائنٽ 10 موضوعن لاءِ + بيچ 1000 عناصر لاءِ: 23801684 منٽن ۾ 4 داخلائون

ھاڻي اسان ھڪڙو HTTP درخواست مئنيجر لکيو آھي جيڪو JSON ٺاھي ٿو Batch / not Batch ۽ ان کي ڪنھن HTTP ڪلائنٽ ذريعي موڪلي ٿو، بغير لائبريري جي. توھان پڻ چونڊي سگھو ٿا درخواستون موڪلڻ لاءِ هم وقت سازي يا هم وقت سازي سان.

ڪجهه انضمام ۾، اسان اڃا تائين سرڪاري ٽرانسپورٽ ڪلائنٽ استعمال ڪندا آهيون، پر اهو صرف ايندڙ ريفڪٽرنگ جو معاملو آهي. انهي حالت ۾، اسپرنگ ويب ڪلائنٽ جي بنياد تي ٺهيل هڪ ڪسٽم ڪلائنٽ پروسيسنگ لاء استعمال ڪيو ويندو آهي.

ElasticSearch سان هاء لوڊ پروجيڪٽ تي لوڊ اصلاح

وڏي واڌاري

سال ۾ هڪ ڀيرو، پروجيڪٽ صارفين لاء وڏي واڌاري جي ميزباني ڪري ٿو - اهو ساڳيو هاء لوڊ آهي، ڇاڪاڻ ته هن وقت اسان هڪ ئي وقت تي لکين لکن صارفين سان ڪم ڪري رهيا آهيون.

عام طور تي لوڊ جون چوٽيون موڪلن دوران ٿينديون آهن، پر هي واڌارو مڪمل طور تي مختلف سطح تي آهي. گذريل سال اڳ، واڌاري جي ڏينهن تي، اسان وڪرو ڪيو 27 يونٽ سامان. ڊيٽا کي اڌ ڪلاڪ کان وڌيڪ عرصي تائين پروسيس ڪيو ويو، جنهن جي ڪري صارفين کي تڪليف ڏني وئي. صارفين کي شرڪت لاء انعام مليا، پر اهو واضح ٿيو ته عمل کي تيز ڪرڻ جي ضرورت آهي.

2019 جي شروعات ۾، اسان فيصلو ڪيو ته اسان کي ضرورت آھي ElasticSearch. هڪ سڄي سال لاء، اسان ايلسٽڪ ۾ وصول ڪيل ڊيٽا جي پروسيسنگ کي منظم ڪيو ۽ موبائل ايپليڪيشن ۽ ويب سائيٽ جي اي پي آئي ۾ جاري ڪيو. نتيجي طور، ايندڙ سال مهم دوران، اسان عمل ڪيو 15 منٽن ۾ 131 داخلائون.

جيئن ته اسان وٽ ڪيترائي ماڻهو آهن جيڪي شيون خريد ڪرڻ چاهيندا آهن ۽ پروموشنز ۾ انعام جي ڊرائنگ ۾ حصو وٺندا آهن، اهو هڪ عارضي انداز آهي. ھاڻي اسان موڪلي رھيا آھيون تازه ترين معلومات لچڪدار ڏانھن، پر مستقبل ۾ اسان رٿابندي ڪريون ٿا گذريل مھينن لاءِ محفوظ ڪيل معلومات پوسٽ گريس ڏانھن مستقل ذخيري جي طور تي. لچڪدار انڊيڪس کي بند نه ڪرڻ لاءِ، جنهن جون به حدون آهن.

نتيجو/ نتيجو

هن وقت، اسان اهي سڀئي خدمتون منتقل ڪيون آهن جيڪي اسان لچڪدار ڏانهن چاهيون ٿا ۽ هن وقت تائين روڪي ڇڏيو آهي. هاڻي اسان پوسٽ گريس ۾ مکيه مسلسل اسٽوريج جي چوٽي تي لچڪدار ۾ هڪ انڊيڪس ٺاهي رهيا آهيون، جيڪو صارف جي لوڊ تي کڻندو آهي.

مستقبل ۾، اسان خدمتن کي منتقل ڪرڻ جو منصوبو ڪريون ٿا جيڪڏهن اسان سمجهون ٿا ته ڊيٽا جي درخواست تمام متنوع ٿي وڃي ٿي ۽ ڪالمن جي لامحدود تعداد جي ڳولا ڪئي وئي آهي. هي هاڻي Postgres لاء هڪ ڪم نه آهي.

جيڪڏهن اسان کي فنڪشنلٽي ۾ مڪمل متن جي ڳولا جي ضرورت آهي يا جيڪڏهن اسان وٽ ڪيترائي مختلف ڳولا معيار آهن، ته پوءِ اسان اڳ ۾ ئي ڄاڻون ٿا ته ان کي لچڪدار ۾ ترجمو ڪرڻ جي ضرورت آهي.

⌘⌘⌘

پڙهڻ لاءِ مهرباني. جيڪڏهن توهان جي ڪمپني پڻ استعمال ڪري ٿي ElasticSearch ۽ ان جا پنهنجا عملدرآمد ڪيس آهن، پوءِ اسان کي ٻڌايو. اهو ڄاڻڻ دلچسپ ٿيندو ته ٻيا ڪيئن آهن 🙂

جو ذريعو: www.habr.com

تبصرو شامل ڪريو