HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

راتلونکی HighLoad++ کنفرانس به د اپریل په 6 او 7، 2020 په سینټ پیټرزبورګ کې ترسره شي.
تفصیلات او ټکټونه مخونه. HighLoad++ سایبریا 2019. هال "کراسنویارسک". د جون 25، 12:00. مقالې او پریزنټشن.

HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

داسې پیښیږي چې عملي اړتیاوې له تیوري سره په ټکر کې وي، چیرې چې د سوداګریز محصول لپاره مهم اړخونه په پام کې نه نیول کیږي. دا خبرې د سوداګریز محصول د اړتیاو پر بنسټ د اکادمیک څیړنې پراساس د Causal تسلسل اجزاو رامینځته کولو لپاره د مختلف طریقو غوره کولو او یوځای کولو پروسه وړاندې کوي. اوریدونکي به د منطقي ساعتونو، د انحصار تعقیب، د سیسټم امنیت، د ساعت همغږي کولو، او ولې MongoDB په ځینو حلونو کې د موجوده نظري طریقو په اړه زده کړه وکړي.

میخایل تیولینیف (له دې وروسته د MT په نوم یادیږي): - زه به د Causal تسلسل په اړه وغږیږم - دا هغه ځانګړتیا ده چې موږ په MongoDB کې کار کړی. زه د ویشل شوي سیسټمونو په یوه ډله کې کار کوم، موږ دا شاوخوا دوه کاله دمخه وکړل.

HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

په بهیر کې، ما باید ځان د ډیرو علمي څیړنو سره آشنا کړي، ځکه چې دا ځانګړتیا خورا ښه مطالعه شوې ده. دا معلومه شوه چې هیڅ یوه مقاله د تولید ډیټابیس کې هغه څه ته اړتیا نلري چې د خورا ځانګړي اړتیاو له امله چې شاید په کوم تولید غوښتنلیک کې شتون ولري.

زه به د دې په اړه وغږیږم چې څنګه موږ د اکاډمیک څیړنې مصرف کونکو په توګه ، له دې څخه یو څه چمتو کړو چې بیا موږ خپلو کاروونکو ته د چمتو شوي ډش په توګه وړاندې کړو چې د کارولو لپاره اسانه او خوندي وي.

د لامل دوام. راځئ چې مفکورې تعریف کړو

د پیل کولو لپاره، زه غواړم په عمومي اصطلاحاتو کې ووایم چې د علت ثبات څه دی. دوه کرکټرونه شتون لري - لیونارډ او پیني (د تلویزیون لړۍ "د لوی بینګ تیوري"):

HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

راځئ چې ووایو پیني په اروپا کې دی او لیونارډ غواړي هغې ته یو حیرانتیا ګوند واچوي. او هغه د خپل ملګري لیست څخه د هغې د ایستلو څخه غوره هیڅ فکر نشي کولی ، خپلو ټولو ملګرو ته یې په فیډ کې تازه معلومات لیږلي: "راځئ چې پیني خوشحاله کړو!" (هغه په ​​​​اروپا کې ده، پداسې حال کې چې هغه خوب کوي، هغه دا ټول نه ګوري او نشي لیدلی، ځکه چې هغه هلته نه ده). په نهایت کې ، هغه دا پوسټ حذف کوي ، له فیډ څخه یې له مینځه وړي او لاسرسی یې بحالوي ترڅو هغه هیڅ شی ونه ګوري او هیڅ رسوایی شتون نلري.
دا ټول ښه او ښه دي، مګر راځئ چې فرض کړو چې سیسټم ویشل شوی او شیان یو څه غلط شوي. دا ممکن د مثال په توګه پیښ شي چې د دې پوسټ څرګندیدو وروسته د پیني لاسرسي محدودیت رامینځته شوی ، که چیرې پیښې د علت او اغیزې سره تړاو نلري. په حقیقت کې، دا یوه بیلګه ده کله چې د سوداګرۍ فعالیت ترسره کولو لپاره د Causal تسلسل ته اړتیا وي (په دې حالت کې).

په حقیقت کې، دا د ډیټابیس خورا غیر معمولي ملکیتونه دي - ډیر لږ خلک د دوی ملاتړ کوي. راځئ چې موډلونو ته لاړ شو.

د مطابقت موډلونه

په ډیټابیسونو کې دقیقا د دوام ماډل څه شی دی؟ دا ځینې تضمینونه دي چې توزیع شوی سیسټم د دې په اړه ورکوي چې پیرودونکي څه معلومات ترلاسه کولی شي او په کوم ترتیب کې.

په اصولو کې، ټول ثابت موډلونه د یو توزیع شوي سیسټم په څیر یو سیسټم ته ورته دی چې چلوي، د بیلګې په توګه، په لپ ټاپ کې په یو نوډ کې. او دا ورته ورته یو سیسټم دی چې په زرګونو جیو توزیع شوي "نوډونو" باندې چلیږي لپ ټاپ ته ، په کوم کې چې دا ټول ملکیتونه په اصل کې په اوتومات ډول ترسره کیږي.

له همدې امله، د ثبات ماډلونه یوازې په ویشل شوي سیسټمونو کې پلي کیږي. ټول هغه سیسټمونه چې پخوا شتون درلود او په ورته عمودی اندازه کولو کې کار کاوه د داسې ستونزو تجربه نه وه کړې. دلته یو بفر کیچ شتون درلود ، او هرڅه تل ​​له هغې لوستل کیدل.

ماډل پیاوړی

په حقیقت کې، لومړی ماډل پیاوړی دی (یا د زیاتوالي وړتیا کرښه، لکه څنګه چې ډیری وختونه ویل کیږي). دا یو ثابت ماډل دی چې ډاډ ترلاسه کوي چې هر بدلون، یوځل چې تایید شو چې دا واقع شوی، د سیسټم ټولو کاروونکو ته لیدل کیږي.

دا په ډیټابیس کې د ټولو پیښو نړیوال نظم رامینځته کوي. دا یو خورا پیاوړی ثبات ملکیت دی، او دا عموما خورا ګران دی. په هرصورت، دا خورا ښه ملاتړ شوی. دا یوازې خورا ګران او ورو دی - دا یوازې په ندرت سره کارول کیږي. دې ته د لوړیدو وړتیا ویل کیږي.

دلته یو بل، پیاوړی ملکیت شتون لري چې په سپنر کې ملاتړ کیږي - د بهرني تسلسل په نوم یادیږي. موږ به لږ وروسته په دې اړه خبرې وکړو.

قضاوت

بل یو Causal دی، کوم چې په حقیقت کې هغه څه دي چې زه یې په اړه خبرې کوم. د قوي او کازال تر مینځ ډیری نور فرعي کچې شتون لري چې زه به یې په اړه خبرې ونه کړم، مګر دا ټول په Causal کې راښکته کیږي. دا یو مهم ماډل دی ځکه چې دا د ټولو ماډلونو څخه خورا پیاوړی دی، د شبکې یا ویشونو په شتون کې خورا پیاوړی ثبات دی.

Causals په حقیقت کې یو حالت دی چې پیښې د علت او اغیزې اړیکې سره تړلې وي. ډیری وختونه دوی د پیرودونکي له نظره ستاسو د حقونو په اړه لوستل کیږي. که چیرې پیرودونکي ځینې ارزښتونه مشاهده کړي، هغه نشي کولی هغه ارزښتونه وګوري چې په تیرو وختونو کې وو. هغه لا دمخه د مخکیني لوستلو لیدل پیل کړي. دا ټول په ورته شی کې راځي.
Causals د ثابت ماډل په توګه په سرور کې د پیښو جزوی ترتیب دی، په کوم کې چې د ټولو مراجعینو پیښې په ورته ترتیب کې لیدل کیږي. په دې حالت کې، لیونارډ او پیني.

