GH GambleHub

تکرار و سازگاری احتمالی

تکرار و سازگاری احتمالی

1) چرا ثبات نهایی

هنگامی که سیستم توسط مناطق/مناطق توزیع می شود، ضبط همزمان در همه جا باعث تأخیر زیاد و دسترسی کم در صورت خرابی شبکه می شود. سازگاری احتمالی (EC) اجازه می دهد تا ناهماهنگی موقت کپی ها به خاطر:
  • تاخیر ضبط کم (پذیرش محلی)،
  • در دسترس بودن بهتر در طول پارتیشن های شبکه،
  • مقیاس افقی.

وظیفه اصلی کنترل سازگاری سهل انگاری است: کاربر می بیند «نسبتا تازه» داده ها، ثابت دامنه حفظ می شوند، درگیری شناسایی و حل و فصل قابل پیش بینی.


2) مدل های سازگاری - آنچه ما به مشتری قول می دهیم

قوی: خواندن بلافاصله آخرین ورودی را می بیند.
stale محدود/read-not-old-than (RNOT): خواندن قدیمی تر از علامت (LSN/version/time).
علیت: یک رابطه «علی» (A به B) حفظ می شود.
Read-Your-Writes: مشتری ضبط های اخیر خود را می بیند.
مونوتونیک می خواند: هر خواندن بعدی «به عقب رانده نمی شود».
جلسه: مجموعه ای از تضمین ها در یک جلسه.
احتمالی: اگر هیچ ورودی جدیدی وجود نداشته باشد، تمام کپی ها همگرا می شوند.

تمرین: جلسه + RNOT را در مسیرهای بحرانی و احتمالی در فروشگاه ها/انبارها ترکیب کنید.


3) تکرار: مکانیک و ضد آنتروپی

Synchronous (quorum/RAFT): رکورد پس از تایید توسط N گره موفقیت آمیز در نظر گرفته می شود. حداقل RPO، بالاتر از p99.
ناهمزمان: رهبر به صورت محلی مرتکب می شود، بعدا وارد سیستم می شود ؛ تاخیر کم، RPO> 0.
فیزیکی (WAL/binlog): سریع، همگن.
Logical/CDC: جریان تغییر سطح ردیف/رویداد، مسیریابی انعطاف پذیر، فیلترها.
ضد آنتروپی: آشتی دوره ای و تعمیر (درختان مرکل، مقایسه هش، پس زمینه دوباره همگام سازی).


4) شناسه نسخه و سفارشات علیت

نسخه های یکنواخت: افزایش/LSN/دوره ؛ ساده، اما موازی سازی را رمزگذاری نکنید.
برچسب زمانی Lamport: ترتیب جزئی توسط ساعت منطقی.
ساعت بردار: شاخه های موازی را برطرف می کند و به شما امکان می دهد به روز رسانی های متناقض (همزمان) را تشخیص دهید.
Hybrid/TrueTime/Clock-SI: منطق «نه قبل از T» برای نظم جهانی.

توصیه: برای CRDT/به روز رسانی های متضاد - ساعت بردار ؛ برای «قدیمی نیست» - LSN/GTID.


5) درگیری: کشف و حل و فصل

شرایط معمول: ضبط از دو منطقه به همان شی.

استراتژی ها:

1. Last-Write-Wins (LWW) by hour/logical stamp - ساده است، اما ممکن است به روز رسانی ها را از دست بدهد.

2. ادغام توابع توسط منطق دامنه:
  • زمینه های شمارنده اضافه می شوند (G-Counter/PN-Counter)،
  • مجموعه ها با «add-wins/remove-wins» ترکیب می شوند،
  • مقادیر/تعادل - فقط از طریق مجلات معامله، نه از طریق یک LWW ساده.
  • 3. CRDT (انواع همگرا): G-Counter، OR-Set، LWW-Register، RGA برای لیست ها.
  • 4. تحولات عملیاتی (به ندرت برای پایگاه داده ها، بیشتر برای ویراستاران).
  • 5. وضوح دستی: درگیری در «صندوق ورودی»، کاربر نسخه صحیح را انتخاب می کند.

قانون: ناورداهای دامنه استراتژی را دیکته می کنند. برای پول/تعادل - اجتناب از LWW ؛ استفاده از معاملات/رویدادهای جبران شده.


6) ضمانت ضبط و idempotency

