NewSQL = NoSQL+ACID

NewSQL = NoSQL+ACID
تازو تائين، Odnoklassniki SQL سرور ۾ حقيقي وقت ۾ پروسيس ٿيل اٽڪل 50 TB ڊيٽا محفوظ ڪري ٿو. اهڙي مقدار لاءِ، تيز ۽ قابل اعتماد مهيا ڪرڻ لڳ ڀڳ ناممڪن آهي، ۽ حتي ڊيٽا سينٽر جي ناڪامي برداشت ڪندڙ رسائي SQL DBMS استعمال ڪندي. عام طور تي، اهڙين حالتن ۾، NoSQL اسٽوريج مان هڪ استعمال ڪيو ويندو آهي، پر هر شيء NoSQL ڏانهن منتقل نه ٿي سگهي: ڪجهه ادارن کي ACID ٽرانزيڪشن جي ضمانت جي ضرورت هوندي آهي.

اهو اسان کي NewSQL اسٽوريج جي استعمال جي طرف وٺي ويو، اهو آهي، هڪ DBMS جيڪو NoSQL سسٽم جي غلطي رواداري، اسڪيليبلٽي ۽ ڪارڪردگي مهيا ڪري ٿو، پر ساڳئي وقت ACID کي برقرار رکڻ جي گارنٽي ڪلاسيڪل سسٽم کان واقف آهي. هن نئين طبقي جا چند ڪم ڪندڙ صنعتي نظام آهن، تنهنڪري اسان اهڙو نظام پاڻ لاڳو ڪيو ۽ ان کي ڪمرشل آپريشن ۾ لڳايو.

اهو ڪيئن ڪم ڪري ٿو ۽ ڇا ٿيو - هيٺ پڙهي.

اڄ، Odnoklassniki جي مھينا سامعين 70 ملين منفرد سياحن کان وڌيڪ آھي. اسان اسان مٿين پنجن ۾ آهيون دنيا ۾ سڀ کان وڏو سماجي نيٽ ورڪ، ۽ ويهن سائيٽن مان جن تي صارفين گهڻو وقت گذاريندا آهن. OK انفراسٽرڪچر تمام گهڻو لوڊ سنڀالي ٿو: هڪ ملين HTTP درخواستن کان وڌيڪ / سيڪنڊ في فرنٽ. 8000 کان وڌيڪ ٽڪرن جي سرور جي بيبي جا حصا هڪ ٻئي جي ويجهو واقع آهن - چار ماسڪو ڊيٽا سينٽرن ۾، جيڪي انهن جي وچ ۾ 1 ms کان گهٽ نيٽ ورڪ جي ويڪرائي جي اجازت ڏين ٿا.

اسان 2010 کان وٺي Cassandra استعمال ڪري رهيا آهيون، نسخو 0.6 سان شروع ٿي. اڄ اتي ڪيترائي درجن ڪلستر آپريشن ۾ آھن. تيز ترين ڪلسٽر 4 ملين کان وڌيڪ آپريشن في سيڪنڊ تي عمل ڪري ٿو، ۽ سڀ کان وڏو اسٽور 260 TB.

بهرحال، اهي سڀئي عام NoSQL ڪلسٽر آهن جيڪي اسٽوريج لاءِ استعمال ڪيا ويندا آهن ڪمزور هموار ٿيل ڊيٽا. اسان کي تبديل ڪرڻ چاهيون ٿا مکيه مسلسل اسٽوريج، Microsoft SQL سرور، جيڪو Odnoklassniki جي ٺهڻ کان وٺي استعمال ڪيو ويو آهي. اسٽوريج 300 کان وڌيڪ SQL سرور معياري ايڊيشن مشينن تي مشتمل آهي، جنهن ۾ 50 TB ڊيٽا شامل آهن - ڪاروباري ادارن. هي ڊيٽا تبديل ٿيل آهي ACID ٽرانزيڪشن جي حصي جي طور تي ۽ گهربل آهي اعلي استحڪام.

SQL سرور نوڊس تي ڊيٽا ورهائڻ لاءِ، اسان عمودي ۽ افقي ٻئي استعمال ڪيو ورهاڱي (شيئرنگ). تاريخي طور تي، اسان هڪ سادي ڊيٽا شارڊنگ اسڪيم استعمال ڪيو آهي: هر ادارو هڪ ٽوڪن سان جڙيل هو - اداري جي سڃاڻپ جو هڪ فنڪشن. ساڳي ٽوڪن سان گڏ ادارا ساڳيا SQL سرور تي رکيا ويا. ماسٽر-تفصيل تعلق لاڳو ڪيو ويو ته جيئن مکيه ۽ ٻارن جي رڪارڊ جا ٽوڪن هميشه ملن ۽ ساڳئي سرور تي واقع هئا. هڪ سماجي نيٽ ورڪ ۾، تقريبن سڀئي رڪارڊ صارف جي طرفان ٺاهيا ويا آهن - جنهن جو مطلب آهي ته سڀني صارفن جي ڊيٽا هڪ فنڪشنل سب سسٽم ۾ هڪ سرور تي ذخيرو ٿيل آهي. اهو آهي، هڪ ڪاروباري ٽرانزيڪشن لڳ ڀڳ هميشه هڪ SQL سرور کان ٽيبل شامل آهي، جنهن اهو ممڪن ڪيو ته ڊيٽا جي تسلسل کي يقيني بڻائڻ لاء مقامي ACID ٽرانزيڪشن کي استعمال ڪرڻ جي ضرورت کان سواء. سست ۽ ناقابل اعتبار ورهايل ACID ٽرانزيڪشن.

