ארכיטקטורת Microservices עיצבה מחדש את הנדסת תוכנה מודרנית על ידי הסרת יישומים מונוליטיים לתוך שירותים קטנים, עצמאי פריסה גישה זו מאפשרת לצוותים לעבוד במקביל, רכיבים בקנה מידה סלקטיבי, ושחרור תכונות מהר יותר.עם זאת, המורכבות התפעולית של ניהול עשרות או מאות שירותים דורש אוטומציה חזקה עבור בנייה, בדיקות, פריסת קוד - זה המקום שבו משלוח מתמשך (CD) הופך קריטי לספק DevOps-in-in-to-to אסטרטגיות הפעלה DevOps, כדי לענות על ידי מעבדים מתקדמים של פונקציות אופטימיזציה של פונקציות מיקרו-תקני בקרה, כדי לבצע אופטימיזציה של פונקציות מיקרו-תחומית של פונקציות של פונקציות עיבוד מיקרוסקופיות.

מהו משלוח רציף במיקרו-שירותים?

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

אתגרים ב- Microservices Continuous Delivery

לפני צלילה למפרט Azure DevOps, חשוב להכיר במכשולים הייחודיים שמיקרו-שירותים מציגים:

  • (FLT:0) שירותים בין תלות: 1.FLT 1 שירותים לעתים קרובות לתקשר באמצעות APIs, תורי הודעה או זרמי אירועים. תיאום פריסות ללא הפרת חוזים הוא לא טריוויאלי.
  • (ב) מורכבות מבניין:0) 1FLT 1 כל שירות עשוי לדרוש מסד נתונים משלו, כאב או משאבים מותאמים, הגדלת מספר יחידות הפורסות.
  • (FLT:0) יציבות:FLT:1 פיתוח, מבחן, עוקץ, וסביבות ייצור חייב להיות דומה זה לזה כדי לתפוס בעיות מוקדם.
  • (הפסקה:0) וריצה: 1FIRLT (הפצה של שירות אחד לא צריכה להשפיע על אחרים, אך החזרה שינויים תוך שמירה על תאימות לאחור יכולה להיות קשה.
  • (ב) ⁇ :0) ⁇ : ⁇ 1 (לא ריכוזי, מדדים, וטריגה, קביעת שורש בעיות על פני שירותים מרובים הוא זמן-consuming.

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

Azure DevOps: An Review

Azure DevOps הוא פלטפורמה של Microsoft שמאגדת כלים לפיתוח תחת מטרייה אחת, כולל חמישה שירותים מרכזיים, כל אחד מהם משחק תפקיד במשלוח מתמשך:

  • (ב) ,0 ,00 דונם (ב) - מעקב עבודה ותכנון זריז.
  • (ב) ,0ürät Repositories with Branch Policy andמושך בקשות.
  • (FLT:0Zonee PipelinesFLT:1) - צינורות CI /CD לבניית, מבחן ופרוס, תמיכה לינוקס, macOS וסוכני Windows.
  • (ב) ,0 ,U) , עיין ב-[[1924]] ו[[1924]]
  • (ב) ,0ür (Eifacts) 1 (ב) 1: ניהול חבילה עבור Maven, npm, Nu Get, and Python.

בהקשר של microservices, Azure Pipelines הוא אבן הפינה, אבל השירותים האחרים לשפר את זרימת העבודה CD.לדוגמה, Azure Repos לאכוף מדיניות ביקורת קוד ביקורת, Azure Artifacts מארחת ספריות משותפות (למשל, חבילות פנימיות NuGet), ו- Azure Boards קישורים לשינויים לעבוד פריטים עבור מעקב.הפלטפורמה גם משלבת עם משאבים כגון הרישום, Kubnetes שירות (S), יישומי אינטרנט וירטואליים, אפשרויות עבור Microsoft-Macrecentric, ו-Firecrecrecreatives עבור אפשרויות בחירה.

הגדרת שליטה ב- Azure Repos

צינור תקליטור מוצלח מתחיל עם שליטה בגירסה אמינה. Azure Repos תומך הן Git והן Team Foundation Control (TFVC) עבור microservices, Git הוא האפשרות המועדפת בשל האופי המופץ שלה גמישות המיזוג.

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

