גיקטיים עובר דירה ומשתף חוויות: כיצד עוברים לשרת חדש מבלי שאף אחד שם לב?

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

geektime2

זהו, זה נגמר, אנחנו מקווים שזה הסוף לאיטיות באתר האינטרנט של גיקטיים, בעיות התשתית וההקפצות באמצע הלילה וסופי השבוע של מחלקת ה-IT שלנו. עד שלשום בלילה (יום ג’), אתר גיקטיים (הישראלי) ישב על שרת ייעודי עם 4 מעבדים, 16GB של זיכרון RAM ודיסק קשיח של 320GB בתצורת Raid Mirror, הממקום בחוות השרתים של בזק בינלאומי. האתר הבינלאומי שלנו ישב על שרת ייעודי בעל חומרה דומה, אך מיקומו היה בחוות השרתים של Atlantic Metro Cable בניו-יורק.

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

מדוע הגענו להחלטה על מעבר דירה?

מזה מספר חודשים אנחנו סובלים מבעיות קשות של איטיות, נפילות חוזרות ונשנות של האתר ולא מעט באגים שנוצרו כתוצאה מהעומס ההולך ומתגבר על השרת, כמות הגולשים הגדלה ולא מעט התקפות DoS. בהתחלה, חשבנו להוסיף שרת Dedicated לכל אתר, אך מהר מאוד הבנו שאנחנו בעצם רוצים לפצל את שרתי ה-DB משרתי ה-Web שלנו, מה שהביא אותנו לתובנה שלטובת ה-Scale העתידי של האתר, כדאי לנו להוסיף שני שרתים לכל אתר כך שהארכיטקטורה תהיה מספר שרתי Web בתצורת Active-Active, עם LoadBalancer וכנ”ל לשרתי ה-DB.

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

הפתרון המתבקש: WordPress as a Service

קרדיט תמונה: WPEngine

קרדיט תמונה: WPEngine

מכאן, הדרך לפתרונות כמו AWS או Rackspace היתה מהירה וחזרנו לשולחן השרטוטים. שבוע של הצעות מחיר, השוואת מוצרים ופיצ’רים שכל פתרון סיפק בנפרד לא עזר להגיע להחלטה, והסיבות לכך היו רבות: לשירות אחד לא היה Edge Node  בארץ, שירות אחר לא כלל CDN וכן הלאה.

זו הייתה הנקודה, שבה התחלנו לשקול את האפשרות של שירותי WordPress as a Service ומהר מאוד הבנו שזהו אכן הפתרון הכי מתאים מאוד לצרכים שלנו – יש בו את הכל הפתרונות לבעיות שציינתי קודם לכן (גיבויים, Cache, אבטחת מידע, Scalability, ביצועים והכי חשוב, שקט תעשייתי למחלקת ה IT שלנו) בונוס נחמד במעבר לשירות שכזה, הוא היכולת לאחד את כל ה-Sites שלנו למקום אחד ולאחד את ההתעסקות מול גורמים שונים.

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

לא רק שהוא נותן מענה לכל הסוגיות שדיברנו עליהם קודם, במקרה שלהם התמיכה שלהם היא באמת Full WPAAS. מה זה אומר? זה אומר שהשירות שלהם (בחבילות שונות) כולל לא רק שירותי IT אלא גם שירות טכני מלא בכל הקשור לפיתוח WordPress, ובעיות אפליקטיביות (גם במידה ומדובר בפיתוחים עצמאיים). מהניסיון שלנו איתם בשבועיים האחרונים גם לפני ההעברה, בתהליך ההעברה והימים שאחרי – התקשורת עם החברה, הן בטלפון, צ’ט או פתיחת Ticket אצל שירות התמיכה שלהם מהירה מאוד ונותנת מענה בהחלט מספק.

המעבר ברמה הפונקציונלית

צילום מסך

צילום מסך

קודם כל, פעלנו לפי ההנחיות הרשמיות המתועדות ברישומים של WPEngine ומבחינת סדר פעולות, העברנו קודם כל את תיקיית wp-content לשרת החדש ודאגנו למחוק פלאגינים ישנים של Cache, יחד עם פלאגינים נוספים המופיעים ברשימת ה-Disallowed Plugins של החברה (יש ממש מעט כאלו ומסתבר שלאלו שנמצאים ברשימה הזאת, יש סיבה באמת טובה לכך שהם נמצאים בה).

השלב שני היה ביצוע Export/Import למסד הנתונים של WordPress לכל אחת מההתקנות השונות שלנו. באופן די טבעי, מאחר ואנחנו אתר בן יותר מ5 שנים שמעלה בין 10 ל-15 פוסטים ביום ושומר Revisions, ה-DB שלנו גדול מאוד, וכולל כ-3 מיליון רשומות בטבלה אחת. כתוצאה מכך, היכולת שלנו לייצא את כל ה-DB במכה הפכה לבלתי אפשרית ולכן נאלצנו לפצל אותו למספר קבצי SQL על-מנת לאפשר את ביצוע ה-SQL Dump בצורה כזו שלא תגרום לשרת לקרוס.

חשוב מאוד: לשים לב כאשר אתם מפצלים את טבלת ה-wp_posts וטבלת ה-wp_posts_meta למספר קבצים, כל קובץ מתחיל בשורות:

