1. ספרייה
  2. HTTP והרשת
  3. ארכיטקטורת ווב

עודכן לפני חודש

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

זה נשמע פשוט. זה לא.

מהירות האור היא הבעיה

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

קליפורניה לטוקיו: 100-200 מילישניות הלוך ושוב, לפחות. וזה לפני שהשרת מעבד בכלל משהו. דף עם חמישים משאבים, כל אחד דורש נסיעה הלוך ושוב? כמה שניות, בקלות.

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

איך זה באמת עובד

אתה מגדיר את האתר שלך כך שבקשות לתוכן יגיעו ל-CDN במקום לשרת שלך. ה-HTML שלך מפנה ל-cdn.example.com/image.jpg במקום www.example.com/image.jpg.

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

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

אם השרת לא מחזיק אותה — cache miss — הוא מביא מהשרת המקורי שלך, שומר את התגובה ב-cache, ומעביר אותה למשתמש. הבקשה הבאה מאותו אזור פוגעת ב-cache.

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

הימור ה-Cache

כל הגדרת cache היא פשרה בין מהירות לעדכניות.

קבע TTL ארוך (time-to-live), והשרת המקורי שלך כמעט לא נגע. התוכן עף משרתי ה-edge בכל העולם. אבל אם תעדכן את הלוגו שלך, המשתמשים יראו את הישן עד שה-cache יפוג.

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

כותרות HTTP שולטות בהימור הזה. Cache-Control: max-age=86400 אומר "שמור את זה ב-cache למשך 24 שעות." ה-CDN מציית. אם תשנה את התוכן אחרי שעה אחת, עשרים ושלוש שעות של משתמשים יראו נתונים ישנים.

לכן ביטול ה-cache הוא אחת משתי הבעיות הקשות במדעי המחשב (השנייה היא מתן שמות לדברים). כשתוכן משתנה לפני שה-TTL שלו פג, אתה צריך למחוק אותו באופן פעיל מכל שרת edge בכל העולם. רוב ה-CDN מספקים API לכך. חלקם תומכים במחיקה מבוססת תגיות — תייג תוכן קשור, מחק את כל הפריטים עם אותה תגית בבת אחת.

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

מה מתאים לאחסון ב-Cache

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

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

למה זה חשוב

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

הקלה על השרת המקורי אומרת שהשרתים שלך מטפלים רק ב-cache misses ובבקשות דינמיות אמיתיות. ה-CDN סופג את רוב התנועה. אתה משרת יותר משתמשים עם פחות תשתית.

אמינות משתפרת כי תוכן קיים במקומות רבים. שרת edge אחד נכשל? בקשות מנותבות למקום אחר. השרת המקורי שלך נופל? ה-CDN ממשיך להגיש תוכן ב-cache — האתר שלך נשאר פעיל חלקית.

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

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

הסיבוכים

ניפוי שגיאות נעשה קשה יותר. האם תגובה זו שמורה ב-cache או טרייה? איזה שרת edge הגיש אותה? למה משתמש זה רואה תוכן ישן? Cache מוסיף שכבת עקיפה שיכולה להסתיר בעיות.

הגדרות חשובות. Cache מוגדר שגוי מגיש תוכן ישן למשתמשים או לא שומר כלל ב-cache. הבנת התנהגות ה-cache דורשת מאמץ.

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

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

Cache poisoning הוא דאגת אבטחה — תוקף מרמה את ה-CDN לשמור תוכן זדוני ב-cache המוגש למשתמשים אחרים. הגדרה נכונה וכותרות אבטחה מפחיתות זאת.

מעבר ל-Cache

CDN מודרניים עושים יותר מסתם להחזיק קבצים סטטיים.

עיבוד edge מריץ קוד במיקומי edge. התאם אישית תוכן קרוב למשתמשים. אמת ב-edge. הטמע לוגיקת ניתוב מבלי לגעת בשרתי המקור.

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

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

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

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

בחירת ספק

Cloudflare מציע רמה חינמית נדיבה עם CDN, הגנת DDoS ו-WAF. פופולרי באתרים קטנים וסטארטאפים.

Amazon CloudFront משתלב היטב עם AWS. תמחור לפי שימוש. בחירה טבעית אם אתה כבר ב-AWS.

Fastly מדגיש מסירה בזמן אמת וניקוי מיידי. פופולרי בחברות מדיה הזקוקות לביטול cache תכוף.

Akamai הוא אחד ה-CDN הוותיקים והגדולים ביותר. ממוקד בארגונים, תכונות מקיפות, תמחור פרימיום.

Bunny CDN מציע תמחור פשוט וחסכוני. פופולרי בקרב מפתחים המודעים לעלויות.

Google Cloud CDN ו-Azure CDN משתלבים עם פלטפורמות הענן שלהם בהתאמה.

התובנה המרכזית

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

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

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

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

האם דף זה היה מועיל?

😔
🤨
😃