GH GambleHub

שכפול ועקביות סופו של דבר

שכפול ועקביות סופו של דבר

1) מדוע בסופו של דבר עקביות

כאשר המערכת מופצת על ידי אזורים/אזורים, הקלטה סינכרונית בכל מקום מעניקה איחוי גבוה וזמינות נמוכה במקרה של כשלים ברשת. בסופו של דבר עקביות (EC) מאפשרת היערכות שגויה זמנית של העתקים לטובת:
  • עיכוב הקלטה נמוך (קליטה מקומית),
  • זמינות טובה יותר במהלך מחיצות רשת,
  • סולם אופקי.

משימת המפתח מבוקרת עקביות רופפת: המשתמש רואה נתונים ”טריים למדי”, domain invariants נשמרים, קונפליקטים מתגלים ונפתרים באופן צפוי.

2) מודלים עקביים - מה שאנחנו מבטיחים ללקוח

קריאה מיד רואה את הרישום האחרון.
Bounded stale/read-not-oker-than (RNOT): קרא לא ישן יותר מהמארק (LSN/גרסה/זמן).
מערכת יחסים סיבתית (A עד B) נשמרת.
לקוח רואה את ההקלטות האחרונות שלו.
מונוטוני קורא: כל קריאה הבאה אינה ”מתגלגלת לאחור”.
סט של ערבויות בפגישה אחת.
בסופו של דבר: אם אין רישומים חדשים, כל העתקים מתכנסים.

תרגול: לשלב הפעלה + RNOT במסלולים קריטיים ובסופו של דבר במחסנים/מטמונים.

3) שכפול: מכניקה ואנטי ־ אנטרופיה

Synchronous (quorum/RAFT): התקליט נחשב להצלחה לאחר אישור על ידי N nodes; מינימום RPO, מעל p99.
Asynchronous: מנהיג מתחייב באופן מקומי, מפיץ יומן מאוחר יותר; Latency נמוך, RPO> 0.
פיזי (WAL/binlog): מהיר, הומוגני.
Logical/CDC: Row/Event level לשנות את הזרימה, ניתוב גמיש, מסננים.
אנטי-אנטרופיה: פיוס ותיקון מחזוריים (עצי מרקל, השוואת חשיש, חידוש רקע).

4) מזהים גרסה ופקודות סיבתיות

גרסאות מונוטוניות: curment/LSN/epoch; פשוט, אבל לא מקודד מקביליות.
חותמת זמן: סדר חלקי לפי שעון הגיוני.
שעון וקטורי: מתקן ענפים מקבילים ומאפשר לך לזהות עדכונים סותרים (במקביל).
היברידי/TrueTime/Clock-SI: ”לא לפני T” לוגיקה לסדר עולמי.

המלצה: עבור עדכוני CRDT/סותרים - שעון וקטורי; עבור ”לא מבוגר יותר” - LSN/GTID.

5) קונפליקטים: גילוי ופתרון

מצבים טיפוסיים: הקלטה משני אזורים לאותו אובייקט.

אסטרטגיות:

1. Last-Write-Wins (LWW) לפי שעה/בול לוגי - פשוט, אבל עלול ”לאבד” עדכונים.

2. מיזוג פונקציות לפי לוגיקת התחום:
  • שדות נגד מתווספים (G-Counter/PN-Counter),
  • סטים משולבים עם ”הוספת ניצחונות/הסרת ניצחונות”,
  • כמויות/איזון - רק באמצעות יומני עסקאות, לא באמצעות LWW פשוט.
  • 3. CRDT (סוגים מתכנסים): G-Counter, OR-SET, LWW-Register, RGA לרשימות.
  • 4. טרנספורמציות מבצעיות (לעיתים נדירות עבור מאגרי מידע, לעיתים קרובות יותר עבור עורכים).
  • 5. פתרון ידני: קונפליקט בתיבת הדואר הנכנס, המשתמש בוחר את הגרסה הנכונה.

חוק: דומיין אינווריאנטים מכתיבים אסטרטגיה. עבור כסף/איזון - להימנע LWW; השתמש בעסקאות/אירועים מפוצים.

6) אחריות שיא ואידמפוטנטיות