שיטות בקרה של גירסה מרכזית ל-CDC כוללות:

  • מדיניות ברזיל:0 (Branch Policy: FLT:1) דורשת משיכת חוות דעת, בנייה מוצלחת ובדיקות מדיניות לפני מיזוג לתוך סניפי הראשי או השחרור.
  • (ב) אסטרטגיה של ההרחבה:0 (Branching Strategy: FLT:1 A GitHub Flow או GitFlowורי עובד טוב.שחרר סניפים (למשל, FLT:0) יכול לגרום צינורות פריסה לסביבות ספציפיות.
  • (ב) [17] , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇

Azure Repos משלב עם Azure Pipelines באמצעות קובצי שירות, כך שהתחייבות דחיפה יכולה להתחיל באופן אוטומטי בניית CI עבור השירות המושפע.

בניית קווי צינור CI /CD עם Azure Pipelines

המונחים: Code

Azure Pipelines תומך בהגדרות צינורות מבוססי YAML מאוחסנים לצד הקוד. גישה זו "פלי כקוד" מבטיחה גרסה, התחדשות ושיתוף פעולה. צינור CI /CD טיפוסי עבור מיקרו-שירות כולל שלבים: בנייה, הפעלת בדיקות יחידה, פרסום פריטים, פריסה לפיתוח, הפעלת בדיקות שילוב, פריסה כדי למריצים, להפעיל בדיקות עשן, ולבסוף לפרוס לייצור.

דוגמה מינימלית ל-YAML:

trigger:
 branches:
 include:
 - main
 - develop
 paths:
 include:
 - services/user-service/*

pool:
 vmImage: ubuntu-latest

variables:
 serviceName: user-service

stages:
- stage: Build
 jobs:
 - job: Build
 steps:
 - script: dotnet build
 - script: dotnet test
 - task: PublishBuildArtifacts@1

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

Multi-Stage Pipelines

Azure Pipelines מאפשר לך להגדיר שלבים מרובים (בניה, מבחן, עומק) בקובץ YAML יחיד. Approvals ושערים ניתן להוסיף בכל שלב כדי לאכוף את החתימות ידניות לפני פריסת הייצור.לדוגמה, פריסה ל staging עשויה לדרוש הפעלה אוטומטית מוצלחת, בעוד ייצור עשוי להיות צורך באישור של מנהל שחרור.שלבים יכול למקם או במקביל אם שירותים עצמאיים.

השתמש בקבוצות הסביבה כדי לכוון שירותים מרובים.לדוגמה, סביבה "ייצור" יכולה לכלול את כל אתרי השמות של AKS עבור microservices. Deployments לאותו סביבה ניתן לשער על ידי בדיקות בריאות לאחר כל עדכון שירות.

אסטרטגיות Deployment

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

Blue-Green Deployments

פריסה ירוקה כחולה כוללת שמירה על שתי סביבות זהות (כחול וירוק) בכל עת, רק אחת חיה.גרסה חדשה מופרסת לסביבה הלא פעילה, נבדקה, ולאחר מכן תעבורה עוברת. Azure DevOps יכול ליישם זאת באמצעות קבוצות פריסה או Kubernetes Namespaces. לדוגמה, צינורות לפרוס ל"ירוק" חריץ, מפעילה בדיקת בריאות, ולאחר מכן מעדכנת את העומס לנתיב החדש כדי לעבור את ההחלפה כחולה.

שחרורים Canary

(המכונה: Canary משחררת בהדרגה אחוז קטן של משתמשים לגרסה החדשה, בעוד שעוקב אחר מדדים כמו שיעורי שגיאה ומזל. Azure DevOps משתלב עם Azure App Service פריסת רווחים או תעבורת AKS פיצול. שלב יכול לפרוס לכדי תת-קבוצה של pods (למשל, 10% משקל) ולאחר תקופת תצפית, לקדם 100%.

עדכון הרולינג

עדכונים מתגלגלים להחליף מקרים של הגרסה הישנה עם החדש, להבטיח אפס זמן אם בדיקות בריאות נקבעות כראוי. Azure DevOps יכול להשתמש באסטרטגיה של עדכון מתגלגל (ההחלופה במשימות Azure DevOps Kubernetes) או פריסת שירות App עם Auto-swap. SetFLT:6 ו-FLT 7 בצנרת שלך כדי לשלוט בקצב העדכון.

דגלים

דגלים מורכבים פריסה מהפעלה תכונה.אתה יכול לפרוס קוד המכיל תכונות לא גמורות מאחורי מגע ולהפוך אותם כאשר מוכנים. Azure DevOps אינו מספק מערכת ניהול דגל מובנה, אבל זה משלב עם שירותים של צד שלישי (לאנצ'צ'ד, פיצול) או שאתה יכול להשתמש בניהול התכונה של Azure Appiguration.

תשתיות כקוד

Microservices לשגשג כאשר תשתיות הן אוטומטיות וגרסאות מבוקרות. Azure DevOps תומך בתשתית כמוקוד (IaC) עם תבניות ARM, Bicep, Terraform, ו-PETA. עבור microservices, לטפל בכל תשתית השירות (למשל, תוכנית שירות Azure App Service, מסד נתונים SQL, או Kubernetes Namespace) כיחידה נפרדת.

תרגול טוב ביותר הוא לאחסן הגדרות תשתית באותו רצף כמו קוד השירות. An AzurePiline יכול להיות שלב נפרד שפועל FLT:8 או FLT 9 לפני פריסת היישום.זה מבטיח את הסביבה הוא בדיוק כפי צפוי. Azure Key Vault לאחסן סודות כמו מחרוזת מסד נתונים ומושך אותם בזמן פריסה.

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

מכיל ותזמורת

Containers הם התאמה טבעית עבור microservices, מתן זמני ריצה עקביים על פני סביבות. Azure DevOps יכול לבנות תמונות Docker, לדחוף אותם לרישום Azure Container הרישום (ACR), ולהפיץ אותם ל- Azure Kubernetes Service (AKS) או תזמורתים אחרים.

דוגמה Docker בונה ודוחף את המשימה ב-YAML:

- task: Docker@2
 displayName: Build and push Docker image
 inputs:
 containerRegistry: 'ACR Service Connection'
 repository: 'my-user-service'
 command: buildAndPush
 Dockerfile: '**/Dockerfile'
 tags: |
 $(Build.BuildId)
 latest

בשלב מאוחר יותר, תרשים ה Helm או Kubernetes מתבטאים באמצעות משימת שירות Azure Kubernetes. השתמש ב- Helm עבור פריסות פרמטריות, המאפשר תצורה שונה לסביבה (למשל, ספירת העתק, מגבלות משאבים).

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

ניהול אבטחה וסודות

צינורות CD Microservices חייבים להתמודד עם מידע רגיש כגון מפתח API, מיתרי חיבור ותעודות. Azure DevOps משתלב עם Azure Key Vault כדי לאחסן באופן מאובטח ולאחזר סודות. השתמש בקבוצות משתנה ספריה הקשורות Key Vault: הצינור מביא סודות בזמן ריצה ומזריק אותם כמשתנים סביבתיים או מעלה אותם לתוך סודות Kubernetes.

בנוסף, Azure DevOps מציעה חיבורי שירות לניהול אימות שירותים חיצוניים (ACR, AKS, Azure Resource Manager) משתמשים ב- Azure AD Service Premiers או Identitys מנוהלת, תוך ביטול הצורך באישורים סטטיים בהגדרות צינורות.

בקרת גישה מבוססת תפקידים (RBAC) בתוך Azure DevOps מבטיחה שרק צוותים מורשים יכולים לשנות צינורות או לאשר פריסות ייצור.שלב זאת עם מדיניות סניף כדי לאכוף את חוות הדעת של קוד זה לקרות לפני גורמים CI /CD.

עקבו אחרי Feedback Loops

משלוח רציף אינו מסתיים בפריסה; זה דורש משוב על הבריאות וביצועים של שירותים. Azure DevOps משתלב עם Azure Monitor ו- Application Insights כדי לאסוף מדדים, יומנים, ועצמות.You יכול להגדיר שערי שלאחר deupment אשר בודקים את בריאות היישום לפני הכרזת שחרור מוצלח.

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

- stage: Deploy
 jobs:
 - deployment: Production
 environment: 'Production'
 strategy:
 runOnce:
 deploy:
 steps:
 - script: kubectl apply -f deploy.yaml
 on:
 failure:
 steps:
 - script: kubectl rollout undo deployment/my-service
 postDeploySteps:
 - task: QueryAzureMonitorAlerts@1
 inputs:
 connectedServiceNameARM: 'Azure subscription'
 ResourceGroupName: 'my-rg'
 SeverityFilter: 'Sev0,Sev1'
 TimeRange: 5

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

היתרונות והעיסוקים הטובים ביותר

יישום משלוח מתמשך עבור microservices עם Azure DevOps מביא יתרונות ברורים:

  • (FLT:0)Faster Time to-market:cioFLT:1) צינורות אוטומטיים להפחית מאמץ ידני ולאפשר מהדורות שירות מקבילים.
  • (הופנה מהדף LT:0) סיכון מופחת: 1 Smaller, שינויים מצטברים עם בדיקות אוטומטיות ויכולות רולבק מקטין את ההשפעה של הכישלון.
  • (ב) DevOps Azure DevOps יכול להתמודד עם מאות צינורות על פני שירותים וסביבות רבות.
  • (ב) [ה]:0] פלטפורמה בלתי מזוינת: (1) שליטה במקור, CI/CD, בדיקות, ניטור משולבים, מתן מעקב מקצה לקצה.

