שימוש ב-negative caching

בדף הזה מוסבר איך להשתמש ב-negative caching עם Cloud CDN. שמירת נתונים במטמון של תשובות שליליות מאפשרת להגדיר זמן חיים (TTL) שונה לכל קוד סטטוס.

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

לפני שמתחילים

  • מידע על מצבי מטמון ותוכן סטטי

  • מוודאים ש-Cloud CDN מופעל. הוראות מפורטות זמינות במאמר שימוש ב-Cloud CDN.

  • אם צריך, מעדכנים לגרסה האחרונה של Google Cloud CLI:

    gcloud components update
    

קודי סטטוס וערכי TTL שמוגדרים כברירת מחדל

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

‫Cloud CDN מחיל את ערכי ה-TTL הבאים כברירת מחדל על קודי הסטטוס האלה:

קוד סטטוס משמעות TTL
HTTP 300 שאלות אמריקאיות 10 דקות
HTTP 301 ו-308 הפניות קבועות 10 דקות
HTTP 302 ו-307 הפניות זמניות לא נשמר במטמון כברירת מחדל
HTTP 404 הקובץ לא נמצא ‫120 שניות
HTTP 405 Method not found ‫60 שניות
HTTP 410 נעלם ‫120 שניות
HTTP 451 לא זמין מסיבות משפטיות ‫120 שניות
HTTP 501 לא בוצע יישום ‫60 שניות

אפשר לשנות את ערכי ברירת המחדל האלה באמצעות negative caching כדי להגדיר TTL של מטמון לקוד סטטוס של HTTP שצוין.

הגדרת negative caching

Negative caching מאפשר לכם להגדיר את השירות כך שיאחסן במטמון גם כשלים וגם הצלחות. כך Cloud CDN יכול להגן על מקורות מבקשות שיוצרות שגיאות (כמו 404 Not Found) באותו אופן שבו הוא מגן על מקורות מבקשות שיוצרות תגובות מוצלחות.

המסוף

  1. נכנסים לדף Load Balancing במסוף Google Cloud .

    לדף Load balancing

  2. לוחצים על השם של מאזן העומסים החיצוני של האפליקציות.
  3. לוחצים על Edit.
  4. בקטע Backend configuration, בוחרים קצה עורפי ולוחצים על Edit (עריכה) .
  5. מוודאים שהאפשרות Enable Cloud CDN (הפעלת Cloud CDN) מסומנת.
  6. בחלק התחתון של החלון, לוחצים על הגדרות מתקדמות.
  7. לוחצים על הפעלת negative caching.
  8. לוחצים על הוספה של מדיניות שלילית בנושא שמירת נתונים במטמון.
    1. מזינים קוד סטטוס של HTTP.
    2. בוחרים אורך חיים (TTL) של מטמון.
  9. לוחצים על עדכון.
  10. לוחצים שוב על עדכון.

gcloud

למאגרי backend, משתמשים בפקודה gcloud compute backend-buckets create או gcloud compute backend-buckets update עם הדגל --negative-caching.

בשירותים לקצה העורפי, משתמשים בפקודה gcloud compute backend-services create או gcloud compute backend-services update עם הדגל --negative-caching.

gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME
    --negative-caching
gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME
    --negative-caching

כדי להפעיל negative caching של שתי תשובות שגיאה ספציפיות בלבד, למשל, מגדירים שתשובות עם קוד סטטוס 404 יישמרו במטמון למשך 60 שניות, ותשובות עם קוד סטטוס 405 יישמרו במטמון למשך 120 שניות.

gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --negative-caching \
    --cache-mode=CACHE_ALL_STATIC \
    --default-ttl=86400 \
    --negative-caching-policy='404=60,405=120'

api

כדי להשתמש בקטגוריות של שרתים עורפיים, צריך להשתמש בקריאה ל-API של Method: backendBuckets.insert או Method: backendBuckets.update.

בשירותי קצה עורפי, משתמשים ב-Method: backendServices.insert או ב-Method: backendServices.update כדי לבצע קריאה ל-API.

משתמשים באחת מהקריאות הבאות ל-API:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE

מוסיפים את הקטע הבא לגוף בקשת ה-JSON:

"cdnPolicy": {
  "negativeCaching": ON,
  "negativeCachingPolicy": [
    {
      "code": STATUS_CODE,
      "ttl": TTL_SECONDS
    }
  ]
}

כדי להגדיר את ההגדרות של negativeCachingPolicy, צריך להפעיל את האפשרות 'שמירת נתונים במטמון של תשובות שליליות'. אם לא מציינים את המדיניות והאפשרות negativeCaching מופעלת, Cloud CDN משתמש בערכי ברירת המחדל שמופיעים במאמר קודי סטטוס וערכי TTL של ברירת מחדל.

כשמציינים מדיניות שלילית של שמירת נתונים במטמון, חשוב לציין זמן TTL של מטמון עבור כל קודי התגובה שרוצים לשמור במטמון. אם קיימת מדיניות, Cloud CDN לא מחיל שום negative caching שמוגדר כברירת מחדל.

אפשר לציין את קודי המצב הבאים של HTTP עבור STATUS_CODE:

  • 300, 301, 302, 307, 308
  • 404, 405, 410, 421, 451
  • 501

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

