שיפור ביצועים במערכת דרופל

שיפור ביצועים במערכת דרופל - Drupal Performance Improvements

24 בספטמבר, 2011

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

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

שיפור ביצועים במערכת דרופל

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

אפיון הביצועים הנדרשים

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

ניתוח תנועה וצריכת המשאבים

כחלק מרשימת הצרכים שיש לקחת בחשבון הם כמות התנועה הצפויה באתר ועומק האינטראקציה עם הגולש. לצרכים אלו ישנה השפעה על רוחב הפס הנדרש -  Bandwidth, מעבד – CPU, זיכרון – Memory, דיסק/אחסנה– Disk/storage .
זמן טעינת האתר מושפע מגורמים אלו ולכן עלינו להתייחס לרוחב הפס (Bandwidth) המוקצה, מספר צפיות דפים על ידי הגולשים (כלל הכניסות), מספר המשתמשים הקוראים בו זמנית (Concurrent read only users/viewers), מספר המשתמשים הכותבים בו זמנית (Concurrent write users) ומהירות התגובה .
 
תצורת המערכת
קביעת תצורת השרת והרכיבים השונים בו היא נושא גדול מאוד בפני עצמו. באופן כללי נוכל לומר שבתצורת LAMP רוחב הסרט משפיע על ביצועי שרת ה WEB- APACHE, המעבד (CPU) מגביל את ביצועי ה PHP,הזיכרון (Memory) ו דיסק/Storage(Disk/Storage) משפיעים על ביצועי מסד הנתונים MySql.
השלב הבא יהא לנטר את ביצועי המערכת ולהסיק היכן נמצאים צוואריי הבקבוק: מעבד, זיכרון, רוחב פס, קלט/פלט. לאחר זיהוי הבעיה יהא אפשר לשנות את תצורת המערכת בהתאם. כיום, כאשר שימוש בתוכנות וירטואליזציה כדוגמת VMWARE נפוצות, הוספת זיכרון, כוח עיבוד (CPU) או דיסק יכול להתבצע בלחיצת עכבר. פקודות שימושיות יהיו top לניטור צריכת מעבד (CPU) וזיכרון, netstat לניטור בעיות רשת.
אורחים נוספים
גורמים נוספים אשר צורכים משאבים הם אורחים בלתי קרואים כגון: Crawlers, Aggregators, spammers. גם מנועי חיפוש (אורחים קרואים ברוב המקרים) אשר סורקים את האתר יכולים לגרום לפגיעה בביצועים, לכן מומלץ לדאוג שקובץ ה robots  robots.txt יופיע בהתקנת המערכת (מגיע עם ההתקנה של דרופל) עם הוראת עיכוב כפי שמופיע בדוגמא הבאה.
 
User-Agent: *
 Crawl-Delay: 10
 Disallow: /archive
 
כאשר 10 הוא מספר השניות בין בקשות דפי ו  Disallow הוא הוראה לא לסרוק אזורים שאין צורך לאנדקסם.
גם קריאות תכופות מדי של RSS Clients או התקפות ספאמרים יכולים להעיק על ביצועי האתר. לדרופל סט כלים ומודולים רחב ביותר המאפשר ניטור ומעקב אחר מקורות המעמיסים את האתר שלא לצורך, ניתוח התנהגות הקריאות, זיהוי מקורות א לגיטימיים ועוד.
רוחב פס
ביצועי שרת ה אפאצ'י Apache מושפעים מרוחב הפס bandwidth ולכן יש להיות מודע לרוחב הפס האמיתי שמוקצה לאתרכם ((available bandwidth. אתם יכולים לשאול את ספק האירוח כמה רוחב פס מוקצה לאתרכם או שאתם יכולים להשתמש בכלי כמו lperf- http://sourceforge.net/projects/iperf/.
המודול mod_rewriteשל Apache נפוץ בהתקנות דרופל. מודול זה יכול לצרוך משאבים אם ההנחיות נמצאות בספריות מקומיות בקבצי htaccess. על מנת לשפר ביצועים כדאי להעביר הנחיות אלה אל קובץ httpd.conf. ניתן גם להגדיר באפאצ'י (Apache) פרמטרים אשר משפיעים על הביצועים ומאפשרים ניהול של יותר connections, כגון MaxSpareServers, ServerLimit, MaxClients.

תמונות או קבצי מדיה הם בדרך כלל הצרכנים הגדולים ביותר של צריכת רוחב הפס. כדאי שבערכת העיצוב drupal theme תהיינה קריאות ישירות לתמונות על מנת לחסוך בזמן עיבוד. הפעלת מנגנון הדחיסה ושימוש ב sprites יכולים לסייע בכמות המידע dataהמועברת ללקוח - client
תצורת PHP
קביעת תצורת ה PHP חשובה לביצועים: על מנת לכוונן את ביצועי ה PHP כדאי להיעזר בכלי אופטימיזציה כגון APC - http://pecl.php.net/package/APC. ניתן לקבל פרטים נוספים ב במאמר הבא - http://phplens.com/lens/php-book/optimizing-debugging-php.php תצורת MySql כוונון ביצועים ב MySql – זהו נושא גדול עם השפעה רבה מאוד על ביצועי האתר. ניתן להיעזר במאמר http://www.highperfmysql.com/
צריכת משאבים על ידי דרופל ותצורת דרופל Drupal configuration
מעבר לשרת WEB ומבני הנתונים (database) יש להתייחס לצריכת המשאבים על ידי דרופל. צריכת הזיכרון וקריאות למבני הנתונים. ניתן להיעזר במודול ה Devel למדוד זמני שאילתות ושימוש בזיכרון.
כמות המודולים שמופעלים באתר משפיעים על הביצועים. על מנת לוודא איזה מודול משפיע יותר, כדאי להעזר במודול devel.
שימוש ב drupal cache– לדרופל ישנו מנגנון יעיל להגשת דפים מתוך זיכרון המטמון של המערכת (cache). ניתן אף להרחיב ולהשתמש במודול boost על מנת לשכלל את המנגנון. ניתן להרחיב שימוש ב cache ברמת שרת ה WEB כגון הגדרת expiration עבור קבצים מסוימים, דחיסה של התכנים וכו'.
אופטימיזציה הרצת cron jobs. הרצה תכופה יכולה לגרום להעברת העומס על השרת ופגיעה בביצועים בזמן יצת ה cron.
במקרים בהם יש צורך בscalability לארכיטקטורת האתר ישנה השפעה חשובה על הביצועים - שרת אינטרנט נפרד משרת מסד הנתונים, עבודה ב  clusters וכו'. במקרים כאלו כדאי להיוועץ במומחה מוקדם ככל האפשר.

HTML קוד

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

סיכום

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