מפתחות אידמפוטנטים על פקודות (תשלום, משיכה, יצירת) * retry הוא בטוח.
תיבת דואר אלקטרוני ושכפול תיבה על ידי מספר מקש/מספר סידורי.
בדיוק-פעם אחת הוא בלתי ניתן להשגה ללא הנחות חזקות; תרגול לפחות פעם אחת עם אידמפוטנטיות.
תבנית Outbox/Inbox: כתיבה לבסיס הנתונים ופרסום האירוע היא אטומית (עסקה מקומית), תהליך הנמען על ידי idempotency-key.

7) אין קריאות X מבוגרות יותר (RNOT)

טכנאים:
  • שער LSN/GTID: הלקוח מעביר את הגרסה המינימלית (מתגובת הכתיבה), הנתב/פרוקסי שולח אל ההעתק שתפס את LSN winder X, אחרת - אל המנהיג.
  • זמן: ”לא מבוגר מ-2 שניות” - SLA פשוט ללא גרסאות.
  • Session Pinning: לאחר הקלטת N שניות, אנו קוראים רק את המנהיג (Read-Your-Wrots).

8) שינוי זרם ומתן מטמון

CDC = אוטובוס אירועים (Kafka/Pulsar) # צרכנים (מטמונים, אינדקסים, חנויות).
נכות מטמון: נושאים 'לבטל: (ns): עיבוד אידמפוטנטי.
בנייה מחדש/הילוך אחורי: אם מתוך סנכרון, להרכיב מחדש את התחזיות מתוך יומן האירוע.

9) סאגות ופיצויים (עסקאות בין-שירות)

בעולם המט "ח, פעולות שנמשכו זמן רב מחולקות לצעדים עם פעולות פיצוי:
  • המתאם קורא את הצעדים ואת הפיצויים שלהם.
  • כוריאוגרפיה: צעדים מגיבים לאירועים ומפרסמים את הדברים הבאים בעצמם.

אינווריאנטים (דוגמה): ”שיווי משקל 0” - בדוק את גבולות שלב + פיצוי על סטייה.

10) ריבוי אזורים ומחיצות רשת

local-write, async-acclate: לכתוב לאזור מקומי + לספק לאחרים (EC).
גיאו-סייף: נתונים ”מודבקים” לאזור (Latency Latency, פחות קונפליקטים).
מסדי נתונים של קוורום (רפסודה) עבור נתוני CP; מחסנים/חנויות - AP/EC.
תוכנית פיצול-מוח: אם התקשורת אבדה, האזורים ימשיכו לפעול בגבולות תחום (כתיבה, מכסות), ואז להתפייס.

11) יכולת תצפית ו ־ SLO

מדדים:
  • העתק לאג: זמן/LSN-מרחק/offset (p50/p95/p99).
  • סטבנס: אחוז התגובות הנמצאות מעל הסף (לדוגמה,> 2s או LSN
  • שיעור הקונפליקט: שיעור הקונפליקטים ומיזוג מוצלח.
  • זמן ההתכנסות: זמן ההתכנסות של ההעתקים אחרי השיא.
  • התפייסות: נפח/זמן הפיגור של חבורות.
  • RPO/RTO לפי קטגוריית הנתונים (CP/AP).
התראות:
  • Lag> היעד, עלייה בקונפליקטים, חלונות ”ארוכים” של אי נוחות.

12) עיצוב ערכת נתונים EC

גרסה מפורשת/וקטור בכל כניסה (עמודות 'גרסה', 'vc').
יומני Append בלבד לאינווריאנטים ביקורתיים (מאזנים, אקטואלים).
זיהוי אירועים (פתית שלג/ULID) לצורך הזמנה ושכפול.
שדות קומוטטיבי (דלפקים, סטים) = מועמדי CRDT.
שים עם התאמה/תג, טלאי עם תנאי מוקדם.

13) דפוסי אחסון וקריאה

קרא מודל/CQRS: כתיבה אל ה ”מקור”, קריאה מתחזיות (עשויה לפגר אחרי תצוגה ”מעודכנת”...).
נתיבים מעופשים (קטלוג/טייפ) נגד סטריקים (ארנק/גבולות).
דגלים דביקים/מעופשים בקשת (hader 'x-read-עקביות).

14) רשימת מימושים (0-45 ימים)

0-10 ימים

קטגוריות נתונים: CP-critical (כסף, הזמנות) נגד EU/Steel-OK (קטלוגים, אינדקסי חיפוש).
הגדר SLOs של סטיל (למשל: ”לא מבוגר יותר מ-2”), יעד מפגר.
אפשר איתור אובייקטים ומפתחות אידמפוטנציה ב-API.

11-25 ימים

יישום CDC ו תיבת יוצא/תיבת דואר אלקטרוני, נתיבי נכות מטמון.
הוספת RNOT (שער LSN) והצבת פינג למסלולים כתיבה-קריטיים.
יישום אסטרטגיית מיזוג אחת לפחות (LWW/CRDT/domain) ויומן קונפליקט.

26-45 ימים

אוטומטית אנטי-אנטרופיה (פיוס/תיקון) ודיווחי סטיילינג.
לבלות יום משחק: הפרדת רשת, נחשול בקונפליקטים, התאוששות.
דמיינו על לוחות מחוונים: פיגור, סטריליות, שיעור עימות, התכנסות.

15) אנטי דפוסים

LWW עיוור עבור אינווריאנטים קריטיים (אובדן כסף/נקודות).
חוסר אידמפוטנטיות * כפילות של פעולות במהלך הרכבות.
המודל ”החזק” על כל p99 זנבות מוגזמים ושבריריות במקרה של כישלונות.
לא RNOT/Session מבטיחה * UX ”ממצמץ”, המשתמשים ”לא רואים” את השינויים שלהם.
מטמון חבוי ויישור לא נכון של המקור (לא CDC/נכות).
חוסר בכלי להתפייסות/אנטי-אנטרופיה - נתונים ”במשך מאות שנים” מתפצלים.

16) מדדי בגרות

Replica lag p95 delage target (לדוגמה, בלום 500 ms בתוך אזור, 2 S בין אזורים).
”סטלינס SLO” מבוצעת ב-99% מהבקשות במסלולים ”נוקשים”.
הצלחה בפתרון סכסוכים ב-99. 9%, זמן רזולוציה ממוצע של 1 דקות.
התכנסות זמן אחרי פסגות - דקות, לא שעות.
100% מעסקאות ”כסף” מכוסות על ידי מפתחות אידמפוטנטיות ותיבת דואר אלקטרוני.

17) מתכונים (קטעים)

אם להתאים/ETag (HTTP)


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

אם הגרסה השתנתה - 412 'תנאי מוקדם נכשל' = הלקוח פותר את הקונפליקט.

שאילתה ”לא מבוגר מ LSN” (פסאודו)


x-min-lsn: 16/B373F8D8

הנתב בוחר העתק עם 'replay _ lsn min-isn', אחרת הוא המנהיג.

CRDT G-Counter (רעיון)

כל אזור שומר על דלפק משלו; סה "כ - סך כל הרכיבים שכפול - פעולה היא חולפת.

18) מסקנה

סופו של דבר עקביות היא לא פשרה של איכות, אלא חוזה מודע: איפשהו אנחנו משלמים רעננות למען מהירות וזמינות, אבל אנחנו מגנים על אינווריאנטים קריטיים עם אסטרטגיות תחום וכלים. הזן גרסאות, אידמפוטנטיות, אחריות RNOT/Session, CDC ואנטי-אנטרופיה, מדד לאג/סטביליות/קונפליקטים - והמערכת המבוזרת שלך תהיה מהירה, יציבה וצפויה להתכנס אפילו תחת תקלות ועומס שיא.

Contact

צרו קשר

פנו אלינו בכל שאלה או צורך בתמיכה.אנחנו תמיד כאן כדי לעזור.

Telegram
@Gamble_GC
התחלת אינטגרציה

Email הוא חובה. Telegram או WhatsApp — אופציונליים.

השם שלכם לא חובה
Email לא חובה
נושא לא חובה
הודעה לא חובה
Telegram לא חובה
@
אם תציינו Telegram — נענה גם שם, בנוסף ל-Email.
WhatsApp לא חובה
פורמט: קידומת מדינה ומספר (לדוגמה, +972XXXXXXXXX).

בלחיצה על הכפתור אתם מסכימים לעיבוד הנתונים שלכם.