HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

ايندڙ HighLoad++ ڪانفرنس 6 ۽ 7 اپريل 2020 تي سينٽ پيٽرسبرگ ۾ ٿيندي.
تفصيل ۽ ٽڪيٽون لنڪ. HighLoad++ سائبيريا 2019. هال "Krasnoyarsk". 25 جون، 12:00. ٿيسز ۽ پيشڪش.

HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

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

ميخائل ٽيولينيف (هاڻي بعد ۾ ايم ٽي طور حوالو ڏنو ويو): - مان ڳالهائيندس Causal consistency بابت - هي هڪ خاصيت آهي جنهن تي اسان MongoDB ۾ ڪم ڪيو آهي. مان ورهايل سسٽم جي هڪ گروپ ۾ ڪم ڪريان ٿو، اسان اهو اٽڪل ٻه سال اڳ ڪيو.

HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

ان عمل ۾، مون کي پاڻ کي تمام گهڻي علمي تحقيق کان واقف ڪرڻو پيو، ڇاڪاڻ ته هن مضمون جو ڪافي اڀياس ڪيو ويو آهي. اهو ظاهر ٿيو ته هڪ به مضمون ان ۾ نه ٿو ٺهي جيڪو پيداوار ڊيٽابيس ۾ گهربل آهي خاص ضرورتن جي ڪري جيڪي شايد ڪنهن به پيداوار واري ايپليڪيشن ۾ موجود آهن.

مان ان بابت ڳالهائيندس ته ڪيئن اسان، علمي تحقيق جي صارفن جي حيثيت ۾، ان مان ڪا شيءِ تيار ڪريون ٿا، جنهن کي پوءِ اسان پنهنجي استعمال ڪندڙن کي هڪ تيار ٿيل ڊش طور پيش ڪري سگهون ٿا، جيڪا استعمال ۾ آسان ۽ محفوظ هجي.

ڪارڻ مطابقت. اچو ته تصورات جي وضاحت ڪريون

شروع ڪرڻ سان، مان عام اصطلاحن ۾ چوڻ چاهيان ٿو ته Causal consistency ڇا آهي. اتي ٻه ڪردار آهن - ليونارڊ ۽ پيني (ٽي وي سيريز "دي بگ بينگ ٿيوري"):

HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

اچو ته چوندا آهن پيني يورپ ۾ آهي ۽ ليونارڊ هن کي هڪ تعجب واري پارٽي اڇلائڻ چاهي ٿو. ۽ هو هن کي پنهنجي دوستن جي فهرست مان اڇلائڻ کان بهتر ڪجهه به نه ٿو سوچي سگهي، پنهنجي سڀني دوستن کي فيڊ تي هڪ تازه ڪاري موڪلڻ: "اچو پيني کي خوش ڪريون!" (هوءَ يورپ ۾ آهي، جڏهن هوءَ سمهي رهي آهي، ته هوءَ اهو سڀ ڪجهه نٿي ڏسي ۽ نه ئي ڏسي سگهي ٿي، ڇاڪاڻ ته هوءَ اتي ناهي). آخرڪار، هوء هن پوسٽ کي ختم ڪري ٿي، ان کي فيڊ مان ختم ڪري ٿي ۽ رسائي بحال ڪري ٿي ته جيئن هوء ڪجهه نوٽيس نه ڪري ۽ ڪو به اسڪينڊل نه آهي.
اهو سڀ ڪجهه سٺو ۽ سٺو آهي، پر اچو ته فرض ڪريون ته سسٽم ورهايو ويو آهي ۽ شيون ٿورو غلط ٿي ويا آهن. اهو ٿي سگهي ٿو، مثال طور، پيني جي رسائي جي پابندي هن پوسٽ جي ظاهر ٿيڻ کان پوء ٿي، جيڪڏهن واقعا سبب ۽ اثر سان لاڳاپيل نه آهن. دراصل، هي هڪ مثال آهي جڏهن ڪاروباري فنڪشن انجام ڏيڻ لاءِ Causal مستقل مزاجي جي ضرورت آهي (هن صورت ۾).

حقيقت ۾، اهي ڊيٽابيس جون ڪافي غير معمولي ملڪيت آهن - تمام ٿورا ماڻهو انهن جي حمايت ڪن ٿا. اچو ته ماڊلز ڏانهن وڃو.

مطابقت جا ماڊل

ڊيٽابيس ۾ هڪ مستقل مزاجي ماڊل ڇا آهي؟ اهي ڪجهه ضمانتون آهن جيڪي هڪ ورهايل سسٽم ڏئي ٿو ته ڪلائنٽ ڪهڙي ڊيٽا حاصل ڪري سگهي ٿو ۽ ڪهڙي ترتيب ۾.

اصولي طور تي، سڀني تسلسل جا ماڊل هيٺ اچن ٿا ته ڪيئن هڪ ورهايل سسٽم هڪ سسٽم سان آهي جيڪو هلندو آهي، مثال طور، هڪ ليپ ٽاپ تي هڪ نوڊ تي. ۽ ائين ئي هڪ اهڙو سسٽم آهي جيڪو هزارين جيو ورهايل ”نوڊس“ تي هلندو آهي هڪ ليپ ٽاپ ڏانهن، جنهن ۾ اهي سڀئي خاصيتون پاڻمرادو اصولي طور تي ڪم ڪن ٿيون.

تنهن ڪري، استحڪام ماڊل صرف ورهايل سسٽم تي لاڳو ٿين ٿا. سڀئي سسٽم جيڪي اڳ ۾ موجود هئا ۽ ساڳئي عمودي اسڪيلنگ تي هلندا هئا انهن مسئلن جو تجربو نه ڪيو. اتي ھڪڙو بفر ڪيش ھو، ۽ ھر شيءِ ھميشه ان مان پڙھي ويندي ھئي.

ماڊل مضبوط

دراصل، پهريون ماڊل مضبوط آهي (يا اڀار جي صلاحيت واري لائن، جيئن ته اهو اڪثر سڏيو ويندو آهي). هي هڪ تسلسل وارو نمونو آهي جيڪو يقيني بڻائي ٿو ته هر تبديلي، هڪ ڀيرو تصديق ڪئي وئي آهي ته اها ٿي چڪي آهي، سسٽم جي سڀني استعمال ڪندڙن کي نظر اچي ٿي.

هي ڊيٽابيس ۾ سڀني واقعن جو عالمي ترتيب ٺاهي ٿو. هي هڪ تمام مضبوط استحڪام ملڪيت آهي، ۽ اهو عام طور تي تمام قيمتي آهي. بهرحال، اهو تمام سٺو سپورٽ آهي. اهو صرف تمام مهانگو ۽ سست آهي - اهو صرف گهٽ استعمال ڪيو ويندو آهي. هن کي اڀرڻ جي صلاحيت سڏيو ويندو آهي.

اتي هڪ ٻي، مضبوط ملڪيت آهي جيڪا اسپنر ۾ سپورٽ ڪئي وئي آهي - خارجي تسلسل سڏيو ويندو آهي. اسان ان بابت ٿوري دير بعد ڳالهائينداسين.

ڪاڻ

ايندڙ هڪ Causal آهي، جيڪو بلڪل ائين آهي جنهن بابت آئون ڳالهائي رهيو هوس. Strong ۽ Causal جي وچ ۾ ٻيا به ڪيترائي ذيلي سطح آهن جن جي باري ۾ مان نه ڳالهائيندس، پر اهي سڀئي Causal ڏانهن وڌندا آهن. هي هڪ اهم نمونو آهي ڇاڪاڻ ته اهو سڀني ماڊلن جو مضبوط ترين آهي، نيٽ ورڪ يا پارٽيشن جي موجودگي ۾ مضبوط استحڪام.

Causals اصل ۾ هڪ اهڙي صورتحال آهي جنهن ۾ واقعا هڪ سبب ۽ اثر جي رشتي سان ڳنڍيل آهن. گهڻو ڪري اهي سمجهيا ويندا آهن جيئن پڙهو توهان جي حقن تي ڪلائنٽ جي نقطي نظر کان. جيڪڏهن ڪلائنٽ ڪجهه قدرن جو مشاهدو ڪيو آهي، هو اهي قدر نه ڏسي سگهندا جيڪي ماضي ۾ هئا. هو اڳي ئي پڙهڻ شروع ڪري رهيو آهي. اهو سڀ هڪ ئي شيء هيٺ اچي ٿو.
هڪ تسلسل ماڊل جي طور تي Causals سرور تي واقعن جو هڪ جزوي ترتيب آهي، جنهن ۾ سڀني مراجعين جي واقعن کي ساڳئي ترتيب ۾ مشاهدو ڪيو ويندو آهي. هن معاملي ۾، Leonard ۽ Penny.

واقعو

ٽيون ماڊل واقعو مطابقت آهي. اھو اھو آھي جيڪو بلڪل سڀني ورهايل سسٽم کي سپورٽ ڪري ٿو، گھٽ ۾ گھٽ ماڊل جيڪو سمجھي ٿو. ان جو مطلب هي آهي: جڏهن اسان وٽ ڊيٽا ۾ ڪجهه تبديليون آهن، ڪجهه نقطي تي اهي هڪجهڙائي بڻجي ويندا آهن.