کلید Idempotent در دستورات (پرداخت, برداشت, ایجاد) → تلاش مجدد امن است.
deduplication صندوق ورودی و خروجی توسط کلید idempotence/شماره سریال.
دقیقا یک بار بدون محل قوی غیر قابل دستیابی است ؛ تمرین حداقل یک بار + idemotency.
الگوی صندوق ورودی/صندوق ورودی: نوشتن در پایگاه داده و انتشار رویداد اتمی است (معامله محلی)، گیرنده با کلید idempointency پردازش می شود.


7) بدون خواندن قدیمی تر X (RNOT)

تکنسین ها:
  • دروازه LSN/GTID: مشتری حداقل نسخه (از پاسخ نوشتن) را انتقال می دهد، روتر/پروکسی به ماکت ارسال می کند که با LSN ≥ X گرفتار شده است، در غیر این صورت - به رهبر.
  • محدود به زمان: «نه بزرگتر از 2 ثانیه» - SLA ساده بدون نسخه.
  • پین جلسه: پس از ضبط N ثانیه، ما فقط رهبر (Read-Your-Writes) را می خوانیم.

8) تغییر جریان و مذاکره کش

CDC → اتوبوس رویداد (Kafka/Pulsar) → مصرف کنندگان (انبارها، شاخص ها، فروشگاه ها).
ناتوانی حافظه پنهان: موضوعات 'invalidate: {ns}: {id}'; پردازش بی نظیر.
بازسازی/Backfill: اگر از همگام سازی، جمع آوری پیش بینی از ورود به سیستم رویداد.


9) ساگا و جبران خسارت (معاملات بین سرویس)

در جهان EC، عملیات طولانی مدت به مراحل با اقدامات جبرانی تقسیم می شوند:
  • ارکستراسیون: هماهنگ کننده مراحل و جبران آنها را فرا می خواند.
  • طراحی رقص: مراحل به وقایع واکنش نشان می دهند و خود را منتشر می کنند.

ثابت (به عنوان مثال): «تعادل ≥ 0» - مرزهای گام + جبران انحراف را بررسی کنید.


10) پارتیشن های چند منطقه ای و شبکه

Local-write, async-replicate: نوشتن در منطقه محلی + تحویل به دیگران (EC).
Geo-fencing: داده ها به منطقه «چسبیده» می شوند (تاخیر کم، درگیری های کمتر).
پایگاه داده های Quorum (قایق) برای داده های CP ؛ انبارها/فروشگاه ها - AP/EC.
طرح تقسیم مغز: اگر ارتباطات از دست رفته باشد، مناطق همچنان در محدوده دامنه (نوشتن شمشیربازی، سهمیه) ادامه می دهند، سپس آشتی می کنند.


11) قابلیت مشاهده و SLO

معیارها:
  • تاخیر ماکت: زمان/LSN-فاصله/افست (p50/p95/p99).
  • Staleness: درصد پاسخ هایی که بالاتر از آستانه هستند (به عنوان مثال،> 2s یا LSN
  • نرخ درگیری: نرخ درگیری و ادغام موفق.
  • زمان همگرایی: زمان همگرایی ماکت ها بعد از پیک.
  • تطبیق بکلاگ: حجم/زمان دستههای تاخیری.
  • RPO/RTO بر اساس طبقه بندی داده ها (CP/AP).
هشدارها:
  • تاخیر> هدف, افزایش درگیری, «طولانی» پنجره های غیر قابل اجرا.

12) طراحی طرح داده EC

نسخه صریح/بردار در هر ورودی (ستون 'نسخه'، 'vc').
اضافه کردن فقط سیاهههای مربوط برای ثابت بحرانی (تعادل، اقلام تعهدی).
شناسه رویداد (snowflake/ULID) برای سفارش و deduplication.
زمینه های جابجایی (شمارنده ها، مجموعه ها) → نامزدهای CRDT.
طراحی API: PUT با if-match/etag، PATCH با پیش شرط.


13) الگوهای ذخیره سازی و خواندن

مدل/CQRS را بخوانید: نوشتن به «منبع»، خواندن از پیش بینی ها (ممکن است عقب بماند → نمایش «به روز شده»...).
مسیرهای Stale-OK (کاتالوگ/نوار) در مقابل سخت (کیف پول/محدودیت).
پرچمهای Sticky/Bounded-stale در درخواست) سرآیند «x-read-consistency» (.


14) چک لیست پیاده سازی (0-45 روز)

0-10 روز

