אצווה נגד זרם: מתי מה
למה בכלל לבחור?
כל מערכת נתונים מאזנת בין לאטות, עלות, תמיכה במורכבות, ואמינות.
”נתחים” מחזוריים של נתונים בעלי רוחב פס גבוה ועלות נמוכה לכל שיא.
זרם - עיבוד רציף של אירועים עם עיכוב מינימלי ומצב באזורי זיכרון/מקומי.
בקצרה על מודלים
אצווה
מקור: קבצים/טבלאות/תמונות.
הדק: לוח זמנים (שעה/יום) או מצב (קובץ פרקט חדש).
חזקות: פשטות, דטרמיניזם, הקשר מידע מלא, חישובים זולים גדולים.
חלש: בלי ”אונליין”, איחור גבוה, ”חלונות” בלי אותות בזמן אמת.
זרם
מקור: ברוקרים (קפקא/NATS/Pulsar), CDC, תורים
טריגר: אירוע.
חזק: איחור נמוך, ריאקטיביות, אינטגרציה טבעית עם המוצר.
חלשה: סיבוכיות זמן (אירוע נגד עיבוד), סדר/כפילויות, מצב, פעולה.
פתרון: מטריצת בחירה
חוק 80/20: אם SLA מאפשר עיכובים של דקה/שעה ואין תכונות תגובתיות - קחו אצווה. אם התגובה היא קריטית ”כאן ועכשיו” או שאתה זקוק לתצוגות חי - זרם (לרוב + צרור לילה נוסף לפיוס).
תרחישים אופייניים
אצווה - כאשר טוב יותר:- דיווח יומי, חיוב בתקופות, אימון ML, הצטרפות גדולה, שכפול ”עם כל הסט”.
- דגם מדליון (ברונזה/כסף/זהב) עם אימות עמוק.
- אחורי המוני וחלון חנות להרכבה מחדש.
- אנטי הונאה/ניטור, התראות SRE, איזון/משימות בזמן אמת, המלצות ”עכשיו”.
- אינטגרציות Event-as-Fact (EDC), Materialized Views Update (CQRS).
- מיקרו-רווחים: הודעות, אינטרנט, תגובות לאירועים עסקיים.
- הזרימה יוצרת תצוגות ואותות מבצעיים; קבוצת לילה עושה פיוס, כספת וספירה היסטורית זולה.
ארכיטקטורה
למבדה (זרם + אצווה)
זרם להגדלה ומקוון; אצווה עבור השלמות ותיקונים.
מקצוענים: גמישות וסלאח. חסרונות: היגיון כפול, שכפול קוד.
קאפה (זרם ראשון + שידור חוזר)
יומן יחיד כמקור לאמת; חישובים קבוצתיים = שידור חוזר.
מקצוענים: בסיס קוד אחד, סמנטיקה אחת. חסרונות: יותר קשה לתפעול, דרישות אחסון רישום.
היברידי-פרגמטי
הזרמת ”מערכת הפעלה” + עבודות אצווה מחזוריות עבור מצטרפים כבדים/ML/תיקונים.
למעשה, זו האפשרות הנפוצה ביותר.
זמן, סדר, חלונות (עבור זרם)
להסתמך על זמן אירוע, לא זמן עיבוד.
ניהול סימן מים ו ”מותר _ איחור”; תמיכה במחדלים/התנכלויות לאירועים מאוחרים יותר.
מחיצה לפי מפתחות יחידה, תוכנית ”מפתחות חמים”.
אמינות וסמנטיקה של השפעות
אצווה
עסקאות במסד הנתונים או החלפה אטומית של חבורות/טבלאות.
Idempotency - באמצעות מחשוב דטרמיניסטי ושכתוב/הכנס-שכתוב.
זרם
כיורים אידמפוטנטים (upsert/merge, גרסאות של אגרגטים).
Transactional ”תקן קריאה-כתיבה” עבור EOS בתוקף.
טבלאות שכפול על ידי ”event _ id'/” operation _ id'.
קמרונות ופורמטים
אצווה
אגם נתונים (Parquet/Delta/Iceberg), OLAP (ClickHouse/BigQuery), אחסון אובייקטים.
טבלאות חומצה להחלפה אטומית, מסע בזמן.
זרם
לוגים/נושאים בברוקרים, חנויות מדינה (LockDB/מוטבע), KV/Redis, OLTP לתחזיות.
רשומות סכימה (Avro/JSON/Proto), מצבי תאימות.
עלות ו ־ SLO
אצווה: אתה משלם בחבורות - זה רווחי עם כרכים גדולים, אבל העיכוב בין לוח הזמנים.
זרם: משאבים קבועים בזמן ריצה, עלות שיא ב-QPS גבוהה; אבל SLA בשניות.
ספירת p95/p99 latency, מעבר דרך לג, עלות cu/event ותמיכה TCO.
בדיקות
נפוצים: סט זהב, אינווריאנטים מבוססי רכוש, דור קלט מלוכלך.
אצווה: דטרמיניזציה, אידמפוטנט מתחיל מחדש, לפני/אחרי השוואה של קמרונות.
זרם: מחוץ לסדר/כפילויות, הזרקת פגמים בין אפקט וקיבוע קיזוז, בדיקות שידור חוזר.
יכולת תצפית
אצווה: משך עבודה, נתח של כשלים/נסיגה, רעננות של חלונות חנות, סריקה-עלות.
זרם: lag זמן/הודעה, סימן מים, קצב מאוחר, תדר מצב/נקודת ביקורת, קצב DLQ.
בכל מקום: ”trace _ id',” event _ id', גרסאות של תרשימים/צינורות.
אבטחה ונתונים
PII/PCI - למזער, להצפין במנוחה/בטיסה, לסמן שדות במעגלים (”x-pii”).
לזרם - הגנה על נקודות ביקורת/מדינה, אזעקות לנושאים.
GDPR/הזכות להישכח: ב ־ Stream - Crypto מחיקה/עריכה בתחזיות; באצ '- חישוב מחדש של חבורות.
אסטרטגיות מעבר
Batch # Stream: להתחיל על ידי פרסום אירועים (Outbox/CDC), להעלות תצוגה קטנה בזמן אמת מבלי לגעת בכספת הקיימת.
Stream # Batch - הוסף כספות יומיות לדיווח/פיוס והפחתת עומס על כיורי הזרמה.
אנטי דפוסים
”הכל בזרם” למען האופנה: יקר וקשה ללא צורך אמיתי.
”קבוצת לילה אחת ענקית” עם דרישות <5 דקות.
השתמש זמן עיבוד למדדים עסקיים.
CDCs גלם כאירועים ציבוריים: קישוריות הדוקה, כאב באבולוציה.
אין אידמפוטנטיות בכיורים = = השפעות כפולות על הפעלה מחדש.
רשימת בדיקות בחירה
[ ] רעננות: כמה שניות/דקות/שעות זה מקובל?
[ ] יציבות הכנסת: האם יש מחוץ לפקודות/כפילויות?
[ ] האם אני זקוק לתגובות מקוונות/חנויות?
[ עלות ]: זמן ריצה 24/7 נגד ”חלון מתוכנן”.
[ ] שיטת התיקון היא לסגת/לכעוס או חישוב מחדש של הלילה.
צוות [ ] ובגרות מבצעית (תצפית, בכוננות).
[ דרישות ] ל ”תוצאה אחת בדיוק”.
[ ] מדיניות מח "ש/חזרות/זכות להישכח.
דפוסי התייחסות
תצוגה מבצעית (היברידי):- זרם: EDC # תחזיות (KV/Redis, OLTP) עבור UI, idempotent upsert.
- כספת לילית ב-OLAP, פיוס, תכונות ML.
- זרם: חלונות הפעלה, כללי CEP, התראות <1-5 s.
- אימון מחדש של מודלים, אימות לא מקוון.
- טריגרים, קטעים בזמן אמת.
- ניקוד, דוגמניות, דיווחים.
שאלות נפוצות
האם זה אפשרי לקבל ”כמעט בזמן אמת” על אצווה?
כן: מיקרובטיות/דקירות הדק (כל 1-5 דקות) - פשרה, אבל בלי המורכבות של חלונות/אירועים מאוחרים.
האם הגישה למבדה צריכה בכל מקום?
לא, זה לא אם החוט סוגר את כל המשימות ואתה יודע איך לעשות הילוך חוזר - קל יותר להתארך. אחרת, בן-כלאיים.
איך לספור את העלות?
Sum compute + אחסון + ops. עבור סטרים, הוסף את ”24/7” מחיר השבתה ולילות חירום; עבור אצווה - המחיר של נתוני ”איחור”.
תוצאות
בחר אצווה כאשר עלות נמוכה, פשטות וקמרונות תקופתיים חשובים; זרם - כאשר ריאקציה ורעננות הם קריטיים. למעשה, בן-הכלאיים מנצח: הנחל - עבור האינטרנט והאותות, המנה - עבור השלמות וחישובים היסטוריים זולים. העיקר הוא לקבוע את ה-SLO, להבטיח אידמפוטנטיות/יכולת תצפית ולתכנן את נתיב התיקון מראש.