עיצוב נגדי: תגובות לשגיאות מטמון

כרגע מוצג התיעוד של Apigee Edge.
כניסה למסמכי התיעוד של Apigee X.
מידע

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

  • אחזור מהיר יותר של נתונים
  • מקצר את זמן העיבוד על ידי מניעת יצירה מחדש של הנתונים שוב ושוב
  • המדיניות מונעת מבקשות API להגיע לשרתי הקצה העורפי ולכן מפחיתה את התקורה בשרתי הקצה העורפי
  • מאפשרת ניצול טוב יותר של משאבי המערכת/האפליקציות
  • שיפור זמני התגובה של ממשקי API

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

ב-Apigee Edge אפשר לאחסן נתונים במטמון בזמן ריצה כדי לשמור על עקביות ולאחזר נתונים מהר יותר. תכונת השמירה במטמון זמינה דרך המדיניות PopulateCache, המדיניות של LookupCache, המדיניות של InvalidateCache והמדיניות של ResponseCache.

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

המדיניות בנושא מטמון התגובה:

  • הפחתת מספר הבקשות שמגיעות לקצה העורפי
  • להפחתת רוחב הפס של הרשת
  • משפר את ביצועי ה-API ואת זמני התגובה

דוגמת עיצוב

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

הנה דוגמה למדיניות בנושא מטמון תגובה עם הגדרות ברירת מחדל:

<!-- /antipatterns/examples/1-1.xml -->
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ResponseCache async="false" continueOnError="false" enabled="true" name="TargetServerResponseCache">
  <DisplayName>TargetServer ResponseCache</DisplayName>
  <CacheKey>
    <Key Fragment ref="request.uri" /></CacheKey>
    <Scope>Exclusive</Scope>
    <ExpirySettings>
      <TimeoutInSec ref="flow.variable.here">600</TimeoutInSec>
    </ExpirySettings>
  <CacheResource>targetCache</CacheResource>
</ResponseCache>

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

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

    OR

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

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

תרחיש 1: כשל זמני בקצה העורפי/במשאב

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

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

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

תרחיש 2: כשל ממושך או קבוע בקצה עורפי/במשאב

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

  • משאב מסוים לקצה העורפי לא יהיה זמין למשך שעה

    OR

  • השרת העורפי יוסר או לא יהיה זמין למשך 24 שעות עקב כשל פתאומי באתר, בעיות בהיקף רחב, תחזוקה, שדרוג וכו'.

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

השפעה

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

שיטה מומלצת

  • לא לשמור את תגובות השגיאה במטמון התגובות. כדי למנוע שמירה במטמון של תגובות שגיאה, כפי שמוצג בקטע הקוד שבהמשך, חשוב לוודא שהרכיב <ExcludeErrorResponse> מוגדר לערך true במדיניות של ResponseCache. בתצורה הזו, רק התגובות לקודי ברירת המחדל 200 עד 205 (אלא אם קודי ההצלחה שונו) יישמרו במטמון.
    <!-- /antipatterns/examples/1-2.xml -->
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ResponseCache async="false" continueOnError="false" enabled="true" name="TargetServerResponseCache">
      <DisplayName>TargetServerResponseCache</DisplayName>
      <CacheKey>
        <KeyFragment ref="request.uri" />
      </CacheKey>
      <Scope>Exclusive</Scope>
      <ExpirySettings>
        <TimeoutinSec ref="flow.variable.here">600</TimeoutinSec>
      </ExpirySettings>
      <CacheResource>targetCache</CacheResource>
      <ExcludeErrorResponse>true</ExcludeErrorResponse>
    </ResponseCache>
    
  • אם יש דרישה לשמור את תגובות השגיאה במטמון מסיבה מסוימת, אפשר לקבוע את משך הזמן המקסימלי/המדויק של הזמן שבו הכשל יהיה מזוהה (אם אפשר):
    • כדאי להגדיר בהתאם את תאריך התפוגה כדי לוודא שתגובות השגיאה לא נשמרות במטמון למשך זמן ארוך יותר מהזמן שבו הכשל מופיע.
    • משתמשים במדיניות ResponseCache כדי לשמור במטמון את תגובות השגיאה ללא הרכיב <ExcludeErrorResponse>.

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

  • Apigee לא ממליצה לשמור במטמון תגובות 5xx משרתי קצה עורפי.