شارڊنگ جي مهرباني ۽ SQL کي تيز ڪرڻ لاءِ:

  • اسان غير ملڪي اهم رڪاوٽون استعمال نٿا ڪريون، ڇاڪاڻ ته جڏهن اداري جي ID کي شارڊ ڪيو وڃي ته شايد ڪنهن ٻئي سرور تي واقع هجي.
  • اسان DBMS CPU تي اضافي لوڊ جي ڪري محفوظ ٿيل طريقا ۽ ٽرگر استعمال نٿا ڪريون.
  • اسان JOINs استعمال نٿا ڪريون ڇاڪاڻ ته مٿين سڀني جي ڪري ۽ ڊسڪ مان ڪيترائي بي ترتيب پڙهڻ.
  • ٽرانزيڪشن جي ٻاهران، اسان استعمال ڪندا آهيون اڻ پڙهيل اڪيلائي جي سطح کي ختم ڪرڻ لاءِ.
  • اسان صرف مختصر ٽرانزيڪشن انجام ڏيون ٿا (اوسط 100 ms کان ننڍو).
  • اسان استعمال نٿا ڪريون ملٽي قطار UPDATE ۽ DELETE ڊيڊ لاڪ جي وڏي تعداد جي ڪري - اسان هڪ وقت ۾ صرف هڪ رڪارڊ اپڊيٽ ڪندا آهيون.
  • اسان هميشه سوالن کي صرف انڊيڪس تي انجام ڏيون ٿا - اسان لاءِ مڪمل ٽيبل اسڪين پلان سان گڏ هڪ سوال جو مطلب آهي ڊيٽابيس کي اوور لوڊ ڪرڻ ۽ ان کي ناڪام ٿيڻ جو سبب بڻجڻ.

انهن قدمن کي اسان کي SQL سرورز مان تقريبن وڌ کان وڌ ڪارڪردگي نچوض ڪرڻ جي اجازت ڏني. بهرحال، مسئلا وڌيڪ ۽ وڌيڪ گهڻا ٿي ويا. اچو ته انهن کي ڏسو.

SQL سان مسئلا

  • جيئن ته اسان خود لکيل شارڊنگ استعمال ڪيو، نوان شارڊ شامل ڪرڻ دستي طور تي منتظمين طرفان ڪيو ويو. هي سڀ وقت، اسپيبلبل ڊيٽا ريپليڪس درخواستن جي خدمت نه ڪري رهيا هئا.
  • جيئن جدول ۾ رڪارڊن جو تعداد وڌي ٿو، تيئن داخل ٿيڻ ۽ تبديليءَ جي رفتار گھٽجي ٿي؛ موجوده جدول ۾ انڊيڪس شامل ڪرڻ وقت، رفتار ھڪ عنصر جي ڪري گھٽجي ٿي؛ انڊيڪسز جي ٺاھڻ ۽ ٻيهر ٺاھڻ وقت جي گھٽتائي سان ٿيندي آھي.
  • پيداوار ۾ SQL سرور لاءِ ونڊوز جو هڪ ننڍڙو مقدار هجڻ ڪري بنيادي ڍانچي جي انتظام کي ڏکيو بڻائي ٿو

پر بنيادي مسئلو آهي

غلطي رواداري

کلاسک SQL سرور ۾ خراب غلطي رواداري آهي. اچو ته توهان وٽ صرف هڪ ڊيٽابيس سرور آهي، ۽ اهو هر ٽن سالن ۾ هڪ ڀيرو ناڪام ٿيندو. هن وقت دوران سائيٽ 20 منٽن لاء هيٺ آهي، جيڪا قابل قبول آهي. جيڪڏهن توهان وٽ 64 سرور آهن، پوء سائيٽ هر ٽن هفتن ۾ هڪ ڀيرو هيٺ آهي. ۽ جيڪڏهن توهان وٽ 200 سرور آهن، پوء سائيٽ هر هفتي ڪم نٿو ڪري. هي مسئلو آهي.

SQL سرور جي غلطي رواداري کي بهتر ڪرڻ لاءِ ڇا ٿي سگھي ٿو؟ وڪيپيڊيا اسان کي تعمير ڪرڻ جي دعوت ڏئي ٿي انتهائي دستياب ڪلستر: جتي ڪنهن به اجزاء جي ناڪامي جي صورت ۾ هڪ بيڪ اپ آهي.

ان لاءِ قيمتي سامان جي بيٺي جي ضرورت آهي: ڪيترائي نقل، آپٽيڪل فائبر، حصيداري اسٽوريج، ۽ رزرو جي شموليت قابل اعتماد ڪم نه ڪندو آهي: اٽڪل 10٪ سوئچنگ ختم ٿيڻ سان بيڪ اپ نوڊ جي ناڪامي سان ختم ٿئي ٿو جهڙوڪ مکيه نوڊ جي پويان ٽرين.

پر اهڙي انتهائي دستياب ڪلستر جو بنيادي نقصان صفر جي دستيابي آهي جيڪڏهن ڊيٽا سينٽر جنهن ۾ اهو واقع آهي ناڪام ٿئي ٿو. Odnoklassniki ۾ چار ڊيٽا سينٽر آهن، ۽ اسان کي انهن مان هڪ ۾ مڪمل ناڪامي جي صورت ۾ آپريشن کي يقيني بڻائڻ جي ضرورت آهي.

هن لاء اسان استعمال ڪري سگهون ٿا ملٽي ماسٽر نقل SQL سرور ۾ ٺهيل. اهو حل سافٽ ويئر جي قيمت جي ڪري تمام گهڻو مهانگو آهي ۽ نقل سان مشهور مسئلن جو شڪار آهي - هم وقت سازي جي نقل سان غير متوقع ٽرانزيڪشن جي دير ۽ ريپليڪشن کي لاڳو ڪرڻ ۾ دير (۽ نتيجي طور، گم ٿيل تبديليون) هم وقت سازي سان. جڙيل دستي تڪرار حل هي اختيار اسان لاءِ مڪمل طور تي قابل اطلاق بنائي ٿو.