اهڙي موقعي تي هوءَ ڪجهه به نه چوندي، ٻي صورت ۾ هوءَ خارجي تسلسل ۾ بدلجي ويندي - اها هڪ بلڪل مختلف ڪهاڻي هوندي. تنهن هوندي به، هي هڪ تمام مشهور ماڊل آهي، سڀ کان عام. ڊفالٽ طور، ورهايل سسٽم جا سڀئي صارف استعمال ڪن ٿا واقعا مطابقت.

مان ڪجهه تقابلي مثال ڏيڻ چاهيان ٿو:

HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

انهن تيرن جو مطلب ڇا آهي؟

  • دير. جيئن ته استحڪام جي طاقت وڌي ٿي، اهو واضح سببن لاء وڏو ٿي ويندو آهي: توهان کي وڌيڪ رڪارڊ ٺاهڻ جي ضرورت آهي، سڀني ميزبانن ۽ نوڊس کان تصديق حاصل ڪريو جيڪي ڪلستر ۾ حصو وٺندا آهن ته ڊيٽا اڳ ۾ ئي موجود آهي. ان جي مطابق، واقعن جي تسلسل جو تيز ترين جواب آهي، ڇاڪاڻ ته اتي، ضابطي جي طور تي، توهان ان کي يادگيري تائين به ڪري سگهو ٿا ۽ اهو اصول ۾، ڪافي هوندو.
  • دستياب جيڪڏهن اسان ان کي سمجهون ٿا ته سسٽم جي صلاحيت نيٽ ورڪ جي ڀڃڪڙي، ورهاڱي، يا ڪنهن قسم جي ناڪامي جي موجودگي ۾ جواب ڏيڻ جي، غلطي برداشت وڌائي ٿي جيئن مستقل مزاجي ماڊل گهٽجي وڃي، ڇاڪاڻ ته اهو اسان لاء ڪافي آهي ته هڪ ميزبان رهي ٿو ۽ ساڳئي وقت. وقت ڪجهه ڊيٽا پيدا ڪري ٿو. واقعي جي تسلسل ڊيٽا جي باري ۾ ڪجھ به ضمانت نٿو ڏئي - اهو ڪجهه به ٿي سگهي ٿو.
  • انتشار. ساڳئي وقت، يقينا، غير معمولي تعداد وڌائي ٿو. مضبوط تسلسل ۾ اهي تقريباً موجود نه هجڻ گهرجن، پر واقعي مستقل مزاجي ۾ اهي ڪجهه به ٿي سگهن ٿا. سوال پيدا ٿئي ٿو: ماڻهو ڇو چونڊيندا آهن Eventual Consistency جيڪڏهن ان ۾ بي ضابطگيون هجن؟ جواب اهو آهي ته واقعا مطابقت جا ماڊل لاڳو آهن ۽ بي ضابطگيون موجود آهن، مثال طور، ٿوري وقت ۾؛ اهو ممڪن آهي ته وزرڊ استعمال ڪري پڙهڻ لاءِ ۽ وڌيڪ يا گهٽ پڙهڻ لاءِ مسلسل ڊيٽا؛ اهو اڪثر ڪري ممڪن آهي مضبوط استحڪام ماڊل استعمال ڪرڻ لاء. عملي طور تي اهو ڪم ڪري ٿو، ۽ اڪثر وقت ۾ بي ضابطگين جو تعداد محدود آهي.

CAP نظريو

جڏهن توهان لفظن کي مستقل مزاجي، دستيابي ڏسو - توهان جي ذهن ۾ ڇا اچي ٿو؟ اھو صحيح آھي - CAP نظريو! ھاڻي مان ان افساني کي ختم ڪرڻ چاھيان ٿو... اھو مان نه آھيان - اھو آھي مارٽن ڪليپمين، جنھن ھڪڙو شاندار مضمون لکيو، ھڪڙو شاندار ڪتاب.

HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

CAP Theorem 2000s ۾ ٺھيل ھڪ اصول آھي ته مطابقت، دستيابي، ورھاڱي: ڪنھن به ٻه کي وٺو، ۽ توھان ٽن کي نه چونڊي سگھوٿا. اهو هڪ خاص اصول هو. اهو ڪجهه سالن بعد گلبرٽ ۽ لنچ پاران هڪ نظريي طور ثابت ڪيو ويو. ان کان پوء اهو هڪ منتر طور استعمال ٿيڻ لڳو - سسٽم CA، CP، AP وغيره ۾ ورهائڻ شروع ڪيو.

ھي نظريو اصل ۾ ھيٺين صورتن لاءِ ثابت ٿيو... پھريائين، دستيابي کي صفر کان سوين تائين مسلسل قدر نه سمجھيو ويو (0 - سسٽم "ميل" آھي، 100 - تڪڙو جواب ڏئي ٿو؛ اسان ان تي غور ڪرڻ جا عادي آھيون) ، پر الگورٿم جي ملڪيت جي طور تي، جيڪو ضمانت ڏئي ٿو ته ان جي سڀني عملن لاءِ اهو ڊيٽا واپس ڪري ٿو.

جوابي وقت جي باري ۾ هڪ لفظ به نه آهي! اتي ھڪڙو الورورٿم آھي جيڪو 100 سالن کان پوء ڊيٽا واپس آڻيندو آھي - ھڪڙو بلڪل شاندار دستياب الورورٿم، جيڪو CAP ٿيوريم جو حصو آھي.
ٻيو: نظريو ثابت ڪيو ويو آهي تبديلين لاءِ هڪ ئي ڪنجي جي قدرن جي، ان حقيقت جي باوجود ته اهي تبديليون ريزائيبل آهن. هن جو مطلب اهو آهي ته حقيقت ۾ اهي عملي طور تي استعمال نه ڪيا ويا آهن، ڇاڪاڻ ته ماڊل مختلف واقعا تسلسل، مضبوط تسلسل (شايد) آهن.

هي سڀ ڇا لاءِ آهي؟ ان کان علاوه، CAP نظريو بلڪل ان شڪل ۾ جنهن ۾ اهو ثابت ڪيو ويو آهي عملي طور تي قابل اطلاق نه آهي ۽ گهٽ ۾ گهٽ استعمال ٿيندو آهي. نظرياتي شڪل ۾، اهو ڪنهن به طرح هر شيء کي محدود ڪري ٿو. اهو هڪ خاص اصول ظاهر ڪري ٿو جيڪو صحيح طور تي صحيح آهي، پر عام طور تي ثابت نه ڪيو ويو آهي.

Causal consistency مضبوط ترين ماڊل آهي

هاڻي ڇا ٿي رهيو آهي ته توهان سڀ ٽي شيون حاصل ڪري سگهو ٿا: تسلسل، دستيابي استعمال ڪندي ورهاڱي. خاص طور تي، Causal consistency (Causal consistency) مضبوط ترين مستقل مزاجي وارو نمونو آهي، جيڪو اڃا تائين پارٽيشنز (نيٽ ورڪ ۾ بريڪ) جي موجودگيءَ ۾ ڪم ڪري ٿو. اهو ئي سبب آهي ته اهو تمام گهڻي دلچسپي آهي، ۽ اهو ئي سبب آهي ته اسان ان کي ورتو.

HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

پهرين، اهو ايپليڪيشن ڊولپرز جي ڪم کي آسان بڻائي ٿو. خاص طور تي، سرور کان وڏي مدد جي موجودگي: جڏهن سڀئي رڪارڊ جيڪي هڪ ڪلائنٽ جي اندر ٿين ٿا، هڪ ٻئي ڪلائنٽ تي ساڳئي ترتيب ۾ اچڻ جي ضمانت ڏني وئي آهي. ٻيو، اهو partitions کي برداشت ڪري ٿو.

MongoDB اندروني باورچی خانه

ياد رهي ته اهو لنچ آهي، اسان باورچی خانه ڏانهن وڃو. مان توهان کي سسٽم ماڊل جي باري ۾ ٻڌايان ٿو، يعني مونگو ڊي بي انهن لاء ڇا آهي جيڪي پهريون ڀيرو اهڙي ڊيٽابيس بابت ٻڌي رهيا آهن.

HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

MongoDB (هتي حوالو ڏنو ويو آهي "MongoDB") هڪ ورهايل نظام آهي جيڪو افقي اسڪيلنگ کي سپورٽ ڪري ٿو، اهو آهي، شارڊنگ؛ ۽ هر شارڊ جي اندر اهو پڻ سپورٽ ڪري ٿو ڊيٽا جي بيڪارگي، يعني نقل.

MongoDB ۾ شارڊنگ (هڪ لاڳاپو ڊيٽابيس نه آهي) خودڪار توازن انجام ڏئي ٿو، اهو آهي، هر دستاويزن جو مجموعو (يا "ٽيبل" تعلقي ڊيٽا جي لحاظ کان) ٽڪرن ۾ ورهايل آهي، ۽ سرور خودڪار طريقي سان انهن کي شارڊ جي وچ ۾ منتقل ڪري ٿو.

سوال روٽر، جيڪو درخواستن کي تقسيم ڪري ٿو، هڪ ڪلائنٽ لاء ڪجهه ڪلائنٽ آهي جنهن جي ذريعي اهو ڪم ڪري ٿو. اهو اڳ ۾ ئي ڄاڻي ٿو ته ڪٿي ۽ ڪهڙي ڊيٽا واقع آهي ۽ سڀني درخواستن کي درست شارڊ ڏانهن هدايت ڪري ٿو.

ٻيو اهم نقطو: MongoDB هڪ واحد ماسٽر آهي. اتي ھڪڙو پرائمري آھي - اھو رڪارڊ وٺي سگھي ٿو جيڪي ڪنجين کي سپورٽ ڪن ٿيون جيڪي ان ۾ شامل آھن. توهان ملٽي ماسٽر لکڻ نٿا ڪري سگهو.

اسان جاري ڪيو 4.2 - نئين دلچسپ شيون اتي ظاهر ٿيو. خاص طور تي، انهن لوسن داخل ڪيو - ڳولا - يعني ايگزيڪيوٽيبل جاوا سڌو مونگو ۾، ۽ اتي اهو ممڪن ٿيو ته لوسن ذريعي ڳولا ڪرڻ، ساڳيء طرح ايلسٽيڪا ۾.

۽ انهن هڪ نئين پيداوار ٺاهي - چارٽس، اهو پڻ موجود آهي Atlas (مونگو جي پنهنجي ڪلائوڊ). انهن وٽ هڪ مفت ٽائر آهي - توهان ان سان گڏ راند ڪري سگهو ٿا. مون کي واقعي پسند ڪيو چارٽس - ڊيٽا بصري، تمام وجداني.

اجزاء Causal consistency

مون اٽڪل 230 آرٽيڪل ڳڻيا آهن جيڪي هن موضوع تي شايع ڪيا ويا آهن - ليسلي لامپرٽ کان. هاڻي مان پنهنجي يادگيري مان توهان کي انهن مواد جا ڪجهه حصا پهچائيندس.

HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

اهو سڀ ڪجهه Leslie Lampert جي هڪ مضمون سان شروع ٿيو، جيڪو 1970s ۾ لکيو ويو هو. جئين توهان ڏسي سگهو ٿا، هن موضوع تي ڪجهه تحقيق اڃا تائين جاري آهي. هاڻي Causal consistency ورهايل نظام جي ترقي جي سلسلي ۾ دلچسپي جو تجربو آهي.

پابنديون

اتي ڪهڙيون پابنديون آهن؟ اهو اصل ۾ هڪ اهم نقطو آهي، ڇاڪاڻ ته پابنديون جيڪي هڪ پيداواري نظام لاڳو ڪري ٿو انهن پابندين کان بلڪل مختلف آهن جيڪي تعليمي مضمونن ۾ موجود آهن. اهي اڪثر ڪري ڪافي مصنوعي آهن.

HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

  • پهرين، "مونگو ڊي بي" هڪ واحد ماسٽر آهي، جيئن مون اڳ ۾ ئي چيو آهي (هي تمام گهڻو آسان بڻائي ٿو).
  • اسان سمجهون ٿا ته سسٽم کي اٽڪل 10 هزار شارڊ جي حمايت ڪرڻ گهرجي. اسان ڪي به تعميراتي فيصلا نٿا ڪري سگهون جيڪو واضح طور تي هن قدر کي محدود ڪري.
  • اسان وٽ ھڪڙو بادل آھي، پر اسان فرض ڪريون ٿا ته ھڪڙو ماڻھو اڃا تائين موقعو ھئڻ گھرجي جڏھن ھو بائنري ڊائون لوڊ ڪري، ان کي پنھنجي ليپ ٽاپ تي ھلائي، ۽ سڀ ڪجھ ڪم ڪري ٿو.
  • اسان ڪجھ فرض ڪريون ٿا جيڪو تحقيق تمام گھٽ فرض ڪري ٿو: خارجي گراهڪ جيڪي ڪجھھ چاھين ٿا ڪري سگھن ٿا. MongoDB کليل ذريعو آهي. ان جي مطابق، گراهڪ تمام هوشيار ۽ ناراض ٿي سگهن ٿا - اهي هر شي کي ٽوڙڻ چاهيندا. اسان اندازو لڳايو ته بازنطيني فيلرز پيدا ٿي سگھي ٿو.
  • ٻاهرين گراهڪن لاءِ جيڪي حد کان ٻاهر آهن، اتي هڪ اهم حد آهي: جيڪڏهن اها خصوصيت غير فعال آهي، ته پوءِ ڪارڪردگيءَ ۾ ڪا گهٽتائي نه ٿيڻ گهرجي.
  • هڪ ٻيو نقطو عام طور تي علمي مخالف آهي: اڳوڻي نسخن ۽ مستقبل جي مطابقت. پراڻن ڊرائيورن کي نون اپڊيٽس کي سپورٽ ڪرڻ گهرجي، ۽ ڊيٽابيس کي پراڻن ڊرائيورن کي سپورٽ ڪرڻ گهرجي.

عام طور تي، هي سڀ پابنديون لاڳو ڪري ٿو.

Causal consistency اجزاء

هاڻي مان ڪجهه حصن بابت ڳالهائيندس. جيڪڏهن اسان عام طور تي Causal consistency تي غور ڪريون ٿا، اسان بلاڪ چونڊي سگھون ٿا. اسان انھن ڪمن مان چونڊيو جيڪي ھڪڙي خاص بلاڪ سان تعلق رکن ٿا: انحصار جي ٽريڪنگ، گھڙين جو انتخاب، اھي گھڙيون ڪيئن ھڪٻئي سان هم وقت سازي ڪري سگھجن ٿيون، ۽ اسان حفاظت کي ڪيئن يقيني بڻائي سگھون ٿا - اھو ھڪڙو خراب خاڪو آھي جنھن بابت مان ڳالھائيندس:

HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

مڪمل انحصار ٽريڪنگ

ان جي ضرورت ڇو آهي؟ تنهن ڪري جڏهن ڊيٽا کي نقل ڪيو ويندو آهي، هر رڪارڊ، هر ڊيٽا جي تبديلي ۾ معلومات شامل آهي ته ڪهڙي تبديلين تي منحصر آهي. سڀ کان پهرين ۽ غير معمولي تبديلي آهي جڏهن هر پيغام جنهن ۾ رڪارڊ شامل آهي، اڳوڻي پيغامن بابت معلومات تي مشتمل آهي:

HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

ھن مثال ۾، گھمڻ واري برائوٽس ۾ نمبر رڪارڊ نمبر آھي. ڪڏهن ڪڏهن اهي رڪارڊ قدرن سان گڏ مڪمل طور تي منتقل ڪيا ويا آهن، ڪڏهن ڪڏهن ڪجهه نسخن کي منتقل ڪيو ويو آهي. هيٺئين لڪير اها آهي ته هر تبديلي ۾ پوئين هڪ جي باري ۾ معلومات شامل آهي (ظاهر آهي ته اهو سڀ ڪجهه پاڻ ۾ آهي).

اسان اهو طريقو استعمال نه ڪرڻ جو فيصلو ڇو ڪيو (مڪمل ٽريڪنگ)؟ ظاهر آهي، ڇاڪاڻ ته هي طريقو غير عملي آهي: سماجي نيٽ ورڪ ۾ ڪا به تبديلي ان سماجي نيٽ ورڪ تي سڀني پوئين تبديلين تي منحصر آهي، منتقلي، چئو، فيسبوڪ يا VKontakte هر اپڊيٽ ۾. تنهن هوندي به، مڪمل انحصار جي ٽريڪنگ تي تمام گهڻي تحقيق آهي - اهي اڳ-سماجي نيٽ ورڪ آهن؛ ڪجهه حالتن لاءِ اهو واقعي ڪم ڪري ٿو.

واضح انحصار ٽريڪنگ

ايندڙ هڪ وڌيڪ محدود آهي. معلومات جي منتقلي پڻ هتي سمجهيو ويندو آهي، پر صرف اهو آهي جيڪو واضح طور تي منحصر آهي. ڇا تي منحصر آهي، ضابطي جي طور تي، ايپليڪيشن طرفان طئي ڪيو ويو آهي. جڏهن ڊيٽا نقل ڪئي وئي آهي، سوال صرف جواب ڏئي ٿو جڏهن پوئين انحصار مطمئن ٿي ويا آهن، اهو آهي، ڏيکاريل آهي. اهو ئي جوهر آهي ته Causal consistency ڪيئن ڪم ڪري ٿي.

HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

هوءَ ڏسي ٿي ته رڪارڊ 5 تي دارومدار رکي ٿو رڪارڊ 1، 2، 3، 4 - مطابق، هوءَ انتظار ڪري ٿي ته ڪلائنٽ کي پيني جي رسائي جي فيصلي طرفان ڪيل تبديلين تائين پهچ کان اڳ، جڏهن سڀ پويون تبديليون اڳ ۾ ئي ڊيٽابيس مان گذري چڪيون آهن.

اهو اسان کي به مناسب ناهي، ڇاڪاڻ ته اڃا تائين تمام گهڻي ڄاڻ آهي، ۽ اهو شيون سست ڪندو. اتي هڪ ٻيو طريقو آهي ...

لامپورٽ ڪلاڪ

اهي تمام پراڻا آهن. Lamport Clock جو مطلب آهي ته اهي انحصار هڪ اسڪيلر فنڪشن ۾ جڙيل آهن، جنهن کي Lamport Clock سڏيو ويندو آهي.

