נתונים זורמים בין צמתים
(סעיף: מערכת אקולוגית ורשת)
1) מהות ומטרות
זרמי נתונים בין צמתים הם ערוצים מנוהלים של אירועים, מצבים וחפצים בין תפקידי מערכת אקולוגית (מאשרים/קוראים/אינדקסים/גשרים/שערים/חנויות/אנליטיקה). מטרות:- חיזוי: SLOs יציב על ידי עיכוב/הצלחה/רעננות.
- אמינות: התנגדות להפסדים, שכפולים, שינויים.
- אבטחה וציות: הצפנה, חתימות, תושבות.
- סקלביליות: Geo-הפצה, מחיצה, QOS.
2) טקסונומיה זרימה
1. מישור בקרה: הגדרות, פישפלאגים, מדיניות ניתוב/הגבלה.
2. מישור נתונים - אירוע: אירועי תחום ('הפקדה. ", התשלום. ',' גשר. ').
3. מישור נתונים - זרם: נחלים ארוכי חיים (gRPC/WebSocket) עבור אותות ומדדים חיים.
4. Batch/Backfill: הורדות של פרוסות היסטוריות, שידור חוזר, תמונות.
5. שכפול/אנטי-אנטרופיה: סנכרון מצב, רחמים, זרמי CRDT.
6. טלמטריה/יכולת תצפית: רישומים/מדטים/שבילים/רצועה צדדית, לא מפריעים ל-UX הראשי.
לכל סוג יש כיתות QOS וכללי מגש/סדר משלו.
3) טופולוגיות וניתוב
Hub-and-Speak: צירים אזוריים כצמיגים; משחק - צמתים לחיקוי.
Mesh/P2P: רשת חלקית לשכפול/רכילות.
Edge-Tiered: שערי קצה דקים (rate-limit/cache) = אשכולות אזוריים עבים.
Geo-Routing: Anycast/Latency-Adware LB + כללי התמחות.
מפתח - מחיצה: "מחיצה _ key = Id' Derunant' tentiId' נותן סדר וקנה מידה צפויים.
4) תחבורה ופורמטים
HTTP/2/3, gRPC/QUIC - איחור נמוך, ריבוי לקחים, שמירה.
קפקא/פולסר/NATS - תורים עם התמדה/מפלגות/קבוצות צרכנים.
שקע אינטרנט - דחוף אירועים והזנות חיות.
פורמטים: Protobuf/Avro (תוכניות עם אבולוציה), JSON עבור API חיצוני.
פניות חשיש וקבלות מרקל לאימות יושר.
5) הזמנה, משלוח וסיום
מודל משלוח:- לפחות פעם אחת (ברירת מחדל; idempotency/defutup נדרש).
- אפקט של פעם אחת בדיוק באמצעות Outbox/Inbox + צרכן אידמפוטנטי.
- סדר: מובטח בתוך המפלגה; הסדר הבין מפלגתי אינו מובטח.
- finalization: statuses 'associated' extreme (K) # invalid (reorg); לחלון אופטימי-מחלוקת.
6) אידמפוטנטיות ודידופ
מפתח אידמפוטנטיות לאירועים:- 'idepotency _ key = ${chainId}|${block}|${tx}|${logIndex}|${type'
- קפוא על ידי מפתח, TTL של חלון השכפול 72 שעות.
- עבור קונפליקט, מטען הוא מדיניות ”מקור האמת” (עדיפות, גירסה, חתימה).
- עבור בקשות HTTP, הכותרת היא 'Idempotency-Key' + רישום תגובה.
7) תורים, תרמיל גב ומכסות
תורים: מסיבות לפי מפתח; DLQ להודעות ”רעילות”.
תרמיל אחורי: קרדיטים/אסימונים, מקסימום אינפלציה גבול, מעגל מפסק.
מכסות/QOS: P0 (קריטי), P1 (תוצר), P2 (נפח). פיצול בריכות/מגבלות RPS/bytes/s/מנויים.
בקרת כניסה: סירוב מוקדם לבקשות ”יקרות”, שמירה לפי טווח/גודל.
8) מודלים עקביים ונתונים
לקרוא-אתה-לכתוב בתוך צד/צומת.
בסופו של דבר עקביות בין אזורים/צדדים.
CRDT עבור שכפול ללא קונפליקט של כמה סטים (דלפקים, סטים).
צילומים + רישומים לשורת אתחול מהירה והילוך חוזר דטרמיניסטי.
9) ביטחון ואמון
MTLS בין צמתים, מצמיד מפתח, סיבוב.
חתימות הודעה/webhook, חותמת זמן וחלונות אנטי הילוך חוזר.
הצפנה על go/במנוחה; הפרדה בין מפתחות אזוריים.
PII-מזעור: tokenization, איסור על מידע אישי בתוויות/מדדים.
10) יעילות: אריזה, דחיסה, מטמון
חבורה של מסרים קטנים כדי להפחית את התקורה.
דחיסה: zstd/gzip עם מילונים בטוחים.
מזומן: תשובות שליליות וספריות ”חמות”; טי-טי-אל ונכות באירוע.
11) דיאגרמות נתונים (אזכורים)
זרימה/רישום הרבה
sql
CREATE TABLE streams (
name TEXT PRIMARY KEY,
partitions INT,
qos TEXT, -- P0 P1 P2 retention_days INT,
schema_version TEXT
);
CREATE TABLE offsets (
stream TEXT, partition INT, consumer_group TEXT,
offset BIGINT, updated_at TIMESTAMPTZ,
PRIMARY KEY (stream, partition, consumer_group)
);
יומן אירועים (idempotent upsert)
sql
CREATE TABLE events_core (
id UUID PRIMARY KEY,
idempotency_key TEXT UNIQUE,
ts TIMESTAMPTZ,
partition_key TEXT,
type TEXT,
payload JSONB,
status TEXT, -- observed confirmed finalized invalidated signature TEXT
);
DLQ/הסגר
sql
CREATE TABLE dlq (
id UUID PRIMARY KEY,
stream TEXT, partition INT, offset BIGINT,
reason TEXT, payload JSONB, ts TIMESTAMPTZ
);
12) מדיניות (YAML)
QOS וגבולות
yaml qos:
P0: { ack_timeout_ms: 2000, retries: 3, backoff_ms: [100,400,800], rps_per_org: 1500 }
P1: { ack_timeout_ms: 5000, retries: 2, rps_per_org: 800 }
P2: { best_effort: true, rps_per_org: 200 }
limits:
max_message_bytes: 1048576 max_stream_subscriptions_per_client: 20
פינליזציה וחלונות
yaml finality:
eth-mainnet: { k: 12 }
polygon: { k: 256 }
optimistic: { k: 0, challenge_minutes: 20 }
ניתוב/תושבות
yaml routing:
prefer_local_region: true fallback: [nearest_healthy, master_hub]
residency:
eu: ["eu"]
uk: ["uk"]
13) יכולת תצפית: SLI/SLO
SLI (ליבה):- Latency p95/p99 (כניסה = יציאה, לכל זרם/QOS).
- שיעור הצלחה/ירידה.
- תור לאג p95 וצרכן לג במסיבה.
- רעננות p95 (בלע = לצרוך).
- Reorg/Invalid Rate (אם onchain).
- Dedup Effective (% מהלקוחות נספגים באופן אידמפוטי).
- יחס Geo-Hit (מקומי שירות).
- P0 latency p95 latency 400 ms; הצלחה ב-99. 95%; Queue-lag p95 multo 2 visition; רעננות p95 בלום 60.
- דדופ יעילות - 99%; DLQ על 0. אחוז אחד מהתנועה.
לוחות מחוונים: Streams Core/Lag & Tresness/QOS & Errors/Geo/Security (mTLS/signatures).
14) דפוסי צרכנים
Outbox/Inbox: הוצאה לאור אטומית ויישום אידמפוטנטי.
אפקט של פעם אחת בדיוק, לאחסן את המפתח האחרון.
סימני מים: נתונים מאוחרים.
תופעות לוואי אידמפוטנטיות: שאילתות חיצוניות עם מפתח ויומן תגובה בלבד.
15) מצבי הידרדרות
מצב סופי בלבד: אנחנו מוציאים רק אירועים סופיים.
מטמון בלבד לספרי עיון, הקפאת שיטות כבדות.
מצערת P2 ו ”מצב דיאטה” עבור זרמים (שיעור רענון מופחת).
קריאה בלבד עבור אפליקציה משנית.
16) שחרור ללא זמן ונדידה
כחול ירוק/כנרי על ידי זורמים וצרכנים.
סכימה-ראשון: להוסיף שדות בלבד; גרסאות מקבילות של נושאים.
קיזוז הגירות: צרכני צללים, השוואה של פיגור/הצלחה, החלפה.
17) תקנות הפעלה
יום: דיווח SLO (latency/success/lag/treeness), ביקורת חתימה, בדיקת DLQ.
שבועי: שחזור של אצבעות/מכסות, מבחן DR (אתחול מתוך תצלום), ניתוח יעילות דדאפ.
מבחני כאוס (הפסד/ג 'יטר, כשל ברוקר, התפרצות מחדש), שינוי של חלונות סופיים.
לפני השחרור: קנרית 120 דקות, שערי SLO, תוכנית רולבק.
18) תקריות משחק
תור-לאג/פיצוץ צרכן-לאג
1. הגדלת הצרכנים/KEDA; 2) לחלק מחדש את הצדדים; 3) להקפיא את P2 ואת העבודות הגדולות; 4) ניתוח מפתחות ”חמים”.
ב. צמיחה של p95 Latency P0
1. P2-throttle, עדיפות P0; 2) שערים/ברוקרים בקנה מידה; 3) מטמון לספרי עיון בלבד; 4) פליטה חריגה יותר.
סי. High DLQ/dubbing
1. בדוק את מפתח האידמפוטנטיות/TTL; 2) חיזוק dedup; 3) להגביל את המפיק הרועש; 4) שידור חוזר אחרי תיקון.
ד. מזימות דריפט/חוזים
1. אפשר מצב נוקשה (לחתוך אלה לא תקפים); 2) להודיע למפיק; 3) שחרר את המתאם; 4) קווי עדכון.
הפרה של תושבות/חתימות
1. יחידת ייצוא/תעלות; 2) סיבוב מפתחות/סרטות; 3) ביקורת חשבונות ונתיחה שלאחר המוות; 4) עדכון מדיניות.
19) רשימת מימושים
1. הגדר את סוגי הזרם ואת המפתח המחולק.
2. אפשר אידמפוטנטיות/dedup וסיכום עם חלונות K/מחלוקת.
3. הגדרות תורים, QOS, מכסות, ותרמיל גב.
4. הפעל MTLS/חתימות ומדיניות מגורים.
5. הזן סכימות/רגיסטרים (זרמים, קיזוזים, dlq) וטלמטריה SLI/SLO.
6. לארגן את הנדידה הקנרית/כחולה-ירוקה ומעגל ללא זמן.
7. לעבוד על מצבי השפלה וספרי משחקים.
20) גלוסרי
Backpressure - בקרת טעינת קלט (credits/tokens/limits).
DLQ - ”תור מת” להודעות בעיה.
מבני מידע עם פתרון סכסוכים ללא תיאום.
סופית - אי-הפיכות של האירוע/מצב.
בדיוק-פעם אחת אפקט - חזרה-בטוח תוצאה על לפחות פעם אחת משלוח.
סימן מים - מארק עיבוד התקדמות לאירועים מאוחרים.
הדרה של מקרים מושחתים מהבריכה.
שורה תחתונה: נתונים זורמים בין צמתים אינם רק ”תור ומאזין”, אלא גם משמעת מערכתית של סדר, סיום, אידמפוטנטיות, ביטחון ויכולת תצפית. מפתחות מחיצה סטנדרטיים, QOS/מכסות, תוכניות מחמירות ו-SLOS, יחד עם מצבי הידרדרות וספרי משחק, מעניקים למערכת האקולוגית ערוצי שידור נתונים יציבים בקנה מידה ותחת ביקורת.