הערך המקסימלי המותר הוא 1,800 שניות (30 דקות). עם זאת, יכול להיות שאובייקטים שלא ניגשים אליהם לעיתים קרובות יוסרו מהמטמון לפני תפוגת ה-TTL שהוגדרה.

כשמצב המטמון מוגדר ל-CACHE_ALL_STATIC או ל-USE_ORIGIN_HEADERS, המטמון השלילי חל על תגובות עם קודי סטטוס ספציפיים של HTTP, כמו 302,‏ 404 או 501. משך הזמן שבו התשובות השליליות האלה נשמרות במטמון נקבע לפי כלל העדיפות הבא:

  • אם התגובה השלילית מהמקור כוללת כותרות תגובה מפורשות מסוג Cache-Control או Expires, ‏ Cloud CDN שומר במטמון את התגובה השלילית למשך הזמן שצוין בכותרות האלה.

    לדוגמה, אם השרת המקורי מחזיר 404 Not Found עם הגדרה של Cache-Control: public,max-age=60, קוד הסטטוס 404 נשמר במטמון למשך 60 שניות, והמערכת מתעלמת ממדיניות negative caching עבור הבקשה הספציפית הזו.

  • אם התשובה השלילית מהמקור לא כוללת כותרות Cache-Control או Expires, ‏ Cloud CDN מחיל את ערכי ה-TTL של מדיניות ה-negative caching שהוגדרו. לדוגמה, אם השרת המקורי מחזיר 404 Not Found ללא כותרות של שמירת נתונים במטמון, התגובה נשמרת במטמון למשך הזמן שצוין ב-TTL של cdnPolicy.negativeCachingPolicy עבור 404 status code.

כאשר מצב המטמון מוגדר ל-FORCE_CACHE_ALL, negative caching מבטל את כל כותרות המטמון שהוגדרו על ידי המקור. ‫Cloud CDN שומר במטמון את התגובה למשך הזמן שצוין ב-TTL, או לא שומר אותה במטמון אם לא הוגדר TTL.

בנוסף, כשמצב מטמון מוגדר ל-FORCE_CACHE_ALL, ‏ Cloud CDN משנה גם את max-age שנשלח ללקוח בכותרת Cache-Control. בפרט, אם לשגיאה מסוימת יש הגדרת TTL,‏ Cloud CDN מתייחס לערך ה-TTL הנמוך ולהגדרה ושולח כותרת client_ttl עם הערך הזה.Cache-Control: public,max-age=N אם לשגיאה מסוימת לא מוגדר TTL,‏ Cloud CDN מסיר את הכותרת Cache-Control שנשלחת מהמקור. רשת Cloud CDN תמיד מסירה גם את הכותרת Expires שנשלחת על ידי המקור.

אם מקור מסוים הפעיל בתחילה negative caching אבל אחר כך השבית אותה (באופן ידני או על ידי השבתת השמירה במטמון של קוד תגובה מסוים), תגובות שגיאה שנשמרו במטמון ייחשבו כתקפות על סמך הכותרות Cache-Control או Expires בלבד. לכן, אחרי שמשביתים את negative caching, תגובה ללא הנחיות לגבי משך השמירה במטמון בכותרות שלה לא מוצגת מהמטמון.

מערכת Cloud CDN שומרת במטמון בתגובה לבקשות GET. מידע נוסף זמין במאמר בנושא תוכן שניתן לשמור במטמון.

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

השבתת negative caching

המסוף

  1. נכנסים לדף Load Balancing במסוף Google Cloud .

    לדף Load balancing

  2. לוחצים על השם של מאזן העומסים החיצוני של האפליקציות.
  3. לוחצים על Edit.
  4. בקטע Backend configuration, בוחרים קצה עורפי ולוחצים על Edit (עריכה) .
  5. מוודאים שהאפשרות Enable Cloud CDN (הפעלת Cloud CDN) מסומנת.
  6. בחלק התחתון של החלון, לוחצים על הגדרות מתקדמות.
  7. מבטלים את הסימון בתיבה שליד הפעלת שמירת מטמון שלילי.
  8. לוחצים על עדכון.
  9. לוחצים שוב על עדכון.

gcloud

למאגרי backend, משתמשים בפקודה gcloud compute backend-buckets create או gcloud compute backend-buckets update עם הדגל --no-negative-caching.

בשירותים לקצה העורפי, משתמשים בפקודה gcloud compute backend-services create או gcloud compute backend-services update עם הדגל --no-negative-caching.

gcloud compute backend-services (create | update) (BACKEND_SERVICE_NAME | BACKEND_BUCKET_NAME)
    --no-negative-caching

api

כדי להשתמש בקטגוריות של שרתים עורפיים, צריך להשתמש בקריאה ל-API של Method: backendBuckets.insert או Method: backendBuckets.update.

בשירותי קצה עורפי, משתמשים ב-Method: backendServices.insert או ב-Method: backendServices.update כדי לבצע קריאה ל-API.

משתמשים באחת מהקריאות הבאות ל-API:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE

מוסיפים את הקטע הבא לגוף בקשת ה-JSON:

"cdnPolicy": {
  "negativeCaching": OFF
}