هڪ اسڪيلر فنڪشن ڪجهه خلاصو نمبر آهي. اهو اڪثر ڪري منطقي وقت سڏيو ويندو آهي. هر واقعي سان، هي انسداد وڌي ٿو. انسداد، جيڪو هن وقت پروسيس کي ڄاڻي ٿو، هر پيغام موڪلي ٿو. اهو واضح آهي ته عمل هم وقت سازي کان ٻاهر ٿي سگهن ٿا، اهي مڪمل طور تي مختلف وقت هوندا. پر ان جي باوجود، سسٽم ڪنهن به طرح اهڙي پيغام سان ڪلاڪ کي بيلنس ڪري ٿو. هن معاملي ۾ ڇا ٿيندو؟

مان ان وڏي شارڊ کي ٻن حصن ۾ ورهائيان ٿو ان کي واضح ڪرڻ لاءِ: دوست هڪ نوڊ ۾ رهي سگهن ٿا، جنهن ۾ ڪليڪشن جو هڪ ٽڪڙو هوندو آهي، ۽ فيڊ ٻئي نوڊ ۾ رهي سگهي ٿو، جنهن ۾ هن مجموعي جو هڪ ٽڪرو هوندو آهي. ڇا اهو واضح آهي ته اهي ڪيئن لڪير کان ٻاهر نڪري سگهن ٿا؟ پهرين فيڊ چوندو: "نقل ٿيل"، ۽ پوء دوست. جيڪڏهن سسٽم ڪنهن قسم جي گارنٽي فراهم نه ڪندو آهي ته فيڊ کي نه ڏيکاريو ويندو جيستائين دوستن جي مجموعي ۾ دوستن جي انحصار کي به پهچايو وڃي، پوء اسان وٽ بلڪل اها صورتحال هوندي جنهن جو مون ذڪر ڪيو آهي.

توهان ڏسو ٿا ته فيڊ تي انسداد جو وقت منطقي طور تي ڪيئن وڌي ٿو:

HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

تنهن ڪري هن Lamport Clock جي مکيه ملڪيت ۽ Causal consistency (Lamport Clock ذريعي وضاحت ڪئي وئي آهي) هي آهي: جيڪڏهن اسان وٽ واقعا A ۽ B آهن، ۽ واقعا B واقعا A* تي منحصر آهي، ته پوءِ اهو ٻڌائي ٿو ته واقعي جو منطقي وقت A کان گهٽ آهي. Logical Time from Event B.

* ڪڏهن ڪڏهن اهي به چوندا آهن ته A ٿيو B کان اڳ، يعني A ٿيو B کان اڳ - اهو هڪ خاص تعلق آهي جيڪو جزوي طور تي سڀني واقعن جي مجموعي کي ترتيب ڏئي ٿو جيڪي عام طور تي ٿيا آهن.

ان جي ابتڙ غلط آهي. اهو اصل ۾ لامپورٽ ڪلاڪ جي مکيه نقصانن مان هڪ آهي - جزوي ترتيب. هڪ ئي وقت ٿيندڙ واقعن بابت هڪ تصور آهي، يعني اهي واقعا جن ۾ نه (A واقعو B کان اڳ ٿيو) ۽ نه ئي (ب کان اڳ A ٿيو). هڪ مثال هوندو ليونارڊ جو متوازي اضافو ڪنهن ٻئي جي دوست جي حيثيت ۾ (نه ليونارڊ، پر شيلڊن، مثال طور).
اها ملڪيت آهي جيڪا اڪثر استعمال ٿيندي آهي جڏهن لامپورٽ گھڙين سان ڪم ڪندي آهي: اهي خاص طور تي فنڪشن تي نظر اچن ٿا ۽ ان مان اهي نتيجو ڪن ٿا ته شايد اهي واقعا منحصر آهن. ڇاڪاڻ ته هڪ طريقي سان اهو سچ آهي: جيڪڏهن LogicalTime A LogicalTime B کان گهٽ آهي، ته B A کان اڳ نه ٿي سگهي. ۽ جيڪڏهن وڌيڪ، پوء شايد.

ویکٹر ڪلاڪ

Lamport گھڙي جي منطقي ترقي ویکٹر گھڙي آھي. انهن ۾ فرق آهي ته هتي موجود هر نوڊ پنهنجي الڳ ڪلاڪ تي مشتمل آهي، ۽ اهي هڪ ویکٹر طور منتقل ڪيا ويا آهن.
هن حالت ۾، توهان ڏسندا ته ویکٹر جي زيروٿ انڊيڪس فيڊ لاء ذميوار آهي، ۽ ویکٹر جي پهرين انڊيڪس دوستن لاء آهي (انهن نوڊس مان هر هڪ). ۽ ھاڻي اھي وڌندا: "فيڊ" جو صفر انڊيڪس وڌندو آھي جڏھن لکڻ - 1, 2, 3:

HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

ویکٹر ڪلاڪ بهتر ڇو آهي؟ ڇو ته اهي توهان کي اهو ڄاڻڻ جي اجازت ڏين ٿا ته ڪهڙا واقعا گڏ ٿين ٿا ۽ جڏهن اهي مختلف نوڊس تي ٿين ٿيون. اهو مونگو ڊي بي وانگر شارڊنگ سسٽم لاءِ تمام ضروري آهي. بهرحال، اسان اهو نه چونڊيو آهي، جيتوڻيڪ اهو هڪ عجيب شيء آهي، ۽ اهو تمام سٺو ڪم ڪري ٿو، ۽ اهو شايد اسان کي مناسب هوندو ...

جيڪڏهن اسان وٽ 10 هزار شارڊز آهن، ته اسان 10 هزار جزن کي منتقل نه ٿا ڪري سگهون، جيتوڻيڪ اسان ان کي دٻائي ڇڏيون يا ٻيو ڪجهه آڻيون- پيل لوڊ اڃا به هن سڄي ويڪٽر جي حجم کان ڪيترائي ڀيرا ننڍو هوندو. تنهن ڪري، اسان جي دلين ۽ ڏندن کي ڇڪيندي، اسان اهو طريقو ڇڏي ڏنو ۽ ٻئي ڏانهن هليا ويا.

اسپنر TrueTime. ايٽمي ڪلاڪ

مون چيو ته اسپينر جي باري ۾ هڪ ڪهاڻي هوندي. هي هڪ بهترين شيء آهي، سڌو XNUMX صدي کان ٻاهر: ايٽمي ڪلاڪ، GPS هم وقت سازي.

ڇا خيال آهي؟ "اسپنر" هڪ گوگل سسٽم آهي جيڪو تازو ئي ماڻهن لاءِ دستياب ٿي چڪو آهي (انهن ان ۾ SQL شامل ڪيو). هر ٽرانزيڪشن تي ڪجهه وقت جي اسٽيمپ آهي. وقت کان وٺي هم وقت سازي ڪئي وئي آهي *، هر واقعي کي هڪ مخصوص وقت مقرر ڪري سگهجي ٿو - ايٽمي گھڙين جو هڪ انتظار جو وقت آهي، جنهن کان پوء هڪ مختلف وقت "ٿيڻ" جي ضمانت آهي.

HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

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

* هي لامپارٽ گھڙين جو بنيادي مسئلو آهي - اهي ڪڏهن به ورهايل سسٽم تي هم وقت ساز نه هوندا آهن. اهي ڌار ٿي سگهن ٿا؛ جيتوڻيڪ اين ٽي پي سان، اهي اڃا تائين تمام سٺو ڪم نٿا ڪن. "اسپنر" وٽ ايٽمي ڪلاڪ ۽ هم وقت سازي آهي، اهو لڳي ٿو، مائڪرو سيڪنڊ آهي.

اسان ڇو نه چونڊيو؟ اسان اهو نه ٿا سمجهون ته اسان جي صارفين وٽ ٺهيل ايٽمي ڪلاڪ آهي. جڏهن اهي ظاهر ٿيندا آهن، هر ليپ ٽاپ ۾ ٺاهي رهيا آهن، اتي ڪجهه قسم جي سپر ٿلهي GPS هم وقت سازي هوندي - پوء ها ... پر هن وقت لاء بهترين ممڪن آهي Amazon، بيس اسٽيشنون - جنوني لاء ... تنهنڪري اسان استعمال ڪيو ٻيون واچون .

هائبرڊ ڪلاڪ

اهو اصل ۾ آهي جيڪو مونگو ڊي بي ۾ ٽڪي ٿو جڏهن Causal مستقل مزاجي کي يقيني بڻائي ٿي. اهي هائبرڊ ڪيئن آهن؟ هائبرڊ هڪ اسڪيلر قدر آهي، پر ان جا ٻه حصا آهن:

HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

  • پهريون يونڪس دور آهي (ڪيترا سيڪنڊ گذري ويا آهن "ڪمپيوٽر جي دنيا جي شروعات" کان وٺي).
  • ٻيو ڪجهه واڌارو آهي، پڻ هڪ 32-bit غير دستخط ٿيل انٽ.

اهو سڀ ڪجهه آهي، اصل ۾. اهو طريقو آهي: اهو حصو جيڪو وقت جو ذميوار آهي، هر وقت ڪلاڪ سان هم وقت سازي ڪيو ويندو آهي. هر دفعي اپڊيٽ ٿئي ٿي، اهو حصو گھڙي سان هم وقت سازي ڪيو ويندو آهي ۽ اهو ظاهر ٿئي ٿو ته وقت هميشه گهٽ يا گهٽ صحيح آهي، ۽ واڌارو توهان کي انهن واقعن جي وچ ۾ فرق ڪرڻ جي اجازت ڏئي ٿو جيڪي ساڳئي وقت تي واقع ٿيا آهن.

