טיפים לשיפור ביצועי אפליקציות Web באמצעות HTTP Compression של IIS

4 באפריל 2013

תגיות: , , ,
2 תגובות

 

d73354e12779d54e5960f68212488cd1

 

 

 

 

מאת: מרטין שוורצמן

 

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

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

דחיסת HTTP קיימת ב – IIS עוד מגרסאות 5.0, 6.0 וכמובן 7.x ו – 8.0 ומתוארת בתקן HTTP/1.1.

 

מה מכווצים, מתי מפסיקים ומתי חוזרים לכווץ?

ב – IIS 7 ומעלה, דחיסת HTTP באה בשני טעמים ועם כמה אפשרויות חדשות:

  • Static Compression – דחיסה של נתונים סטטיים: IIS מכווץ את הנתונים מהדיסק פעם אחת ושומר את ההעתק המכווץ במטמון (cache), מכאן הוא יכול לשרת מהר יותר את אותו תוכן סטטי מכווץ. התקורה של הדחיסה הסטטית היא מינימלית, כך שמשתלם מאוד שתהיה מופעלת.
  • Dynamic Compression – דחיסה של נתונים דינמיים: בניגוד לתוכן סטטי, תוכן דינמי חייב להיות דחוס בכל פעם מחדש, שכן תוכן הדף המבוקש יכול להשתנות בכל בקשה ובקשה. במקרה הזה, התוכן מכווץ מהזכרון כך שלדחיסה דינמית יש תקורה גדולה יותר על משאבי המערכת פר בקשה.

כברירת המחדל, Static Compression מותקן ומופעל ואילו Dynamic Compression לא.

    HttpCompressionInstallation2

     

     

     

     

     

     

     

     

 

 

 

בימי ה – IIS 6.0 דאגנו שאם שרת ה – Web שלנו יהיה עסוק מאוד מבחינת מעבד, תוספת עבודה של כיווץ נתונים תאט את ביצועי האתר שלנו עוד יותר. ב – IIS 7.x ומעלה נוספו לנו כמה הגדרות כדי לעזור לנו להתמודד עם הסוגיה הזאת:

  • staticCompressionDisableCpuUsage ו – dynamicCompressionDisableCpuUsage: מגדירים את סף אחוז המעבד שמעבר לו, רכיב ה – compression (סטטי או דינמי, בהתאמה) יפסיק לעבוד.
  • staticCompressionEnableCpuUsage ו – dynamicCompressionEnableCpuUsage: מגדירים את סף המעבד שמתחת לו, יחזור רכיב ה – compression לעבוד.

את ההגדרות האלו ניתן לראות ולשנות ב – IIS Manager, ברמת השרת כולו (לא ברמת WebSite כלשהו או אפליקציה כלשהי), בעזרת ה – Configuration Editor

    ConfigEditorIcon2

     

     

     

     

     

     

     

תחת ה – section של system.webServer/httpCompression

    ConfigEditorHttpCompression2

     

     

     

     

     

     

     

     

 

 

 

 

הגדרות ברירת המחדל אומרות שכשניצול המעבד בשרת יגיע ל – 90% רכיב ה – dynamicCompression יפסיק לעבוד, וכשניצול המעבד יגיע ל – 100% רכיב ה – staticCompression יפסיק לעבוד. אלה יחזרו לעבוד רק כאשר ניצול המעבד ירד מתחת ל – 50%.

לא נדיר לראות צריכת שיא (peak usage) של 90% ואף 100% CPU בשרתים, לכן כדאי שההפעלה מחדש של הרכיבים האלו תהיה באחוז ניצול גבוהה יותר.

מה בצד הלקוח?

לא מספיק להתקין ולהפעיל http compression בשרת ה – IIS על מנת שזה יחזיר מצדו תשובה מכווצת ללקוח.

הלקוח (ברוב המקרים, הדפדפן) צריך גם הוא לתמוך ב – http compression.

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

IESettings2

 

 

 

 

 

 

 

המסר הזה בא לידי ביטוי ב – Request Header של Accept-Encoding.

בתוך ה – Request Header הזה, מעביר הדפדפן לשרת את רשימת ערכות הכיווץ (Compression Schemes) בהן הוא תומך. במידה והתשובה שחוזרת מהשרת מכווצת, נראה ב – Response Header בשם Content-Encoding את הערכה בה עשה שימוש השרת (IIS תומך בשתי ערכות הכיווץ: gzip ו – deflate).

ב – Fiddler נוכל לראות את זה בטאב ה – Inspectors, תחת ה – Headers:

    fiddler2

     

     

     

     

     

     

     

     

     

     

     

     

    כאשר ההבדל בין תוכן מכווץ או לא, יכול להגיע גם לעשרות מונים

     fiddler4

     

     

     

    רמות הכיווץ

    ההבדל בגודל התכנים יכול לנבוע לא רק מערכת הכיווץ אלא גם מרמת הכיווץ, אותה ניתן להגדיר בדרגות שונות. הרמה הנמוכה ביותר (0) תיתן לנו קובץ יחסית גדול בתמורה להשקעה מינימלית בזמן מעבד, ואילו הרמה הגבוהה ביותר (10) תיתן לנו את הקובץ הקטן ביותר בתמורה להשקעה מרובה מבחינת זמן מעבד.

    ניתן לקבוע את רמות הכיווץ ל – staticCompression ול – dynamicCompression בנפרד

    הגדרת ברירת המחדל קובעת רמה 0 לתוכן דינמי ורמה 7 לתוכן סטטי. כלל האצבע הלא רשמי אומר שעבור ביצועים מיטביים, כדאי להגדיר את הכיווץ עבור תוכן דינמי ברמה 4, ועבור תוכן סטטי ברמה 9.

    הגדרות אלו נמצאות גם כן ב – Configuration Editor, תחת section ה – system.webServer/httpCompression, עבור כל ערכה שב – collection:

     gzip2

     

     

     

     

     

     

     

     

    לפי מה נקבע מהו תוכן סטטי ומהו תוכן דינמי?

    לעומת IIS 6.0 שבו סוגי התוכן (סטטי או דינמי) נקבעו לפי סיומת הקובץ, ב – IIS 7.x ומעלה סוג התוכן נקבע ע"פ ה – MIME type (Multipurpose Internet Mail Extensions type).

    אם אותו MIME type מטופל ע"י ה – handler של staticContent אז הוא ייחשב תוכן סטטי, ואם הוא טופל קודם לכן ע"י handler אחר הוא ייחשב תוכן דינמי.

    רשימות ה – MIME type לכיווץ נמצאות גם כן תחת ה –Configuration Editor, ב – section ה -system.webServer/httpCompression תחת staticTypes ו – dynamicTypes בהתאמה

     MimeTypes

     

     

     

     

     

     

     

     

     

     

     

     

    דוגמאות ל MIME types נוספים שנרצה להוסיף לרשימת הכיווץ:

    application/json

    application/atom+xml

    application/xaml+xml

    הערה: לא כדאי לשנות את ה – */* (wildcard) ל – Enable כדי ש – IIS לא יבזבז זמן ומשאבים בלנסות לכווץ קבצים שכבר מכווצים בפורמט המקור שלהם, כגון jpeg, mpeg, docx וכד'.

    חשוב: שינויים בהגדרות ה – compression יבואו לידי ביטוי רק לאחר אתחול שרות ה – WWW.

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

     

    מרטין שוורצמן הינו מהנדס בכיר בתחום ה Platforms בקבוצת Premier Field Engineer של מיקרוסופט בישראל. מתמחה באוטומציה ומערכות אינטרנט מבוססות IIS.

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *

2 תגובות

  1. שמוליק8 באפריל 2013 ב 2:22

    מרטין, מאמר מעניין (כרגיל). מה קורה עם אתרים מבוססי Silverlight? האם ה-compression אפקטיבי כאן ואם כן, איזה?

    הגב
  2. Thoushmum21 באפריל 2013 ב 0:44

    Главная героиня фильма Любовь с препятствиями – Шарлотта уже привыкла быть одна. Все тяготы жизни молодая женщина выносит стоически. Она в одиночку воспитывает троих детей. Бывшие мужья Шарлотты не очень- то утруждаются помощью своим детям, и она безропотно взваливает на себя все хлопоты. Мечты о головокружительной карьере и финансовом благополучии рискуют остаться мечтами. Все время Шарлотты уходит на воспитание и заботу о своих чадах.

    הגב