انهن سڀني مسئلن کي بنيادي حل جي ضرورت آهي، ۽ اسان انهن کي تفصيل سان تجزيو ڪرڻ شروع ڪيو. هتي اسان کي ڄاڻڻ جي ضرورت آهي ته SQL سرور ڇا ڪندو آهي - ٽرانزيڪشن.

سادي ٽرانزيڪشن

اچو ته آسان ترين ٽرانزيڪشن تي غور ڪريو، هڪ لاڳو ڪيل SQL پروگرامر جي نقطي نظر کان: البم ۾ فوٽو شامل ڪرڻ. البم ۽ تصويرون مختلف پليٽن ۾ محفوظ ٿيل آهن. البم ۾ عوامي فوٽو ڪائونٽر آهي. پوء اهڙي ٽرانزيڪشن کي هيٺين مرحلن ۾ ورهايو ويو آهي:

  1. اسان البم کي چاٻي سان بند ڪريون ٿا.
  2. فوٽو ٽيبل ۾ هڪ داخلا ٺاهيو.
  3. جيڪڏهن تصوير جي عوامي حيثيت آهي، ته پوءِ البم ۾ عوامي فوٽو ڪائونٽر شامل ڪريو، رڪارڊ کي اپڊيٽ ڪريو ۽ ٽرانزيڪشن کي انجام ڏيو.

يا pseudocode ۾:

TX.start("Albums", id);
Album album = albums.lock(id);
Photo photo = photos.create(…);

if (photo.status == PUBLIC ) {
    album.incPublicPhotosCount();
}
album.update();

TX.commit();

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

جڏهن هڪ ٽرانزيڪشن تي عمل ڪندي، ساڳئي ڊيٽا جي هڪجهڙائي ترميمي ٻئي سسٽم مان ٿي سگهي ٿي. مثال طور، اينٽي اسپام اهو فيصلو ڪري سگهي ٿو ته صارف ڪنهن به طرح مشڪوڪ آهي ۽ تنهن ڪري صارف جون سڀئي تصويرون هاڻي عوامي نه هجڻ گهرجن، انهن کي چڪاس لاءِ موڪلڻ جي ضرورت آهي، جنهن جو مطلب آهي photo.status کي ڪنهن ٻي قدر ۾ تبديل ڪرڻ ۽ لاڳاپيل شمار ڪندڙن کي بند ڪرڻ. ظاھر آھي، جيڪڏھن ھي آپريشن ٿي سگھي ٿو بغير ايپليڪيشن جي ايٽميگي جي ضمانت ۽ مقابلي واري تبديلين کي الڳ ڪرڻ جي، جيئن ته امل، پوءِ نتيجو اهو نه ٿيندو جيڪو گهربل هجي - يا ته فوٽو ڪائونٽر غلط قيمت ڏيکاريندو، يا نه سڀئي تصويرون چڪاس لاءِ موڪليا ويندا.

تمام گهڻو ساڳيو ڪوڊ، مختلف ڪاروباري ادارن کي هڪ ٽرانزيڪشن ۾ هٿي وٺندي، Odnoklassniki جي سڄي وجود ۾ لکيو ويو آهي. NoSQL کان لڏپلاڻ جي تجربي جي بنياد تي واقعي جي مطابقت اسان ڄاڻون ٿا ته سڀ کان وڏو چيلينج (۽ وقت جي سيڙپڪاري) ڊيٽا جي استحڪام کي برقرار رکڻ لاء ڪوڊ ترقي ڪرڻ کان اچي ٿو. تنهن ڪري، اسان سمجهيو ته نئين اسٽوريج لاء بنيادي گهربل درخواست منطق لاء حقيقي ACID ٽرانزيڪشن لاء روزي هجڻ گهرجي.

ٻيون، نه گهٽ اهم، گهرجون هيون:

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

فيصلو ، فيصلو

ممڪن حلن جو تجزيو ڪندي، اسان وٽ آياسين ٻه ممڪن فن تعمير جي چونڊ:

پهريون اهو آهي ته ڪنهن به SQL سرور کي وٺو ۽ گهربل غلطي رواداري، اسڪيلنگ ميڪانيزم، ناڪامي ڪلستر، تڪرار جي حل ۽ تقسيم، قابل اعتماد ۽ تيز ACID ٽرانزيڪشن کي لاڳو ڪرڻ. اسان هن آپشن کي انتهائي غير معمولي ۽ محنتي طور تي درج ڪيو.

ٻيو اختيار اهو آهي ته هڪ تيار ڪيل NoSQL اسٽوريج کي لاڳو ڪيل اسڪيلنگ، هڪ ناڪامي ڪلستر، تڪرار جي حل، ۽ ٽرانزيڪشن ۽ SQL پاڻ کي لاڳو ڪرڻ سان. پهرين نظر ۾، ايستائين جو SQL کي لاڳو ڪرڻ جو ڪم، ACID ٽرانزيڪشن جو ذڪر نه ڪرڻ، هڪ ڪم وانگر لڳي ٿو جيڪو سال وٺندو. پر پوءِ اسان محسوس ڪيو ته SQL فيچر سيٽ جيڪو اسان عملي طور استعمال ڪندا آهيون ANSI SQL کان پري آهي Cassandra CQL ANSI SQL کان پري. CQL تي اڃا به وڌيڪ ويجھو نظر وجهڻ سان، اسان محسوس ڪيو ته اهو اسان جي ضرورت جي بلڪل ويجهو هو.

Cassandra ۽ CQL

