GitHub והחדקרן – שירות יישומי רובי בעומסים גבוהים וזמינות גבוהה

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

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

בעבר, GitHub השתמש בתצורה קלאסית לפריסת יישומי ריילס:

Nginx – שרת ווב המשמש חזית קדמית המטפלת בכל הבקשות מהלקוחות
Haproxy – מחלק עומסים (Load Balancer) קטן וזריז המפזר את הבקשות המגיעות מ Nginx לענן של שרתי Mongrel
Mongrel Cluster – ענן שרתי Mongrel המריצים את האפליקציה עצמה (Mongrel הוא שרת HTTP הכתוב ברובי ונועד לשרת יישומי רובי במהירות וביעילות)

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

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

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

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

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

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

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

זהר ארד

בן 35, קיבוצניק שהדרים לעיר הגדולה, מפתח client-side בנשמתו (מטהקפה, קול הקמפוס 106fm ואחרים). משתמש מקינטוש מושבע (שחוטא גם בלינוקס בשעות הפנאי). מעדיף הכל פשוט, מינימליסטי ועובד טוב ומשתדל להמנע מדברים עם הלוגו של מיקרוסופט ונהגי מוניות כעסנים. אוהב הרבה Web, מתובלת בג'אווהסקריפט, HTML, CSS, פייתון ורובי, ספרים, פפאיות ומוזיקה מהחנות (בדיסק המקורי). מתנודד תדיר בין אקזיסטנציאליזם לאינדיבידואליזם ונכון להיום עדיין אוחז ב-fetish לא מוסבר לצבים.

הגב

1 תגובה on "GitHub והחדקרן – שירות יישומי רובי בעומסים גבוהים וזמינות גבוהה"

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 
Sort by:   newest | oldest | most voted
trackback

[…] GitHub והחדקרן – שירות יישומי רובי בעומסים גבוהים וזמינות … רשמים ראשונים מאובונטו 9.10 אופרה 10 – זניח או זנוח? מתויג כ: API, Wolfram Alpha, Wolfram Alpha API, אבטחת מידע, וולפראם אלפא, שירותים מקוונים blog comments powered by Disqus var disqus_url = ‘http://www.newsgeek.co.il/wolfram-alpha-api/ ‘; var disqus_container_id = ‘disqus_thread’; var facebookXdReceiverPath = ‘http://www.newsgeek.co.il/wp-content/plugins/disqus-comment-system/xd_receiver.htm’; var DsqLocal = { ‘trackbacks’: [ ], ‘trackback_url’: ‘http://www.newsgeek.co.il/wolfram-alpha-api/trackback/’ }; […]

wpDiscuz

תגיות לכתבה: