GH GambleHub

הפרדת CQRS וקריאה/כתיבה

מהו CQRS

CQRS (ראשי תיבות של Command Query Security Degression) היא גישה ארכיטקטונית המפרידה בין מודל הנתונים לבין הרכיבים האחראים לכתיבה (פקודות) וקריאה (שאילתות).
הרעיון: תהליך שינוי המצב מיוטב עבור נכים ועסקאות תקפות, וקריאה עבור תחזיות מהירות, ממוקדות ואזוריות.

פקודות מפתח> לשנות מדינה ולהחזיר את התוצאה של המבצע. בקשות הן רק לקרוא ואין להם תופעות לוואי.


למה אתה צריך את זה?

ביצוע מקראי: תחזיות ממשיות לתרחישים ספציפיים (קלטות, דוחות, קטלוגים).
יציבות נתיב קריטית: הקלטה מבודדת מ ”כבד” מצטרף וצביר.
חופש בחירת אחסון: OLTP לכתיבה, OLAP/מטמון/מנועי חיפוש לקריאה.
אבולוציה מואצת: הוספת השקפות חדשות ללא סיכון של ”שבירת” עסקאות.
תצפית וביקורת (במיוחד בשיתוף עם Event Surwing): קל יותר לשחזר ולשדר את המצב מחדש.


מתי ליישם (ומתי לא)

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

מושגים בסיסיים

Command-Intents to Change state (”פקודה”, ”תשלום הערות”). צ 'קים מזמינים.
נתוני שאילתות-רטריבס (”GetTREBYId',” ListerVissions Transactions'). אין תופעות לוואי.
מודל שיא: אגרגטים/אינווריאנטים/עסקאות; אחסון - יחוס/מפתח ערך/יומן אירועים.
קרא (הקרנה) מודל: טבלאות ממומשות/אינדקסים/מטמון, מסונכרן אסינכרוני.
עקביות: לעתים קרובות בסופו של דבר בין הקלטה לקריאה; נתיבים ביקורתיים - באמצעות קריאה ישירה ממודל הכתיבה.


ארכיטקטורה (שלד)

1. שירות כתיבה: מקבל פקודות, מאשר אינווריאנטים, תופס שינויים (מסד נתונים או אירועים).
2. פרסום מובטח של העובדה של שינויים.
3. מעבדי הקרנה: הקשיבו לאירועים/CDC ועדכנו מודלים לקריאה.
4. שירות קריאה: מגיש שאילתות מתצפיות ממומשות/מטמונים/חיפושים.
5. סאגות/תזמור: לתאם תהליכי צבירה.
6. תצפית: עיכוב הקרנה, אחוז יישומים מוצלחים, DLQ.


עיצוב מודל הקלטה

אגרגטים: ברור גבולות עסקה (לדוגמה, 'סדר', 'תשלום', 'איזון').
אינווריאנטים: לרשום באופן פורמלי (סכומי כסף 0, ייחודיות, גבולות).
פקודות הן אידמפוטנטיות על ידי מפתח (לדוגמה, idempotency _ key).
עסקאות הן בהיקף מינימלי; תופעות לוואי חיצוניות - באמצעות תיבת יוצא.

דוגמה פיקודית (פסאודו-JSON)

json
{
"command": "CapturePayment",
"payment_id": "pay_123",
"amount": 1000,
"currency": "EUR",
"idempotency_key": "k-789",
"trace_id": "t-abc"
}

עיצוב מודל קריאה

התחל משאלות: אילו מסכים/דוחות דרושים?
הדנורמליזציה מקובלת: קריאה-מודל - ”מטמון אופטימלי”.
מספר תחזיות למשימות שונות: חיפוש (OpenSearch), דיווחים (אחסון טורים), כרטיסים (KV/Redis).
TTL והרכבה מחדש: התחזיות חייבות להיות מסוגלות להתאושש מהמקור (שידור חוזר של האירוע/תמונות).


עקביות ו ־ UX

סופו של דבר עקביות: הממשק יכול להציג נתונים ישנים לזמן קצר.
דפוסי UX: ”נתונים מעודכנים...”, UI אופטימי, אינדיקטורים סינכרוניים, חסימת פעולות מסוכנות עד שאושר.
עבור פעולות הדורשות עקביות חזקה (לדוגמה, הצגת איזון מדויק לפני כתיבה), קרא ישירות ממודל הכתיבה.


CQRS וסיקור אירועים (אופציונלי)

אירוע סורקינג (Event Surwing) אוגר אירועים, ומצב הצבירה הוא תוצאה של הפיתול שלהם.
צרור CQRS + ES נותן ביקורת אידיאלית והרכבה קלה של תחזיות, אך מגביר את המורכבות.
חלופה: מסד נתונים רגיל של OLTP + outbox/CDC action.