تنهن ڪري، Cassandra بابت دلچسپ ڇا آهي، ان ۾ ڪهڙيون صلاحيتون آهن؟

پهرين، هتي توهان ٽيبل ٺاهي سگهو ٿا جيڪي مختلف ڊيٽا جي قسمن کي سپورٽ ڪن ٿا؛ توهان ڪري سگهو ٿا SELECT يا UPDATE پرائمري ڪي تي.

CREATE TABLE photos (id bigint KEY, owner bigint,…);
SELECT * FROM photos WHERE id=?;
UPDATE photos SET … WHERE id=?;

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

اهو طريقو جڏهن اسان ٽن نوڊس سان رابطو ڪندا آهيون ۽ ٻن کان جواب حاصل ڪندا آهيون، سڏيو ويندو آهي قياس: اضافي نقلن لاءِ هڪ درخواست موڪلي وئي آهي ان کان اڳ جو ”گرجي وڃي“.

Cassandra جو ٻيو فائدو آهي Batchlog، هڪ ميکانيزم جيڪو يقيني بڻائي ٿو ته توهان تبديلين جو هڪ بيچ يا ته مڪمل طور تي لاڳو ڪيو ويو آهي يا مڪمل طور تي لاڳو نه ڪيو ويو آهي. هي اسان کي ACID ۾ A حل ڪرڻ جي اجازت ڏئي ٿو - دٻي کان ٻاهر ايٽمي.

Cassandra ۾ ٽرانزيڪشن لاء سڀ کان ويجهي شيء جنهن کي سڏيو ويندو آهي "هلڪو ٽرانزيڪشن". پر اهي "حقيقي" ACID ٽرانزيڪشن کان پري آهن: حقيقت ۾، اهو هڪ موقعو آهي سي صرف هڪ رڪارڊ مان ڊيٽا تي، اتفاق سان استعمال ڪندي هيلي ويٽ Paxos پروٽوڪول. تنهن ڪري، اهڙي ٽرانزيڪشن جي رفتار گهٽ آهي.

ڇا اسان کي Cassandra ۾ غائب هئا

تنهن ڪري، اسان کي Cassandra ۾ حقيقي ACID ٽرانزيڪشن کي لاڳو ڪرڻو پيو. جنهن کي استعمال ڪندي اسان آساني سان ڪلاسڪ DBMS جون ٻه ٻيون آسان خاصيتون لاڳو ڪري سگهون ٿا: مسلسل تيز انڊيڪسز، جيڪي اسان کي اجازت ڏين ٿيون ڊيٽا جي چونڊ کي انجام ڏيڻ لاءِ نه صرف پرائمري ڪيچ ذريعي، ۽ هڪ باقاعدي جنريٽر مانوٽونڪ آٽو-وڌندڙ IDs.

سي * هڪ

اهڙيء طرح هڪ نئون DBMS پيدا ٿيو سي * هڪ، ٽن قسمن جي سرور نوڊس تي مشتمل آهي:

  • اسٽوريج - (تقريبا) معياري ڪئاسندرا سرورز مقامي ڊسڪ تي ڊيٽا کي محفوظ ڪرڻ لاء ذميوار آهن. جيئن ته ڊيٽا جو لوڊ ۽ حجم وڌندو آهي، انهن جي مقدار کي آساني سان ڏهن ۽ سئو تائين وڌائي سگهجي ٿو.
  • ٽرانزيڪشن ڪوآرڊينيٽر - ٽرانزيڪشن جي عمل کي يقيني بڻائي.
  • ڪلائنٽ ايپليڪيشن سرور آهن جيڪي ڪاروباري عملن کي لاڳو ڪن ٿا ۽ ٽرانزيڪشن شروع ڪن ٿا. اهڙا هزارين گراهڪ ٿي سگهن ٿا.

NewSQL = NoSQL+ACID

سڀني قسمن جا سرور هڪ عام ڪلستر جو حصو آهن، هڪ ٻئي سان ڳالهائڻ لاء اندروني Cassandra پيغام پروٽوڪول استعمال ڪريو ۽ گپ ڪلستر معلومات جي تبادلي لاء. دل جي ڌڙڪن سان، سرورز باہمي ناڪامين جي باري ۾ سکندا آهن، هڪ واحد ڊيٽا اسڪيما کي برقرار رکندا آهن - ٽيبل، انهن جي جوڙجڪ ۽ نقل؛ ورهاڱي جي اسڪيم، ڪلسٽر ٽوپولوجي وغيره.

ڪلائيندڙ

NewSQL = NoSQL+ACID

معياري ڊرائيور جي بدران، فٽ ڪلائنٽ موڊ استعمال ڪيو ويندو آهي. اهڙو نوڊ ڊيٽا کي ذخيرو نٿو ڪري، پر درخواست جي عمل لاء ڪوآرڊينيٽر جي طور تي ڪم ڪري سگهي ٿو، اهو آهي، ڪلائنٽ پاڻ پنهنجي درخواستن جي ڪوآرڊينيٽر طور ڪم ڪري ٿو: اهو سوالن جي اسٽوريج ريپليڪس ۽ تڪرار کي حل ڪري ٿو. اهو نه رڳو معياري ڊرائيور کان وڌيڪ قابل اعتماد ۽ تيز آهي، جيڪو ريموٽ ڪوآرڊينيٽر سان رابطي جي ضرورت آهي، پر توهان کي درخواستن جي منتقلي کي ڪنٽرول ڪرڻ جي اجازت پڻ ڏئي ٿي. ڪلائنٽ تي کليل ٽرانزيڪشن کان ٻاهر، درخواستون مخزن ڏانهن موڪليا ويا آهن. جيڪڏهن ڪلائنٽ هڪ ٽرانزيڪشن کوليو آهي، پوء ٽرانزيڪشن جي اندر سڀني درخواستن کي ٽرانزيڪشن ڪوآرڊينيٽر ڏانهن موڪليو ويو آهي.
NewSQL = NoSQL+ACID

