יום שבת, 3 ביולי 2010

פריסת אשכולות בגן חיות

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

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

פריסת השרותים באשכול מתבצעת בצורה אקספוננציאלית, קודם שרות אחד, לאחריו שרות שני, לאחריו שני שרותים במקביל, ארבע, שמונה, וכ"ו. פריסת שרות בודד מתבצעת בדקה, גלגול לאחור לוקח שמונה שניות. מכאן שתמיד קיימים מספיק שרותים באוויר על מנת לתמוך בתעבורת ייצור, ומדי פעם ישנם שתי גרסאות של אותו שרות הרצות בו זמנית.
blog comments powered by Disqus