שכפול: Outbox ו CDC

Outbox (בעסקה אחת): כתיבת תחום משנה + כתיבת אירוע ליציאה; המו "ל מוסר לצמיג.
CDC: קריאה מתוך יומן מסד הנתונים (Debezium, וכו ').
אחריות: כברירת מחדל לפחות פעם אחת, צרכנים ותחזיות חייבים להיות אידיוטים.


בחירת אחסון

כתב: relational (PostgreSQL/MySQL) עבור עסקאות; KV/Document - היכן שהאינווריאנטים פשוטים.

קרא:
  • KV/Redis - כרטיסים וקריאות מפתח מהירות;
  • חיפוש (OpenSearch/Elasticsearch) - חיפוש/פילטרים/פקטים;
  • טור (ClickHouse/BigQuery) - דיווחים;
  • מטמון על CDN - ספריות ציבוריות/תוכן.

תבניות אינטגרציה

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


יכולת תצפית

כתוב מדדים: p95/99 איחורי פקודה, אחוז העסקאות המוצלחות, שגיאות אימות.
קרא מדדים: p95/99 בקשות, מטמון קצב פגיעה, טען על אשכול החיפוש.
lag הקרנה (זמן והודעות), שיעור DLQ, אחוזי שכפול.
איתור: "trace _ id' עובר על פקודת האאוטבוקס = = השקת שאילתה.


בטיחות ותאימות

הפרדת זכויות: סקופים/תפקידים שונים לכתיבה וקריאה; העיקרון של החיסיון המועט ביותר.
PII/PCI: למזער בתחזיות; הצפנת במנוחה/בטיסה; מיסוך.
ביקורת: תיקון צוות, שחקן, תוצאה, "trace _ id'; ארכיון תולעת לתחומים קריטיים (תשלומים, KYC).


בדיקות

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


נדידה ואבולוציה

שדות חדשים - תוסף במקרה/CDC; דגמים קרואים נבנים מחדש.
כתיבה כפולה בעת עיצוב מחדש של מעגלים; להחזיק תחזיות ישנות עד ההחלפה.
ורסיונינג: ”v1 ”/” v2” אירועים ונקודות סוף, שקיעה-תכנית.
דגלים: הקדמה של שאילתות/תחזיות חדשות לאורך הקנרית.


אנטי דפוסים

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


דוגמאות לתחומים

תשלומים (שירות מקוון)

כתוב: ”הרשאה”, ”לכידה”, ”החזר” במסד נתונים עסקי; היוצא מפרסם את התשלום. '.

קרא:
  • רדיס ”כרטיס תשלום” עבור UI;
  • ClickHouse לדיווח;
  • OpenSearch לחיפוש אחר עסקאות.
  • נתיב קריטי: אישור חסום 800 ms p95; לקרוא עקביות עבור UI - בסופו של דבר (עד 2-3 s).

KYC

כתוב: פקודות להתחלה/עדכון מצב; אחסון PII במאגר מאובטח.
קרא: השלכה קלה של סטטוסים ללא מח "ש; PII הוא הידוק נקודה אם יש צורך.
אבטחה: סקופים שונים בקריאת סטטוס ובגישה למסמכים.

גיליונות שיווי משקל (iGaming/Finance)

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


רשימת בדיקות מימוש

[ ] אגרגטים וחריגים של מודל הכתיבה מודגשים.
[ שאילתות מפתח ] מוגדרות ותחזיות מיועדות להם.
[ ] Outbox/CDC ומעבדי הקרנה אידמפוטנטים מוגדרים.
[ ] יש תוכנית צילום/שידור חוזר.
[ ] SLO: latency פקודה, lag הקרנה, לקרוא/לכתוב זמינות בנפרד.
[ ] זכויות גישה מופרדות והצפנת נתונים מיושמות.
[ ] התראות DLQ/lag/dauplication.
[ ] בדיקות: חוזים, תחזיות, כאוס, שידור חוזר.

שאלות נפוצות

האם המאורע מחייב CQRS?
לא, זה לא אתה יכול לבנות על בסיס נתונים רגיל + outbox/CDC.

איך להתמודד עם ייאוש?
עיצוב מפורש של UX, מדידת השלכה, מאפשר לפעולות קריטיות לקרוא מתוך כתיבה.

האם אפשר גם לכתוב וגם לקרוא באותו שירות?
כן, הפרדה פיזית היא אופציונלית; חלוקה הגיונית של אחריות היא חובה.

מה לגבי עסקאות בין אגרגטים?
באמצעות סאגות ואירועים; הימנע מעסקאות מבוזרות במידת האפשר.


תוצאות

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

Contact

צרו קשר

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

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

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

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

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