למה רוב האופטימיזציות לא ניתנות להוכחה

תוכן עניינים

למה רוב האופטימיזציות לא ניתנות להוכחה

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

אבל ברוב המקרים - אי אפשר באמת להוכיח את זה.

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

אופטימיזציה כמעט תמיד מתחילה כמקומית

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

ובמדידה: “זה רץ מהר יותר אצלי”.

וזה יכול להיות נכון - ובכל זאת לא אומר כמעט כלום על המערכת כולה.

הפער בין אופטימיזציה מקומית למערכתית

הפער המרכזי הוא בין אופטימיזציה מקומית לאופטימיזציה מערכתית.

אופטימיזציה מקומית:

  • מודדת קטע קוד
  • בתרחיש מסוים
  • עם קלט מסוים
  • ובעומס מסוים

אופטימיזציה מערכתית:

  • מושפעת מזרימה
  • מתורים
  • מתזמון
  • ומאינטראקציות בין רכיבים

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

”זה מהיר יותר אצלי” הוא משפט חסר משמעות

זו הסיבה ש”זה מהיר יותר אצלי” הוא משפט חסר משמעות.

איפה זה “אצלי”?

  • באיזה עומס
  • עם איזה קלט
  • ובאיזה זמן ביום

מערכות מתנהגות אחרת:

  • בעומס נמוך מול גבוה
  • בקלט אחיד מול קצוות
  • בזמן שקט מול bursts

האופטימיזציה לא משתנה - ההקשר כן.

אופטימיזציות אינן נכונות אבסולוטית

וכאן טמונה הבעיה העקרונית: אופטימיזציות אינן נכונות אבסולוטית.

הן תלויות ב:

  • תבנית קלט
  • פרופיל שימוש
  • זמני הגעה
  • ותזמון בין רכיבים

שינוי קטן בהקשר יכול להפוך “שיפור ברור” להחמרה שקטה.

למה קשה “להוכיח” אופטימיזציה

אפשר להראות:

  • מדידה אחת
  • גרף אחד
  • תרחיש אחד

אבל אי אפשר להראות שהשיפור יחזיק:

  • מחר
  • בעומס אחר
  • או בשילוב אחר של בקשות

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

השורה התחתונה

מערכות יציבות לא מחפשות אופטימיזציות “מוכחות”. הן מחפשות אופטימיזציות מובנות.

כאלה שיודעים:

  • מתי הן עוזרות
  • מתי הן לא
  • ומה המחיר שלהן בהקשר אחר

כי אופטימיזציה בלי הקשר היא לא שיפור. היא הימור.

תגובות