בדף הזה מוסבר איך להשתמש ב-negative caching עם Cloud CDN. Negative caching מאפשר להגדיר זמן חיים (TTL) שונה לכל קוד סטטוס.
הסיבה לכך היא כדי להחיל שליטה מדויקת על שמירת נתונים במטמון עבור שגיאות נפוצות או הפניות אוטומטיות. כך אפשר להפחית את העומס על מקורות התוכן ולשפר את חוויית המשתמש על ידי הפחתת זמן האחזור של התגובה.
לפני שמתחילים
מוודאים ש-Cloud CDN מופעל. הוראות מפורטות זמינות במאמר שימוש ב-Cloud CDN.
אם צריך, מעדכנים לגרסה האחרונה של Google Cloud CLI:
gcloud components update
קודי סטטוס וערכי TTL שמוגדרים כברירת מחדל
negative caching חלה על קודי סטטוס ספציפיים, שמפורטים בטבלה הבאה.
Cloud CDN מחיל את ערכי ה-TTL הבאים כברירת מחדל על קודי הסטטוס האלה:
| קוד מצב | משמעות | TTL |
|---|---|---|
| HTTP 300 | שאלות אמריקאיות | 10 דקות |
| HTTP 301 ו-308 | הפניות קבועות | 10 דקות |
| HTTP 302 ו-307 | הפניות זמניות | לא נשמר במטמון כברירת מחדל |
| HTTP 404 | הקובץ לא נמצא | 120 שניות |
| HTTP 405 | השיטה לא נמצאה | 60 שניות |
| HTTP 410 | נעלם | 120 שניות |
| HTTP 451 | לא זמין מסיבות משפטיות | 120 שניות |
| HTTP 501 | לא בוצע יישום | 60 שניות |
אפשר לשנות את ערכי ברירת המחדל האלה באמצעות שמירת נתונים במטמון שלילי כדי להגדיר TTL של מטמון לקוד סטטוס HTTP שצוין.
הגדרת negative caching
שמירת נתונים במטמון של תשובות שליליות מאפשרת לכם להגדיר את השירות כך שישמור במטמון גם תשובות שליליות וגם תשובות חיוביות. כך Cloud CDN יכול להגן על מקורות מפני בקשות שיוצרות שגיאות (כמו 404 Not Found) באותו אופן שבו הוא מגן על מקורות מפני בקשות שיוצרות תגובות מוצלחות.
המסוף
- נכנסים לדף Load Balancing במסוף Google Cloud .
- לוחצים על השם של מאזן העומסים החיצוני של האפליקציות.
- לוחצים על Edit .
- בקטע Backend configuration, בוחרים קצה עורפי ולוחצים על Edit (עריכה) .
- מוודאים שהאפשרות Enable Cloud CDN (הפעלת Cloud CDN) מסומנת.
- בחלק התחתון של החלון, לוחצים על הגדרות מתקדמות.
- לוחצים על הפעלת negative caching.
- לוחצים על הוספה של מדיניות negative caching.
- מזינים קוד סטטוס של HTTP.
- בוחרים אורך חיים (TTL) של מטמון.
- לוחצים על עדכון.
- לוחצים שוב על עדכון.
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
כדי להפעיל שמירה במטמון של תשובות שליליות רק לשתי תשובות שגיאה ספציפיות, למשל, מגדירים שתשובות עם קוד סטטוס 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.
בשירותי קצה עורפי, משתמשים בקריאת API של Method: backendServices.insert או Method: backendServices.update.
משתמשים באחת מהקריאות הבאות ל-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, צריך להפעיל את האפשרות 'negative caching'. אם לא מציינים את המדיניות והאפשרות negativeCaching מופעלת, Cloud CDN משתמש בערכי ברירת המחדל שמפורטים במאמר קודי סטטוס וערכי TTL כברירת מחדל.
כשמציינים negative caching, חשוב לציין TTL של שמירה במטמון עבור כל קודי התגובה שרוצים לשמור במטמון. אם קיימת מדיניות, Cloud CDN לא מחיל שום negative caching שמוגדר כברירת מחדל.
אפשר לציין את קודי הסטטוס הבאים של HTTP עבור STATUS_CODE:
300,301,302,307,308404,405,410,421,451501
לכל קוד סטטוס אפשר לציין את מספר השניות שבהן התשובות יישמרו במטמון. כדי להשבית את negative caching עבור קוד הסטטוס, צריך להחריג את הקוד ממדיניות negative caching.
הערך המקסימלי המותר הוא 1,800 שניות (30 דקות). עם זאת, יכול להיות שאובייקטים שלא ניגשים אליהם לעיתים קרובות יוסרו מהמטמון לפני תפוגת ה-TTL שהוגדרה.
כשמצב המטמון מוגדר ל-CACHE_ALL_STATIC או ל-USE_ORIGIN_HEADERS, נעשה שימוש ב-negative caching בתגובות עם קודי סטטוס ספציפיים של 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ללא כותרות של שמירת נתונים במטמון, התגובה נשמרת במטמון למשך הזמן שצוין ב-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 הנמוך ולהגדרה ושולח כותרת Cache-Control: public,max-age=N עם הערך הזה.client_ttl אם לשגיאה מסוימת לא מוגדר TTL, Cloud CDN מסיר את הכותרת Cache-Control שנשלחת מהמקור. רשת Cloud CDN תמיד מסירה גם את הכותרת Expires שנשלחת על ידי המקור.
אם במקור הופעל negative caching אבל אחר כך הוא הושבת (באופן ידני או על ידי השבתת שמירה במטמון עבור קוד תגובה מסוים), תגובות שגיאה שנשמרו במטמון נחשבות לתקפות רק על סמך הכותרות Cache-Control או Expires שלהן. לכן, אחרי ש-negative caching מושבת, תגובה ללא הנחיות לגבי גיל השמירה במטמון בכותרות שלה לא מוצגת מהמטמון.
Cloud CDN שומר במטמון בתגובה לבקשות GET. מידע נוסף זמין במאמר בנושא תוכן שאפשר לשמור במטמון.
כל רשומה במטמון מזוהה באמצעות מפתח מטמון.
השבתה של negative caching
המסוף
- נכנסים לדף Load Balancing במסוף Google Cloud .
- לוחצים על השם של מאזן העומסים החיצוני של האפליקציות.
- לוחצים על Edit .
- בקטע Backend configuration, בוחרים קצה עורפי ולוחצים על Edit (עריכה) .
- מוודאים שהאפשרות Enable Cloud CDN (הפעלת Cloud CDN) מסומנת.
- בחלק התחתון של החלון, לוחצים על הגדרות מתקדמות.
- מבטלים את הסימון בתיבת הסימון לצד הפעלת negative caching.
- לוחצים על עדכון.
- לוחצים שוב על עדכון.
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.
עבור שירותי קצה עורפי, השתמשו בקריאה ל-API של Method: backendServices.insert או Method: backendServices.update.
משתמשים באחת מהקריאות הבאות ל-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
}