Hot Path vs Cold Path - הפרדה בין זרמים חמים לקרים
Hot Path vs Cold Path - הפרדה בין זרמים חמים לקרים
במערכות רבות, כל הבקשות נראות דומות. כולן נכנסות דרך אותו שער, עוברות אותם רכיבים, ומתחרות על אותם משאבים.
אבל בפועל - הן לא שוות.
יש בקשות שחייבות מענה מיידי. ויש בקשות שיכולות להמתין. כשלא מבדילים ביניהן, מערכת משלמת מחיר כבד.
מה הם זרמים חמים וקרים
זרם חם (Hot path) הוא מסלול קריטי:
- בקשות משתמש בזמן אמת
- פעולות שמשפיעות ישירות על חוויית השימוש
- כל עיכוב קטן מורגש מיד
זרם קר (Cold path) הוא מסלול סובלני יותר:
- עיבודים כבדים ברקע
- עדכונים א-סינכרוניים
- חישובים מצטברים, לוגים, אנליטיקה
הבעיה מתחילה כששני הזרמים האלה חולקים את אותה תשתית.
למה ערבוב זרמים מסוכן
כאשר זרם חם וזרם קר משתמשים:
- באותו תור
- באותו pool של threads
- באותם חיבורים או אותם משאבים
עומס בזרם הקר זולג מיד לזרם החם.
עיבוד כבד אחד, שלא דחוף בזמן, יכול לעכב בקשה קריטית - לא בגלל חשיבות, אלא בגלל תור משותף.
המערכת לא נופלת - אבל היא מרגישה איטית בדיוק איפה שאסור לה.
המשל
דמיינו מסעדה:
- הזמנות לשולחנות הן הזרם החם
- הכנות לקייטרינג למחר הן הזרם הקר
אם אותו מטבח מטפל בשניהם בלי הבחנה, הלקוחות שיושבים עכשיו ימתינו - בגלל משהו שלא קשור אליהם בכלל.
הפתרון אינו לעבוד מהר יותר, אלא להפריד.
הפרדה כעיקרון תכנוני
הפרדה בין זרמים חמים לקרים יכולה להיות:
- תורים נפרדים
- pools נפרדים
- שירותים נפרדים
- או אפילו תשתיות שונות
העיקרון אינו טכנולוגי - הוא תפיסתי.
לא כל עבודה ראויה לאותו יחס. לא כל בקשה צריכה אותו מסלול.
למה זה חשוב כבר מההתחלה
אם לא מזהים זרמים חמים וקרים מוקדם:
- הם נבנים יחד כברירת מחדל
- התלות ביניהם מתקבעת
- וההפרדה הופכת ליקרה וכואבת בהמשך
השורה התחתונה
מערכת יציבה אינה זו שעובדת מהר - אלא זו שיודעת על מה אסור לה להתפשר.
הפרדה בין זרמים חמים לקרים מבטיחה שעומס “לא חשוב עכשיו” לא יפגע במה שחייב לעבוד תמיד.
זו לא אופטימיזציה. זו הגנה בסיסית על המערכת.