سي * هڪ ٽرانزيڪشن ڪوآرڊينيٽر

ڪوآرڊينيٽر اهو آهي جيڪو اسان شروع ڪيو سي * ون لاءِ شروع کان. اهو ٽرانزيڪشن کي منظم ڪرڻ، تالا، ۽ ترتيب ڏيڻ جو ذميوار آهي جنهن ۾ ٽرانزيڪشن لاڳو ٿينديون آهن.

هر خدمت ٿيل ٽرانزيڪشن لاءِ، ڪوآرڊينيٽر هڪ ٽائم اسٽيمپ ٺاهي ٿو: هر ايندڙ ٽرانزيڪشن پوئين ٽرانزيڪشن کان وڌيڪ آهي. جيئن ته Cassandra جو تڪرار حل ڪرڻ وارو نظام ٽائم اسٽيمپ تي ٻڌل آهي (ٻن تڪراري رڪارڊن مان، جيڪو تازو ٽائم اسٽيمپ سان موجوده سمجهيو ويندو آهي)، تڪرار هميشه ايندڙ ٽرانزيڪشن جي حق ۾ حل ڪيو ويندو. اهڙيء طرح اسان عمل ڪيو لامپورٽ واچ - ورهايل نظام ۾ تڪرار کي حل ڪرڻ لاء هڪ سستو طريقو.

تالو

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

اهڙي لاڪنگ کي لاڳو ڪرڻ هڪ غير ورهايل ماحول ۾ سادو آهي. ورهايل سسٽم ۾، ٻه مکيه آپشن آهن: يا ته ڪلسٽر تي ورهايل لاڪنگ لاڳو ڪريو، يا ٽرانزيڪشن کي ورهايو وڃي ته جيئن ساڳيو رڪارڊ شامل ٿيندڙ ٽرانزيڪشن هميشه هڪ ئي ڪوآرڊينيٽر جي خدمت ۾ هجي.

جيئن ته اسان جي صورت ۾ ڊيٽا اڳ ۾ ئي SQL ۾ مقامي ٽرانزيڪشن جي گروپن ۾ ورهايل آهي، اهو فيصلو ڪيو ويو ته مقامي ٽرانزيڪشن گروپن کي ڪوآرڊينيٽر کي تفويض ڪيو وڃي: هڪ ڪوآرڊينيٽر 0 کان 9 تائين ٽوڪن سان، ٻيو - 10 کان 19 تائين ٽوڪن سان، ۽ ايئن. نتيجي طور، ھر ھڪ ڪوآرڊينيٽر مثال بڻجي وڃي ٿو ٽرانزيڪشن گروپ جو ماسٽر.

ان کان پوء لاڪ ڪوآرڊينيٽر جي ياداشت ۾ هڪ banal HashMap جي صورت ۾ لاڳو ڪري سگهجي ٿو.

ڪوآرڊينيٽر جي ناڪامي

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

هر ڊيٽا سينٽر گهٽ ۾ گهٽ ٻن ڪوآرڊينيٽر نوڊس کي ميزباني ڪري ٿو. وقتي طور تي، هر ڪوآرڊينيٽر ٻين ڪوآرڊينيٽرن کي دل جي ڌڙڪن جو پيغام موڪليندو آهي ۽ انهن کي ان جي ڪم جي باري ۾ آگاهي ڏيندو آهي، انهي سان گڏ هن کي دل جي ڌڙڪن جا پيغام مليا هئا ته آخري ڀيرو ڪلسٽر ۾ ڪهڙن ڪوآرڊينيٽرن کان.

NewSQL = NoSQL+ACID

ٻين کان ساڳي معلومات حاصل ڪندي انهن جي دل جي ڌڙڪن پيغامن جي حصي طور، هر ڪوآرڊينيٽر پنهنجي لاءِ فيصلو ڪري ٿو ته ڪهڙن ڪلسٽر نوڊس ڪم ڪري رهيا آهن ۽ ڪهڙا نه آهن، ڪورم اصول جي رهنمائيءَ ۾: جيڪڏهن نوڊ ايڪس کي ڪلسٽر ۾ اڪثريتي نوڊس کان معلومات ملي ٿي ته نارمل بابت نوڊ Y کان پيغامن جي وصولي، پوء، Y ڪم ڪري ٿو. ۽ ان جي برعڪس، جيترو جلد ئي اڪثريت جي رپورٽ ڪري ٿو گم ٿيل پيغام نوڊ Y کان، پوء Y انڪار ڪيو. اها دلچسپ ڳالهه آهي ته جيڪڏهن ڪورم نوڊ ايڪس کي خبر ڏئي ٿو ته اهو هاڻي ان کان پيغام وصول نه ڪري رهيو آهي، پوء نوڊ ايڪس پاڻ کي ناڪام سمجهيو ويندو.

