הפעלת דחיסה דינמית

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

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

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

מידע נוסף על היתרונות של דחיסת תשובות זמין במדריך Web Fundamentals.

איך פועלת דחיסה דינמית

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

‫Media CDN מוסיף כותרת Vary: Accept-Encoding לכל התגובות שעומדות בדרישות לדחיסה. מידע נוסף בנושא זמין במאמר תוכן שלא ניתן לדחיסה.

בנוסף, אם הכותרת Accept-Encoding של הבקשה מציינת העדפה לתוכן דחוס על ידי ציון br או gzip (ואופציונלית כוללת פרמטר q שאינו אפס), Media CDN מבצע את הפעולות הבאות:

  • הכותרת Content-Length מוסרת מהתגובה. הפעולה הזו נדרשת כדי שהתגובה תוצג במהירות האפשרית, כי אורך התוכן המלא לא ידוע עד שכל התגובה נדחסת. ב-HTTP/1.1 ובגרסאות קודמות, Media CDN משתמש ב-Transfer-Encoding: chunked בתגובה כשהוא לא משתמש ב-Content-Length.

    אחרי שתגובה נדחסת ונשמרת במטמון, Media CDN יכול לכלול את הכותרת Content-Length בתגובות הבאות ולהגדיר את הערך לאורך של תוכן הגוף הדחוס.

  • ההגדרה של Accept-Ranges היא none. ההודעה הזו מודיעה ללקוחות שהמערכת מתעלמת מבקשות טווח למשאב הזה.

  • מחליש כותרות תגובה חזקות של ETag, כנדרש לפי RFC 9110 סעיף 8.8.3. לדוגמה, מחליפים את ETag: "xyzzy" ב-ETag: W/"xyzzy".

  • מגדיר את הכותרת Content-Encoding לערך br או gzip, שמציין את אלגוריתם הדחיסה שנבחר.

    ‫Media CDN בוחר את אלגוריתם הדחיסה הטוב ביותר על סמך יחס הדחיסה הצפוי של התגובה ומהירות הדחיסה או קצב העברת הנתונים.

    • אם הלקוח תומך בדחיסת Brotli, המערכת תשתמש בה, גם אם אלגוריתמים אחרים לדחיסה מקבלים ערכים גבוהים יותר של q בכותרת Accept-Encoding.

    • מניפסטים של HLS נדחסים באמצעות gzip בלבד.

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

הגדרת דחיסה דינמית

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

לפני שמתחילים

צריך לבצע את הפעולות הבאות:

הפעלת דחיסה דינמית לכלל ניתוב

כברירת מחדל, מצב הדחיסה של כלל ניתוב מושבת.

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

כדי להפעיל דחיסה דינמית:

המסוף

  1. נכנסים לדף Media CDN במסוף Google Cloud .

    מעבר אל Media CDN

  2. כדי לפתוח את הדף פרטים של השירות שרוצים להגדיר עבורו כלל ניתוב, לוחצים על שם השירות.

  3. כדי לעבור למצב עריכה, לוחצים על הלחצן עריכה.

  4. כדי לעבור לקטע ניתוב, לוחצים על הבא.

  5. כדי לערוך כלל מארח, לוחצים על החץ כדי להרחיב אותו.

  6. כדי לערוך כלל ניתוב, לוחצים על עריכה בשורה הרלוונטית.

  7. בחלונית עריכת כלל ניתוב, לוחצים על הגדרות מתקדמות.

  8. אופציונלי: בפעולת ניתוב, מוסיפים פריט מדיניות CDN.

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

  9. בקטע Dynamic compression, בוחרים באפשרות Enable compression.

  10. כדי לשמור את כלל הניתוב, לוחצים על שמירה.

  11. כדי לשמור את השינויים בשירות, לוחצים על עדכון השירות.

‫gcloud ו-YAML

  1. מייצאים את ההגדרה של Media CDN לקובץ YAML. משתמשים בפקודה gcloud edge-cache services export.

    gcloud edge-cache services export SERVICE_NAME \
        --destination=FILENAME.yaml
    

    מחליפים את מה שכתוב בשדות הבאים:

    • SERVICE_NAME: השם של השירות
    • FILENAME : השם של קובץ ה-YAML
  2. בהגדרת המסלול בקובץ ה-YAML, בקטע routeAction, מגדירים את compressionMode ל-AUTOMATIC, כמו בדוגמה הבאה:

    routing:
    hostRules:
    - hosts:
      - media.example.com
      pathMatcher: routes
    pathMatchers:
    - name: routes
      routeRules:
        - priority: 2
    origin: origin1
    matchRules:
    - pathTemplateMatch: "/**.m3u8" # HLS playlists
    - pathTemplateMatch: "/**.mpd" # DASH manifests
    routeAction:
      cdnPolicy:
        defaultTtl: 5s
      compressionMode: AUTOMATIC
    
  3. כדי לעדכן את השירות, מייבאים את ההגדרה של Media CDN מקובץ ה-YAML. משתמשים בפקודה gcloud edge-cache services import.

    gcloud edge-cache services import SERVICE_NAME \
        --source=FILENAME.yaml
    

Terraform

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

route_rule {
  description = "a route rule with dynamic compression, priority=2 (high)"
  priority    = 2
  match_rule {
    path_template_match = "/**.m3u8" # HLS playlists
  }
  match_rule {
    path_template_match = "/**.mpd" # DASH manifests
  }
  origin = google_network_services_edge_cache_origin.default.name
  route_action {
    cdn_policy {
      cache_mode = "FORCE_CACHE_ALL"
      client_ttl = "300s"
    }
    compression_mode = "AUTOMATIC"
  }
  header_action {
    response_header_to_add {
      header_name  = "x-cache-status"
      header_value = "{cdn_cache_status}"
    }
  }
}

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

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

השבתת דחיסה דינמית לכלל ניתוב

כדי להשבית דחיסה דינמית:

המסוף

  1. נכנסים לדף Media CDN במסוף Google Cloud .

    מעבר אל Media CDN

  2. כדי לפתוח את הדף פרטים של השירות שרוצים להגדיר עבורו את כלל הניתוב, לוחצים על שם השירות.

  3. כדי לעבור למצב עריכה, לוחצים על הלחצן עריכה.

  4. כדי לעבור לקטע ניתוב, לוחצים על הבא.

  5. כדי לערוך כלל מארח, לוחצים על החץ כדי להרחיב אותו.

  6. כדי לערוך כלל ניתוב, לוחצים על עריכה בשורה הרלוונטית.

  7. בחלונית עריכת כלל ניתוב, לוחצים על הגדרות מתקדמות.

  8. בקטע Dynamic compression (דחיסה דינמית), מבטלים את הסימון של Enable compression (הפעלת דחיסה).

  9. כדי לשמור את כלל הניתוב, לוחצים על שמירה.

  10. כדי לשמור את השינויים בשירות, לוחצים על עדכון השירות.

‫gcloud ו-YAML

  1. מייצאים את ההגדרה של Media CDN לקובץ YAML. משתמשים בפקודה gcloud edge-cache services export.

    gcloud edge-cache services export SERVICE_NAME \
        --destination=FILENAME.yaml
    

    מחליפים את מה שכתוב בשדות הבאים:

    • SERVICE_NAME: השם של השירות
    • FILENAME : השם של קובץ ה-YAML
  2. בהגדרת המסלול בקובץ ה-YAML, מגדירים את compressionMode לערך DISABLED.

  3. כדי לעדכן את השירות, מייבאים את ההגדרה של Media CDN מקובץ ה-YAML. משתמשים בפקודה gcloud edge-cache services import.

    gcloud edge-cache services import SERVICE_NAME \
        --source=FILENAME.yaml
    

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

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

סוגי תוכן שניתן לדחוס

דחיסה דינמית חלה על סוגי ה-MIME הבאים, על סמך כותרת תגובת ה-HTTP‏ Content-Type. תשובות שלא כוללות כותרת Content-Type לא נדחסות.

סוגי תוכן נפוצים וסוגי ה-MIME שלהם:

  • תוכן HTML: ‏ text/html
  • גיליונות סגנונות: text/css
  • ‫JavaScript: application/javascript
  • ‫JSON: application/json
  • פלייליסטים בפורמט HLS: ‏ application/x-mpegURL או application/vnd.apple.mpegURL
  • מניפסטים של DASH: application/dash+xml

בטבלה הבאה מוסבר איך סוג ה-MIME משפיע על יכולת הדחיסה.

  סוגי MIME שניתן לדחוס
התאמה מדויקת application/csv
application/javascript
application/json
application/json+protobuf
application/signed-exchange
application/wasm
application/x-javascript
application/x-nacl
application/x-plist
application/x-pnacl
application/x-protobuf
application/x-protobuffer
application/x-sdch-dictionary
application/xml
audio/mpegURL
font/eot
font/otf
font/ttf
image/pwg-raster
image/svg+xml
image/vnd.microsoft.icon
image/x-icon
video/vnd.mpeg.dash.mpd
התאמת דפוסים application/*+json
application/*+xml
application/*mpegURL
text/*

פורמטים של תמונות וסרטונים (כמו image/jpeg,‏ image/png ו-video/mpeg4) כמעט תמיד כבר דחוסים. לכן, Media CDN לא דוחס אותם. דחיסה מחדש של תגובה שכבר נדחסה בדרך כלל לא מקטינה את גודל הקובץ, והלקוחות עשויים להציג התנהגות לא צפויה כשהם מקבלים תגובה מהסוג הזה.

תשובות שלא ניתן לדחוס

‫Media CDN לא דוחס תגובה שיש לה מאפיין אחד או יותר מהמאפיינים הבאים:

  • בתגובה אין כותרת Content-Type שתואמת לסוג תוכן שניתן לדחיסה.
  • בתשובה חסרה כותרת Content-Length.
  • בתשובה יש כותרת Content-Encoding. המשמעות היא שהמקור כבר דחס את התגובה. לכן, ב-Media CDN אסור לבצע דחיסה דינמית נוספת.
  • התשובה קטנה מ-1 KiB.

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

  • התשובה גדולה מ-1MiB.

    ‫Media CDN דוחס תגובות עד לגודל שמותר לאחסון במטמון של אובייקטים ללא אחסון במטמון של טווח בייטים.

  • בתשובה יש כותרת Cache-Control: no-transform.

רישום ביומן ומעקב

כשהדחיסה מופעלת, המדד הקיים https/response_bytes_count בדוח edgecache.googleapis.com/EdgeCacheRouteRule מציג את גודל התגובה הדחוסה. אפשר לצפות לירידה במספר הכולל של בייטים בתשובה ובקצב העברת הנתונים היוצאים עבור תוכן שניתן לדחיסה.

היומנים של Media CDN כוללים את השדה compressionAlgorithmApplied ב-jsonPayload, שמציין אם מאזן העומסים דחס את התגובה וגם את סוג הדחיסה.

{
  insertId: "1c02hw9g3gjay67"
  jsonPayload: {
    @type: "type.googleapis.com/google.cloud.edgecache.v1.EdgeCacheLogEntry",
    cacheId: "IAD-862d661f",
    cacheStatus": "hit,stale",
    compressionAlgorithmApplied: "br"
  },
}

חיוב

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

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

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