בדף הזה מוסבר איך להציג תוכן לא עדכני שתוקף השימוש בו פג באמצעות Cloud CDN. הצגת תוכן לא עדכני מאפשרת למטמון הגלובלי של Google להמשיך להציג תוכן כשאי אפשר להגיע לשרת המקור או כשהוא מחזיר שגיאות ל-Cloud CDN.
הסיבות לכך הן:
- אתם מעדיפים להציג למשתמשים תוכן מיושן (stale) במקום להחזיר להם שגיאות.
- הצגת תוכן מיושן (stale) מאפשרת להימנע מהשהיה כשהמטמון מקבל בקשה לתוכן שתוקפו פג. במקום להמתין לאימות מחדש סינכרוני לשרת העורפי, המטמון מציג את התוכן המיושן שפג תוקפו, ובו-זמנית מפעיל אימות מחדש נפרד.
Cloud CDN מציע את שתי השיטות הבאות כדי לקבוע כמה זמן אפשר להציג אובייקט לא עדכני בזמן שבקשת אימות מחדש נשלחת למקור:
במקור: אפשר לציין את ההנחיה
Cache-Control: stale-while-revalidateבכותרת התגובה. Cloud CDN פועל לפי ההנחיה הזו ומציג את התוכן המיושן למשך מספר השניות שצוין אחרי מועד התפוגה של רשומת המטמון. במהלך התקופה הזו, Cloud CDN שולח באופן אסינכרוני בקשה למקור כדי לאמת מחדש ולרענן את התוכן.באמצעות המדיניות: זו הגדרת תצורה של Cloud CDN שמכתיבה משך זמן מקסימלי, אחרי שתוקף התגובה פג, שבמהלכו Cloud CDN יכול להמשיך להציג גרסה לא עדכנית. ההגדרה מתבצעת באמצעות האפשרות
serve-while-stale. אם ההנחיהstale-while-revalidateלא מופיעה בתשובה, נעשה שימוש בהגדרה הזו. אם לא מציינים ערך, המערכת משתמשת בערך ברירת המחדל,86400s(יום אחד).
Cloud CDN לא תומך בהנחיה stale-if-error. ההוראה הזו מורה למטמון להימנע מהצגת תוכן מיושן (stale), אלא אם אימות מחדש סינכרוני עם שרת המקור נכשל עם קודי סטטוס שגיאה מסוימים.
ערכי ברירת המחדל, המינימום והמקסימום הם:
- ברירת מחדל: 86,400 שניות (יום אחד)
- מינימום: 0 שניות (התכונה מושבתת)
- מקסימום: 604,800 שניות (שבוע אחד)
תוכן ישן מוצג עד למגבלה שצוינה אחרי מועד התפוגה של רשומת המטמון, שמוגדר על ידי הכותרות max-age, s-maxage או Expires. מידע נוסף זמין במאמר בנושא תוקף ואימות של בקשות.
אם במטמון הקצה של Cloud CDN אין עותק שנשמר במטמון של האובייקט כדי להציג נתונים לא עדכניים, או שהאובייקט הגיע לערך המקסימלי של TTL של נתונים לא עדכניים, Cloud CDN מבצע אימות מחדש של התוכן באופן סינכרוני עם המקור. אם המקור מחזיר שגיאה באותו זמן, Cloud CDN מחזיר את השגיאה של המקור.
רישום ביומן וסוכן משתמש
הבקשות האסינכרוניות ששולח Cloud CDN לשרת המקור נראות בדיוק כמו בקשות רגילות לאימות מחדש שמתרחשות כשלא מוצג תוכן מיושן (stale). החריג הוא שהם מתויגים בכותרת User-Agent שמכילה Cloud-CDN-Google.
בקשות אסינכרוניות נרשמות בנפרד ב-Cloud Logging, כך שבקשת משתמש שמוצג לה תוכן לא עדכני יוצרת שתי רשומות ביומן: הראשונה היא לגבי התוכן שמוצג למשתמש, והשנייה היא לגבי בקשת האימות מחדש למקור. בדומה לאימותים מחדש סינכרוניים, יכול להיות שבנסיבות מסוימות Cloud CDN ישלח בקשה מותנית, או פשוט ישלח מחדש בקשה לתוכן ללא תנאי. בכל מקרה, קוד התגובה שנרשם ב-Cloud Logging תואם לבקשה המקורית ל-Cloud CDN. לדוגמה, 200 OK לבקשה ללא תנאי, או 304 Not Modified אם התגובה המקורית של המשתמש הייתה מותנית.
הנחיית בקשה של לקוח max-stale
לקוחות יכולים לבקש זמן שירות קצר יותר של נתונים לא עדכניים על ידי ציון הנחיית max-stale cache-control. אם מציינים את ההנחיה הזו, היא קובעת את מידת הטריות שהלקוח יכול לסבול.
אם התוכן שנשמר במטמון ישן יותר מהערך של max-stale של הלקוח, Cloud CDN מאמת מחדש את התוכן לפני שהוא מציג אותו.
הלקוח לא יכול לבקש ערך max-stale שגדול מהערך שהוגדר באמצעות אפשרות ההגדרה serve-while-stale וההנחיה stale-while-revalidate cache-control מהמקור.
לפני שמתחילים
מוודאים ש-Cloud CDN מופעל. הוראות מפורטות זמינות במאמר שימוש ב-Cloud CDN.
אם צריך, מעדכנים לגרסה האחרונה של Google Cloud CLI:
gcloud components update
הצגת תוכן מיושן בזמן אימות מחדש
המסוף
- נכנסים לדף Load balancing במסוף Google Cloud .
- לוחצים על השם של מאזן העומסים החיצוני של האפליקציות.
- לוחצים על עריכה.
- בקטע Backend configuration, בוחרים קצה עורפי ולוחצים על Edit.
- מוודאים שהאפשרות Enable Cloud CDN (הפעלת Cloud CDN) מסומנת.
- בחלק התחתון של החלון, לוחצים על הגדרות מתקדמות.
- בקטע Additional CDN options (אפשרויות נוספות של CDN), בוחרים אחת מהאפשרויות הבאות עבור Serve while stale (הצגה בזמן שהנתונים לא עדכניים):
- דקה אחת
- 5 דקות
- 10 דקות
- 30 דקות
- יום אחד (מומלץ)
- 7 ימים
- לוחצים על עדכון.
- לוחצים שוב על עדכון.
gcloud
בקטגוריות של שרתים עורפיים, משתמשים בפקודה gcloud compute backend-buckets
create או בפקודה gcloud compute backend-buckets
update עם הדגל --serve-while-stale.
בשירותי קצה עורפי, משתמשים בפקודה gcloud compute backend-services
create או בפקודה gcloud compute backend-services
update עם הדגל --serve-while-stale.
gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME
--serve-while-stale=SECONDS
gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME
--serve-while-stale=SECONDS
לדוגמה:
gcloud compute backend-services update my-backend-service
--serve-while-stale=180s
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": {
"serveWhileStale": SECONDS
}
השבתת הצגת תוכן מיושן (stale)
המסוף
- נכנסים לדף Load balancing במסוף Google Cloud .
- לוחצים על השם של מאזן העומסים החיצוני של האפליקציות.
- לוחצים על עריכה.
- בקטע Backend configuration, בוחרים קצה עורפי ולוחצים על Edit.
- מוודאים שהאפשרות Enable Cloud CDN לא נבחרה.
- בחלק התחתון של החלון, לוחצים על הגדרות מתקדמות.
- בקטע אפשרויות נוספות של CDN > הצגה בזמן שהנתונים לא עדכניים, בוחרים באפשרות השבתת ההצגה בזמן שהנתונים לא עדכניים.
- לוחצים על עדכון.
- לוחצים שוב על עדכון.
gcloud
למאגרי מידע עורפיים, משתמשים בפקודה gcloud compute backend-buckets
create או gcloud compute backend-buckets
update עם ערך הדגל --serve-while-stale שמוגדר ל-0.
בשירותי backend, משתמשים בפקודה gcloud compute backend-services
create או בפקודה gcloud compute backend-services
update עם הדגל --serve-while-stale שמוגדר לערך 0.
gcloud compute backend-services (create | update) (BACKEND_SERVICE_NAME | BACKEND_BUCKET_NAME)
--serve-while-stale=0
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": {
"serveWhileStale": 0
}