הגדרה מלאה של תשתית ענן ב-DigitalOcean

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

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

שאלות נפוצות

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

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

תשתית ב-DigitalOcean: היכן היא נשברת ולמה

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

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

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

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

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

מה משתנה אחרי ההגדרה: אפקט בזמנים ובחלקים

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

זמן התאוששות השירות

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

מחלקת כשל שהוסרה

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

אוטומציה של פריסה ומהירות הוצאה

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

כוננות בלי קמות לילה

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

אפשרויות פריסה ב-DigitalOcean ומגבלותיהן

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

אפשרות מתי מתאימה מגבלות
מכונה עם הגדרה ידנית שירות אחד-שניים, עומס צפוי אין התאוששות עצמית; עדכונים, גיבויים ורוטציית סודות ביד; כשל צומת — השבתה
אשכול מנוהל כמה שירותים, נדרשים הפעלה מחדש אוטומטית וקנה מידה אופקי מאגרי צמתים, ingress ו-Persistent Volumes נשארים עלינו; שליטה על הצמתים חלקית
פלטפורמת קונטיינרים שירותי ווב ו-API בלי כונן תורן ייעודי אין גישה לצומת, הגדרות רשת ומשימות רקע מצומצמות
היברידי עם חומרה עצמאית חלק מהנתונים חייב להישאר בקונטור שלך רשת וניתוב מורכבים יותר, נדרש ערוץ לענן וסכמת הרשאות משותפת

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

סדר העבודה: מאודיט תשתית ועד מסירה

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

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

ערכת מסירה: סכמות, הרשאות, נהלים, תיעוד

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

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

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

מקרה בוחן: זמן ההתאוששות של השירות הצטמצם פי כמה

לפני: כשלים הלכו לפי תרחיש אחד

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

מה שינינו

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

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

מה השתנה

זמן ההשבתה הצטמצם מ-40–60 דקות ל-3–5, וחלק מהאירועים נסגרים באוטומציה לפני שהמשתמש מבחין בהם. כשלים חוזרים ירדו מ-6–8 ברבעון ל-1–2, ואלה כבר סיבות שונות, ולא אותה תקלה בדיוק.

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

שירותים מנוהלים מול מכונות שהוגדרו ידנית

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

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

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

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

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

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

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

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

יש לנו שירות בייצור — האם המיגרציה תדרוש השבתה?

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

איך מחלקים הרשאות בין צוותים?

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

איך אתם בודקים שגיבויים באמת משוחזרים?

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

מה עם עמידות בכשלים — האם השירות ייפול יחד עם צומת אחד?

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

נדון במשימה: נחזור עם תוכנית והערכת עבודה

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

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

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