מה זה Blue-Green Deployment ואיך עושים דיפלוי בלי דאונטיים¶
אחד הרגעים המלחיצים ביותר בחיים של כל מפתח צד שרת הוא רגע הדיפלוי לפרודקשן. אתם לוחצים על הכפתור, וברקע יש לכם תחושה לא נעימה של "מה אם עכשיו הכל נופל". Blue-Green Deployment היא טכניקה שנועדה בדיוק לפתור את הפחד הזה, והיא הרבה יותר פשוטה ממה שהשם המפוצץ שלה נשמע.
הבעיה עם דיפלוי רגיל¶
בדיפלוי הכי בסיסי, אתם עוצרים את השרת הישן, מעלים את הגרסה החדשה במקומו, ומקווים לטוב. הבעיה היא שבין הרגע שהשרת הישן נעצר לרגע שהחדש עלה וסיים לאתחל, יש חלון זמן שבו המשתמשים שלכם פשוט לא מקבלים תשובה. ואם מתברר שבגרסה החדשה יש באג קריטי, הנזק כבר נעשה, וחוזרים אחורה בלחץ ובבהלה.
איך זה עובד - שתי סביבות זהות¶
הרעיון מאחורי Blue-Green הוא להחזיק שתי סביבות פרודקשן זהות לגמרי, שנקראות באופן שרירותי "כחולה" ו"ירוקה". בכל רגע נתון, רק אחת מהן פעילה ומקבלת את כל התנועה האמיתית מהמשתמשים, ואילו השנייה יושבת במצב המתנה.
נניח שהסביבה הכחולה היא זו שרצה כרגע ומגישה בקשות. כשאתם רוצים לשחרר גרסה חדשה, אתם לא נוגעים בה בכלל. במקום זה אתם מעלים את הגרסה החדשה על הסביבה הירוקה, שלא מקבלת שום תנועה אמיתית. עכשיו יש לכם זמן. אתם יכולים לבדוק אותה בשקט, להריץ בדיקות עשן, לוודא שהיא מתחברת נכון למסד הנתונים, בלי שאף משתמש אמיתי נחשף לגרסה שעדיין לא הוכחה.
ברגע שאתם בטוחים שהסביבה הירוקה עובדת כמו שצריך, כל מה שנשאר לעשות זה להחליף כיוון בראוטר או ב-load balancer, כך שכל התנועה החדשה תופנה פתאום לירוקה במקום לכחולה. זה מעבר חד וכמעט מיידי, בלי שום חלון זמן שבו אין שרת שעונה.
היתרון הכי גדול - רולבק מיידי¶
הסיבה שהטכניקה הזו כל כך אהובה היא לא רק המעבר החלק, אלא מה שקורה אם מתברר שמשהו לא בסדר. הסביבה הכחולה, עם הגרסה הישנה והיציבה, לא נמחקת ולא נעצרת. היא פשוט ממשיכה לשבת שם, מוכנה. אז אם רגע אחרי המעבר מתחילים לראות שגיאות מוזרות בירוקה, כל מה שצריך לעשות זה להחזיר את הראוטר אחורה לכחולה. זה לא תהליך שחזור מגיבוי שלוקח דקות ארוכות ומלא סיכונים, זו פעולה אחת פשוטה שמחזירה אתכם למצב היציב הידוע תוך שניות.
המחיר - תשתית כפולה¶
כמו כל דבר טוב, גם לזה יש מחיר. כדי להריץ Blue-Green אמיתי, אתם צריכים להחזיק שתי סביבות פרודקשן שלמות וזהות, לפחות לזמן קצר סביב כל דיפלוי. זה אומר כפול שרתים, כפול משאבים, ולפעמים כפול עלות תשתית, גם אם הסביבה השנייה "רק יושבת שם" רוב הזמן. בחברות גדולות עם תקציב תשתית רציני זה לרוב שיקול קטן ביחס לביטחון שהטכניקה נותנת, אבל בפרויקט קטן או צד עם תקציב מוגבל זה בהחלט שיקול שצריך לקחת בחשבון לפני שבוחרים בגישה הזו.
כדאי לדעת שקיימות גם גישות אחרות להעלאת גרסאות בבטחה, כמו שחרור הדרגתי שמעביר רק אחוז קטן מהתנועה בכל פעם במקום מעבר מלא בבת אחת - אבל זה כבר סיפור לפוסט אחר.
אם אתם רק בתחילת הדרך עם בניית שרתים ורוצים להבין את התמונה המלאה של איך מריצים שירותים בפרודקשן בצורה אחראית, בקורס צד שרת אנחנו עוברים על כל התהליך הזה משלב ראשוני ועד לדברים המתקדמים יותר כמו דיפלוי בטוח.
לסיכום¶
Blue-Green Deployment הוא לא קסם, הוא בעצם רעיון פשוט למדי - להריץ שתי סביבות זהות, לבדוק את החדשה בשקט לפני שהיא נחשפת למשתמשים, ואז להחליף ביניהן בלחיצת כפתור אחת שאפשר גם לבטל באותה מהירות. המחיר הוא תשתית כפולה, אבל התמורה היא דיפלויים בלי דאונטיים ובלי הבהלה של "מה אם זה נופל".
יש לכם שאלות על הטכניקה הזו או רוצים לשתף איך אתם עושים דיפלוי אצלכם? מוזמנים לבוא לדבר על זה בדיסקורד.