واقعی

دریم ماډل د پیښو تسلسل دی. دا هغه څه دي چې په بشپړ ډول ټول توزیع شوي سیسټمونه ملاتړ کوي ، لږترلږه ماډل چې په بشپړ ډول معنی لري. دا لاندې معنی لري: کله چې موږ په ډیټا کې ځینې بدلونونه لرو، په ځینو وختونو کې دوی ثابت کیږي.

په داسې یوه شیبه کې هغه څه نه وايي، که نه نو هغه به په بهرني مطابقت بدل شي - دا به په بشپړه توګه مختلف کیسه وي. په هرصورت، دا یو خورا مشهور ماډل دی، تر ټولو عام. د ډیفالټ په واسطه، د توزیع شوي سیسټم ټول کاروونکي د پیښو مطابقت کاروي.

زه غواړم یو څو مقایسه مثالونه وړاندې کړم:

HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

دا تیر څه معنی لري؟

  • ځنډ لکه څنګه چې د ثبات ځواک ډیریږي، دا د واضح دلیلونو لپاره لوی کیږي: تاسو اړتیا لرئ چې نور ریکارډونه جوړ کړئ، د ټولو کوربه او نوډونو څخه تایید ترلاسه کړئ چې په کلستر کې برخه اخلي چې ډاټا لا دمخه شتون لري. په دې اساس، د پیښې مطابقت خورا ګړندی ځواب لري ، ځکه چې هلته ، د یوې قاعدې په توګه ، تاسو حتی کولی شئ دا حافظې ته ژمن کړئ او دا به په اصولو کې کافي وي.
  • شتون. که موږ دا د سیسټم د وړتیا په توګه پوهیږو چې د شبکې ماتولو، ویشلو، یا یو ډول ناکامۍ په شتون کې ځواب ووایی، د غلطۍ زغم زیاتیږي ځکه چې د دوام موډل کمیږي، ځکه چې دا زموږ لپاره کافي دي چې یو کوربه ژوند کوي او په ورته وخت کې. وخت ځینې معلومات تولیدوي. د پیښې مطابقت په هیڅ ډول د معلوماتو په اړه هیڅ تضمین نه کوي - دا هرڅه کیدی شي.
  • ګډوډي. په ورته وخت کې، البته، د بې نظمیو شمیر زیاتیږي. په قوي تسلسل کې دوی باید تقریبا شتون ونلري، مګر په واقعیت کې مطابقت کې دوی هر څه کیدی شي. پوښتنه راپورته کیږي: ولې خلک د پیښې مطابقت غوره کوي که چیرې دا بې نظمۍ ولري؟ ځواب دا دی چې د پیښو مطابقت ماډلونه د تطبیق وړ دي او ګډوډي شتون لري، د بیلګې په توګه، په لنډ وخت کې؛ دا ممکنه ده چې وزرډ د لوستلو لپاره وکاروئ او ډیر یا لږ متناسب معلومات ولولئ؛ دا اکثرا ممکنه ده چې د قوي ثبات ماډلونه وکاروئ. په عمل کې دا کار کوي، او ډیری وختونه د بې نظمیو شمیر په وخت کې محدود وي.

د CAP نظریه

کله چې تاسو د کلمو دوام، شتون وګورئ - ستاسو ذهن ته څه راځي؟ دا سمه ده - د CAP نظریه! اوس زه غواړم دا افسانه له منځه یوسم ... دا زه نه یم - دا مارتین کلیپمن دی، چا چې په زړه پورې مقاله لیکلې، یو په زړه پورې کتاب.

HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

د CAP تیورم یو اصول دی چې په 2000 لسیزه کې جوړ شوی چې دوام، شتون، برخې: هر دوه واخلئ، او تاسو نشئ کولی درې غوره کړئ. دا یو ځانګړی اصول وو. دا څو کاله وروسته د ګیلبرټ او لینچ لخوا د تیورم په توګه ثابت شو. بیا دا د منتر په توګه کارول پیل شول - سیسټمونه په CA، CP، AP او داسې نورو ویشل پیل شول.

دا تیورم په حقیقت کې د لاندې قضیو لپاره ثابت شوی و ... لومړی، شتون د صفر څخه سلونو ته د دوامداره ارزښت په توګه نه ګڼل کیده (0 - سیسټم "مړ" دی، 100 - چټک ځواب ورکوي؛ موږ ورته په پام کې نیولو سره عادت شوي یو) ، مګر د الګوریتم د ملکیت په توګه ، کوم چې تضمین کوي ​​​​چې د دې ټولو اجرااتو لپاره دا ډاټا بیرته راوړي.

د ځواب وخت په اړه هیڅ کلمه نشته! یو الګوریتم شتون لري چې د 100 کلونو وروسته ډاټا بیرته راګرځوي - یو بالکل په زړه پورې موجود الګوریتم، کوم چې د CAP تیورم برخه ده.
دوهم: تیورم د ورته کلید په ارزښتونو کې د بدلونونو لپاره ثابت شوی، سره له دې چې دا بدلونونه د اندازې وړ دي. دا پدې مانا ده چې په حقیقت کې دوی په عملي توګه نه کارول کیږي، ځکه چې ماډلونه مختلف دي د پیښو تسلسل، قوي تسلسل (شاید).

دا ټول د څه لپاره؟ برسېره پردې، د CAP تیورم په سمه توګه په هغه شکل کې چې دا ثابت شوی په عملي توګه د تطبیق وړ نه دی او په ندرت سره کارول کیږي. په نظرياتي بڼه کې، دا په يو ډول هر څه محدودوي. دا یو ځانګړی اصول په ګوته کوي چې په شعوري ډول سم دی ، مګر په عموم کې ندي ثابت شوي.

د علت ثبات ترټولو پیاوړی ماډل دی

هغه څه چې اوس پیښیږي دا دي چې تاسو کولی شئ ټول درې شیان ترلاسه کړئ: دوامدارۍ ، د برخو په کارولو سره شتون. په ځانګړې توګه، Causal consistency ترټولو قوي تسلسل ماډل دی، کوم چې لاهم د پارټیشنونو په شتون کې کار کوي (په شبکه کې وقفې). له همدې امله دا د دومره لوی ګټو څخه دی، او له همدې امله موږ دا پورته کړه.

HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

لومړی، دا د غوښتنلیک پراختیا کونکو کار ساده کوي. په ځانګړې توګه، د سرور څخه د لوی ملاتړ شتون: کله چې ټول ریکارډونه چې د یو مراجعینو دننه واقع کیږي په بل پیرودونکي کې ورته ترتیب ته رسیدل تضمین شوي. دوهم، دا د ویشونو سره مقاومت کوي.

د MongoDB داخلي پخلنځی

په یاد ولرئ چې دا د غرمې ډوډۍ ده، موږ پخلنځي ته ځو. زه به تاسو ته د سیسټم ماډل په اړه ووایم، د بیلګې په توګه، MongoDB د هغو کسانو لپاره څه دی چې د لومړي ځل لپاره د داسې ډیټابیس په اړه اوریدلي دي.

HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

MongoDB (له دې وروسته د "MongoDB" په نوم یادیږي) یو ویشل شوی سیسټم دی چې د افقی اندازه کولو ملاتړ کوي، دا دی، شارډینګ؛ او په هر شارډ کې دا د ډیټا بې ځایه کیدو ملاتړ هم کوي ، دا نقل کول دي.

په MongoDB کې شارډینګ (د اړیکو ډیټابیس نه دی) اتوماتیک توازن ترسره کوي، دا د اسنادو هر ټولګه (یا "میز" د اړونده معلوماتو په شرایطو کې) په ټوټو ویشل شوي، او سرور په اتوماتيک ډول د شارډونو ترمنځ حرکت کوي.

د پوښتنې روټر، کوم چې غوښتنې توزیع کوي، د پیرودونکي لپاره یو څه پیرودونکی دی چې دا کار کوي. دا دمخه پوهیږي چې چیرې او کوم معلومات موقعیت لري او ټولې غوښتنې سمې شارډ ته لارښوونه کوي.

بل مهم ټکی: MongoDB یو واحد ماسټر دی. یو لومړنی شتون لري - دا کولی شي ریکارډونه واخلي چې د هغه کلیدونو ملاتړ کوي چې پکې شامل دي. تاسو نشئ کولی ملټي ماسټر لیکل وکړئ.

موږ 4.2 خوشې کړل - نوي په زړه پوري شیان هلته څرګند شول. په ځانګړې توګه، دوی لوسین - لټون - یعنې د اجرا وړ جاوا مستقیم مونګو ته داخل کړل، او هلته دا ممکنه شوه چې د لوسین له لارې لټونونه ترسره کړي، لکه څنګه چې په Elastica کې.

او دوی یو نوی محصول جوړ کړ - چارټونه، دا په اطلس (د مونګو خپل کلاوډ) کې هم شتون لري. دوی وړیا ټایر لري - تاسو کولی شئ د هغې سره شاوخوا لوبه وکړئ. ما واقعیا چارټونه خوښ کړل - د معلوماتو لید ، خورا هوښیار.

اجزا د ثبات لامل

ما شاوخوا 230 مقالې شمیرلې چې پدې موضوع کې خپاره شوي - د لیسلي لامپرټ څخه. اوس به له خپل یادښت څخه د دې موادو ځینې برخې تاسو ته وړاندې کړم.

HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

دا ټول د لیسلي لامپرټ لخوا د یوې مقالې سره پیل شوي، کوم چې په 1970 کې لیکل شوی و. لکه څنګه چې تاسو لیدلی شئ، د دې موضوع په اړه ځینې څیړنې لاهم روانې دي. اوس د توزیع شوي سیسټمونو پراختیا سره په تړاو کې د Causal تسلسل د علاقې تجربه کوي.

محدودیتونه

کوم محدودیتونه شتون لري؟ دا په حقیقت کې یو له اصلي ټکو څخه دی، ځکه چې هغه محدودیتونه چې یو تولیدي سیسټم لګوي د هغو محدودیتونو څخه خورا توپیر لري چې په اکاډمیکو مقالو کې شتون لري. دوی ډیری وختونه مصنوعي وي.

HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

  • لومړی، "MongoDB" یو واحد ماسټر دی، لکه څنګه چې ما مخکې وویل (دا خورا ساده کوي).
  • موږ باور لرو چې سیسټم باید شاوخوا 10 زره شارډز ملاتړ وکړي. موږ نشو کولی کوم ساختماني پریکړې وکړو چې دا ارزښت په ښکاره ډول محدود کړي.
  • موږ بادل لرو، مګر موږ فکر کوو چې یو شخص باید لاهم فرصت ولري کله چې هغه بائنری ډاونلوډ کړي، دا په خپل لپ ټاپ کې چلوي، او هرڅه ښه کار کوي.
  • موږ یو څه فرض کوو چې څیړنه په ندرت سره فرض کوي: بهرني پیرودونکي کولی شي هغه څه وکړي چې دوی یې غواړي. MongoDB خلاص سرچینه ده. په دې اساس، پیرودونکي ډیر هوښیار او غوسه کیدی شي - دوی کولی شي هرڅه مات کړي. موږ اټکل کوو چې د بازنطین فییلر ممکن رامینځته شي.
  • د بهرني مراجعینو لپاره چې د احاطې څخه بهر دي، یو مهم محدودیت شتون لري: که دا ځانګړتیا غیر فعاله وي، نو د فعالیت تخریب باید ونه لیدل شي.
  • بل ټکی عموما د اکادمیک ضد دی: د پخوانیو نسخو او راتلونکو نسخو مطابقت. زاړه چلوونکي باید د نوي تازه معلوماتو ملاتړ وکړي، او ډیټابیس باید د پخوانیو چلوونکو ملاتړ وکړي.

په عموم کې، دا ټول محدودیتونه وضع کوي.

د دوامدارۍ لاملونه

زه به اوس د ځینو برخو په اړه وغږیږم. که موږ په عمومي ډول د Causal تسلسل په پام کې ونیسو، موږ کولی شو بلاکونه غوره کړو. موږ د هغه کارونو څخه غوره کړل چې په یو ځانګړي بلاک پورې اړه لري: د انحصار تعقیب ، د ساعتونو غوره کول ، دا ساعتونه څنګه یو له بل سره همغږي کیدی شي ، او موږ څنګه امنیت تضمین کوو - دا د هغه څه یوه لنډه خاکه ده چې زه به یې په اړه وغږیږم:

HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

د بشپړ انحصار تعقیب

ولې ورته اړتیا ده؟ نو کله چې ډاټا نقل کیږي، هر ریکارډ، د معلوماتو هر بدلون د هغه بدلونونو په اړه معلومات لري چې دا پورې اړه لري. خورا لومړی او ساده بدلون هغه وخت دی چې هر پیغام چې ریکارډ لري د پخوانیو پیغامونو په اړه معلومات لري:

HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

په دې بېلګه کې، په منحل قوسونو کې شمیره د ریکارډ شمیره ده. ځینې ​​​​وختونه دا ریکارډونه د ارزښتونو سره حتی په بشپړ ډول لیږدول کیږي، ځینې وختونه ځینې نسخې لیږدول کیږي. لاندینۍ کرښه دا ده چې هر بدلون د تیر په اړه معلومات لري (په ښکاره ډول دا ټول په خپل ځان کې لري).

ولې موږ پریکړه وکړه چې دا طریقه ونه کاروو (بشپړ تعقیب)؟ په ښکاره ډول، ځکه چې دا طریقه غیر عملي ده: په ټولنیز شبکه کې هر ډول بدلون د دې ټولنیز شبکې په ټولو پخوانیو بدلونونو پورې اړه لري، په هر تازه کې لیږد، ووایه، فیسبوک یا VKontakte. سره له دې، د بشپړ انحصار تعقیب په اړه ډیرې څیړنې شتون لري - دا دمخه ټولنیز شبکې دي؛ د ځینو حالتونو لپاره دا واقعیا کار کوي.

د واضح انحصار تعقیب

راتلونکی یو ډیر محدود دی. د معلوماتو لیږد هم دلته په پام کې نیول شوی، مګر یوازې هغه څه چې په روښانه ډول پورې تړاو لري. په څه پورې اړه لري، د یوې قاعدې په توګه، د غوښتنلیک لخوا ټاکل کیږي. کله چې ډاټا نقل شي، پوښتنه یوازې هغه وخت ځوابونه راګرځوي کله چې پخوانۍ انحصارونه مطمین شوي وي، دا ښودل شوي. دا د دې جوهر دی چې د Causal تسلسل څنګه کار کوي.

HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

هغه ګوري چې ریکارډ 5 په ریکارډونو 1، 2، 3، 4 پورې اړه لري - په وینا، هغه انتظار کوي مخکې له دې چې پیرودونکي د پیني د لاسرسي پریکړې لخوا رامینځته شوي بدلونونو ته لاسرسی ومومي، کله چې ټول پخواني بدلونونه دمخه د ډیټابیس له لارې تیر شوي.

