NoSQL Mode – מצב מטמון אגרסיבי כפתרון לכמות משתמשים גדולה
'ברק ארזואן',
כחברה הנותנת שירות בתחום אחסון אתרים (ובמיוחד אתרי וורדפרס) אנחנו נתקלים בבקשות רבות עבור אתרי וורדפרס שחווים תנועת משתמשים גדולה לתקופה ממוקדת, לדוגמה בזמן קמפיינים בטלוויזיה, קמפיינים בנפח גבוה שפועלים בפרסום ממומן ברשתות חברתיות ובעיתונות אשר מושכים כמות גולשים גדולה כדי למכור מוצר כלשהו או לבצע קמפיין גיוס כספים.
התאמת תשתית שרתים מותאמת לקמפיין שכזה יכול להיות סיפור מאוד יקר במידה ולא מכירים את כלל הטכנולוגיות שעומדות לרשותנו. במאמר זה אני הולך להציג בפניכם את מגוון הפתרונות הקיימים ב uPress עבור כמויות גולשים גדולות (פיק בזמן אמת).
אבצע סקירת ביצועים ובדיקת עומסים של כ-1000 משתמשים אמיתיים בו זמנית (בזמן שיא), ואציג כיצד עומס כזה עלול להשפיע על השרת ועל זמן הטעינה של האתר.
המאמר יעסוק בין היתר ביעילות ביצועים בעזרת זיכרון מטמון ולכן במידה ואתם לא בקיאים בנושא הייתי ממליץ להקדים ולקרוא את המאמר בנושא מהו זכרון מטמון ולמה הוא כל כך חשוב?
ראשית, נכיר את סוגי המטמון
נכון להיום, ב-uPress קיימים באופן גלובלי (עבור כלל האתרים) חמישה רמות מטמון שונות, אך היום נתרכז ב-2 מרכזיות לצורך השוואה זו. אשר שבהן עושים שימוש מרבית האתרים המאוחסנים על גבי הפלטפורמה שלנו ובכפוף לזמינות שלהם בחבילת האחסון שלכם.
זכרון מטמון אפליקטבי
זכרון מטמון אפליקטיבי, כשמו כן הוא – הוא מצב הזיכרון מטמון האופטימלי עבור רוב האתרים, כאשר רוב פעולת המטמון מבוצעת על ידי ה"אפליקציה" (וורדפרס, במקרה שלנו תוסף וורדפרס).
מצב זה עושה שימוש בזכרון מטמון בשרת על ידי תוסף וורדפרס המותקן על האתר. וזאת על מנת לשמור את חישובי המעבד האחרונים שבוצעו (ברמת ה-PHP). התוסף בעצם מבצע המרה של עמודי PHP לעמודי HTML שלא דורשים חישובים מעבד (לאחר שהמעבד כבר ביצע חישוב שלהם פעם אחת בלבד).
בנוסף לכך, המצב מוסיף תוקף לקבצי האתר (HTML, CSS, JS וכו') ברמת הדפדפן (HTTP Expires Headers, פרמטר שנבדק במגוון כלי בדיקות מהירות למינהם). לרוב פעולה זו מבוצעת על ידי תוסף המטמון ezCache.
זכרון מטמון אגרסיבי (NoSQL Mode)
מצב מטמון אגרסיבי הוא מצב שפיתחנו בuPress כדי לתת מענה לעומסים כבדים במיוחד, המצב למעשה הופך את האתר שלכם מדינמי (בעל חישובי מעבד) לסטטי לחלוטין (ללא חישובי מעבד), במצב זה לא נעשית שום קריאה למסד הנתונים של האתר (DataBase) ולא מתבצעות שום פעולות כלשהן ברמת הPHP.
למעשה מתרחש תהליך זהה לזכרון מטמון אפליקטיבי שבו מבוצעת המרה של עמודי PHP לעמודי HTML, ההבדל היחיד והמשמעותי ביותר הוא שכל גישה לאתר שלכם מצד הגולשים עוברת באמצעות שכבת המטמון הזו ללא שום בקשה ישירה לשרת עצמו.
למעשה – הישות היחידה שניגשת לשרת שלכם היא שכבת המטמון, וכל הגולשים ניגשים אל שכבת המטמון.
בשפה פשוטה: שכבת המטמון משמשת כ"מתווך" בין הגולש ובין השרת, הגולש ניגש לקישור לדוגמא upress.co.il/page1 והוא מגיע בעצם אל שכבת המטמון, במידה והעמוד קיים בשכבת המטמון הוא מוגש באופן ישיר אל הגולש מבלי שבוצעה אף פעולה אחת של חישוב מעבד, במידה והעמוד לא קיים – שכבת המטמון תיגש לשרת ותבקש ממנו ליצור את העמוד המבוקש, כשהיא תקבל את התוצאה הסופית העמוד כמובן ישמר באופן קבוע בשכבת המטמון ויהיה זמין עבור הגולשים הבאים.
בצורה הזו נחסכות בקשות לשרת ועומס מיותר על השרת, וכמובן מהירות טעינה הופכת למהירה במיוחד.
חשוב לציין כי מצב NoSQL Mode מיועד ומומלץ לאתרים שנשארים סטטיים עם תוכן מובנה ולא מומלץ לאתרים שצריכים להשאר דינאמיים (פורטלים, בלוגים, חנויות).
אף על פי שניתן להפעיל את מצב המטמון האגרסיבי על כל סוגי האתרים עם התאמות מיוחדות (החרגת קישורים מסויימים, החרגת כתובות IP מסויימות).
סקירת ביצועים – השוואה בין סוגי המטמון
סקירת הביצועים תבוצע על גבי שרת מסוג VPS Advanced המכיל 4 ליבות מעבד ו8GB זיכרון (משאבי שרת גבוהים יחסית). כמו כן על גבי שרת זה מאוחסן אתר עם כ100,000 פוסטים (מסד נתונים נכבד, שלא מבייש אתר חדשות עשיר).
לצורך הבדיקה אבצע 3 בדיקות, כאשר בכל אחת מהן אצרף תמונה שבה ניתן לראות את זמן הטעינה של האתר (כאשר היו באתר כ-1000 משתמשים בזמן אמת), וכמו כן תמונה נוספת המציגה את נתוני השרת בזמן הבדיקה.
ללא תוסף מטמון אפליקטיבי
את סקירת הביצועים אני אתחיל ואפתח בטעינת האתר ללא תוסף מטמון אפליקטיבי, אך עם זכרון ברירת המחדל ברמת השרת.
בתמונה ניתן לראות כי זמן טעינת האתר על כל חלקיו (בזמן השיא) ארך כ2.65 שניות.
כמו כן, בתמונה הבאה מתוך פאנל הניהול של סטטיסטיקות השרת ניתן לראות כי העומס הממוצע של השרת עמד על 80.67 וניצול של 7 מתוך 8 ליבות מעבד (כ90% ממשאבי המעבד בשרת).
מיותר לציין שכאשר שרת מגיע לעומס ממוצע גבוה של 8+ כאשר מדובר על שרת מסוג VPS Advanced מרבית הגולשים אינם מקבלים את חווית המשתמש שאתם מצפים לה, ויתכנו שיבושים בהצגה של התוכן המלא של האתר (על ידי שגיאות 5xx למיניהן).
מצב מטמון אפליקטיבי
כעת אעבור להפעלת האתר על מצב זיכרון מטמון אפליקטיבי
ואבצע שוב את סקירת הביצועים הכוללת 1000 גולשים באתר בו זמנית.
ניתן לראות שזמן טעינת האתר התקצר משמעותית ל946 אלפיות שניה מ2.65 שניות שהם 2650 אלפיות שניה (שיפור פי 280% במהירות הטעינה של הדף הראשי לאור הפעלת מצב זיכרון מטמון אפליקטיבי (תוסף ezCache) יחד עם עומס גולשים של כ1000 גולשים בו זמנית)
מבחינת משאבי השרת ניתן לראות ירידה חדה של כפי 800% בעומס הממוצע ופי 300% בצריכת המעבד!
זכרון מטמון אגרסיבי (NoSQL Mode)
כמובן שגם במקרה הזה ביצענו את הבדיקה עם עומס גולשים של כ1000 גולשים באתר בו זמנית, להרי התוצאות:
בתמונה הנ"ל ניתן להבחין בזמן טעינה כולל לדף הראשי של כ699 אלפיות שניה (שיפור של פי 380% מטעינה ללא מטמון, ושל כ35% מטעינה בעזרת מטמון אפליקטיבי). אך יש לזכור שמדובר באתר מאוד בסיסי שהקמנו לצורך ההשוואה הזו – וכמובן שבאתר מורכב עם תוספים מרובים וחישובי PHP נוכל לראות הבדלים משמעותיים יותר.
מבחינת ניצול משאבי השרת ניתן לראות את התמונה הבאה:
הנקודה העיקרית ביותר היא העומס הממוצע בשרת, אתר המשרת כ-1000 גולשים בזמן אמת ומצליח לשמור על עומס ממוצע של 2.82 זהו הישג אדיר.
שיפור של פי 1296% בצריכת המעבד ו 2860% בעומס הממוצע, בהשוואה לניצול משאבי השרת בעומס גולשים של כ1000 גולשים בו זמנית ללא זיכרון מטמון כלל.
וכמו כן, שיפור של 410% בצריכת המעבד ו 353% בעומס הממוצע, בהשוואה לניצול משאבי השרת בעומס גולשים של כ1000 גולשים בו זמנית עם זיכרון מטמון אפליקטיבי וכל זאת באתר פשוט לצורך הבדיקה בלבד, כאמור באתר עשיר בתוספים ההבדלים יהיו גדולים בהרבה.
לסיכום
להלן גרף פשוט המתאר את זמן הטעינה והעומס הממוצע בשרת בשלושת מצבי המטמון:
מגוון מצבי זיכרון המטמון הקיימים במערכת שלנו הם מצבים שיעזרו לכם לשפר משמעותית את זמני הטעינה של האתר שלכם, בייחוד אם האתר שלכם חווה כמויות גולשים גבוהות בו זמנית. חשוב לזכור שבמאמר בוצע ניסוי על אתר מאוד פשוט וכמעט נטול תוספים ובעל תבנית עיצוב בסיסית.
ישנם עוד מספר פתרונות אשר אנחנו מספקים בהתמודדות מול מסת גולשים גדולה בו זמנית ואחת מהן היא חבילת היעודית לעומסים כבדים שלנו, שאותה לא סקרתי במאמר אבל היא בהחלט פתרון מומלץ לעומסי גולשים גבוהים בו זמנית במידה ויש לכם אתר בודד.
אני מקווה שהצלחתי לעשות לכם סדר בנושא מטמון האפליקטיבי ולהציג בצורה פשוטה את היכולת של זכרון מטמון כאשר מדובר בעומס גדול של גולשים, במידה ויש לכם שאלות בנושא אתם מוזמינים להגיב למאמר זה ונשמח לענות.