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

צרו קשר

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

התחלת אינטגרציה

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

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

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