مدلهای سازگاری و Replicache – انجمن DEV

مدل سازگاری مجموعه ای از مقررات است که بر سطح سازگاری ارائه شده در یک سیستم توزیع شده نظارت می کند. در بین پست های قبلی، اطلاعاتی در مورد مبادله بین تاخیر و سازگاری در تئوری PACELC وجود دارد و این است که بسته به این مبادله چقدر سازگاری ارائه می شود.
Replicache که در پست قبلی مورد بحث قرار گرفت نیز نوعی سیستم توزیع شده است. گفته می شود که Replicache از سازگاری Causal+ پیروی می کند.
منبع
سازگاری دقیق
سازگاری به شما امکان می دهد همیشه مقادیر را به ترتیب زمانی بخوانید. هر خواندنی که پس از نوشتن مقدار اتفاق می افتد همیشه آن مقدار را می خواند. برای تحقق این امر دو شرط لازم است. یک ساعت جهانی وجود دارد که توسط همه گره ها به اشتراک گذاشته می شود و باید با آن همگام شود و Write باید بلافاصله انجام شود.
w(x)a: مقدار a را به x بنویسید، r(x)a: مقدار a را از x بخوانید
وقتی w(x)a در گره 1 در زمان t رخ می دهد و r(x) در گره 2 بعد از t+delta (0.000000000001s) رخ می دهد، گره 2 باید مقدار a را بخواند.
یک ساعت جهانی باید برای سریال کردن عملیات وجود داشته باشد تا عملیات در همان زمان t انجام نشود و نوشتن باید بلافاصله انجام شود تا مقدار نوشته شده در زمان t+delta خوانده شود.
اما این در واقع غیرممکن است. بنابراین، سازگاری دقیق به عنوان یک نظریه وجود دارد.
اگر سازگاری دقیق در شرایط زیر رعایت شود:
پاسخ صحیح به شرح زیر است:
سازگاری ترتیبی
کلیدواژه اصلی سازگاری متوالی “نظم جهانی” است. همه عملیات نوشتن/خواندن باید طوری رفتار کنند که انگار یک توالی واحد وجود دارد. علاوه بر این، عملیات انجام شده توسط هر فرآیند (مشتری) باید به ترتیب اجرا شود.
در مورد زیر، p3 و p4 چه مقادیری را می توانند بخوانند؟
از آنجایی که زیر همان سازگاری دقیق است، سازگاری ترتیبی نیز برآورده می شود.
ترتیب جهانی را می توان در زیر یافت، بنابراین سازگاری متوالی صحیح است.
ترتیب جهانی: w(x)a، r(x)a، w(x)b، r(x)b
اما در حالت زیر a قبل از b نوشته می شود اما بعدا خوانده می شود. در این مورد، سازگاری ترتیبی ارضا نمی شود.
سازگاری علی
علت به معنای رابطه علت و معلولی است. “قبل از آن اتفاق می افتد (→)” مهم است که بفهمیم این یک رابطه است.
A → B در موارد زیر صادق است.
- A قبل از B در همان فرآیند (مشتری) رخ می دهد.
- بعد از A یک پیام ارسال می شود و طرفی که پیام را دریافت می کند B را انجام می دهد.
- اگر A → B و B → C، سپس A → C.
سازگاری علی قاعده ای است که در آن این رابطه علت و معلولی در همه گره ها قابل مشاهده است.
مورد زیر سازگاری علی است.
تنها روابط “قبل از وقوع” که در اینجا یافت می شوند عبارتند از w(x)a → r(x)a و w(x)b → r(x)b که توسط همه فرآیندها ارضا می شوند. برای P3 اشکالی ندارد که ابتدا b را بخواند. این به این دلیل است که دو عملیات نوشتن مستقل هستند، بنابراین هیچ رابطه علت و معلولی w(x)a → w(x)b وجود ندارد.
موارد زیر سازگاری علی را ایجاد نمی کند. دلیل آن این است که رابطه علت و معلولی w(x)a → w(x)c وجود دارد و c قبل از a در P3 خوانده می شود.
سازگاری نهایی
اتفاقی (در نهایت) قاعده ای است که سازگار می شود. در برخی موارد، زمانی که عملیات نوشتن وجود ندارد و شبکه تثبیت می شود، تمام گره ها در نهایت مقدار یکسانی را خواهند دید. این یک قرارداد بسیار محدود است.
گفته می شود که Replicache از سازگاری Causal+ پیروی می کند. این یک سازگاری علی کمی قویتر است، پس اجازه دهید بعداً آن را بفهمیم.