DROP TABLE IF EXISTS ‘wp_posts’;
CREATE TABLE `wp_posts` (
`ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`post_author` bigint(20) unsigned NOT NULL DEFAULT ‘0’,
`post_date` datetime NOT NULL DEFAULT ‘0000-00-00 00:00:00’,

) ENGINE=InnoDB AUTO_INCREMENT=208483 DEFAULT CHARSET=utf8;

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

עוד אחד ממקרי הקצה שנתקלנו בהם במהלך ההעברה, הוא שכאשר יוצרים קבצי SQL Dump גדולים, ייתכן ובטעות יווצרו שני קבצים המכילים את אותן הרשומות. במקרה כזה, כאשר תרצו לבצע import תקבלו שגיאות המפרטות שפעולת Insert בודדת (הראשונה שה-SQL יתקל בה) כפולה ולכן לא ניתן להמשיך להריץ את שאר הפעולות של הקובץ. חשוב גם לציין כי במידה והכפילות היתה בפקודת ה-insert האחרונה, כל הטרנזקציה האחרונה תבוטע ויבוצע Rollback לכל הפעולות שבוצעו בקובץ זה.

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

המיגרציה הושלמה, עוברים לשלב בדיקת השפיות

הכל עובד. צילום מסך.

הכל עובד. צילום מסך

אחרי המעבר, שינינו את רשומות ה-DNS בקובץ ה-Hosts המקומי על המחשבים שלנו על מנת לבדוק את תקינות האתר על השרת החדש וֿבמהלך הבדיקות נתקלנו בבעיה שגרמה לכך שבכל שמירה ועדכון של פוסט באתר, הפעולה לא הייתה מתבצעת והדפדפן היה מציג עמוד ריק. בעזרתם האדיבה של התמיכה הטכנית של WPEngine שליוותה אותנו בשיחת וועידה במהלך התהליך, התקנו פלאגין Debug שסייע לנו לאתר את מקור הבעיה – פלאגין בשם Google News Sitemap שהיה אחראי לייצור XML מעודכן עבור שירות Google News. אחרי שכיבינו את הפלאגין פשוט הסרנו אותו ועברנו לפלאגין אחר, עדכני יותר.

זה השלב שביצענו את השינוי בשרתי ה-DNS שלנו. כך שכל הגולשים שנכנסו החל מהשעה 22:00 כבר הגיעו לאתר על גבי התשתית החדשה ויכלו להרגיש בשינויי הביצועים, כמו כן הכתבים באתר הספיקו כבר לדווח לנו על שיפור משמעותי בזמני התגובה של האתר, זמני עליית פוסטים, זמני העלאת תמונות למערכת האתר, זמני ההמתנה לביצוע פעולות ב-Backend, ועוד. לאחר מכן, ידענו שהמשימה שלנו הושלמה.

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

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

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

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

דניאל

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

הגב

18 תגובות על "גיקטיים עובר דירה ומשתף חוויות: כיצד עוברים לשרת חדש מבלי שאף אחד שם לב?"

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 

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

סידור לפי:   חדש | ישן | הכי מדורגים
צחי
Guest

תתחדשו.

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

אבי - Pebble
Guest

האם זאת הסיבה לכך שגירסת האייפד לא עובדת אצלי ?
גם כרגע לא ניתן לגשת לאפליקציה.

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

יניב פלדמן
Admin

הי אבי,

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

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

אבי - Pebble
Guest

מעולה, תודה רבה על המענה.

ניק
Guest

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

דניאל מסצ'יאני
Guest
דניאל מסצ'יאני

אני משוכנע שה CDN של אמאזון היה משפר את הביצועים אפילו שאין EDGE NODE בארץ לעומת dedicated יחסית בינוני. היו שיקולים נוספים כמו מחיר וכו. אין מילה רעה אחת על אמאזון.

ווריג
Guest

כתבה מצויינת, תתחדשו :)

אסף
Guest

אז העברתם את הDB, את הקבצים ואת הפניות הDNS.
סתם שאלה – מה קרה לכל רשומות הDB שנוספו/נמחקו בזמן עדכון הDNS ( שמתעדכן לאחר כמה זמן ובזמן שונה אצל כל ספקית ).
האם ביצעתם עדכון של הנתונים בDB החדש ואיך?

דניאל מסצ'יאני
Guest
דניאל מסצ'יאני

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

אבי - Pebble
Guest

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

איתמר
Guest

בשעה טובה ותתחדשו!

איל
Guest

בהצלחה אחלה אתר!

עידן
Guest

מזל טוב על האתר החדש.

אני מחזיק אתר שעובד ברובו מול ארה״ב. לכן אני בחרתי באמאזון .
elastic load balancer
2-3 instances

opsWorks stack ) machine will install and auto start on load )
RDS DB ( mysql )
memcache in the stack also scalable
and much more

also a good service … cloud flare

ארז
Guest

תתחדשו, על wp engine שמעתי רק דברים טובים

נינ
Guest

יניב, כמה גולשים יש לאתר שלכם ביום?

ממליץ
Guest

ovh חברה צרפתית ומסיבה לא ברורה לא תומכים בשפה האנגלית באתר הבית שלהם אבל הם נותנים שירות לישראל!
השרתים הכי חזקים בשוק בייחס למחיר!!!!
https://www.ovh.com/fr/serveurs_dedies/
http://www.kimsufi.com/ie/
http://www.soyoustart.com/us/

אלטרנטיבה נוספת היא:
http://www.hetzner.de/en/

לגבי cdn edge node
הפתרון הוא: http://www.incapsula.com/
חברה ישראלית!!!

///
Guest

השרת בבריטניה?

אריאל
Guest

לא הצלחתי להבין.

כתבתם שאתם חיפשתם שרת שיתן לכם מענה גם לגולשים מישראל, אני לא מצליח להבין איך WP Engine פותר לכם את הבעיה הזאת?

השרתים שלהם על אמזון, כנ”ל ה CDN וכמה שידוע לי לאמזון אין שרתים בישראל. אז מה הרווחתם?

wpDiscuz

תגיות לכתבה: