התאמת גודל מכונות וירטואליות: אופטימיזציית עלויות ללא סיכון

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

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

Right-sizing של מכונות וירטואליות: היכן משאבים עומדים ללא שימוש

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

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

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

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

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

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

מה נותן יישור של פרופיל העומס והמשאבים

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

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

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

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

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

אפשרויות להבאת פרופיל המכונות הווירטואליות לנורמה

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

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

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

סדר העבודות: מאיסוף מדדים ועד מסירת נוהל

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

  1. ספירת מלאי של הפארק. מרכזים את המכונות, את ייעודן, הבעלים והתגיות שלהן במרשם אחד. מסמנים מיד כפילויות וסביבות שבהן העומס בפועל לא קיים.
  2. הפקת פרופיל העומס. אוגרים מדדים 2–4 שבועות: חציון, אחוזוני שיא, פרצים יומיים וחודשיים, צריכת זיכרון, תעבורת דיסק. מתעדים מה בדיוק נתקל בתקרה.
  3. תרשים של תצורות היעד. טבלת «נוכחי → יעד» עם מרווח לשיא והצדקה לכל מחלקה. מתאמים עם בעלי השירותים, ולא משנים בשקט.
  4. שינויים. הולכים בקבוצות: קודם סביבות לא-פרודקשן, אחר כך סביבות ייצור — עם חלון תחזוקה, נקודת חזרה וקריטריון עצירה.
  5. בדיקה תחת עומס. מבחן סינתטי בתוספת תצפית על תעבורה אמיתית לאחר המיתוג. את הפרופיל החדש משווים לזה שהופק: אם השיא שוב נתקל בתקרה, מתקנים את התצורה.
  6. מסירת הנוהל. מוסרים מסמך: כיצד לקרוא את המדדים, באיזו תדירות לבחון מחדש תצורות, לפי אילו כללים מקצים מכונות חדשות.

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

נהלים, תרשימים ומדיניות: מה מוסרים לצוות

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

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

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

מקרה בוחן: בחינה מחדש של פרופילים באשכול עם עומס שיא

אשכול מתחת לשירות בעל עומס גבוה חי עם פרופילים שנבחרו בעין: לכל שירות הוקצה מרווח זיכרון ומעבדים לתרחיש הגרוע ביותר. בפועל הניצולת נשמרה על 10–15%, והרזרבות העודפות תפסו יותר ממחצית מהנפח שהוקצה — ובכל זאת בשעות השיא חלק מהשירותים נתקלו במגבלות והוסיפו השהיה. שיעור אי-הזמינות ברבעון שלפני כן הגיע ל-0.4%, וכמעט כל הדקות האלה נפלו על השיא.

מה שינו ומה קיבלו

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

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

לאחר הבחינה מחדש הרזרבות העודפות הצטמצמו מ-60% ל-15% מהנפח שהוקצה, הניצולת הממוצעת עלתה ל-40–45%, ומדדי השיא לא ירדו. האחוזון ה-95 של זמן התגובה בשעות השיא אף ירד: השירותים הפסיקו להתחרות על זיכרון. שיעור אי-הזמינות ברבעון הבא ירד ל-0.05%, והתקלות של מחסור בזיכרון פסקו. החזרה לאחור נותרה זולה: הפרופילים הישנים נשמרו כתצורה של המהדורה הקודמת, והחזרה ארכה דקות.

מה לעשות אם היישום כבר פרוס תחת עומס

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

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

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

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

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

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

התנגדויות טכניות: סיכוני הקטנת משאבים ונטרולם

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

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

כיצד להשתכנע שהקטנת משאבים בטוחה?

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

מה יקרה אם העומס יגדל אחרי השינוי?

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

באיזו תדירות לבחון תצורות מחדש?

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

היכן נגמרת האוטומציה?

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

נדון במשימה: נאסוף פרופיל ונחזור עם תוכנית

כדי ש-Right-sizing לא יישאר חיתוך חד-פעמי, מתחילים מספירת מלאי.

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

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

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

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