סקירה כללית על ביטול תוקף של מטמון

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

מהו ניקוי מטמון?

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

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

‫Cloud CDN תומך בשימוש בתגי מטמון ובאמצעי השוואה לביטול תוקף, כמו מארח ונתיב כתובת URL, לבקשות לביטול תוקף.

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

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

יש הגבלה על קצב הבקשות לביטול. אפשר לשלוח עד 500 בקשות לביטול תוקף בדקה. כל בקשת ביטול נכנסת לתוקף תוך כ-10 שניות.

ב-Cloud CDN אין הגבלה על מספר האובייקטים או על הגודל הכולל של כל האובייקטים שבוטלו בכל בקשה.

ביטול תוקף לפי כתובות URL

כל בקשת ביטול תוקף מציינת תבנית נתיב שמזהה את האובייקט או את קבוצת האובייקטים שצריך לבטל את התוקף שלהם. תבנית הנתיב יכולה להיות נתיב ספציפי, כמו /cat.jpg, או תחילית של נתיב, כמו /picture*. הכללים הבאים חלים על דפוסי נתיבים:

  • תבנית הנתיב חייבת להתחיל ב-/.
  • היא לא יכולה לכלול את התווים ? או #.
  • אסור לכלול את התו *, אלא אם הוא התו האחרון.
  • אם נתיב מסתיים ב-*, כל האובייקטים שהנתיבים שלהם מתחילים במחרוזת שלפני * לא יהיו חוקיים יותר. לדוגמה, בנתיב לביטול התוקף /picture*, התחילית היא /picture. כל נתיב אובייקט שמתחיל ב-/picture נפסל, כולל /picture/cat.jpg,‏ /pictures/dog.jpg ו-/picture1.jpg.
  • אם רוצים לבטל את התוקף של כל האובייקטים בספרייה, צריך לכלול את התו / בסוף תבנית הנתיב, למשל /pictures/*.

התבנית של הנתיב מושווית לרכיב הנתיב בכתובת ה-URL, שהוא כל מה שמופיע בין שם המארח לבין התו ? או #, אם הם קיימים.

אם יש לכם כתובות URL שמכילות מחרוזת שאילתה, למשל /images.php?image=fred.png, אתם לא יכולים לבטל באופן סלקטיבי אובייקטים ששונים רק במחרוזת השאילתה. לדוגמה, אם יש לכם שתי תמונות, /images.php?image=fred.png ו-/images.php?image=barney.png, אתם לא יכולים לבטל רק את fred.png. כדי לבטל את התוקף של כל התמונות שמוצגות על ידי images.php, צריך להשתמש ב-/images.php כתבנית הנתיב.

ביטול תוקף של מארח יחיד

ניקוי המטמון מבטל את התוקף של הנתיב לכל שמות המארחים. לדוגמה, אם יש לכם example.com ו-example2.com שמפנים לאותו מאזן עומסים, ואתם מבטלים את התוקף של /images/cat.jpg, גם example.com/images/cat.jpg וגם example2.com/images/cat.jpg לא יהיו תקפים.

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

ביטול תוקף באמצעות תגי מטמון

תגי מטמון (או מפתחות חלופיים) מאפשרים לכם לבטל תוכן על סמך מטא-נתונים שרירותיים.

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

דרישות הפורמט של תגים

  • צריך לספק את התגים בכותרת כרשימה מופרדת בפסיקים

  • המערכת תחתוך רווחים בתחילת התג או בסופו

  • הערכים tag1,tag2 ו-tag1, tag2 תקינים

לדוגמה,

Cache-Tag: release-v1,frontend,js

יש מגבלות על תגי מטמון:

  • הגודל המקסימלי הוא 120 בייט לכל תג
  • הגודל הכולל של שמות התגים לא יכול לחרוג מ-4 KiB‏ (4,096 בייט) לכל אובייקט שנשמר במטמון
  • אסור לחרוג מ-50 תגים לכל אובייקט

אם חורגים ממגבלות התגים האלה, התשובה לא נשמרת במטמון וההחלטה הזו נרשמת ביומן כ-RESPONSE_CACHE_TAG_INVALID ב-LoadBalancerLogEntry.cacheDecision.

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

  • אובייקט מספר 1 שנשמר במטמון עם התגים js, 2020-12-23 ו-prod
  • אובייקט מספר 2 שנשמר במטמון עם התגים css, 2020-11-30 ו-prod
  • אובייקט מספר 3 שנשמר במטמון עם התגים img, 2020-11-30 ו-staging

כשמבקשים לבטל את התוקף של אובייקטים שתואמים ל-tags="prod,2020-11-30", התוקף של כל שלושת האובייקטים שבמטמון מבוטל. המשמעות של הגישה הזו היא שלא צריך לדעת או לציין את כל השילובים האפשריים של תגים כשרוצים לבטל תוקף של אובייקט.

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

  • אובייקט מספר 1 שנשמר במטמון עם כתובת ה-URL‏ https://staging.example.com/img/cat.jpg והתג a
  • אובייקט מספר 2 שנשמר במטמון עם כתובת ה-URL‏ https://example.com/img/cat.jpg והתג a
  • אובייקט מספר 3 שנשמר במטמון עם כתובת ה-URL‏ https://staging.example.com/js/cat.js והתג https://staging.example.com/js/cat.jsa
  • אובייקט מספר 4 שנשמר במטמון עם כתובת ה-URL‏ https://staging.example.com/img/logo.jpg והתג b

כשמבצעים בקשה לביטול תוקף של אובייקטים שבהם המארח הוא staging.example.com, הנתיב הוא /img/* והתג הוא a, רק אובייקט מספר 1 מאבד את התוקף שלו. אובייקטים מס' 2, 3 ו-4 לא תואמים למארח, לנתיב או לתג, בהתאמה.

זמן האחזור של ביטול התוקף

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

שיטות מומלצות

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

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

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

ביטול תוקף עם הפניה לשירותים בין פרויקטים ב-VPC משותף

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

רק חשבונות משתמשים שיש להם תפקידים ב-IAM שמאפשרים להם להגדיר משאבי איזון עומסים בפרויקטים של חזית האתר יכולים להנפיק ביטולי תוקף של מטמון – לדוגמה, התפקיד 'אדמין רשת Compute'‏ (roles/compute.networkAdmin).

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

המאמרים הבאים