Skip to Main Content »

Search Site
 

אופטימיזציית שרת מג'נטו

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

מה זה זמן טעינה של דף ומה נחשב לזמן טעינה קצר?

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

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

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

איך מודדים זמני טעינה?

ישנם מספר כלים פופולאריים למדידת זמני טעינה של דפי אינטרנט.

  • שירות Pingdom
  • דו"ח זמני טעינה (Site Speed) בכלי הסטטיסטיקה Google Analytics. אנחנו מניחים שכיום כל בעל אתר משתמש בשירות זה לפחות.

מה זה אומר לשרת מספר גדול יותר של לקוחות במספרים?

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

מה ניתן לעשות כדי לקצר את זמני הטעינה של אתר מג'נטו?

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

  • אופטימיזציה של קוד המערכת
  • אופטימיזציה של שרת בו מאוחסן האתר

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

קונפיגורציית שרת

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

  • מעבד אחד
  • זיכרון 4 ג"ב
  • שטח אחסון לא פחות מ-10 ג"ב (ממוצע הנדרש לחנות בעלת 1000 פריטים)
  • חיבוריות לרשת לא פחות מ-8 מ"ב (בהנחה שדף אחד ממוצע שוקל כ-400 ק"ב יחד עם כל קבצי המדיה שיש בו)

מה משפיע על ניצול המשאבים של השרת ואיך?

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

פעולה של מערכות סטנדרטיות כגון שרת קבצים Apache, מנוע PHP, שרת בסיסי נתונים MySQL מצריכה זמן עיבוד CPU וזיכרון RAM. כמו כן, חשוב מאד לזכור שמהירות דיסק הקשיח רלוונטית מאד במיוחד באתר מבוסס מג'נטו, כיוון שלמג'נטו עצמה אלפי קבצים המרכיבים את הפלטפורמה. יש להוסיף לכך קבצי מדיה שונים, קבצי העיצוב וקבצי המטמון.

למה דווקא 4 ג"ב זיכרון? לא הגזמתי? בואו נעשה חישוב יחד.

כל תהליך של Apache צורך בין 3 ל-5 מ"ב זיכרון. נכפיל ב-20 וכבר קיבלנו בין 60 ל-100 מ"ב זיכרון. נתונים אלו טעוני שיפור.

כל תהליך של PHP עם מערכת מג'נטו צורך בממוצע בין 80 ל-100 מ"ב זיכרון. תוצאה של 20 גולשים בו זמנית - בין 1.6 ל-2 ג"ב זיכרון. כמובן, גם מספרים אלו ניתן להקטין אבל כרגע, לצורך הניסוי נשאיר הגדרות השרת על כנם.

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

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

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

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

מספר גולשים באתר בו זמנית או תוך פרק זמן של 10 דקות תהליכי שרת קבצים Apache
(כל תהליך צורך עד 5Mb זיכרון)
תהליכי PHP
(כל תהליך צורך עד 100Mb זיכרון)
גודל בסיס הנתונים MySQL (Mb) מספר דפים באתר מופכל במשקל ממוצע של דף (Mb) סה"כ כמות זיכרון נדרשת (בתוספת של 256 מ"ב זיכרון הנדרש לשרת עצמו) רוחב פס הנדרש (Mbps)
3 15 300 500 1000*0.4 1471 10
10 50 1000 500 1000*0.4 2206 32
20 100 2000 500 1000*0.4 3256 64

 

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