دا هم موږ ته مناسب نه دی، ځکه چې لاهم ډیر معلومات شتون لري، او دا به شیان ورو کړي. بله لاره شتون لري ...

د لامپورټ ساعت

دوی ډیر زاړه دي. د لامپورټ کلاک معنی دا ده چې دا انحصارونه په سکالر فنکشن کې پوښل شوي چې د لامپورټ ساعت په نوم یادیږي.

د سکالر فنکشن یو څه خلاص شمیر دی. دا ډیری وختونه منطقي وخت بلل کیږي. د هرې پیښې سره، دا کاونټر زیاتیږي. کاونټر، چې اوس مهال پروسې ته پیژندل کیږي، هر پیغام لیږي. دا روښانه ده چې پروسې کولی شي د همغږۍ څخه بهر وي، دوی کولی شي په بشپړ ډول مختلف وختونه ولري. په هرصورت، سیسټم یو څه د داسې پیغام رسولو سره ساعت توازن کوي. په دې قضیه کې څه پیښیږي؟

ما دا لوی شارډ په دوه برخو ویشلی ترڅو دا روښانه کړي: ملګري کولی شي په یوه نوډ کې ژوند وکړي، کوم چې د ټولګې یوه برخه لري، او فیډ کولی شي په بل نوډ کې ژوند وکړي، کوم چې د دې ټولګې یوه برخه لري. ایا دا روښانه ده چې دوی څنګه کولی شي له کرښې څخه ووځي؟ لومړی فیډ به ووایی: "تکلیف شوی"، او بیا ملګري. که سیسټم یو ډول تضمین چمتو نکړي چې فیډ به تر هغه پورې ونه ښودل شي تر څو چې د ملګرو په ټولګه کې د ملګرو انحصار هم نه وي سپارل شوی، نو بیا به موږ هغه حالت ولرو چې ما ورته اشاره وکړه.

تاسو وګورئ چې څنګه په فیډ کې د کاونټر وخت په منطقي ډول وده کوي:

HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

نو د دې لامپورټ ساعت اصلي ملکیت او د علت دوام (د لامپورټ ساعت له لارې تشریح شوی) دا دی: که موږ پیښې A او B ولرو، او پیښه B د پیښې A* پورې اړه لري، نو دا تعقیبوي چې د پیښې منطقي وخت د A څخه کم دی. منطقي وخت د پیښې B څخه.

* ځینې وختونه دوی دا هم وايي چې A د B څخه دمخه پیښ شوی ، دا د B څخه دمخه پیښ شوی - دا یوه ځانګړې اړیکه ده چې په جزوي ډول د پیښو ټول سیټ امر کوي چې په عمومي ډول پیښ شوي.

برعکس غلط دی. دا په حقیقت کې د لامپورټ ساعت یو له اصلي زیانونو څخه دی - جزوی ترتیب. د یو ځای پیښو په اړه یو مفهوم شتون لري، دا هغه پیښې دي چې نه یې (A د B څخه مخکې پیښ شوي) او نه (A د B څخه مخکې پیښ شوي). یو مثال به د لیونارډ موازي اضافه وي چې د یو ملګري په توګه د بل چا اضافه کول (حتی لیونارډ نه، مګر شیلډن، د بیلګې په توګه).
دا هغه ملکیت دی چې ډیری وختونه د لامپورټ ساعتونو سره کار کولو کې کارول کیږي: دوی په ځانګړي ډول فعالیت ته ګوري او له دې څخه دوی دې پایلې ته رسیدلي چې شاید دا پیښې پورې اړه ولري. ځکه چې یوه لاره سمه ده: که LogicalTime A له LogicalTime B څخه کم وي، نو B د A څخه مخکې نشي واقع کیدی. او که ډیر، نو شاید.

ویکتور ساعت

د لامپورټ ساعت منطقي پرمختګ د ویکتور ساعت دی. دوی په دې کې توپیر لري چې هر نوډ چې دلته دی خپل جلا ساعت لري، او دوی د ویکتور په توګه لیږدول کیږي.
په دې حالت کې، تاسو وګورئ چې د ویکتور زیروت شاخص د فیډ لپاره مسؤل دی، او د ویکتور لومړی شاخص د ملګرو لپاره دی (هر یو له دې نوډونو). او اوس به دوی زیات شي: د "فیډ" صفر شاخص د لیکلو پر مهال زیاتیږي - 1, 2, 3:

HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

ولې د ویکتور ساعت غوره دی؟ ځکه چې دوی تاسو ته اجازه درکوي چې معلومه کړي چې کومې پیښې په یو وخت کې دي او کله چې دوی په مختلفو نوډونو کې واقع کیږي. دا د منګو ډی بی په څیر د شارډینګ سیسټم لپاره خورا مهم دی. په هرصورت ، موږ دا نه دی غوره کړی ، که څه هم دا یو په زړه پوری شی دی ، او دا عالي کار کوي ، او دا به شاید زموږ سره مناسب وي ...

که موږ 10 زره شارډونه ولرو، موږ نشو کولی 10 زره اجزاو ته انتقال کړو، حتی که موږ دا کمپریس کړو یا بل څه راوړو - د تادیې بار به د دې ټول ویکتور حجم څخه څو چنده کوچنی وي. له همدې امله، زموږ د زړونو او غاښونو په مینځلو سره، موږ دا طریقه پریښوده او یو بل ته لاړ.

سپینر ریښتینی وخت. اټومي ساعت

ما وویل چې د سپنر په اړه به یوه کیسه وي. دا یو ښه شی دی، مستقیم د XNUMX پیړۍ څخه بهر: اټومي ساعتونه، د GPS همغږي کول.

نظر څه دی؟ "سپنر" د ګوګل سیسټم دی چې پدې وروستیو کې حتی د خلکو لپاره شتون لري (دوی ورته SQL اضافه کړی). هره راکړه ورکړه یو څه وخت ټاپه لري. له هغه وخته چې وخت همغږي شوی *، هره پیښه یو ځانګړی وخت ټاکل کیدی شي - اټومي ساعتونه د انتظار وخت لري، وروسته له دې چې یو بل وخت "پیښیږي" تضمین کیږي.

HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

پدې توګه ، په ساده ډول ډیټابیس ته لیکلو او د ځینې مودې انتظار کولو سره ، د پیښې سیریل وړتیا په اوتومات ډول تضمین کیږي. دوی خورا قوي تسلسل ماډل لري چې په اصولو کې تصور کیدی شي - دا بهرنی تسلسل دی.

* دا د لامپارټ ساعتونو سره اصلي ستونزه ده - دوی هیڅکله په توزیع شوي سیسټمونو کې همغږي ندي. دوی کولی شي توپیر وکړي؛ حتی د NTP سره، دوی لاهم ښه کار نه کوي. "سپنر" یو اټومي ساعت لري او همغږي کول، داسې ښکاري، مایکرو ثانیه ده.

ولې مو انتخاب نه کړ؟ موږ فکر نه کوو چې زموږ کاروونکي یو جوړ شوی اټومي ساعت لري. کله چې دوی ښکاره شي، په هر لپ ټاپ کې جوړ شوي، نو یو ډول عالي عالي GPS همغږي به وي - بیا هو ... مګر د اوس لپاره ترټولو غوره چې امکان لري ایمیزون، بیس سټیشنونه - د جنون لپاره ... نو موږ نور ساعتونه وکاروو. .

هایبرډ ساعت

دا په حقیقت کې هغه څه دي چې په MongoDB کې ټک کوي کله چې د Causal دوام تضمین کوي. دوی څنګه هایبرډ دي؟ هایبرډ یو سکیلر ارزښت دی، مګر دا دوه برخې لري:

HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

  • لومړی د یونیکس دور دی (د "کمپیوټر نړۍ له پیل څخه" څو ثانیې تیرې شوې).
  • دوهم یو څه زیاتوالی دی، د 32-bit نه لاسلیک شوی انټ هم.

دا ټول دي، په حقیقت کې. دا طریقه شتون لري: هغه برخه چې د وخت مسولیت لري هر وخت د ساعت سره همغږي کیږي. هرکله چې تازه واقع کیږي، دا برخه د ساعت سره همغږي کیږي او دا معلومه شوه چې وخت تل لږ یا لږ سم وي، او زیاتوالی تاسو ته اجازه درکوي د پیښو ترمنځ توپیر وکړي چې په ورته وخت کې پیښ شوي.

ولې دا د MongoDB لپاره مهم دی؟ ځکه چې دا تاسو ته اجازه درکوي په یو ټاکلي وخت کې یو ډول بیک اپ رستورانتونه رامینځته کړئ ، دا د وخت سره سم ترتیب شوی. دا مهمه ده کله چې ځینې پیښې اړین وي؛ د ډیټابیس لپاره، پیښې په ډیټابیس کې بدلونونه دي چې د وخت په ځینو وقفو کې پیښ شوي.

زه به تاسو ته یوازې تاسو ته ترټولو مهم دلیل ووایم (مهرباني وکړئ ، هیچا ته مه وایئ)! موږ دا وکړل ځکه چې دا هغه څه دي چې تنظیم شوي، ترتیب شوي ډاټا په MongoDB OpLog کې ښکاري. OpLog د ډیټا جوړښت دی چې په ډیټابیس کې په بشپړ ډول ټول بدلونونه لري: دوی لومړی OpLog ته ځي، او بیا دوی پخپله په ذخیره کې پلي کیږي کله چې دا د تکرار نیټه یا شارډ وي.

دا اصلي لامل و. لاهم ، د ډیټابیس رامینځته کولو لپاره عملي اړتیاوې هم شتون لري ، پدې معنی چې دا باید ساده وي - لږ کوډ ، د امکان تر حده لږ مات شوي شیان چې بیا لیکل او ازموینې ته اړتیا لري. دا حقیقت چې زموږ اپلاګونه د هایبرډ ساعتونو لخوا ترتیب شوي و ډیره مرسته وکړه او موږ ته یې اجازه راکړه چې سم انتخاب وکړو. دا واقعیا تادیه کړه او یو څه په جادویی ډول په لومړي پروټوټایپ کې کار وکړ. دا ډیره ښه وه!

د ساعت همغږي کول

د همغږي کولو ډیری میتودونه شتون لري چې په ساینسي ادب کې تشریح شوي. زه د همغږي کولو په اړه خبرې کوم کله چې موږ دوه مختلف شارډونه لرو. که چیرې یو ریپلیکا سیټ وي، نو هیڅ همغږي ته اړتیا نشته: دا یو "واحد ماسټر" دی؛ موږ یو OpLog لرو، په کوم کې چې ټول بدلونونه راځي - پدې حالت کې، هرڅه دمخه په ترتیب سره پخپله "اوپلګ" کې ترتیب شوي. مګر که موږ دوه مختلف شارډونه ولرو، د وخت همغږي کول دلته مهم دي. دا هغه ځای دی چې د ویکتور ساعت ډیره مرسته کړې! مګر موږ یې نه لرو.

HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

دوهم مناسب دی - دا د "زړه ټکان" دی. دا ممکنه ده چې ځینې سیګنالونه تبادله کړئ چې د وخت په هر واحد کې پیښیږي. مګر د زړه ضربان خورا ورو دي ، موږ نشو کولی خپل پیرودونکي ته ځنډ چمتو کړو.

ریښتینی وخت، البته، یو ښه شی دی. مګر، بیا، دا شاید راتلونکی وي ... که څه هم دا دمخه په اطلس کې ترسره کیدی شي، د "ایمیزون" وخت همغږي کونکي لا دمخه شتون لري. مګر دا به د هرچا لپاره شتون ونلري.

ګپ شپ هغه وخت دی چې ټول پیغامونه وخت پکې شامل وي. دا تقریبا هغه څه دي چې موږ یې کاروو. د نوډونو ترمنځ هر پیغام، یو ډرایور، د ډیټا نوډ روټر، د MongoDB لپاره په بشپړه توګه هر څه یو ډول عنصر دی، د ډیټابیس یوه برخه چې یو ساعت لري چې چلیږي. دوی هر ځای د هایبرډ وخت معنی لري، دا لیږدول کیږي. 64 بټونه؟ دا اجازه ورکوي، دا ممکنه ده.

دا ټول څنګه یوځای کار کوي؟

دلته زه یو نقل سیټ ګورم ترڅو دا یو څه اسانه کړي. لومړني او ثانوي شتون لري. ثانوي نقل کوي او تل د لومړني سره په بشپړه توګه همغږي نه وي.

یو داخلول د یو ټاکلي وخت ارزښت سره "لومړني" ته پیښیږي. دا داخلول د 11 لخوا داخلي شمیره ډیروي، که دا اعظمي وي. یا دا به د ساعت ارزښتونه وګوري او ساعت سره همغږي شي که چیرې د ساعت ارزښتونه ډیر وي. دا تاسو ته اجازه درکوي د وخت سره تنظیم کړئ.

وروسته له دې چې هغه ثبتوي، یو مهم شیبه واقع کیږي. ساعت په "MongoDB" کې دی او یوازې "Oplog" ته د لیکلو په صورت کې زیاتیږي. دا هغه پیښه ده چې د سیسټم حالت بدلوي. په بشپړ ډول په ټولو کلاسیک مقالو کې، یوه پیښه هغه وخت ګڼل کیږي کله چې یو پیغام یو نوډ ته ورسیږي: پیغام رسیدلی، پدې معنی چې سیسټم خپل حالت بدل کړی.

دا د دې حقیقت له امله دی چې د څیړنې په جریان کې دا په بشپړه توګه روښانه نده چې دا پیغام به څنګه تشریح شي. موږ په ډاډ سره پوهیږو چې که دا په "اپلوګ" کې منعکس نه شي، نو دا به په هیڅ ډول تفسیر نه شي، او د سیسټم په حالت کې بدلون یوازې په "اوپلوګ" کې ننوتل دي. دا زموږ لپاره هرڅه ساده کوي: ماډل دا ساده کوي، او موږ ته اجازه راکوي چې دا په یوه نقل سیټ کې تنظیم کړو، او ډیری نور ګټور شیان.

هغه ارزښت چې مخکې "اپلګ" ته لیکل شوی بیرته راستنیږي - موږ پوهیږو چې "اوپلګ" دمخه دا ارزښت لري، او وخت یې 12 دی. اوس ووایه، لوستل د بل نوډ (ثانوي) څخه پیل کیږي، او دا د کلستر وخت وروسته لیږدول کیږي. پیغام هغه وايي: "زه هر هغه څه ته اړتیا لرم چې لږترلږه د 12 څخه وروسته یا د دولسو په وخت کې پیښ شوي" (پورته عکس وګورئ).

دا هغه څه دي چې Causal a consistent (CAT) بلل کیږي. په تیوري کې داسې یو مفهوم شتون لري چې دا د وخت ځینې ټوټه ده، چې په خپل ځان کې مطابقت لري. په دې حالت کې، موږ کولی شو ووایو چې دا د سیسټم حالت دی چې په 12 وخت کې لیدل شوی.

اوس دلته هیڅ شی شتون نلري ، ځکه چې دا ډول وضعیت سموي کله چې تاسو ثانوي ته اړتیا لرئ د لومړني څخه ډیټا نقل کولو لپاره. هغه انتظار کوي ... او اوس معلومات رارسیدلي - هغه دا ارزښتونه بیرته راګرځوي.

HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

دا خورا ډیر دی چې دا ټول څنګه کار کوي. تقریبا.

"تقریبا" څه معنی لري؟ راځئ فرض کړو چې یو څوک شتون لري چې لوستل او پوهیدلي چې دا ټول څنګه کار کوي. ما پوهیده چې هرکله چې کلستر ټیم واقع کیږي، دا داخلي منطقي ساعت تازه کوي، او بیا راتلونکی ننوتل د یو لخوا زیاتیږي. دا فنکشن 20 لینونه نیسي. راځئ چې ووایو دا سړی ترټولو لوی 64-bit شمیره لیږدوي، منفي یو.

ولې "منفی یو"؟ ځکه چې داخلي ساعت به په دې ارزښت کې ځای په ځای شي (په ښکاره ډول، دا د اوسني وخت په پرتله ترټولو لوی ممکنه او لوی دی)، نو بیا به په "اوپلګ" کې داخل شي، او ساعت به د بل واحد لخوا زیات شي - او مخکې به وي. اعظمي ارزښت ولرئ (دلته په ساده ډول ټول واحدونه شتون لري ، د تګ لپاره هیڅ ځای شتون نلري) , unsaint ints).

دا روښانه ده چې له دې وروسته سیسټم د هیڅ شی لپاره د لاسرسي وړ نه دی. دا یوازې پورته کیدی شي او پاک شي - ډیری لاسي کار. بشپړ شتون:

HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

سربیره پردې ، که چیرې دا په بل ځای کې تکرار شي ، نو ټول کلستر په ساده ډول ښکته کیږي. یو بالکل د نه منلو وړ وضعیت چې هرڅوک کولی شي خورا ګړندي او اسانه تنظیم کړي! له همدې امله ، موږ دا شیبه یو له خورا مهم په توګه وګڼله. څنګه یې مخنیوی وکړو؟

زموږ لاره د کلستر وخت لاسلیک کول دي

دا څنګه په پیغام کې لیږدول کیږي (د نیلي متن څخه مخکې). مګر موږ هم د لاسلیک تولید پیل کړ (نیلي متن):

HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

لاسلیک د یوې کیلي لخوا رامینځته کیږي چې د ډیټابیس دننه زیرمه کیږي ، په خوندي محیط کې دننه؛ پخپله تولید شوی او تازه شوی (کاروونکي د دې په اړه هیڅ نه ګوري). یو هش رامینځته کیږي ، او هر پیغام لاسلیک کیږي کله چې رامینځته کیږي او تصدیق کیږي کله چې ترلاسه شي.
دا پوښتنه شاید د خلکو په ذهنونو کې راپورته شي: "دا شیان څومره ورو کوي؟" ما تاسو ته وویل چې دا باید په چټکۍ سره کار وکړي، په ځانګړې توګه د دې ځانګړتیا په نشتوالي کې.

په دې قضیه کې د Causal تسلسل کارول څه معنی لري؟ دا د AfterClusterTime پیرامیټر ښودلو لپاره دی. پرته له دې، دا به په ساده ډول ارزښتونه تیر کړي. ګپ شپ کول، د 3.6 نسخه څخه پیل کول، تل کار کوي.

که موږ د لاسلیکونو دوامداره نسل پریږدو، دا به سیسټم ورو کړي حتی د یوې ځانګړتیا په نشتوالي کې، کوم چې زموږ چلند او اړتیاوې نه پوره کوي. نو موږ څه وکړل؟

ژر یې وکړه!

دا خورا ساده شی دی، مګر چال په زړه پورې دی - زه به یې شریک کړم، شاید یو څوک به علاقه ولري.
موږ یو هش لرو چې لاسلیک شوي ډاټا ذخیره کوي. ټول معلومات د کیچ له لارې تیریږي. کیچ مشخص وخت نه لاسلیک کوي، مګر رینج. کله چې یو څه ارزښت راشي، موږ یو سلسله رامینځته کوو، وروستي 16 بټونه ماسک کوو، او موږ دا ارزښت لاسلیک کوو:

HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

د داسې لاسلیک په ترلاسه کولو سره، موږ سیسټم (نسبتا) 65 زره ځله چټک کوو. دا عالي کار کوي: کله چې موږ تجربې ترسره کړې ، وخت واقعیا 10 زره ځله کم شوی کله چې موږ ترتیبي تازه معلومات درلودل. دا روښانه ده چې کله دوی په اختلاف کې وي، دا کار نه کوي. مګر په ډیری عملي قضیو کې دا کار کوي. د لاسلیک سره د رینج لاسلیک ترکیب د امنیت ستونزه حل کړه.

موږ څه زده کړل؟

له دې څخه مو درسونه زده کړل:

  • موږ اړتیا لرو چې مواد، کیسې، مقالې ولولو، ځکه چې موږ ډیر په زړه پورې شیان لرو. کله چې موږ په ځینو ځانګړتیاو کار کوو (په ځانګړي توګه اوس، کله چې موږ راکړې ورکړې، او نور)، موږ باید لوستل او پوه شو. دا وخت نیسي، مګر دا واقعیا خورا ګټور دی ځکه چې دا روښانه کوي چې موږ چیرته یو. موږ داسې نه بریښي چې کوم نوي سره راشي - موږ یوازې اجزا اخیستي.

    په عموم کې، په فکر کې یو څه توپیر شتون لري کله چې یو اکادمیک کنفرانس وي (سګمون، د بیلګې په توګه) - هرڅوک په نوي نظرونو تمرکز کوي. زموږ د الګوریتم په اړه څه نوي دي؟ دلته په ځانګړي ډول نوي څه نشته. نوښت د دې په ځای کې دی چې موږ موجوده تګلارې یوځای سره یوځای کړو. له همدې امله، لومړی شی د کلاسیکونو لوستل دي، د لامپارټ سره پیل کول.

  • په تولید کې، اړتیاوې په بشپړه توګه توپیر لري. زه ډاډه یم چې ستاسو څخه ډیری په خلاص خلا کې د "کروی" ډیټابیسونو سره مخ ندي ، مګر د نورمال ، ریښتیني شیانو سره چې د شتون ، ځنډ او غلطۍ زغم سره ستونزې لري.
  • وروستی شی دا دی چې موږ باید مختلف نظرونه وګورو او ډیری بشپړ مختلف مقالې په یوه طریقه سره یوځای کړو. د مثال په توګه، د لاسلیک کولو په اړه نظر عموما د یوې مقالې څخه راغلی چې د Paxos پروتوکول په پام کې نیسي، کوم چې د غیر بازنطین ناکامیو لپاره د واک پروتوکول کې دننه دی، د بازنطینیانو لپاره - د جواز پروتوکول څخه بهر ... په عموم کې، دا هغه څه دي چې موږ یې کوو. کول پای ته ورسیدل.

    دلته بالکل نوی څه نشته! مګر هرڅومره ژر چې موږ دا ټول سره ګډ کړل ... دا د ویلو سره ورته دی چې د اولیور سلاد ترکیب بې معنی دی ، ځکه چې هګۍ ، میونیز او ککبر لا دمخه اختراع شوي ... دا د ورته کیسه په اړه ده.

HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

زه به دا پای ته ورسوم. له تاسو مننه!

پوښتنې