طبقه بندی داده ها: CP-بحرانی (پول، سفارشات) در مقابل اتحادیه اروپا/فولاد-OK (کاتالوگ، شاخص های جستجو).
تعریف SLO های استیل (به عنوان مثال «قدیمی تر از 2S»)، تاخیر هدف.
فعال کردن نسخه بندی شی و idempotency-کلید در API.

11-25 روز

پیاده سازی CDC و صندوق ورودی/صندوق ورودی، مسیرهای ناتوانی حافظه پنهان.
اضافه کردن RNOT (دروازه LSN) و جلسه پینینگ به مسیرهای نوشتن بحرانی.
پیاده سازی حداقل یک استراتژی ادغام (LWW/CRDT/دامنه) و ورود به سیستم درگیری.

26-45 روز

خودکار ضد آنتروپی (آشتی/تعمیر) و گزارش یک ظاهر طراحی شده.
صرف روز بازی: جدایی شبکه، افزایش درگیری ها، بازیابی.
تجسم در داشبورد: تاخیر، خستگی، نرخ درگیری، همگرایی.


15) ضد الگوهای

LWW کور برای ناورداهای بحرانی (از دست دادن پول/امتیاز).
عدم توانایی → تکرار عملیات در طول retrains.
مدل «قوی» در کل → بیش از حد دم p99 و شکنندگی در صورت شکست.
بدون تضمین RNOT/جلسه → UX «چشمک می زند»، کاربران «تغییرات خود را نمی بینند».
عدم توازن حافظه پنهان و منبع (بدون CDC/ناتوانی).
فقدان یک ابزار آشتی/ضد آنتروپی - داده ها «برای قرن ها» واگرایی.


16) معیارهای بلوغ

Replica lag p95 ≤ هدف (به عنوان مثال، ≤ 500 میلی ثانیه در یک منطقه، ≤ 2 بین مناطق).
SLO پایدار ≥ 99٪ از درخواست ها در مسیرهای «سخت» انجام می شود.
موفقیت در حل مشکلات ≥ 99 9٪، متوسط زمان وضوح ≤ 1 دقیقه.
زمان همگرایی پس از قله - دقیقه، نه ساعت.
100٪ از معاملات «پول» توسط کلید های idempotency و صندوق خروجی/صندوق پوشش داده می شود.


17) دستور العمل (قطعه)

اگر مطابقت/ETag (HTTP)


PUT /profile/42
If-Match: "v17"
Body: { "email": "new@example.com" }

اگر نسخه تغییر کرده باشد - «412 پیش شرط شکست خورده» → مشتری درگیری را حل می کند.

پرسوجو «قدیمیتر از LSN نیست») شبه (


x-min-lsn: 16/B373F8D8

روتر یک کپی با «replay _ lsn ≥ x-min-lsn» انتخاب می کند، در غیر این صورت رهبر است.

CRDT G-شمارنده (ایده)

هر منطقه شمارنده خود را نگه می دارد ؛ مجموع - مجموع تمام اجزای Replication - عملیات تعویض است.


18) نتیجه گیری

سازگاری نهایی مصالحه با کیفیت نیست، بلکه یک قرارداد آگاهانه است: جایی که ما به خاطر سرعت و در دسترس بودن تازه بودن را پرداخت می کنیم، اما ما با استراتژی ها و ابزارهای دامنه محافظت می کنیم. نسخه ها، idempotency، RNOT/Session warranties، CDC و anti-entropy را وارد کنید، اندازه گیری تاخیر/staleness/conflicts - و سیستم توزیع خود را سریع، پایدار و قابل پیش بینی همگرا حتی در زیر اشکالات و بارهای پیک.

Contact

با ما در تماس باشید

برای هرگونه سؤال یا نیاز به پشتیبانی با ما ارتباط بگیرید.ما همیشه آماده کمک هستیم!

شروع یکپارچه‌سازی

ایمیل — اجباری است. تلگرام یا واتساپ — اختیاری.

نام شما اختیاری
ایمیل اختیاری
موضوع اختیاری
پیام اختیاری
Telegram اختیاری
@
اگر تلگرام را وارد کنید — علاوه بر ایمیل، در تلگرام هم پاسخ می‌دهیم.
WhatsApp اختیاری
فرمت: کد کشور و شماره (برای مثال، +98XXXXXXXXXX).

با فشردن این دکمه، با پردازش داده‌های خود موافقت می‌کنید.