مونگو ڊي بي لاءِ هي اهم ڇو آهي؟ ڇو ته اهو توهان کي اجازت ڏئي ٿو ته ڪجهه قسم جي بيڪ اپ ريسٽورنٽ کي وقت ۾ هڪ خاص نقطي تي، اهو آهي، واقعي وقت جي ترتيب سان ترتيب ڏنل آهي. اهو ضروري آهي جڏهن ڪجهه واقعا گهربل آهن؛ ڊيٽابيس لاءِ، واقعا ڊيٽابيس ۾ تبديليون آهن جيڪي وقت جي ڪجهه وقفن تي ٿينديون آهن.

مان توهان کي سڀ کان اهم سبب صرف توهان کي ٻڌايان ٿو (مهرباني ڪري، ڪنهن کي نه ٻڌايو)! اسان اهو ڪيو ڇاڪاڻ ته اهو ئي آهي جيڪو منظم ڪيو ويو آهي، ترتيب ڏنل ڊيٽا مونگو ڊي بي اوپي لاگ ۾ نظر اچي ٿي. OpLog هڪ ڊيٽا جي جوڙجڪ آهي جنهن ۾ ڊيٽابيس ۾ بلڪل سڀني تبديلين تي مشتمل آهي: اهي پهريان OpLog ڏانهن ويندا آهن، ۽ پوء اهي ان صورت ۾ پاڻ کي اسٽوريج تي لاڳو ٿين ٿا جڏهن اها نقل ٿيل تاريخ يا شارڊ آهي.

اهو بنيادي سبب هو. اڃا تائين، ڊيٽابيس کي ترقي ڪرڻ لاء عملي گهربل پڻ آهن، جنهن جو مطلب آهي ته اهو سادو هجڻ گهرجي - ننڍڙو ڪوڊ، ممڪن طور تي ڪجهه ٽوٽل شيون جن کي ٻيهر لکڻ ۽ جانچڻ جي ضرورت آهي. حقيقت اها آهي ته اسان جي اوپلاگس کي ترتيب ڏنل هائيبرڊ گھڙين جي مدد ڪئي وئي ۽ اسان کي صحيح انتخاب ڪرڻ جي اجازت ڏني. اهو واقعي ادا ڪيو ۽ ڪنهن به طرح جادوگر طور تي پهرين پروٽوٽائپ تي ڪم ڪيو. اهو تمام ٿڌو هو!

گھڙي جي هم وقت سازي

سائنسي ادب ۾ بيان ڪيل ڪيترن ئي هم وقت سازي جا طريقا آهن. مان هم وقت سازي جي ڳالهه ڪري رهيو آهيان جڏهن اسان وٽ ٻه مختلف شارڊ آهن. جيڪڏهن هڪ ريپليڪا سيٽ آهي، اتي ڪنهن به هم وقت سازي جي ڪا ضرورت ناهي: هي هڪ "اڪيلو ماسٽر" آهي؛ اسان وٽ ھڪڙو OpLog آھي، جنھن ۾ سڀ تبديليون اچي وڃن ٿيون - ھن صورت ۾، سڀ ڪجھ اڳ ۾ ئي ترتيب ڏنل آھي "Oplog" پاڻ ۾. پر جيڪڏهن اسان وٽ ٻه مختلف حصا آهن، وقت جي هم وقت سازي هتي اهم آهي. هي آهي جتي ویکٹر گھڙي وڌيڪ مدد ڪئي! پر اسان وٽ اهي نه آهن.

HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

ٻيو مناسب آهي - هي آهي "دل جي ڌڙڪن". اهو ممڪن آهي ته ڪجهه سگنلن کي مٽائڻ جيڪي وقت جي هر يونٽ ۾ ٿين ٿيون. پر دل جي ڌڙڪن تمام سست آهن، اسان پنهنجي ڪلائنٽ کي دير نه ٿا ڪري سگهون.

سچو وقت، يقينا، هڪ عجيب شيء آهي. پر، ٻيهر، اهو شايد مستقبل آهي ... جيتوڻيڪ اهو اڳ ۾ ئي ٿي سگهي ٿو Atlas ۾، اتي اڳ ۾ ئي تيز آهن "Amazon" وقت جي هم وقت سازي. پر اهو هر ڪنهن لاءِ دستياب نه هوندو.

گپ شپ آهي جڏهن سڀني پيغامن ۾ وقت شامل آهي. اهو لڳ ڀڳ آهي جيڪو اسان استعمال ڪندا آهيون. هر پيغام جي وچ ۾ نوڊس، هڪ ڊرائيور، هڪ ڊيٽا نوڊ روٽر، بلڪل MongoDB لاء هر شيء ڪجهه قسم جو عنصر آهي، هڪ ڊيٽابيس جو حصو جنهن ۾ هڪ ڪلاڪ شامل آهي جيڪو هلندو آهي. انهن ۾ هر هنڌ هائيبرڊ وقت جي معنيٰ آهي، ان کي منتقل ڪيو ويندو آهي. 64 بٽ؟ اهو اجازت ڏئي ٿو، اهو ممڪن آهي.

اهو سڀ گڏجي ڪم ڪيئن ڪندو؟

ھتي مان ھڪڙي ريپليڪا سيٽ کي ڏسي رھيو آھيان ان کي ٿورو آسان بڻائڻ لاءِ. پرائمري ۽ سيڪنڊري آهن. ثانوي نقل ڪندو آهي ۽ هميشه پرائمري سان مڪمل طور تي هم وقت نه هوندو آهي.

هڪ داخل ٿئي ٿو "پرائمري" ۾ هڪ خاص وقت جي قيمت سان. هي داخل ڪرڻ اندروني ڳڻپ وڌائي ٿو 11، جيڪڏهن اهو وڌ ۾ وڌ آهي. يا اھو گھڙي جي قيمتن کي جانچيندو ۽ گھڙي سان هم وقت سازي ڪندو جيڪڏھن گھڙي جا قدر وڏا آھن. اهو توهان کي وقت جي ترتيب سان ترتيب ڏيڻ جي اجازت ڏئي ٿو.

هن جي رڪارڊنگ کان پوء، هڪ اهم لمحو ٿئي ٿو. گھڙي "MongoDB" ۾ آھي ۽ صرف "Oplog" تي لکڻ جي صورت ۾ وڌايو ويندو آھي. اهو واقعو آهي جيڪو نظام جي حالت کي تبديل ڪري ٿو. بلڪل سڀني کلاسي مضمونن ۾، ھڪڙو واقعو سمجھيو ويندو آھي جڏھن ھڪڙو پيغام ھڪڙي نوڊ کي ماريندو آھي: پيغام پھتو آھي، جنھن جو مطلب آھي سسٽم پنھنجي حالت کي تبديل ڪيو آھي.

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

اها قيمت جيڪا اڳي ئي ”اوپلاگ“ ڏانهن لکيل آهي، واپس ڪئي وئي آهي- اسان ڄاڻون ٿا ته ”اوپلاگ“ ۾ اڳ ۾ ئي اها قيمت موجود آهي، ۽ ان جو وقت 12 آهي. هاڻي چئو، پڙهڻ جي شروعات ڪنهن ٻئي نوڊ (ثانوي) کان ٿيندي آهي، ۽ اها ڪلستر ٽائيم کان پوءِ منتقل ٿيندي آهي. پيغام. هو چوي ٿو: "مون کي هر شيء جي ضرورت آهي جيڪا گهٽ ۾ گهٽ 12 کان پوء يا ٻارهن جي دوران" (مٿي تصوير ڏسو).

اهو ئي آهي جنهن کي سڏيو ويندو آهي Causal a consistent (CAT). نظريي ۾ اهڙو تصور موجود آهي ته هي وقت جو ڪجهه ٽڪرو آهي، جيڪو پاڻ ۾ هڪجهڙائي رکي ٿو. هن معاملي ۾، اسان اهو چئي سگهون ٿا ته اهو نظام جي حالت آهي جيڪو 12 وقت تي ڏٺو ويو هو.

ھاڻي ھتي ڪجھ به نه آھي، ڇو ته ھن قسم جي صورتحال کي نقل ڪري ٿو جڏھن توھان کي ضرورت آھي سيڪنڊري کي پرائمري کان ڊيٽا کي نقل ڪرڻ لاءِ. هو انتظار ڪري ٿو... ۽ هاڻي ڊيٽا اچي چڪو آهي - هو انهن قدرن کي واپس ڏئي ٿو.

HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

اهو تمام گهڻو آهي ته اهو ڪيئن ڪم ڪري ٿو. لڳ ڀڳ.