د لیدونکو څخه پوښتنه (له دې وروسته د B په توګه راجع کیږي): - مننه، میخایل، د راپور لپاره! د وخت موضوع په زړه پورې ده. تاسو ګپ شپینګ کاروئ. دوی وویل چې هرڅوک خپل وخت لري، هرڅوک خپل ځایی وخت پیژني. لکه څنګه چې زه پوهیږم، موږ یو ډرایور لرو - د موټر چلوونکي سره ډیری پیرودونکي شتون لري، د پوښتنې پالن جوړونکي هم، شارډونه هم ... او سیسټم څه ته راځي که چیرې موږ ناڅاپه توپیر ولرو: یو څوک پریکړه کوي چې دا د یو لپاره دی. یوه دقیقه مخکې، څوک یوه دقیقه شاته؟ موږ به چیرته پای ته ورسیږو؟

MT: - په حقیقت کې لویه پوښتنه! ما یوازې غوښتل د شارډز په اړه خبرې وکړم. که زه دا پوښتنه په سمه توګه درک کړم، موږ لاندې حالت لرو: شارډ 1 او شارډ 2 شتون لري، لوستل د دې دوو شارډونو څخه راځي - دوی توپیر لري، دوی یو له بل سره اړیکه نه لري، ځکه چې هغه وخت چې دوی پوهیږي توپیر لري، په ځانګړې توګه هغه وخت چې دوی په اپلوګ کې شتون لري.
راځئ چې ووایو چې شارډ 1 یو ملیون ریکارډونه جوړ کړل، شارډ 2 هیڅ هم ونه کړل، او غوښتنه دوه شارډونو ته ورسیده. او لومړی یې د یو ملیون څخه ډیر وروسته کلستر وخت لري. په داسې حالت کې، لکه څنګه چې ما تشریح کړه، شارډ 2 به هیڅکله ځواب ووايي.

په: - زه غواړم پوه شم چې دوی څنګه همغږي کوي او یو منطقي وخت غوره کوي؟

MT: - د همغږي کولو لپاره خورا اسانه. شارډ، کله چې د کلستر وخت وروسته هغه ته راشي او هغه په ​​"اوپلګ" کې وخت ونه موند، هیڅ تصویب نه کوي. دا، هغه خپل وخت د خپلو لاسونو سره دې ارزښت ته پورته کوي. دا پدې مانا ده چې دا د دې غوښتنې سره سمون نه لري. هغه دا پیښه په مصنوعي ډول رامینځته کوي او په دې توګه د Causal Consistent کیږي.

په: - که له دې وروسته ځینې نورې پیښې هغه ته راشي چې په شبکه کې چیرته ورک شوي وي؟

MT: - شارډ په داسې ډول ډیزاین شوی چې دوی به بیا نه راځي، ځکه چې دا یو واحد ماسټر دی. که هغه لا دمخه لاسلیک کړی وي، نو دوی به نه راځي، مګر وروسته به راشي. دا نشي پیښ کیدی چې یو څه په کوم ځای کې ودریږي، بیا هغه نه لیکي، او بیا دا پیښې راځي - او د علت ثبات مات شوی. کله چې هغه هیڅ نه لیکي، دوی باید ټول راشي (هغه به دوی ته انتظار وکړي).

HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

په: - زه د کتارونو په اړه څو پوښتنې لرم. Causal consistency دا انګیري چې د عملونو یو ځانګړی قطار شتون لري چې باید ترسره شي. څه پیښیږي که زموږ یو بسته ورک شي؟ دلته 10مه، 11مه راځي ... 12 مه ورکه شوې، او نور هرڅوک د دې ریښتیني کیدو ته انتظار باسي. او ناڅاپه زموږ موټر مړ شو، موږ هیڅ نشو کولی. ایا د قطار اعظمي اوږدوالی شتون لري چې د اجرا کیدو دمخه راټولیږي؟ کوم وژونکي ناکامي واقع کیږي کله چې کوم یو دولت له لاسه ورکړي؟ سربیره پردې، که موږ دا لیکو چې یو څه پخوانی حالت شتون لري، نو موږ باید یو څه له هغې څخه پیل کړو؟ مګر دوی هغه لرې نه کړ!

MT: - هم یوه ښه پوښتنه! موږ څه کوو؟ MongoDB د کورم لیکلو مفهوم لري، کورم لوستل کیږي. په کوم حالت کې پیغام له لاسه ورکول کیدی شي؟ کله چې د لیکلو نصاب نه وي یا د لوستلو نصاب نه وي (یو ډول کثافات هم پاتې کیدی شي).
د Causal consistency په اړه یوه لویه ازمایښتي ازموینه ترسره شوه چې پایله یې دا شوه چې په هغه حالت کې چې لیکل او لوستل یې نصاب نه وي، له Causal consistency څخه سرغړونه کیږي. دقیقا هغه څه چې تاسو یې وایئ!

زموږ مشوره: لږترلږه د کورم لوستلو څخه کار واخلئ کله چې د Causal تسلسل کاروئ. په دې حالت کې، هیڅ شی به له لاسه ورنکړي، حتی که د کورم ریکارډ له لاسه ورکړي ... دا یو اورتوګونال حالت دی: که کاروونکي نه غواړي چې ډاټا له لاسه ورکړي، هغه اړتیا لري چې د کورم ریکارډ وکاروي. د علت دوام د دوام تضمین نه کوي. دوام د نقل او د نقل سره تړلي ماشین لخوا تضمین شوی.

په: - کله چې موږ یو مثال رامینځته کړو چې زموږ لپاره شارډینګ ترسره کوي (په ترتیب سره ماسټر نه ، مګر غلام) ، دا د خپل ماشین یونیکس وخت یا د "ماسټر" وخت پورې اړه لري؛ ایا دا د لومړي ځل لپاره یا په دوره توګه همغږي کیږي؟

MT: - زه به اوس روښانه کړم. شارډ (د بیلګې په توګه افقی ویش) - هلته تل یو لومړنی شتون لري. او شارډ کولی شي "ماسټر" ولري او نقلونه هم شتون لري. مګر شارډ تل د ثبت کولو ملاتړ کوي ، ځکه چې دا باید د ځینې ډومین ملاتړ وکړي (شارډ لومړني لري).

په: - نو هرڅه په بشپړ ډول په "ماسټر" پورې اړه لري؟ ایا د ماسټر وخت تل کارول کیږي؟

MT: - هو. تاسو کولی شئ په انځوریز ډول ووایاست: ساعت ټک کوي کله چې "ماسټر" ته ننوتل ، "اوپلګ" ته ننوځي.

په: - موږ یو پیرودونکی لرو چې نښلوي او د وخت په اړه هیڅ پوهیدو ته اړتیا نلري؟

MT: - تاسو اړتیا نلرئ په هیڅ شی پوه شئ! که موږ د دې په اړه وغږیږو چې دا په پیرودونکي کې څنګه کار کوي: کله چې پیرودونکی وغواړي د Causal تسلسل وکاروي، نو هغه باید یوه ناسته پرانیزي. اوس هرڅه شتون لري: په ناسته کې لیږدونه، او حقونه بیرته ترلاسه کول ... ناسته د پیرودونکي سره د منطقي پیښو ترتیب کول دي.

که هغه دا ناسته پرانیزي او هلته ووایي چې هغه د Causal تسلسل غواړي (که چیرې غونډه د ډیفالټ په واسطه د Causal تسلسل ملاتړ وکړي)، هرڅه په اوتومات ډول کار کوي. ډرایور دا وخت په یاد ساتي او کله چې نوی پیغام ترلاسه کوي دا زیاتوي. دا په یاد لري چې پخوانی کوم ځواب د سرور څخه راستانه شوی چې ډاټا بیرته راستانه کړي. راتلونکې غوښتنه به وروسته کلستر ولري ("له دې څخه ډیر وخت").