دل جي ڌڙڪن جا پيغام تيز تعدد سان موڪليا ويندا آهن، اٽڪل 20 ڀيرا في سيڪنڊ، 50 ايم ايس جي مدت سان. جاوا ۾، 50 ايم ايس جي اندر ايپليڪيشن جي جواب جي ضمانت ڏيڻ ڏکيو آهي، ڇاڪاڻ ته ڪچري جي ڪليڪٽر جي سببن جي موازن جي برابر ڊيگهه جي ڪري. اسان هن جوابي وقت کي حاصل ڪرڻ جي قابل هئاسين G1 گندگي ڪليڪٽر استعمال ڪندي، جيڪا اسان کي اجازت ڏئي ٿي ته GC جي وقفن جي مدت لاءِ ٽارگيٽ بيان ڪري سگهون. جڏهن ته، ڪڏهن ڪڏهن، تمام گهٽ، ڪليڪٽر 50 ms کان وڌيڪ روڪي ٿو، جيڪو غلط غلطي جي نشاندهي ڪري سگهي ٿو. ائين ٿيڻ کان روڪڻ لاءِ، ڪوآرڊينيٽر ريموٽ نوڊ جي ناڪامي جي خبر نه ٿو ڏئي جڏهن ان مان پهريون دل جي ڌڙڪڻ جو پيغام غائب ٿي وڃي، صرف ان صورت ۾ جڏهن ڪيترائي مسلسل غائب ٿي ويا آهن، اهڙيءَ طرح اسان 200 ۾ ڪوآرڊينيٽر نوڊ جي ناڪاميءَ جو پتو لڳايو. ms

پر اهو ڪافي نه آهي تڪڙو سمجهڻ لاءِ ته ڪهڙي نوڊ ڪم ڪرڻ بند ڪري ڇڏيو آهي. اسان کي ان بابت ڪجهه ڪرڻو پوندو.

رزرويشن

کلاسک اسڪيم ۾ شامل آهي، ماسٽر ناڪامي جي صورت ۾، هڪ استعمال ڪندي نئين چونڊ شروع ڪرڻ فيشن وارو عالمگير الگورتھم. تنهن هوندي به، اهڙن الگورتھمن ۾ وقت جي مطابقت ۽ اليڪشن جي عمل جي ڊگھائي سان چڱيءَ طرح جا مسئلا آهن. اسان مڪمل طور تي ڳنڍيل نيٽ ورڪ ۾ ڪوآرڊينيٽر متبادل اسڪيم استعمال ڪندي اهڙي اضافي تاخير کان بچڻ جي قابل هئاسين:

NewSQL = NoSQL+ACID

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

هي اسڪيم عالمگير الورورٿم کان وڌيڪ قابل اعتماد آهي، ڇاڪاڻ ته نئين ماسٽر کي چالو ڪرڻ لاء اهو ڪافي آهي ته پراڻي جي ناڪامي کي طئي ڪرڻ لاء.

پر گراهڪ ڪيئن سمجهندا ته ڪهڙو ماسٽر هاڻي ڪم ڪري رهيو آهي؟ 50 ms ۾ هزارين گراهڪن کي معلومات موڪلڻ ناممڪن آهي. هڪ صورتحال ممڪن آهي جڏهن هڪ گراهڪ هڪ ٽرانزيڪشن کولڻ لاءِ درخواست موڪلي ٿو، اڃا تائين نه ڄاڻڻ ته هي ماسٽر هاڻي ڪم نه ڪري رهيو آهي، ۽ درخواست جو وقت ختم ٿي ويندو. ائين ٿيڻ کان روڪڻ لاءِ، گراهڪ قياس آرائي سان گروپ ماسٽر ۽ ان جي ٻنهي ذخيرن کي هڪ ئي وقت ٽرانزيڪشن کولڻ لاءِ هڪ درخواست موڪليندا آهن، پر صرف هڪ ئي جيڪو هن وقت فعال ماسٽر آهي ان درخواست جو جواب ڏيندو. ڪلائنٽ سڀني ايندڙ رابطي کي ٽرانزيڪشن ۾ صرف فعال ماسٽر سان گڏ ڪندو.

بيڪ اپ ماسٽرز جڳهن کي ٽرانزيڪشن لاءِ درخواستون مليون آهن جيڪي انهن جي نه آهن اڻ ڄاتل ٽرانزيڪشن جي قطار ۾، جتي اهي ڪجهه وقت لاءِ محفوظ ٿيل آهن. جيڪڏهن فعال ماسٽر مري وڃي ٿو، نئون ماسٽر پروسيس کي پنهنجي قطار مان ٽرانزيڪشن کي کولڻ جي درخواستن تي عمل ڪري ٿو ۽ ڪلائنٽ کي جواب ڏئي ٿو. جيڪڏهن ڪلائنٽ اڳ ۾ ئي پراڻي ماسٽر سان ٽرانزيڪشن کوليو آهي، پوء ٻيو جواب نظر انداز ڪيو ويو آهي (۽، ظاهر آهي، اهڙي ٽرانزيڪشن مڪمل نه ٿيندي ۽ ڪلائنٽ طرفان بار بار ڪيو ويندو).

ڪئين ٽرانزيڪشن ڪم ڪندو آهي

اچو ته چئو ته هڪ ڪلائنٽ ڪوآرڊينيٽر کي هڪ درخواست موڪلي آهي ته جيئن اهڙي ۽ اهڙي اداري لاءِ اهڙي ۽ اهڙي بنيادي ڪيئي سان ٽرانزيڪشن کوليو وڃي. ڪوآرڊينيٽر هن اداري کي لاڪ ڪري ٿو ۽ ان کي ميموري ۾ لاک ٽيبل ۾ رکي ٿو. جيڪڏهن ضروري هجي ته، ڪوآرڊينيٽر هن اداري کي اسٽوريج مان پڙهي ٿو ۽ نتيجو ڊيٽا کي ٽرانزيڪشن اسٽيٽ ۾ ڪوآرڊينيٽر جي ياداشت ۾ محفوظ ڪري ٿو.

NewSQL = NoSQL+ACID

جڏهن هڪ گراهڪ ڪنهن ٽرانزيڪشن ۾ ڊيٽا کي تبديل ڪرڻ چاهي ٿو، اهو ڪوآرڊينيٽر کي هڪ درخواست موڪلي ٿو ته اداري کي تبديل ڪرڻ لاءِ، ۽ ڪوآرڊينيٽر نئين ڊيٽا کي ٽرانزيڪشن اسٽيٽس ٽيبل ۾ ميموري ۾ رکي ٿو. هي رڪارڊنگ مڪمل ڪري ٿو - اسٽوريج تي ڪابه رڪارڊنگ نه ڪئي وئي آهي.