כדי להפיק את המרב של Azure DevOps עבור microservices, בצע את התרגילים הטובים ביותר:

  • (FLT:0) שמור צינורות מהר: 1FLT להשתמש ב- caching, ביצוע מותני, ומשרות מקבילים כדי להימנע מזמני בנייה ארוכים.
  • (FLT:0) ,Standardize תבניות:FLT:1 השתמש בתבניות YML כדי לשתף את השלבים הנפוצים של בנייה ופריסה על פני שירותים, צמצום השכפול וחוסר עקביות.
  • (ב) ,0) תשתיות של אמברס כקוד: FLT:1 תמיד אספקת סביבות באופן אוטומטי מקוד, לא באופן ידני.
  • (FLT:0) התאמות פריסה או פריסות צנריות: המחשה: 1:1 לבחון גרסאות חדשות לפני רולט מלא, ולשמור על היכולת לעבור מיד.
  • (ב) ⁇ :0) ממורמרים הכל: 1FLT:1 בדיקות בריאות, יומני, ומדדי ביצועים לתוך צינורות שלך כדי לתפוס בעיות מוקדם.
  • סודות:0 (סעיפים 1) לעולם אל תחסנו סודות בקוד המקור; השתמש ב- Key Vault ובקבוצות המשתנה.

מסקנה

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