پیرودونکي اړتیا نلري په هیڅ شی پوه شي! دا د هغه لپاره په بشپړه توګه مبهم دی. که خلک دا ځانګړتیاوې وکاروي، دوی څه کولی شي؟ لومړی، تاسو کولی شئ په خوندي ډول ثانوي ولولئ: تاسو کولی شئ لومړني ته ولیکئ او د جغرافیایي پلوه نقل شوي ثانوي څخه ولولئ او ډاډ ترلاسه کړئ چې دا کار کوي. په ورته وخت کې ، هغه ناستې چې په ابتدايي کې ثبت شوي حتی ثانوي ته لیږدول کیدی شي ، د بیلګې په توګه تاسو کولی شئ یوه ناسته نه ، مګر څو وکاروئ.

په: - د کمپیوټر ساینس نوې طبقه - CRDT (د شخړو څخه پاک نقل شوي ډیټا ډولونه) ډیټا ډولونه - په کلکه د پیښې تسلسل موضوع سره تړاو لري. ایا تاسو په ډیټابیس کې د دې ډول معلوماتو ادغام په اړه فکر کړی او تاسو یې په اړه څه ویلای شئ؟

MT: - ښه پوښتنه! CRDT د لیکلو شخړو لپاره معنی لري: په MongoDB کې، واحد ماسټر.

په: - زه د دیوالونو څخه یوه پوښتنه لرم. په ریښتیني نړۍ کې ، داسې ژیوټیک حالتونه شتون لري کله چې د بازنطین ناکامي پیښیږي ، او د خوندي احاطې دننه بد خلک پروتوکول ته ننوتل پیل کوي ، په ځانګړي ډول د دستګاه کڅوړې لیږئ؟

HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

MT: - د احاطې دننه بد خلک د ټروجن آس په څیر دي! د احاطې دننه بد خلک کولی شي ډیر بد کارونه وکړي.

په: - دا روښانه ده چې په سرور کې یو سوری پریښودل چې تاسو کولی شئ د هاتیو ژوبڼ کېږدئ او د تل لپاره ټول کلستر ړنګ کړئ ... دا به د لاسي رغیدو لپاره وخت ونیسي ... دا په نرمۍ سره ویل کیږي. غلط له بلې خوا، دا په زړه پورې ده: په ریښتینې ژوند کې، په عمل کې، داسې شرایط شتون لري کله چې طبیعي ورته داخلي بریدونه واقع کیږي؟

MT: - څنګه چې زه په ندرت سره په ریښتیني ژوند کې د امنیت سرغړونو سره مخ کیږم ، زه نشم ویلای چې دا پیښیږي که نه. مګر که موږ د پراختیا فلسفې په اړه خبرې وکړو، موږ داسې فکر کوو: موږ یو احاطه لرو چې هغه هلکان چې امنیت یې چمتو کوي - دا یوه کلا ده، دیوال دی؛ او د احاطې دننه تاسو کولی شئ هغه څه وکړئ چې تاسو یې غواړئ. دا روښانه ده چې داسې کاروونکي شتون لري چې یوازې د لیدلو وړتیا لري، او داسې کاروونکي شتون لري چې د لارښود له مینځه وړلو وړتیا لري.

د حقونو پورې اړه لري، هغه زیان چې کاروونکي یې کولی شي موږک وي، یا دا یو هاتی وي. دا روښانه ده چې یو کاروونکي د بشپړ حقونو سره هر څه کولی شي. یو کارن چې محدود حقونه لري کولی شي د پام وړ لږ زیان ورسوي. په ځانګړې توګه، دا نشي کولی سیسټم مات کړي.

په: - په خوندي محیط کې، یو چا هڅه کړې چې د سرور لپاره غیر متوقع پروتوکولونه رامینځته کړي ترڅو سرور په بشپړه توګه ویجاړ کړي، او که تاسو خوشحاله یاست، ټول کلستر ... ایا دا کله هم "ښه" ترلاسه کوي؟

MT: "ما هیڅکله د داسې شیانو په اړه ندي اوریدلي." دا حقیقت چې تاسو کولی شئ په دې ډول یو سرور خراب کړئ هیڅ راز پټ نه دی. دننه ناکامه، د پروتوکول څخه پاتې کیدل، د یو مجاز کارونکي په توګه چې کولی شي په پیغام کې داسې یو څه ولیکي ... په حقیقت کې، دا ناشونې ده، ځکه چې دا به بیا هم تایید شي. دا ممکنه ده چې دا تصدیق د کاروونکو لپاره غیر فعال کړئ څوک چې دا نه غواړي - نو دا د دوی ستونزه ده؛ دوی، په لنډه توګه، دیوالونه پخپله ویجاړ کړل او تاسو کولی شئ هلته یو هاتین فشار ورکړئ، کوم چې به په پښو وغورځوي ... مګر په عمومي توګه، تاسو کولی شئ د ترمیم کونکي په توګه جامې واغوندي، راشئ او هغه راوباسئ!

په: - د راپور لپاره مننه. سرګي (Yandex). په مونګ کې یو ثابت دی چې په ریپلیکا سیټ کې د رایې ورکوونکو غړو شمیر محدودوي، او دا ثابته 7 (اوه) ده. ولې دا دوامداره ده؟ ولې دا یو ډول پیرامیټر نه دی؟

MT: - موږ د 40 نوډونو سره ریپلیکا سیټونه لرو. تل اکثریت شتون لري. زه نه پوهیږم کوم نسخه ...

په: - په ریپلیکا سیټ کې تاسو کولی شئ غیر رایې ورکوونکي غړي پرمخ بوځي، مګر د رایې ورکولو لپاره اعظمي 7 غړي شتون لري، موږ څنګه کولی شو په دې حالت کې د بند څخه ژوند وکړو که چیرې زموږ ریپلیکا سیټ په 3 ډیټا مرکزونو کې خپور شي؟ د معلوماتو یو مرکز کولی شي په اسانۍ سره وتړي، او بل ماشین له مینځه تللی شي.

MT: - دا دمخه د راپور له ساحې څخه لږ څه بهر دی. دا یوه عمومي پوښتنه ده. شاید زه تاسو ته وروسته په دې اړه ووایم.

HighLoad++، میخایل تیولینیف (MongoDB): د علت دوام: له تیوري څخه عمل ته

ځینې ​​اعلانونه 🙂

له موږ سره د پاتې کیدو لپاره مننه. ایا تاسو زموږ مقالې خوښوي؟ غواړئ نور په زړه پورې مینځپانګه وګورئ؟ د امر په ورکولو یا ملګرو ته وړاندیز کولو سره زموږ ملاتړ وکړئ ، کلاوډ VPS د پراختیا کونکو لپاره له $ 4.99 څخه, د ننوتلو کچې سرورونو یو ځانګړی انلاګ ، کوم چې زموږ لخوا ستاسو لپاره اختراع شوی و: د VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps په اړه بشپړ حقیقت له $ 19 څخه یا څنګه سرور شریک کړئ؟ (د RAID1 او RAID10 سره شتون لري، تر 24 کور پورې او تر 40GB DDR4 پورې).

ډیل R730xd په امستردام کې د Equinix Tier IV ډیټا مرکز کې 2 ځله ارزانه؟ یوازې دلته 2x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 تلویزیون له $199 څخه په هالنډ کې! ډیل R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - له $ 99 څخه! په اړه ولولئ د زیربنا شرکت جوړولو څرنګوالی د ډیل R730xd E5-2650 v4 سرورونو کارولو سره ټولګي د یوې پیسي لپاره د 9000 یورو ارزښت لري؟

سرچینه: www.habr.com

Add a comment