מערכות וארכיטקטורה

המערכת נמצאת במעבר

עבודה חוצה מסמך, מאגר, שלב אחזור, מודל, סוכן ותהליך. כל חלק יכול לפעול נכון בזמן שההקשר התפעולי נשחק ביניהם, ולכן השאלה הארכיטקטונית היא מה שורד את המעבר.

כשכל חלק תקין והתוצאה עדיין נכשלת

החלטה כמעט אף פעם אינה מתקיימת במערכת אחת. היא יכולה להתחיל במסמך, לשאוב הקשר ממאגר, לעבור שלב אחזור, להתפרש על ידי מודל, להפוך להצעת פעולה דרך סוכן, ולהמשיך לתהליך תפעולי.

כל אחד מהרכיבים האלה יכול לפעול נכון בפני עצמו. הבעיה הקשה יותר היא מה שקורה ביניהם.

מידע נע בזמן שההקשר התפעולי שלו נשחק. מסמך מועתק בלי השושלת שלו. מודל מקבל קטע רלוונטי בלי לדעת איזו גרסה עדיין מחייבת. סוכן מסוגל להפעיל כלי בלי להיות המקור של הסמכות להפעיל אותו. מי שבודק אחר כך רואה תוצאה ואינו יכול לשחזר את הראיה, הזהות, המצב והאישור שייצרו אותה.

הכשל חי במעברים, וזה מה שהופך אותו לבעיה תפעולית ולא טכנית.

ארבעה דברים שמטופלים כאחד

כשמערכת מציעה פעולה ואז מבצעת אותה, ארבע עובדות נפרדות פועלות, והן נדחסות לאחת אלא אם משהו מחזיק אותן בנפרד:

  • מה רכיב יכול לעשות;
  • מה מותר לו לעשות;
  • מה דורש אישור;
  • מה בפועל מבוצע.

יכולת אינה הרשאה. הרשאה אינה אישור. אישור אינו ביצוע. כל אחת נענית על ידי חלק אחר של המערכת, וכל אחת יכולה להיות תקינה בזמן שאחרת חסרה.

בניסוח של סדר ולא של רשימה:

זהות קודמת לסמכות. סמכות קודמת לפעולה בעלת השלכות.

זה אינו חדש עם הסקה הסתברותית. ארכיטקטורת אפס־אמון כבר מתייחסת לגישה כהחלטת מדיניות מפורשת ולא כאמון שנורש ממיקום או מרכיב. מה שמשתנה כשהסקה הסתברותית משתתפת בעבודה בעלת השלכות הוא שהרכיב שמציע נעשה טוב מאוד בייצור משהו שנראה מאושר.

אחזור עונה על שאלה צרה ממה שנדמה

אחזור פותר בעיה אמיתית: למצוא את מה שרלוונטי למשימה. חיבור של אחזור עם ייצור הופך ידע חיצוני לזמין ברגע השימוש, ולא רק את מה שמודל ספג באימון.

זה בעל ערך, והוא עונה על שאלה אחת:

מה נראה רלוונטי עכשיו?

מעבר חייב לענות על כמה נוספות:

  • מאיפה זה הגיע?
  • איזו גרסה תקפה?
  • מה השתנה?
  • מי ייצר את זה?
  • תחת סמכותו של מי זה שימש?
  • איזו פעולה מאוחרת הסתמכה על זה?
  • מה היה תקף אז, ומה תקף עכשיו?

אלה שאלות של מוצא, והאוצר מילים כבר קיים: מודל PROV של W3C מתאר ישויות, פעילויות, סוכנים, גזירה, ייחוס ושימוש בדיוק כדי שהשרשרת הזו תיאמר ולא תיזכר.

מערכת יכולה לאחזר בדיוק את החומר הנכון ועדיין לאבד את היחסים הדרושים כדי לומר איזה מקור היה מחייב, או מה הסתמך עליו אחר כך.

מה זה משתף עם בדיקה שעוברת

תיארתי במקום אחר משפחת פגמים שהחתימה שלה היא קלט שגוי, פלט תקין לחלוטין, ואפס התרעות - תוצאה שמגיעה בזמן, בצורה הנכונה, עם השדות הנכונים, והיא שגויה.

מעבר שנשחק מייצר בדיוק את זה. התהליך מסתיים. הפלט תקין. כל רכיב מדווח הצלחה. מה שאבד הוא ההקשר שהיה מאפשר לקבוע אם התוצאה לגיטימית, והיעדרו אינו מתריע על דבר, מפני שהיעדר אינו מצב שגיאה באף מקום בשרשרת.

לכן הבדיקה חייבת להיות מבנית ולא התנהגותית. שום דבר בריצה לא יספר לכם.

מה אפשר לבדוק

קחו פעולה אחת בעלת השלכות ולכו אחורה:

מקור ← זהות ← סמכות ← אישור ← החלטה ← ביצוע ← ראיה

שלוש שאלות בנקודה שבה זה חוצה גבול:

  1. מה מגיע, ומה נופל? לא מה מועבר - מה שהצד המקבל כבר אינו מחזיק ואינו יכול לבקש.
  2. איזו זהות אחראית כאן, והאם השלב הבא יודע אותה? סמכות שאינה נישאת קדימה היא סמכות שהונחה.
  3. האם אפשר יהיה לשחזר את זה בעוד חצי שנה? אם השחזור תלוי בכך שמישהו יזכור, הראיה נמצאת באדם ולא במערכת.

השלישית נכשלת הכי הרבה, והיא נכשלת בשקט, מפני שאיש אינו משחזר דבר עד שמשהו כבר השתבש.

גבול הטענה

זו טענה על היכן להסתכל, לא טענה שארכיטקטורה מסוימת נדרשת. מאגר וקטורי יכול לשאת מטא־נתונים. מערכת אחזור יכולה להיבנות עם מוצא. מערכת מסמכים יכולה לנהל גרסאות כראוי. העניין הוא שאלה אחריויות נפרדות שמניחים לעתים קרובות שהן מגיעות עם הרכיב.

זו גם אינה טענה שהרכיבים אינם אמינים. הטיעון תלוי בכך שהם כן: דווקא מפני שכל חלק עובד, הפער ביניהם אינו מושך תשומת לב.

ואין כאן מדידה. לא מוצע כאן שום נתון על תדירות אובדן ההקשר במעבר, מפני שאין לי כזה שיעמוד בשאלה על השיטה שהפיקה אותו.

מה נעשה אפשרי

כשהשרשרת נאמרת, המערכת מקבלת משהו שאחרת אין לה: פעולה יכולה להיות שגויה באופן מועיל. כשהפלט חולק על העולם, יש לאן להסתכל - על איזה מקור הסתמכו, איזו זהות החזיקה בסמכות, איזו ראיה תמכה בצעד.

מערכת שמחשבת בלי להצהיר מה הניחה אינה יכולה להיות שגויה באופן מועיל. היא יכולה רק להיות שגויה, ואז מתווכחים עליה.

זה ההבדל בין תוצאה לטענה, והוא נקבע במעבר ולא באף אחד מהחלקים.