מספר גולשים באתר בו זמנית או תוך פרק זמן של 10 דקות תהליכי שרת קבצים Apache
(כל תהליך צורך עד 5 מ"ב זיכרון)
תהליכי PHP
(כל תהליך צורך עד 100 מ"ב זיכרון)
גודל בסיס הנתונים MySQL (Mb) מספר דפים באתר מופכל במשקל ממוצע של דף (Mb) סה"כ כמות זיכרון נדרשת (בתוספת של 256 מ"ב זיכרון הנדרש לשרת עצמו) רוחב פס הנדרש (Mbps)
3 15 300 50 100*0.4 661 10
10 50 1000 50 100*0.4 1396 32
20 100 2000 50 100*0.4 2446 64

 

מה ניתן ללמוד מהטבלאות ואיך לשפר את הביצועים של השרת?

שרת Apache כשרת אחורי (backend) ושרת Nginx כשרת קדמי (frontend)

קודם כל, ניתן להקטין את מספר התהליכים של שרת Apache על ידי מספר שינוים בקובץ ההגדרות:

  • להפעיל הגדרה KeepAlive אשר כבויה כברירת מחדל. (אגב, בטבלאות הנ"ל החישובים נעשו כאשר הגדרה זו כבר מופעלת)
  • להקטין פסק זמן (Timeout) של הגדרה הנ"ל על מנת לשחרר משאבים מהר יותר

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

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

אופטימיזציית PHP

כפי שניתן לראות, אחד הזללנים הגדולים של הזיכרון הוא PHP. כל תהליך שלו צורך בממוצע כ-100 מ"ב של זיכרון. באתרי מג'נטו עם מספר הרחבות גדול מאד כמות הזכרון הנדרשת לכל תהליך של PHP יכולה להיות אף גבוהה בעשרות אחוזים. גם כאן יש לא מעט מה לשפר:

  • להתקין ולהגדיר מנגנון מטמון לקבצי PHP. קיים מספר טכנולוגיות שונות אך בחרנו את Zend Optimizer Plus כטכנולוגיה המועדפת כיוון שהיא פותחה על ידי חברת Zend ומותאמת באופן מושלם לפלטפורמת Zend Framework אשר כידוע מערכת מג'נטו מבוססת עליה.
  • בקובץ ההגדרות של PHP יש להגדיר realpath_cache_size וזמן התפוגה שלו realpath_cache_ttl
  • PHP חייב להיות מותקן ומוגדר כפרוטוקול FastCGI
  • יש להקטין ערכי ברירת מחדל של FastCGI על מנת לשחרר משאבים מהר יותר
  • להקטין שימוש ב-PHP על ידי יצירה וניהול מטמון חכם. יורחב בהמשך

אופטימיזציית שרת בסיסי נתונים MySQL

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

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

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

חשוב מאד להבין שכמות זכרון ה-RAM חייבת להיות מספיקה על מנת להחזיק בו את כל בסיס הנתונים ומומלץ שזה לא יהווה מעל 50% מסה"כ כמות הזכרון הפנוי.

יצירה וניהול מטמון חכם

מערכת מג'נטו מאפשרת לנהל מטמון חכם במספר שיטות וטכנולוגיות שונות. כמו כן, במערכת מג'נטו מיושם מנגנון לניהול מטמון בשתי רמות (slow backend ו-fast backend)
השיטה הראשונה והנפוצה ביותר הינה שיטת מטמון באמצעות מערכת קבצים של השרת. זוהי שיטת ניהול מטמון שלא דורשת שום תוספת מיוחדת ברמת השרת ומאיצה את האתר לפחות פי 2 עד 4. המספר תלוי בגודל האתר וסוג של כונן קשיח של השרת. השאלה הגדולה והחשובה היא האם מטמון זה מספיק על מנת להגיע לרמת הביצועים של שניה אחת או שתיים בטעינת דף?
באתרים עם תנועת גולשים דלילה, דהינו אין מצב שבאתר נמצא לא יותר מגולש אחד בו זמנית, ככל הנראה זה מספיק. אבל איך יכול להיות שבאתר נמצא רק גולש אחד בו זמנית? ומה קורה עם מנהל האתר וזחלנים של מנועי חיפוש למיניהם? הרי גם הם משתמשים במשאבי השרת ועוד איך. אגב, זחלנים של מנועי חיפוש לעתים כה אגרסיביים שעלולים להאיט את השרת בצורה מאד דרסטית. כמובן, יש דרכים להרגיע אותם, אבל בעיה זו והפתרון כבר מחוץ לנושא המאמר.

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

מעבר לניהול מטמון הבסיס באמצעות קבצים מערכת מג'נטו מאפשרת לנהל מטמון בעזרת טכנולוגיות הבאות:

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

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

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

אתר סטטי מהיר יותר מאתר דינאמי

תשאלו מה הקשר, הרי מערכת מג'נטו היא מערכת דינאמית וכל דפי האתר מורכבים מאלמנטים שונים ונתונים הנשאבים מתוך בסיס הנתונים?
ובכל זאת ניתן להפוך את אתר מג'נטו לאתר כמעט סטטי לחלוטין. למעט מספר דפים או חלקים שחייבים להשאר דינאמיים, כגון סל קניות, קופה ודפי הרשמה והתחברות למערכת. שיטה זו נקראת במג'נטו Full Page Cache.
במערכת מג'נטו החינמית, Community Edition, מנגנון Full Page Cache לא מיושם אך זה לא מגביל אותנו מלהשתמש בהרחבות צד ג' לצורך כך.
על מנת להשתמש בפונקציונאליות זאת נצטרך להתקין ולהגדיר בשרת מנגנון מטמון נוסף בשם Varnish Cache. מה נותן Varnish Cache הזה ואיך הוא עובד?

Varnish Cache מותקן לפני יתר שרתי הקבצים ומחזיק דפי HTML מוכנים בזכרון המהיר של השרת, זיכרון RAM.
ניתן לתאר את עבודת השרת באופן הבא:

  1. גולש מגיע לדף מסוים באתר. אם דף זה נמצא במטמון Varnish Cache הוא מיד עולה. אין צורך להפנות את הבקשה ליצירת דף מתוך PHP ולשאוב נתונים מתוך בסיס הנתונים.
  2. במידה ודף המבוקש לא נמצא עדיין בזכרון של Varnish Cache, מתבצעת פניה לשרת Nginx שגם הוא יודע להחזיר קבצים סטטיים כגון קבצי מדיה שונים מהר מאד. אבל מה שחסר, מופנה לשרת הבא בתור, שרת Apache ובהמשך לשרת בסיסי הנתונים MySQL
  3. לפני שמגיעים לשרת הבסיסי הנתונים עוברים דרך מנגנון המטמון Redis שמחזיק בזכרון נתונים שונים מוכנים לשימוש מיידי וחוסך לנו זמן עיבוד יקר
  4. כאשר גולש עובד לדף הבא באתר, חלק גדול מהאלמנטים הסטטיים של האתר כבר יושבים במטמון של הדפדפן שלו

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

אופטימיזציית דפי האתר

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

  • לבצע אופטימיזציה של קבצי מדיה של האתר. בין קבצי המדיה נחשבים: קבצי Javascript, CSS, אלמנטים גראפיים שונים של העיצוב, תמונות שונות
  • לכווץ קבצי Javascript ו-CSS באמצעות שירות חיצוני או הרחבה למערכת מג'נטו
  • לאחד אלמנטים גראפיים שונים של תבנית העיצוב של האתר ולהשתמש בטכניקת CSS Sprites
  • להעלות תמונות של מוצרים לשרת ענן חיצוני (CDN)

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

סיכום

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

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

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

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

שירותי אחסון ואופטימיזציית אתרי מג'נטו

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