NewSQL = NoSQL+ACID

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

  • جيڪڏهن ID اڳ ۾ ئي ٽرانزيڪشن ۾ آهي، پوء ڊيٽا ميموري مان ورتو وڃي ٿو؛
  • جيڪڏهن ميموري ۾ ڪا به ID نه آهي، پوء غائب ڊيٽا اسٽوريج نوڊس مان پڙهي ويندي آهي، جيڪي اڳ ۾ ئي ميموري ۾ آهن، ۽ نتيجو ڪلائنٽ کي ڏنو ويندو آهي.

اهڙيء طرح، ڪلائنٽ پنهنجي تبديلين کي پڙهي سگهي ٿو، پر ٻيا گراهڪ انهن تبديلين کي نه ٿا ڏسن، ڇاڪاڻ ته اهي صرف ڪوآرڊينيٽر جي ياداشت ۾ محفوظ ٿيل آهن؛ اهي اڃا تائين Cassandra نوڊس ۾ نه آهن.

NewSQL = NoSQL+ACID

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

NewSQL = NoSQL+ACID

۽ رول بيڪ ڪرڻ لاء، ڪوآرڊينيٽر کي صرف ٽرانزيڪشن جي رياست طرفان قبضو ڪيل ياداشت کي آزاد ڪرڻ جي ضرورت آهي.

مٿين سڌارن جي نتيجي ۾، اسان ACID اصولن تي عمل ڪيو:

  • ايٽمي. اها هڪ گارنٽي آهي ته ڪو به ٽرانزيڪشن جزوي طور سسٽم ۾ رڪارڊ نه ڪيو ويندو؛ يا ته ان جا سڀئي ذيلي عمل مڪمل ڪيا ويندا، يا ڪو به مڪمل نه ڪيو ويندو. اسان Cassandra ۾ لاگ ٿيل بيچ ذريعي هن اصول تي عمل ڪندا آهيون.
  • تسلسل. هر ڪامياب ٽرانزيڪشن، تعريف سان، رڪارڊ صرف صحيح نتيجا. جيڪڏهن، هڪ ٽرانزيڪشن کي کولڻ ۽ عملن جو حصو انجام ڏيڻ کان پوء، اهو معلوم ٿئي ٿو ته نتيجو غلط آهي، هڪ رول بيڪ ڪيو ويندو آهي.
  • اڪيلائي. جڏهن هڪ ٽرانزيڪشن تي عمل ڪيو ويندو آهي، سمورو ٽرانزيڪشن ان جي نتيجن کي متاثر نه ڪرڻ گهرجي. مقابلي واري ٽرانزيڪشن کي همراه ڪندڙ تي مايوسي لاڪ استعمال ڪندي الڳ ڪيو ويو آهي. ٽرانزيڪشن کان ٻاهر پڙهڻ لاءِ، اڪيلائي جو اصول پڙهو ڪمٽڊ ليول تي ڏٺو ويندو آهي.
  • استحڪام. گهٽ سطح تي مسئلن جي باوجود- سسٽم بليڪ آئوٽ، هارڊويئر ناڪامي- ڪاميابيءَ سان مڪمل ٿيل ٽرانزيڪشن پاران ڪيل تبديليون محفوظ رهڻ گهرجن جڏهن آپريشن ٻيهر شروع ٿئي.

انڊيڪس ذريعي پڙهڻ

اچو ته هڪ سادي ٽيبل وٺون:

CREATE TABLE photos (
id bigint primary key,
owner bigint,
modified timestamp,
…)

ان ۾ هڪ ID (پرائمري ڪيئي)، مالڪ ۽ ترميم جي تاريخ آهي. توھان کي ھڪڙي سادي درخواست ڪرڻ جي ضرورت آھي - مالڪ تي ڊيٽا کي تبديل ڪرڻ جي تاريخ سان "آخري ڏينھن لاءِ" چونڊيو.

SELECT *
WHERE owner=?
AND modified>?

اهڙي قسم جي سوال کي جلدي پروسيس ڪرڻ لاء، هڪ کلاسک SQL DBMS ۾ توهان کي ڪالمن (مالڪ، تبديل ٿيل) طرفان هڪ انڊيڪس ٺاهڻ جي ضرورت آهي. اسان اهو آساني سان ڪري سگهون ٿا، ڇو ته اسان وٽ هاڻي ACID ضمانتون آهن!

سي * ون ۾ انڊيڪس

تصويرن سان گڏ ھڪڙو ماخذ جدول آھي جنھن ۾ رڪارڊ ID بنيادي ڪنجي آھي.

NewSQL = NoSQL+ACID

هڪ انڊيڪس لاءِ، سي*ون هڪ نئين ٽيبل ٺاهي ٿو جيڪا اصل جي ڪاپي آهي. ڪنجي انڊيڪس ايڪسپريشن جي ساڳي آهي، ۽ ان ۾ پڻ شامل آهي بنيادي ڪيئي رڪارڊ جي ماخذ ٽيبل مان:

NewSQL = NoSQL+ACID

ھاڻي سوال "آخري ڏينھن لاءِ مالڪ" لاءِ ٻي ٽيبل مان چونڊيل طور تي ٻيهر لکي سگھجي ٿو:

SELECT * FROM i1_test
WHERE owner=?
AND modified>?

