מאחורי הקלעים בפייסבוק: איך מובילים שחרור גרסאות מהיר בהיקפי ענק?

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

מאת טל קלנר ורועי רוטנברג

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

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

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

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

איך זה עבד קודם?

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

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

1. Dogfooding

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

2. שחרור עדכוני גרסאות בתכיפות גבוהה

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

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

3. אוטומציה

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

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

4. להזיז בדיקות למעלה הזרם

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

5. מדידת הצלחת השינויים

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

6. פיתוח מהיר של אפליקציות מובייל ע”י שימוש בטכנולוגיות צד-שרת

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

7. הפרדה בין שחרור גרסא להפעלת לוגיקה חדשה

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

טל קלנר היא Release Technical Program Manager בפייסבוק תל אביב, רועי רוטנברג הוא מהנדס תוכנה בצוות ה-Release Engineering בפייסבוק תל אביב

כתב אורח

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

הגב

8 תגובות על "מאחורי הקלעים בפייסבוק: איך מובילים שחרור גרסאות מהיר בהיקפי ענק?"

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

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

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

שיטות מצוינת. יש לחברות אחרות מה ללמוד ממנה בעניין הזה…

Dror
Guest

כלומר, פייסבוק עושה היום מה שכל צוות פיתוח רציני עושה כבר שנתיים, והם מקבלים על זה כתבת יח”ץ?

מוש
Guest

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

דרור הליצן
Guest

אדוני ליצן? קראת בכלל את הכתבה?
איזה חברת תוכנה משחררת גירסא כל שעתיים בלי QA?

עידן
Guest

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

ASD
Guest

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

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

כפיר
Guest

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

2017
Guest

כתבה רדודה… לא נאמר פה שום דבר מעניין

wpDiscuz

תגיות לכתבה: