Stateless זה לא שאין State - זה איפה הוא נמצא
Stateless זה לא שאין State - זה איפה הוא נמצא
לפני שאפשר לדבר על Stateless, צריך לעצור רגע ולהגדיר את המושג הבסיסי שממנו הכול מתחיל: State.
מה זה State במערכת
State הוא כל מידע שהמערכת שומרת ושמשפיע על האופן שבו היא מתנהגת בהמשך.
במילים פשוטות: מה שהמערכת זוכרת.
זה יכול להיות:
- מי המשתמש
- מה קרה קודם
- באיזה שלב תהליך נמצא
- מה הערך הנוכחי של משתנה או משאב
אם שתי בקשות זהות מקבלות טיפול שונה בגלל משהו שקרה בעבר - יש State.
אז מה זה Stateless
מערכת Stateless היא מערכת שבה כל בקשה מטופלת בפני עצמה.
השרת:
- לא שומר זיכרון של בקשות קודמות
- לא מחזיק הקשר בין פניות
- ומתייחס לכל בקשה כאילו היא הראשונה
כל המידע הדרוש לעיבוד:
- מגיע עם הבקשה עצמה
- או נשלף ממקום חיצוני (למשל, מסד נתונים)
חשוב לדייק: Stateless לא אומר שאין State בכלל. הוא אומר שה-State לא נמצא בתוך השירות עצמו.
למה המושג מבלבל
המילה “Stateless” נשמעת כאילו:
- אין זיכרון
- אין מורכבות
- הכול פשוט
אבל זו אשליה.
State תמיד קיים. השאלה היחידה היא: איפה הוא נמצא, ומי משלם את המחיר עליו.
המיתוס: Stateless = אין State
כאן מגיעה הטעות הנפוצה.
אין מערכת בלי State.
יש רק מערכות שבוחרות:
- להחזיק State בתוך השירות
- או לדחוף אותו החוצה
Stateless אינו ביטול של State - הוא העברה שלו.
State at the edge
כאשר ה-State נמצא בקצה:
- הלקוח מחזיק הקשר
- כל בקשה כוללת את כל המידע הדרוש
- והשרת נשאר “טיפש” יחסית
היתרון:
- סקייל פשוט
- שרתים ניתנים להחלפה
- התאוששות מהירה
המחיר:
- לקוחות מורכבים יותר
- בקשות כבדות יותר
- וקושי בניהול שינויים והתאמה לאחור
המורכבות לא נעלמה - היא פשוט עברה לקצה.
State in the middle
כאשר ה-State נמצא באמצע:
- השירות זוכר
- מחזיק הקשר
- ומקבל החלטות על סמך עבר
היתרון:
- לוגיקה עשירה
- אחריות מרוכזת
- ופחות דרישות מהלקוח
המחיר:
- סקייל מסובך
- התאוששות איטית
- ותלות בין בקשות
State באמצע יוצר נקודת כובד: קשה להזיז, קשה לשכפל, וקשה להחלים.
State explosion
ככל שמערכת גדלה:
- יותר משתמשים
- יותר תהליכים
- יותר חריגים
ה-State מתרבה.
State explosion לא קורה בבת אחת. הוא נבנה לאט, דרך משפטים כמו:
- “נשמור רק עוד פרט אחד”
- “זה יעזור לפעם הבאה”
- “חבל לחשב מחדש”
ובשלב מסוים, אף אחד כבר לא יודע:
- איזה State קריטי
- איזה זמני
- ואיזה מסוכן
Stateless כבחירה מודעת
מערכת יציבה אינה מצהירה: “אנחנו Stateless”.
היא שואלת:
- איזה State חייב להיות
- איפה הכי נכון להחזיק אותו
- ואיפה הוא יגרום הכי פחות נזק
Stateless הוא לא יעד אידיאולוגי. הוא כלי ארכיטקטוני.
המשל
אפשר לחשוב על דלפק שירות.
דלפק שלא זוכר כלום - מבקש מכל לקוח להסביר הכול מחדש.
דלפק שזוכר יותר מדי - נתקע בעבר, ומתקשה לשרת מהר.
השאלה אינה: לזכור או לא לזכור -
אלא: מה, איפה, ולכמה זמן.
השורה התחתונה
State הוא בלתי נמנע. Stateless אינו ביטול שלו.
זו בחירה:
- איפה ה-State חי
- מי נושא במורכבות
- ואיך המערכת מתנהגת תחת עומס וכשל
מערכות שנשברות לא מחזיקות “יותר מדי State” - אלא מחזיקות אותו במקום הלא נכון.
מבט קדימה
אחרי שדיברנו על: אי-ודאות, עומס, דחייה, תורים, סדר, כפילויות, ואיפה ה-State נמצא -
אפשר לשאול שאלה רחבה יותר:
מה כל זה אומר על התרבות ההנדסית שלנו?
בפוסט הבא נבחן איך החלטות תקשורת משקפות ערכים עמוקים של צוותים ומערכות - ולמה תקשורת היא לא רק מנגנון, אלא מראה.
📚 פוסטים נוספים בסדרה: כשהתקשורת נשברת
- חלק 0 כשהתקשורת נשברת - הנדסה תחת עומס, כשל ואי-ודאות
- חלק 1 הנחת היסוד המסוכנת - הרשת אמינה "ברוב הזמן"
- חלק 2 Timeouts - ההחלטה הקשה ביותר בתקשורת
- חלק 3 Retries - מנגנון התאוששות או מכפיל נזק
- חלק 4 Load אינו אויב - Spikes כן
- חלק 5 Backpressure - כשלא אומרים "כן" לכול
- חלק 6 Queue אינו פתרון - הוא התחייבות
- חלק 7 Ordering - למה סדר הוא מותרות יקרות
- חלק 8 Idempotency - לתכנן כאילו הכול יישלח פעמיים
- חלק 9 Consistency מול Availability - לא תיאוריה, אלא בחירה יומיומית
- חלק 10 RPC, Messaging, Streaming - שלוש פילוסופיות תקשורת
- חלק 12 תקשורת כמשקפת תרבות הנדסית
- חלק 13 מערכות שמחזיקות - לא בגלל שהן חכמות, אלא בגלל שהן צנועות
- חלק 14 מה למדנו - מפת הדרך של הסדרה כולה