מילון מונחים ל-DevOps וענן - כל המושגים שכל מתכנת שומע היום¶
לפני כמה שנים DevOps וענן היו תחום נישתי, משהו שרק "אנשי התשתיות" הבינו. היום זה כבר לא ככה - כל מפתח, גם בתפקיד פיתוח רגיל, נתקל במונחים כמו Docker, Kubernetes או CI/CD כמעט בכל שיחה. הפוסט הזה הוא מילון מושגים ישיר וברור, בלי הנחות מוקדמות, שמסביר מה כל מונח אומר בפועל ולמה הוא חשוב.
מיכלים ותשתיות¶
דוקר (Docker) - כלי שאורז אפליקציה יחד עם כל התלויות שלה - ספריות, גרסת שפה, קבצי הגדרות - לתוך יחידה אחת סגורה שנקראת מיכל. היתרון הגדול הוא שהמיכל רץ אותו הדבר בדיוק על המחשב שלכם, על שרת הבדיקות ועל השרת בפרודקשן.
מיכל מול מכונה וירטואלית - Container vs VM - מכונה וירטואלית מדמה מחשב שלם כולל מערכת הפעלה משלה, ולכן היא כבדה ואיטית להעלאה. מיכל, לעומת זאת, חולק את מערכת ההפעלה של השרת המארח ומריץ רק את האפליקציה עצמה, ולכן הוא קליל בהרבה ועולה תוך שניות.
קוברנטיס (Kubernetes) - מערכת שמנהלת עבורכם אוסף גדול של מיכלים - מפעילה אותם, מפזרת אותם בין שרתים, ומקימה מיכל חדש אוטומטית אם אחד קרס. מתאים כשיש לכם לא מיכל אחד אלא עשרות או מאות שרצים במקביל.
תשתית כקוד - Infrastructure as Code (Terraform) - במקום להקים שרתים, רשתות ומסדי נתונים בלחיצות ידניות בממשק ניהול, כותבים קובץ טקסט שמתאר איך התשתית אמורה להיראות, והכלי (למשל Terraform) בונה אותה בהתאם. זה הופך את התשתית לגרסה נשלטת בגיט, בדיוק כמו קוד רגיל.
רשת פרטית וירטואלית - VPC - סביבת רשת מבודדת בענן, שרק אתם שולטים בה - אילו שרתים יכולים לדבר זה עם זה, ומה חשוף לאינטרנט הפתוח ומה לא. זו למעשה השכבה הראשונה של הגנה על כל מה שאתם מריצים בענן.
תהליכי פיתוח ואספקה¶
אינטגרציה ואספקה רציפה - CI/CD - שילוב של שני תהליכים אוטומטיים - CI בודק שכל שינוי קוד עובר בדיקות ולא שובר כלום, ו-CD דואג שקוד שעבר את הבדיקות יעלה לייצור בלי צורך במגע יד אדם. יחד הם מקצרים דרמטית את הזמן בין כתיבת קוד לבין שהוא רץ אצל המשתמשים.
צינור עבודה - Pipeline - רצף השלבים האוטומטי שקוד עובר מרגע שהועלה לגיט ועד שהוא בייצור - קומפילציה, בדיקות, בנייה, ופריסה. כל שלב חייב להצליח כדי שהקוד ימשיך לשלב הבא.
אסטרטגיות פריסה - Blue-Green ו-Canary - Blue-Green מריצה שתי סביבות זהות במקביל, ואחרי שהגרסה החדשה עברה בדיקה מעבירים את כל התנועה אליה בבת אחת. Canary עושה את זה בהדרגה - חושפים את הגרסה החדשה לאחוז קטן מהמשתמשים קודם, ורק אם הכל תקין ממשיכים הלאה לכולם.
חזרה אחורה - Rollback - פעולה שמחזירה מערכת לגרסה הקודמת שלה, כשמתגלה שגרסה חדשה גרמה לתקלה. פייפליין טוב יודע לבצע Rollback כמעט אוטומטית ברגע שהוא מזהה בעיה.
חפץ בנייה - Artifact - התוצר הסופי והקבוע של תהליך בנייה - למשל קובץ הרצה, חבילת קוד, או תמונת מיכל (image) - שנשמר ומוכן להעלאה בכל רגע, בלי לבנות אותו מחדש בכל פעם.
רפוזיטורי חבילות - Registry - מקום מרכזי שבו שומרים ומגרסים artifacts, בעיקר תמונות של מיכלים. Docker Hub הוא הדוגמה הכי מוכרת, אבל חברות רבות מריצות registry פרטי משלהן.
סביבות פיתוח - Dev / Staging / Prod - Dev היא סביבת העבודה השוטפת של המפתחים, Staging היא עותק כמעט זהה לייצור שבו בודקים לפני שחרור אמיתי, ו-Prod (ייצור) היא הסביבה שבה נמצאים המשתמשים האמיתיים. אף אחד לא רוצה לגלות באג בסביבת ה-Prod.
ניהול קונפיגורציה - Configuration Management - ניהול אחיד ואוטומטי של ההגדרות והתלויות על כל השרתים, כדי שכולם יהיו מוגדרים באותו אופן בדיוק. כלים כמו Ansible או Puppet עושים בדיוק את זה, ומונעים מצב שבו שרת אחד "מתנהג אחרת" סתם כי מישהו שינה בו הגדרה ידנית.
ענן ושירותים¶
ענן ציבורי - AWS, Azure, GCP - חברות שמשכירות תשתית מחשוב - שרתים, אחסון, רשת - לפי שימוש בפועל, במקום שתצטרכו לקנות ולתחזק חומרה בעצמכם. זה מה שמאפשר לחברה קטנה להקים תשתית ברמה עולמית תוך דקות.
מאזן עומסים - Load Balancer - רכיב שמפזר בקשות נכנסות בין כמה שרתים, כדי שאף שרת אחד לא יעמוס יותר מדי. אם אחד השרתים נופל, מאזן העומסים פשוט מפסיק לשלוח אליו תנועה ומעביר הכל לשאר.
התרחבות אוטומטית - Auto Scaling - מנגנון שמוסיף שרתים כשהעומס עולה, ומסיר אותם כשהעומס יורד, בלי שאף אחד יצטרך להתערב ידנית. חוסך כסף בשעות שקטות, ומונע קריסה בשעות עומס.
חסר שרתים - Serverless - מודל שבו כותבים פונקציה בודדת, מעלים אותה לענן, וזה כל מה שצריך לעשות - הענן דואג להריץ אותה, להתרחב לפי הצורך, ולגבות רק על שניות ריצה בפועל. השם קצת מטעה, השרתים כן קיימים, רק שאתם לא רואים ואתם לא מנהלים אותם.
אחסון אובייקטים - S3 וכדומה - שירות אחסון קבצים בענן שמתאים לכל דבר, מתמונות ועד גיבויים שלמים, בלי הגבלת נפח מעשית ובעלות זולה מאוד. S3 של אמזון הוא הדוגמה המוכרת ביותר, אבל לכל ספקי הענן יש שירות מקביל.
ניטור ואמינות¶
ניטור - Monitoring - מעקב שוטף אחרי מצב המערכת - עומס, זמני תגובה, שגיאות - כדי לדעת שמשהו לא תקין לפני שהמשתמשים בכלל שמים לב. בלי ניטור, לומדים על תקלות רק מתלונות של לקוחות, וזה תמיד מגיע מאוחר מדי.
ריכוז לוגים - ELK Stack - כלי שאוסף לוגים מכל השרתים והשירותים למקום אחד מרכזי, כדי שאפשר יהיה לחפש ולנתח אותם בקלות. ELK (Elasticsearch, Logstash, Kibana) הוא צירוף כלים נפוץ מאוד למטרה הזו.
זמינות ו-SLA - Uptime / SLA - Uptime הוא אחוז הזמן שבו המערכת שלכם באמת זמינה ועובדת. SLA הוא התחייבות רשמית כלפי לקוחות לגבי רמת הזמינות הזו, לרוב עם פיצוי אם היא לא עומדת בכך.
זמינות גבוהה - High Availability - ארכיטקטורה שנבנתה כך שאם רכיב אחד נופל, המערכת ממשיכה לעבוד בלי הפרעה למשתמש, בזכות כפילות של שרתים, אזורים ומסדי נתונים.
התאוששות מאסון - Disaster Recovery - תוכנית וכלים שמאפשרים לחזור לפעילות מלאה אחרי אירוע חמור באמת - קריסת מרכז נתונים שלם, מחיקת נתונים בטעות, או תקיפה. זה שונה מזמינות גבוהה כי כאן מדובר בתרחיש קיצון, לא בתקלה רגילה.
אם המונחים האלה מעוררים בכם רצון להבין איך כל זה מתחבר לפיתוח אמיתי, קורס הצד שרת החינמי שלנו, שכולל פרק שלם על DevOps בדיוק בנוי בשביל זה.
יש לכם מונח שלא הופיע כאן, או שאלה על אחד ההסברים? אל תישארו לבד עם זה.