ڇا مطلب آهي "تقريبا"؟ اچو ته فرض ڪريون ته ڪو اهڙو ماڻهو آهي جنهن پڙهيو آهي ۽ سمجهيو آهي ته اهو سڀ ڪجهه ڪيئن ٿو ڪم ڪري. مون محسوس ڪيو ته هر دفعي ڪلستر ٽائيم ٿئي ٿو، اهو اندروني منطقي گھڙي کي اپڊيٽ ڪري ٿو، ۽ پوء ايندڙ داخلا هڪ طرف وڌائي ٿو. هي فنڪشن 20 لائنون وٺندو آهي. اچو ته چون ٿا ته هي شخص سڀ کان وڏو 64-بٽ نمبر منتقل ڪري ٿو، مائنس هڪ.

ڇو "مائنس هڪ"؟ ڇاڪاڻ ته اندروني گھڙي کي هن قيمت ۾ تبديل ڪيو ويندو (ظاهر آهي، اهو سڀ کان وڏو ممڪن آهي ۽ موجوده وقت کان وڌيڪ آهي)، پوء هڪ داخلا "Oplog" ۾ ٿيندي، ۽ گھڙي ٻي يونٽ طرفان وڌايو ويندو - ۽ اڳ ۾ ئي هوندو. وڌ ۾ وڌ قدر هجي (هتي صرف سڀئي يونٽ آهن، اتي وڃڻ لاءِ ٻيو ڪٿي به ناهي) , unsaint ints).

اهو واضح آهي ته ان کان پوء اهو نظام ڪنهن به شيء لاء بلڪل ناقابل آهي. اهو صرف ان لوڊ ۽ صاف ڪري سگهجي ٿو - تمام گهڻو دستي ڪم. مڪمل دستيابي:

HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

ان کان علاوه، جيڪڏهن اهو ٻي جاء تي نقل ڪيو ويو آهي، ته پوء سڄو ڪلستر صرف هيٺ ڪري ٿو. هڪ بلڪل ناقابل قبول صورتحال جيڪا هر ڪنهن کي منظم ڪري سگهي ٿي تمام جلدي ۽ آساني سان! تنهن ڪري، اسان هن پل کي سڀ کان اهم سمجهيو. ان کي ڪيئن روڪڻ لاء؟

اسان جو طريقو آهي سائن ان ڪرڻ جو ڪلستر ٽائيم

اهو ڪيئن پيغام ۾ منتقل ڪيو ويو آهي (نيري متن کان اڳ). پر اسان پڻ هڪ دستخط پيدا ڪرڻ شروع ڪيو (نيرو متن):

HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

دستخط هڪ ڪنجي ذريعي ٺاهيل آهي جيڪا ڊيٽابيس جي اندر محفوظ ڪئي وئي آهي، هڪ محفوظ دائري اندر؛ پاڻ ٺاهيل ۽ اپڊيٽ ٿيل آهي (صارفين کي ان بابت ڪجھ به نه ڏسندا). هڪ هيش ٺاهي وئي آهي، ۽ هر پيغام تي دستخط ڪيو ويندو آهي جڏهن ٺاهي وئي ۽ تصديق ڪئي وئي جڏهن وصول ڪئي وئي.
اهو سوال شايد ماڻهن جي ذهنن ۾ پيدا ٿئي ٿو: "هي شيون ڪيترو سست ڪري ٿو؟" مون توهان کي ٻڌايو ته اهو جلدي ڪم ڪرڻ گهرجي، خاص طور تي هن خاصيت جي غير موجودگي ۾.

هن معاملي ۾ Causal consistency استعمال ڪرڻ جو ڇا مطلب آهي؟ اھو آھي ڏيکاريو afterClusterTime پيٽرول. انهي کان سواء، اهو صرف قدرن کي هرگز پاس ڪندو. گپ شپ، نسخو 3.6 کان شروع، هميشه ڪم ڪري ٿو.

جيڪڏهن اسان دستخط جي مسلسل نسل کي ڇڏي ڏيو، اهو سسٽم کي سست ڪري ڇڏيندو جيتوڻيڪ هڪ خاصيت جي غير موجودگي ۾، جيڪو اسان جي طريقيڪار ۽ ضرورتن کي پورو نٿو ڪري. پوءِ اسان ڇا ڪيو؟

جلدي ڪر!

اها ڪافي سادي شيء آهي، پر چال دلچسپ آهي - مان ان کي حصيداري ڪندس، ٿي سگهي ٿو ڪنهن کي دلچسپي وٺندي.
اسان وٽ هڪ هيش آهي جيڪو ذخيرو ٿيل ڊيٽا کي محفوظ ڪري ٿو. سڀ ڊيٽا ڪيش ذريعي وڃي ٿو. ڪيش مخصوص وقت تي دستخط نه ڪندو آهي، پر رينج. جڏهن ڪجهه قدر اچي ٿي، اسان هڪ رينج ٺاهي، آخري 16 بٽ کي ڇڪيندا آهيون، ۽ اسان هن قيمت تي دستخط ڪريون ٿا:

HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

اهڙي دستخط حاصل ڪرڻ سان، اسان سسٽم کي تيز ڪيو (نسبتا) 65 هزار ڀيرا. اهو تمام سٺو ڪم ڪري ٿو: جڏهن اسان تجربا ڪيا، وقت اصل ۾ 10 هزار ڀيرا گهٽجي ويو جڏهن اسان وٽ هڪ ترتيب واري تازه ڪاري هئي. اهو واضح آهي ته جڏهن اهي اختلاف آهن، اهو ڪم نٿو ڪري. پر اڪثر عملي ڪيسن ۾ اهو ڪم ڪري ٿو. دستخط سان گڏ رينج جي دستخط جو ميلاپ سيڪيورٽي مسئلو حل ڪيو.

اسان ڇا سکيو آهي؟

ان مان اسان سبق سکيو:

  • اسان کي مواد، ڪهاڻيون، مضمون پڙهڻ جي ضرورت آهي، ڇاڪاڻ ته اسان وٽ تمام گهڻيون دلچسپ شيون آهن. جڏهن اسان ڪجهه خاصيتن تي ڪم ڪريون ٿا (خاص طور تي هاڻي، جڏهن اسان ٽرانزيڪشن ڪيو، وغيره)، اسان کي پڙهڻ ۽ سمجهڻ جي ضرورت آهي. اهو وقت وٺندو آهي، پر اهو اصل ۾ تمام مفيد آهي ڇو ته اهو واضح ڪري ٿو ته اسان ڪٿي آهيون. اسان کي ڪا نئين شيءِ نظر نٿي اچي - اسان صرف اجزاء ورتو.

    عام طور تي، اتي سوچ ۾ هڪ خاص فرق آهي جڏهن هڪ علمي ڪانفرنس آهي (سگمون، مثال طور) - هرڪو نون خيالن تي ڌيان ڏئي ٿو. اسان جي الگورتھم بابت نئون ڇا آهي؟ هتي ڪا خاص نئين ڳالهه ناهي. جديديت بلڪه ان ۾ آهي ته اسان موجوده طريقن کي گڏجي گڏ ڪيو. تنهن ڪري، پهرين شيء آهي کلاسي پڙهڻ، Lampart سان شروع.

  • پيداوار ۾، گهرجون مڪمل طور تي مختلف آهن. مون کي پڪ آھي ته توھان مان گھڻن کي ”گوليءَ“ ڊيٽابيس سان سامھون نه آھن خلاصي خلا ۾، پر عام، حقيقي شين سان جن کي دستيابي، ويڪرائي ۽ غلطي رواداري سان مسئلا آھن.
  • آخري ڳالهه اها آهي ته اسان کي مختلف نظرين کي ڏسڻو هو ۽ ڪيترن ئي مڪمل طور تي مختلف مضمونن کي هڪ طريقي سان گڏ ڪرڻو هو. دستخط جي باري ۾ خيال، مثال طور، عام طور تي هڪ آرٽيڪل مان آيو آهي جيڪو Paxos پروٽوڪول سمجهي ٿو، جيڪو غير بازنطيني ناڪامين لاء اختيار جي پروٽوڪول جي اندر آهي، بزنطين وارن لاء - اجازت ڏيڻ واري پروٽوڪول کان ٻاهر ... عام طور تي، اهو ئي آهي جيڪو اسان ڪرڻ ختم ڪيو.

    هتي بلڪل نئين ناهي! پر جيئن ئي اسان سڀني کي گڏ ڪيو ... اهو ساڳيو ئي چوڻ آهي ته اوليور سلاد جو طريقو بيڪار آهي، ڇاڪاڻ ته انڊا، ميئونيز ۽ ڪڪڙين اڳ ۾ ئي ايجاد ٿي چڪا آهن ... اها ساڳي ڪهاڻي بابت آهي.

HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

مان هن سان ختم ڪندس. تنهنجي مهرباني!

توهان جا سوال

سامعين کان سوال (هتي B جي طور تي حوالو ڏنو ويو): - توهان جي مهرباني، ميخائل، رپورٽ لاء! وقت جو موضوع دلچسپ آهي. توهان گپ شپ استعمال ڪري رهيا آهيو. هنن چيو ته هر ڪنهن جو پنهنجو وقت آهي، هر ڪنهن کي پنهنجي مقامي وقت جي خبر آهي. جيئن ته مان سمجهان ٿو، اسان وٽ هڪ ڊرائيور آهي - ڊرائيور سان گڏ ڪيترائي گراهڪ ٿي سگهن ٿا، سوال-منصوبه بندي ڪندڙ پڻ، شارڊ پڻ ... ۽ سسٽم ڇا هيٺ اچي ٿو جيڪڏهن اسان کي اوچتو هڪ اختلاف آهي: ڪو فيصلو ڪري ٿو ته اهو هڪ لاء آهي منٽ اڳتي، ڪو هڪ منٽ پٺيان؟ اسان ڪٿي ختم ڪنداسين؟

