ביצועי שרת ואחסון

CDN ומטמון קצה: העברת תוכן מהירה יותר עם כללי שמירה בטוחים

מטמון קרוב עוזר כאשר יש בו תגובה נכונה שמותר להשתמש בה שוב.

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

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

עוקבים אחרי בקשה מהמבקר לשרת המקור

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

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

CDN עשוי גם לסיים חיבור TLS, לספק HTTP/2 או HTTP/3, לדחוס או לשנות תמונות. אלה יכולות נפרדות מהתאמות במטמון ולעיתים דורשות הגדרה או מסלול שירות. הן אינן מבטיחות האצה. מבקר הקרוב למקור מהיר או עמוד שתמיד עוקף שמירה עשויים להרוויח מעט משכבה נוספת.

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

מבררים מה נשמר כברירת מחדל

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

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

לדפוסים הבאים דרישות תפעול שונות.

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

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

בונים מפתח שמשקף את התגובה האמיתית

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

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

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

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

מגדירים תוקף מפורש ל-HTML ציבורי

שומרים HTML בקצה רק אחרי שמוודאים שאין בו זהות סשן, פרטי חשבון, tokens פרטיים או פלט אישי אחר. מגבילים נתיבים ושיטות ועוקפים בקשות מאומתות ו-cookies רלוונטיים של סשן. השירות חייב לכבד private ו-no-store; כלל שמחליף אותם מבטל את ההגנה.

לתוכן ציבורי באמת, כותרת הדוגמה מפרידה בין טריות בדפדפן לטריות משותפת.

http
Cache-Control: public, max-age=0, s-maxage=300

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

לפלט אישי רגיש משלבים כותרת מגבילה במקור עם כלל מפורש לעקיפת CDN.

http
Cache-Control: no-store

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

מודדים התאמות עם מכנה ברור

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

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

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

מבטלים תוקף במדויק ופורסים בסדר בטוח

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

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

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

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

מזהים טעויות בין שכבות חופפות

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

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

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

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

מתחילים בהיקף קטן עם דרך חזרה

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

מתעדים כותרות בבקשת GET לכתובת הציבורית האמיתית בסביבה.

bash
curl -sS -D - -o /dev/null https://example.com/news/

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

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

מדריכים קשורים