ماخذ جدول فوٽوز ۽ انڊيڪس ٽيبل i1 ۾ ڊيٽا جي مطابقت خود بخود ڪوآرڊينيٽر طرفان برقرار رکي ٿي. اڪيلي ڊيٽا اسڪيما جي بنياد تي، جڏهن ڪا تبديلي ملي ٿي، ڪوآرڊينيٽر هڪ تبديلي پيدا ڪري ٿو ۽ ذخيرو ڪري ٿو نه رڳو مکيه جدول ۾، پر نقلن ۾ پڻ. ڪا به اضافي ڪارناما انڊيڪس ٽيبل تي نه ڪيا ويا آهن، لاگز نه پڙهيا ويا آهن، ۽ ڪو تالا استعمال نه ڪيا ويا آهن. اهو آهي، انگن اکرن کي شامل ڪرڻ لڳ ڀڳ ڪو به وسيلو استعمال نه ڪندو آهي ۽ عملي طور تي تبديلين کي لاڳو ڪرڻ جي رفتار تي ڪو اثر ناهي.

ACID استعمال ڪندي، اسان SQL-like indexes کي لاڳو ڪرڻ جي قابل ھئاسين. اهي هڪجهڙائي، اسپيبلبل، تيز، ٺهڪندڙ، ۽ CQL سوال جي ٻولي ۾ ٺهيل آهن. انڊيڪسس کي سپورٽ ڪرڻ لاءِ ايپليڪيشن ڪوڊ ۾ ڪابه تبديلي گهربل ناهي. هر شيءِ سادي آهي جيئن SQL ۾. ۽ سڀ کان وڌيڪ اهم، انڊيڪس اصل ٽرانزيڪشن ٽيبل تي تبديلين جي عمل جي رفتار تي اثر انداز نه ڪندا آهن.

ڇا ٿيو

اسان ٽي سال اڳ سي * ون ترقي ڪئي ۽ ان کي تجارتي آپريشن ۾ شروع ڪيو.

آخر اسان کي ڇا مليو؟ اچو ته ان جو جائزو وٺون مثال استعمال ڪندي فوٽو پروسيسنگ ۽ اسٽوريج سبسسٽم، هڪ سماجي نيٽ ورڪ ۾ ڊيٽا جي سڀ کان اهم قسمن مان. اسان پاڻ تصويرن جي لاشن بابت نه ڳالهائي رهيا آهيون، پر هر قسم جي ميٽا معلومات بابت. هاڻي Odnoklassniki وٽ اٽڪل 20 بلين اهڙا رڪارڊ آهن، سسٽم 80 هزار پڙهڻ واري درخواستن کي في سيڪنڊ تي عمل ڪري ٿو، ڊيٽا جي ترميم سان لاڳاپيل 8 هزار ACID ٽرانزيڪشن في سيڪنڊ تائين.

جڏهن اسان SQL استعمال ڪيو ريپليڪشن فيڪٽر = 1 سان (پر RAID 10 ۾)، فوٽو ميٽانفارميشن کي محفوظ ڪيو ويو هڪ انتهائي دستياب ڪلسٽر تي 32 مشينن جو Microsoft SQL Server هلائيندڙ (پلس 11 بيڪ اپ). بيڪ اپ رکڻ لاءِ 10 سرور پڻ مختص ڪيا ويا. ڪل 50 قيمتي ڪارون. ساڳي ئي وقت، سسٽم ريزرويو کان سواء، درجه بندي لوڊ تي هلائي ٿو.

نئين سسٽم ڏانهن لڏپلاڻ کان پوء، اسان وصول ڪيو replication factor = 3 - هڪ ڪاپي هر ڊيٽا سينٽر ۾. سسٽم تي مشتمل آهي 63 Cassandra اسٽوريج نوڊس ۽ 6 ڪوآرڊينيٽر مشينون، مجموعي طور تي 69 سرورز لاءِ. پر اهي مشينون تمام سستا آهن، انهن جي ڪل قيمت هڪ SQL سسٽم جي قيمت جو تقريبا 30٪ آهي. ساڳئي وقت، لوڊ 30٪ تي رکيل آهي.

C*One جي تعارف سان، ويڪرائي به گھٽجي وئي: SQL ۾، لکڻ جي آپريشن اٽڪل 4,5 ms ورتي. سي * ون ۾ - اٽڪل 1,6 ايم ايس. ٽرانزيڪشن جو مدو سراسري طور تي 40 ms کان گهٽ آهي، ڪمٽ 2 ms ۾ مڪمل ٿئي ٿو، پڙهڻ ۽ لکڻ جو مدو سراسري طور تي 2 ms آهي. 99th فيصد - صرف 3-3,1 ms، ٽائيم آئوٽ جو تعداد 100 ڀيرا گھٽجي ويو آھي - سڀ قياس جي وسيع استعمال جي ڪري.

هينئر تائين، اڪثر SQL سرور نوڊس کي ختم ڪيو ويو آهي؛ نوان پروڊڪٽس ٺاهيا پيا وڃن صرف سي * ون استعمال ڪندي. اسان پنهنجي ڪلائوڊ ۾ ڪم ڪرڻ لاءِ C * One کي ترتيب ڏنو هڪ ڪڪر، جنهن اهو ممڪن ڪيو ته نئين ڪلستر جي ترتيب کي تيز ڪرڻ، ترتيب ڏيڻ ۽ خودڪار آپريشن کي آسان بڻائي. ماخذ ڪوڊ جي بغير، اهو ڪرڻ تمام گهڻو ڏکيو ۽ منجهيل هوندو.

هاڻي اسان ڪم ڪري رهيا آهيون اسان جي ٻين اسٽوريج سهولتن کي ڪلائوڊ ڏانهن منتقل ڪرڻ - پر اهو هڪ مڪمل طور تي مختلف ڪهاڻي آهي.

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

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