ايم ٽي: - واقعي وڏو سوال! مان صرف شارڊز بابت ڳالهائڻ چاهيان ٿو. جيڪڏهن مان سوال کي صحيح سمجهان ٿو، ته اسان وٽ هيٺين صورتحال آهي: شارڊ 1 ۽ شارڊ 2 آهي، پڙهڻ انهن ٻن شارڊن مان ٿئي ٿو - انهن ۾ اختلاف آهي، اهي هڪ ٻئي سان لهه وچڙ ۾ نه ٿا اچن، ڇاڪاڻ ته اهي ڄاڻن ٿا ته وقت مختلف آهي. خاص طور تي جڏهن اهي oplogs ۾ موجود آهن.
اچو ته چون ٿا ته شارڊ 1 ملين رڪارڊ ٺاهيو، شارڊ 2 ڪجھ به نه ڪيو، ۽ درخواست ٻن شارڊ تي آئي. ۽ پھريون ھڪڙي ھڪڙي ملين کان وڌيڪ ڪلستر ٽائيم آھي. اهڙي صورتحال ۾، جيئن مون وضاحت ڪئي، شارڊ 2 ڪڏهن به جواب نه ڏيندو.

۾: - مان ڄاڻڻ چاهيان ٿو ته اهي ڪيئن هم وقت سازي ڪن ۽ هڪ منطقي وقت چونڊيو؟

ايم ٽي: - هم وقت سازي ڪرڻ بلڪل آسان. شارڊ، جڏهن ڪلستر ٽائم کان پوء هن وٽ اچي ٿو ۽ هن کي "اوپلاگ" ۾ وقت نه ملندو آهي، ڪو به منظور ٿيل نه آهي. اھو آھي، ھو پنھنجي ھٿن سان پنھنجو وقت ھن قدر تائين وڌائي ٿو. هن جو مطلب آهي ته هن درخواست سان ملندڙ ڪو به واقعو نه آهي. هو هن واقعي کي مصنوعي طور ٺاهي ٿو ۽ اهڙيءَ طرح Causal Consistent ٿئي ٿو.

۾: - ڇا جيڪڏهن هن کان پوء ڪجهه ٻيا واقعا هن وٽ اچن جيڪي نيٽ ورڪ ۾ ڪٿي گم ٿي ويا آهن؟

ايم ٽي: - شارڊ کي اهڙي طرح ٺاهيو ويو آهي ته اهي ٻيهر نه ايندا، ڇاڪاڻ ته اهو هڪ واحد ماسٽر آهي. جيڪڏهن هن پهريان ئي سائن اپ ڪيو آهي، پوء اهي نه ايندا، پر بعد ۾ ايندا. ائين نه ٿو ٿي سگهي ته ڪا شيءِ ڪٿي ڦاسي پوي، پوءِ هو نه لکندو، ۽ پوءِ اهي واقعا پهچندا آهن- ۽ سببن جي تسلسل ٽٽي پوندي آهي. جڏهن هو ڪجهه نه لکندو، اهي سڀئي اڳتي اچن (هو انهن جو انتظار ڪندو).

HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

۾: - مون وٽ قطار جي حوالي سان ڪيترائي سوال آھن. Causal consistency فرض ڪري ٿي ته عملن جي هڪ مخصوص قطار آهي جنهن کي انجام ڏيڻ جي ضرورت آهي. ڇا ٿيندو جيڪڏهن اسان جو هڪ پيڪيج غائب ٿي وڃي؟ هتي اچي ٿو 10 هين، 11 هين ... 12 هين غائب ٿي وئي آهي، ۽ باقي سڀ ان جي سچي ٿيڻ جو انتظار ڪري رهيا آهن. ۽ اوچتو اسان جي ڪار مري ويو، اسان ڪجھ به نٿا ڪري سگهون. ڇا قطار جي وڌ ۾ وڌ ڊگھائي آھي جيڪا عمل ٿيڻ کان اڳ جمع ٿئي ٿي؟ ڪھڙي موتمار ناڪامي ٿئي ٿي جڏھن ڪنھن ھڪڙي رياست کي وڃائي ڇڏيو وڃي؟ ان کان سواء، جيڪڏهن اسان اهو لکندا آهيون ته ڪا اڳئين حالت آهي، ته پوء اسان کي ان کان شروع ڪرڻ گهرجي؟ پر انهن کيس پري نه ڪيو!

ايم ٽي: - پڻ هڪ وڏو سوال! اسان ڇا ڪري رهيا آهيون؟ MongoDB جو تصور آهي corum writes، corum reads. ڪهڙن حالتن ۾ پيغام گم ٿي سگهي ٿو؟ جڏهن لکڻ جو ڪورم نه هوندو آهي يا جڏهن پڙهڻ جو ڪورم نه هوندو آهي (ڪجهه قسم جو گند به چپڪندو هجي).
Causal consistency جي حوالي سان هڪ وڏو تجرباتي امتحان ورتو ويو، جنهن جو نتيجو اهو نڪتو ته جڏهن لکڻ ۽ پڙهڻ ۾ ڪورم نه هجي ته Causal consistency جي ڀڃڪڙي ٿئي ٿي. بلڪل ائين ئي چئو!

اسان جي صلاح: گھٽ ۾ گھٽ ڪورم پڙھڻ استعمال ڪريو جڏهن Causal consistency استعمال ڪريو. انهي صورت ۾، ڪجھ به نه وڃايو ويندو، جيتوڻيڪ ڪورم رڪارڊ گم ٿي ويو آهي ... هي هڪ orthogonal صورتحال آهي: جيڪڏهن صارف نٿو چاهي ته ڊيٽا گم ٿي وڃي، هن کي ڪورم رڪارڊ استعمال ڪرڻ جي ضرورت آهي. Causal consistency durability جي ضمانت نٿو ڏئي. استحڪام نقل ۽ نقل سان لاڳاپيل مشينري جي ضمانت آهي.

۾: - جڏھن اسان ھڪڙو مثال ٺاھيو آھي جيڪو اسان لاء شارڊنگ انجام ڏئي ٿو (ترتيب سان ماسٽر نه، پر غلام)، اھو پنھنجي مشين جي يونڪس وقت تي يا "ماسٽر" جي وقت تي ڀاڙي ٿو. ڇا اهو پهريون ڀيرو يا وقتي طور تي هم وقت سازي آهي؟

ايم ٽي: - مان هاڻي واضح ڪندس. شارڊ (يعني افقي ورهاڱي) - اتي هميشه ھڪڙو پرائمري آھي. ۽ هڪ شارڊ هڪ "ماسٽر" ٿي سگهي ٿو ۽ اتي به ٿي سگهي ٿو replicas. پر شارڊ هميشه رڪارڊنگ کي سپورٽ ڪري ٿو، ڇاڪاڻ ته ان کي ڪجهه ڊومين جي حمايت ڪرڻ گهرجي (شارڊ پرائمري آهي).

۾: - پوء سڀڪنھن شيء کي خالص "ماسٽر" تي منحصر آهي؟ ڇا ماسٽر ٽائيم هميشه استعمال ٿيندو آهي؟

ايم ٽي: - ها. توهان علامتي طور تي چئي سگهو ٿا: ڪلاڪ ٽڪندي آهي جڏهن "ماسٽر" ۾ داخل ٿيڻ، "اوپلاگ" ۾ داخل ٿئي ٿي.

۾: - اسان وٽ ھڪڙو گراهڪ آھي جيڪو ڳنڍيندو آھي ۽ وقت بابت ڪجھ ڄاڻڻ جي ضرورت نه آھي؟

ايم ٽي: - توهان کي ڪجهه به ڄاڻڻ جي ضرورت ناهي! جيڪڏهن اسان ڳالهايون ٿا ته اهو ڪلائنٽ تي ڪيئن ڪم ڪري ٿو: جڏهن ڪلائنٽ استعمال ڪرڻ چاهي ٿو Causal consistency، هن کي هڪ سيشن کولڻ جي ضرورت آهي. ھاڻي سڀ ڪجھ موجود آھي: سيشن ۾ ٽرانزيڪشن، ۽ حق حاصل ڪريو... ھڪ سيشن آھي ڪلائنٽ سان ٿيندڙ منطقي واقعن جي ترتيب.

جيڪڏهن هو هن سيشن کي کوليندو آهي ۽ اتي چوي ٿو ته هو Causal consistency چاهي ٿو (جيڪڏهن سيشن ڊفالٽ طور Causal consistency جي حمايت ڪري ٿو)، هر شي خودڪار طريقي سان ڪم ڪري ٿي. ڊرائيور هن وقت کي ياد ڪري ٿو ۽ ان کي وڌائي ٿو جڏهن اهو نئون پيغام ملي ٿو. اهو ياد آهي ته اڳوڻو هڪ سرور کان ڪهڙو جواب آيو جيڪو ڊيٽا واپس آيو. ايندڙ درخواست تي مشتمل هوندي afterCluster ("هن کان وڌيڪ وقت").

