אם מישהו היה אומר לי לפני שבועיים שייתכן מצב שבו בנק פועלים סובל מתקלה שמנטרלת את מערך המחשוב שלו ליומיים שלמים, הייתי חושב שהוא מקשקש.
כשמפעילים מערכת קריטית – ובנק הוא מערכת קריטית, חשוב לבנות את המערכת עם מנגנוני יתירות (redundancy) ככה שגם כשמשהו קורס (ומשהו יקרוס בשלב מסויים, זה ברור), המערכת כולה לא תקרוס כי משהו יתפוס את מקומו בצורה שקופה.
דוגמאות לזה אפשר לראות בהרבה מקומות, למשל:
- שרתי DNS תמיד מוגדרים לפחות בזוגות, ככה שאם הראשון נופל השני תופס את מקומו והמשתמשים אפילו לא יודעים שמשהו קרה.
- ברוב תצורות הRAID, אם נופל כונן קשיח המערכת ממשיכה לעבוד כרגיל, ואפשר להחליף אותו בלי לאבד נתונים.
- אפשר ורצוי להגדיר את הDNS בצורה כזו שאם שרת דואר נופל, שרת דואר חלופי יקבל את ההודעות בצורה שקופה למי ששולח את הדואר.
- יש לנו שתי ריאות, שני כבדים, שתי כליות, שתי עיניים, שתי אוזניים.. 🙂
הנקודה היא שמי שלוקח את עצמו ברצינות, ידאג שלא תהיה לו נקודת כשל יחידה.
לפני כמה ימים המחשב המרכזי של בנק הפועלים קרס "עקב תקלה נדירה במערכת ההפעלה", ובנק פועלים היה מושבת ליומיים, בהם הבורסה טולטלה, ולקוחות בנק הפועלים לא יכלו להגיב.
בתור מערכת קריטית, בנק הפועלים אמור היה להיות חסין לקריסה כזו, ובכל זאת "תקלה נדירה" הצליחה להפיל אותו.
במערכת עם יתירות, יש הסתברות מסויימת לכך שתהיה קריסה של כל אחד מהרכיבים, נניח שהמערכת היא שרת עם מערך RAID, ונניח שהכוננים הקשיחים הם ממש דפוקים והסתברות לקריסה של אחד מהם בכל רגע נתון הוא 1%.
נניח גם שהמערכת מסוגלת להתמודד עם כונן אחד שקרס בלי לאבד מידע, אבל לא עם שניים.
עכשיו – מה הסיכוי ששני כוננים קשיחים יקרסו באותו רגע?
ההסתברות במקרה הזה היא מכפלת ההסתברויות להסתברות לארוע בודד, כלומר 0.01% (זאת כמובן בהנחה שהמאורעות בלתי תלויים, דוגמא למאורעות תלויים היא הפסקת חשמל שגרמה לקצר שדפק שני כוננים).
בצורה דומה ההסתברות לקריסה של שלושה כוננים היא כבר 0.0001% וכן הלאה.
אפשר לראות שככל שהיתירות שלנו גדלה בכל נקודה קריטית, הסיכוי לארוע שיפיל את המערכת קטנה בצורה מאוד מהירה, אבל היא עדיין קיימת. הנקודה היא שאם מבינים את המערכת בצורה טובה, אפשר לשלוט בהסתברות לארוע קטסטרופלי ולהקטין אותו עד לרמה נמוכה מספיק (למשל רמה כזו שההסתברות לרעידת אדמה שתמחק את ישראל היא הרבה יותר גבוהה).
כמובן שבעולם האמיתי דברים מסתבכים, כי בדרך כלל יש תלות בין רכיבים והרבה פעמים קריסה של רכיב אחד גורמת תגובה שרשרת שיכולה להפיל רכיב אחר לגמרי.
כל זה עדיין לא מצדיק את הקריסה של המחשב של בנק הפועלים, שלדעתי עלתה להם מליונים רבים ועוד תעלה להם מליונים רבים עוד יותר כשיפגע בהם גל התביעות.
מה לדעתכם קרה שם?