לדלג לתוכן

מה זה Canary Release ואיך עושים שחרור הדרגתי של גרסאות

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

מאיפה בא השם

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

איך זה עובד - אחוזים קטנים בכל פעם

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

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

למה זה עדיף במקרים מסוימים על מעבר מלא

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

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

Canary מול Blue-Green מול Feature Flags - מה ההבדל

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

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

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

לסיכום

Canary Release הוא כלי מצוין כשרוצים לצמצם את הסיכון שבדיפלוי על ידי חשיפה הדרגתית ומבוקרת, בניגוד למעבר החד של Blue-Green ולשליטה הממוקדת יותר ברמת הקוד שנותנים Feature Flags. שלוש הגישות משלימות זו את זו יותר ממה שהן מתחרות זו בזו.

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

הצטרפו לקהילה בדיסקורד