ڪلائنٽ کي بلڪل ڪجهه ڄاڻڻ جي ضرورت ناهي! اها ڳالهه هن لاء مڪمل طور تي مبهم آهي. جيڪڏهن ماڻهو اهي خاصيتون استعمال ڪن ٿا، اهي ڇا ڪري سگهن ٿا؟ پهرين، توهان محفوظ طور تي سيڪنڊري پڙهي سگهو ٿا: توهان پرائمري ڏانهن لکي سگهو ٿا ۽ جاگرافيائي طور تي نقل ٿيل ثانوي کان پڙهي سگهو ٿا ۽ پڪ ڪريو ته اهو ڪم ڪري ٿو. ساڳي ئي وقت، سيشن جيڪي پرائمري تي رڪارڊ ڪيا ويا هئا سي به سيڪنڊري ڏانهن منتقل ٿي سگهن ٿا، يعني توهان استعمال ڪري سگهو ٿا هڪ سيشن نه، پر ڪيترائي.

۾: - ڪمپيوٽ سائنس جي هڪ نئين پرت - CRDT (ڪنفليڪٽ فري ريپليڪيٽڊ ڊيٽا ٽائيپس) ڊيٽا جا قسم - واقعي جي تسلسل جي موضوع سان مضبوطي سان لاڳاپيل آهي. ڇا توھان ان قسم جي ڊيٽا کي ڊيٽابيس ۾ ضم ڪرڻ تي غور ڪيو آھي ۽ توھان ان بابت ڇا ٿا چئي سگھو؟

ايم ٽي: - سٺو سوال! CRDT لکڻ جي تضاد لاءِ سمجھ ۾ اچي ٿو: MongoDB ۾، اڪيلو ماسٽر.

۾: - مون کي ڊپ کان هڪ سوال آهي. حقيقي دنيا ۾، اهڙيون Jesuitical حالتون آهن جڏهن بازنطيني ناڪامي ٿئي ٿي، ۽ برائي ماڻهو محفوظ علائقي جي اندر اندر پروٽوڪول ۾ ڌڪڻ شروع ڪن ٿا، هڪ خاص طريقي سان ڪرافٽ پيڪيجز موڪليندا آهن؟

HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

ايم ٽي: - بڇڙا ماڻهو اندر اندر ٽرجن گھوڙي وانگر آهن! بڇڙا ماڻهو اندر جي حدن ۾ تمام خراب ڪم ڪري سگهن ٿا.

۾: - اهو واضح آهي ته ڇڏڻ، تقريبا ڳالهائڻ، سرور ۾ هڪ سوراخ جنهن جي ذريعي توهان هاٿين جو هڪ زو وجهي سگهو ٿا ۽ سڄي ڪلستر کي هميشه لاء تباهه ڪري سگهو ٿا ... اهو دستي بحالي ۾ وقت وٺندو ... اهو، ان کي نرمي سان رکڻ لاء، اهو آهي. غلط. ٻئي طرف، اهو دلچسپ آهي: حقيقي زندگي ۾، عملي طور تي، اهي حالتون آهن جڏهن قدرتي طور تي ساڳيا اندروني حملا ٿين ٿا؟

ايم ٽي: - جيئن ته مان حقيقي زندگي ۾ حفاظتي ڀڃڪڙين کي گهٽ ۾ گهٽ منهن ڏيان ٿو، مان نٿو چئي سگهان ته اهي ٿين ٿيون. پر جيڪڏهن اسان ترقي جي فلسفي جي باري ۾ ڳالهايون ٿا، اسان هن طرح سوچيو ٿا: اسان وٽ هڪ دائرو آهي جيڪو ماڻهن کي تحفظ فراهم ڪري ٿو - هي هڪ قلعو آهي، هڪ ديوار؛ ۽ پردي جي اندر توهان ڪري سگهو ٿا جيڪو توهان چاهيو ٿا. اهو واضح آهي ته اهڙا صارف آهن جيڪي صرف ڏسڻ جي صلاحيت رکن ٿا، ۽ اهڙا صارف آهن جيڪي ڊاريڪٽري کي ختم ڪرڻ جي صلاحيت رکن ٿا.

حقن تي مدار رکندي، صارف جيڪي نقصان ڪري سگھن ٿا اهو هڪ مائوس ٿي سگهي ٿو، يا اهو هڪ هاٿي ٿي سگهي ٿو. اهو واضح آهي ته هڪ صارف مڪمل حقن سان ڪجهه به ڪري سگهي ٿو. محدود حقن سان استعمال ڪندڙ کي تمام گھٽ نقصان ٿي سگھي ٿو. خاص طور تي، اهو سسٽم کي ٽوڙي نٿو سگهي.

۾: - محفوظ ڪيل دائري ۾، ڪنهن سرور لاءِ غير متوقع پروٽوڪول ٺاهڻ جي ڪوشش ڪئي ته جيئن سرور کي مڪمل طور تي تباهه ڪري، ۽ جيڪڏهن توهان خوش قسمت آهيو، سڄو ڪلستر... ڇا اهو ڪڏهن به "سٺو" حاصل ڪري ٿو؟

ايم ٽي: "مون ڪڏهن به اهڙين شين بابت نه ٻڌو آهي." حقيقت اها آهي ته توهان هن طريقي سان سرور کي تباهه ڪري سگهو ٿا ڪو راز ناهي. اندر ناڪام ٿيڻ، پروٽوڪول مان هجڻ، هڪ بااختيار صارف هجڻ جو جيڪو پيغام ۾ ڪجهه هن طرح لکي سگهي ٿو ... حقيقت ۾، اهو ناممڪن آهي، ڇاڪاڻ ته اهو اڃا تائين تصديق ڪيو ويندو. اهو ممڪن آهي ته هن تصديق کي غير فعال ڪرڻ لاء استعمال ڪندڙن لاء جيڪي نه چاهيندا آهن - پوء اهو انهن جو مسئلو آهي؛ هنن، لڳ ڀڳ ڳالهائڻ، پاڻ ڀتين کي تباهه ڪري ڇڏيو ۽ توهان اتي هڪ هاٿي کي ڌڪ ڏيئي سگهو ٿا، جيڪو لتاڙيندو ... پر عام طور تي، توهان هڪ مرمت ڪندڙ جي حيثيت سان ڪپڙا ڪري سگهو ٿا، اچو ۽ ان کي ٻاهر ڪڍو!

۾: - رپورٽ لاءِ مهرباني. سرجي (Yandex). مونگ ۾ هڪ مستقل آهي جيڪو ريپليڪا سيٽ ۾ ووٽرن جي ميمبرن جي تعداد کي محدود ڪري ٿو، ۽ اهو مسلسل 7 (ست) آهي. هي مسلسل ڇو آهي؟ هي ڪنهن قسم جو پيٽرول ڇو نه آهي؟

ايم ٽي: - اسان وٽ 40 نوڊس سان ريپليڪا سيٽ آهن. اتي هميشه اڪثريت آهي. مون کي خبر ناهي ته ڪهڙو نسخو ...

۾: - ريپليڪا سيٽ ۾ توهان نان ووٽنگ ميمبر هلائي سگهو ٿا، پر وڌ ۾ وڌ 7 ووٽنگ ميمبر آهن، جيڪڏهن اسان جو ريپليڪا سيٽ 3 ڊيٽا سينٽرن ۾ پکڙيل آهي ته ان صورت ۾ بند ٿيڻ کان ڪيئن بچي سگهون ٿا؟ ھڪڙو ڊيٽا سينٽر آساني سان بند ڪري سگھي ٿو، ۽ ٻي مشين گر ٿي سگھي ٿو.

ايم ٽي: - اهو اڳ ۾ ئي رپورٽ جي دائري کان ٿورو ٻاهر آهي. هي هڪ عام سوال آهي. ٿي سگهي ٿو ته مان توهان کي ان بابت بعد ۾ ٻڌائي سگهان.

HighLoad++، Mikhail Tyulenev (MongoDB): Causal consistency: نظريي کان مشق تائين

ڪجھ اشتهار 🙂

اسان سان گڏ رهڻ لاء توهان جي مهرباني. ڇا توهان اسان جا مضمون پسند ڪندا آهيو؟ وڌيڪ دلچسپ مواد ڏسڻ چاهيو ٿا؟ آرڊر ڏيڻ يا دوستن کي سفارش ڪندي اسان جي مدد ڪريو، ڪلائوڊ VPS ڊولپرز لاءِ $4.99 کان, داخلا-سطح سرورز جو هڪ منفرد اينالاگ، جيڪو اسان توهان لاءِ ايجاد ڪيو هو: VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps جي باري ۾ سڄي حقيقت $19 کان يا سرور ڪيئن شيئر ڪجي؟ (RAID1 ۽ RAID10 سان دستياب آهي، 24 ڪور تائين ۽ 40GB DDR4 تائين).

ڊيل R730xd 2x سستا Equinix Tier IV ڊيٽا سينٽر ۾ Amsterdam ۾؟ صرف هتي 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV $199 کان هالينڊ ۾! ڊيل R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - $99 کان! جي باري ۾ پڙهو انفراسٽرڪچر ڪارپوريشن ڪيئن ٺاهيو. ڪلاس ڊيل R730xd E5-2650 v4 سرورز جي استعمال سان 9000 يورو جي قيمت هڪ پني لاءِ؟

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

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