structural-engineering-and-design
כיצד לעבור ממונוליטיקה לאדריכלות ללא שרת
Table of Contents
הבנת השינוי
ארכיטקטורות מונוליטיות כבר זמן רב כברירת מחדל לבניית יישומים, מגרד את כל ההיגיון, גישה לנתונים, ואת ממשק המשתמש לתוך בסיס קוד חד זוג הדוק, בעוד גישה זו מפשטת את ההתפתחות הראשונית והפריסה, היא יוצרת חיכוך משמעותי ככל שהיישומים גדלים.כל שינוי דורש בנייה מחדש ותיקון מחדש של היחידה כולה, קנה מידה הוא קושחית (אתה חייב את הסקאלה כולה אם אפילו רכיב אחד הוא רק תחת מהירות), כמו קוד פתוח).
אדריכלות ללא שרת מפצה את המודל הזה.במקום לנהל שרתים או מכולות תמיד, אתה לפרוס פונקציות בודדות שפועלות במכלים חסרי ערך, מופעלות על ידי אירועים כגון בקשות HTTP, שינויים מסד הנתונים או הודעות תור הודעה.ספק הענן מטפל בכל תשתית המספקת, מדרגת ותחזוקה. התוצאה היא מערכת שבה כל פונקציה יכולה להיות עצמאית, אתה משלם רק עבור זמן נכה, וניתן להתמקד קבוצות פונקציונליות קטנות.
המעבר ממונוליטיות לשרת ללא שרת הוא לא מספק פשוט; זה שינוי יסודי איך אתה מעצב, בונה ופועל תוכנה.הצלחה דורש תכנון שיטתי, הגירה מוגברת ונכונות לאמץ שיטות הפעלה תפעוליות חדשות.
למה לעבור ללא תשלום?
מעבר לתועלות הכותרת של דרוגיות ויעילות עלות, השרתים מציעים מספר יתרונות מבניים שמטפלים ישירות בנקודות הכאב של מונוליטיות:
- (FLT:0)Granular scaleing.FLT:1 במונוליטית, ספייקים במודול אחד לכפות את היישום כולו בקנה מידה, בזבוז משאבים.עם השרתים, כל פונקציה בקנה מידה עצמאי על בסיס עומס משלו.
- (ב) ,0) ,העברה התפעולית למעלה (FLT:1) אין שרת, תכנון קיבולת, או מעקב אחר שעות מעקב עבור מקרים בודדים.
- (FLT:0)Faster Time-to-market.cioFLT:1) פונקציות קטנות, עצמאיות יכולות להתפתח, לבחון ולהיסר על ידי קבוצות נפרדות ללא צווארי בקבוק תיאום.
- (ב) תמחור השימוש ב-Pay-per-use .FLT:1 , Idle function incur Zero Cost.
- (ב) כשלון:0 (בשיתוף פעולה) בסתרת אשמה (FeloLT:1) כשלון בתפקוד אחד אינו מתקפל לאחרים, בניגוד למונולית שבו דליפת זיכרון אחת יכולה להוריד את כל השירות.
לפני שתתחיל: אסתף אדריכלות נוכחית
הערכה קלה מונעת אסון.התחל על ידי מיפוי המונותל הקיים שלך כדי להבין את המבנה, את המהימנות ואת נקודות הכאב.
שקיפות וניתוח Coupling
השתמש בכלים ניתוח סטטי (למשל, גנרטורים גרף תלות) ו- Runtime profiling כדי לזהות הפיכה הדוקה בין מודולים.חפש schemas מסד נתונים משותף, משתנים גלובליים, שיחות שירות קשיחות.אלה חייבים להיות שבור לפני שאתה יכול לחלץ פונקציות.
זיהוי מועמדים מתאימים להגירה ראשונה
לא כל חלק של המונותולית צריך להיות מועבר ראשון.מועמדים אידיאליים הם חסרי מדינה, יש להגדיר בבירור גבולות, ולדאוג לפונקציונליות שהיא עצמאית מבחינה הגיונית.
- הודעות דואר אלקטרוני
- צילום או קובץ עיבוד צינורות
- שינוי נתונים ודיווח משרות
- אינטגרציה של צד שלישי
להימנע מהובלת פעולות ממשלתיות, תהליכים ארוכי טווח, או רכיבים עם תבניות גישה מסד נתונים עמוק עד שהקימה דפוסי טיפול בנתונים ללא שרת.
Define Success Metrics
הגדר מטרות מדידה: להפחית את זמן הפריסה ב- X אחוזים, לקצץ בעלויות של Y, שיעורי שגיאה נמוכים יותר בתפקוד ההגרה, או לשפר את הכדאיות עבור משתמשי הקצה.
אסטרטגיות עבודה
שוברים מונוליטית לתפקודים חסרי השרתים אינו זהה למיצוי של מיקרו-שירותים.תפקודים ללא שרת הם אפילו יותר גריניטרית.
סטרנגלר Fig Pattern
דפוס ה-Fig חנק, פופולרי על ידי מרטין Fowler, מאפשר לך להחליף בהדרגה את הפונקציונליות מונוליטית עם שירותים חדשים בעוד המערכת הישנה נשארת מבצעית.You ליירט שיחות לנקודת קצה מונוליטית מסוימת ולסלול אותם לתפקוד חדש ללא שרת. ברגע שהתפקוד מוכח, אתה יכול לבטל את הקוד המקורי.
עיצוב דומיין-Driven ו- Bounded Contexts
השתמש בעיצוב מונחה דומיין (DDD) כדי לזהות קונטקסטים כבולים בתוך המונוליטית שלך.כל ההקשר המושרה מייצג אזור קוהיבי של לוגיקה עסקית עם מודל הנתונים שלה. לחלץ כל ההקשרים שלמים כשירותים ללא שרת.זה מקטין את פני מסנכרון נתונים ושומר על כללי עסק מחלחלים.
הפקה: Event-Driven Extraction
אם המונותולית פולטת אירועים (או שאתה יכול להוסיף קובצי אירוע), אתה יכול לחלץ פונקציונליות כמו פונקציות השרתים מונעות אירוע.לדוגמה, להחליף שיחה סינכרונית לשלוח דוא"ל בברכה עם פונקציה שמקשיבת לאירוע "משתמש.יצור".המונוליט מפרסם את האירוע וצעדים עליו; הפונקציה השרת מטפלת במייל באופן סינכרוני.
תוכנית הגירה של שלב-בי-צעד
הגירה מוצלחת עוברת חתיכה על ידי חתיכה, עם שערי אימות בכל שלב.
1. הקמת תשתית במקביל
הגדר את הפלטפורמה ללא השרת שלך (AWS Lambda, Azure Functions, Google Cloud Functions) לצד רשת מונוליטית הקיימת שלך, כדי ששני המערכות יוכלו לתקשר (למשל, באמצעות VPC, באמצעות ממשקי קצה פרטיים, נקודות קצה פרטיות, או שער API משותף). מקביל זה מסלול מקבילה מאפשר לך לבחון שיחות בין-תפקוד ללא מפריע למשתמשים.
צור שער API כ- Facade
השתמש בשער API בענן (כמו HP API Gateway או Azure API Management) כדי להציג את הפונקציות המונוליטיות שלך ואת פונקציות השרת החדשות שלך בהתחלה, השער נתיב את כל התנועה למונוליטית.כפי שאתה נודד כל נקודת קצה, אתה משנה את החסימה כדי להצביע על הפונקציה החדשה.השער לאכוף אימות עקבי, קצבי, וחיתוך פני שני העולמות.
3.הפעלת חסר המדינה הראשונה
התחל עם המועמדים בסיכון נמוך מזוהה מוקדם יותר עבור כל פונקציה:
- לכתוב פונקציה חדשה ללא שרת שמשכפלת את ההתנהגות המדויקת של מודול מונוליטית.
- הוסף דגל או חוק חסימה אשר שולח אחוז קטן של תנועה לתפקוד החדש.
- השוואת תפוקה, לביות ושיעורי שגיאות נגד בסיס מונוליטי.
- בהדרגה להגדיל את התנועה עד שהתפקוד מטפל ב-100% מהבקשות, ולאחר מכן מסלק את הקוד המקורי.
4. Handle State and Data
חוסר מצב הוא טנט ליבה של השרתים, אך היישום שלך כמעט בוודאות זקוק לנתונים מתמשכים.אסטרטגיות כוללות:
- (FLT:0)Externalize המדינה לניהול מסדי נתונים.IRLT:1) השתמש ב-AWS DynamoDB, Azure Cosmos DB, או Google Cloud Firehouse.
- (FLT:0) לאחר מכן עקביות.FLT:1 כאשר אתה מחלק מסד נתונים מונוליטי לתוך חנויות מרובות, אתה מאבד עסקאות ACID על פני ההקשרים.
- (FLT:0) השתמש בהעברת נתונים לשינוי (CDC) .FLT ( 1 Tools like Debezium) יכול לייעל שינויים ממסד הנתונים המונוליטי שלך לפונקציות ללא שרת, המאפשרות הגירה הדרגתית של גישה לנתונים.
5. משרות רקע מגרות ומשימות ממותג
Monoliths לעתים קרובות להפעיל עבודות קביעות או תהליכים אצווה. להחליף אותם עם פונקציות קבועות (AWS EventBridge לוח זמנים, Azure Timer Trigger, Google Cloud לוח זמנים).
יישום סוף-סוף בדיקות ותוכניות רולבק
כל צעד הגירה חייב להיות הפיך.שמור את נתיב הקוד הישן חי עד שאתה בטוח את הגרסה ללא השרת ביצועים כראוי. השתמש במהדורות canary או כחול ירוק דפוסים פריסה.אוטומטית עבור מדדים כמו עלייה בקצב שגיאות, מהירויות לב, או עלות aomalies.
בחירת הפלטפורמה הנכונה ללא Server
ספקי הענן העיקריים מציעים הצעות לשרת בוגר, אך הם שונים במערכת האקולוגית, תמיכה בשפת התכנות וקצבות.
- (עם שער API, EventBridge, SQS, S3 מעורר) - הטוב ביותר עבור יישומים כבר על AWS. Supports Node.js, Python, Java, Go, Ruby, .net, ו- Runtimes מותאם אישית. Cold Start latency הוא כ-200-500ms עבור רוב ה-Runtimes; מטבע מבוזר יכול להפחית אותו.
- (FLT:0Zonee FunctionsveFLT:1) - משתלבת הדוק עם שירותי Azure (Blob Storage, Service Bus, Cosmos DB) מציעה פונקציות עמידות עבור תזמורות.
- (FLT:0) Google Cloud FunctionseurFLT:1 (כיום תומך ב-Cloud Run for Containized function) - פריסה פשוטה, שילוב קל עם Firebase ו- BigQuery.Good for Event-oriented Applications and Dataצנרת.
- (FLT:0Cloudflare WorkersFLT:1) רץ בקצה, תת-עשרה מתחיל קר, אבל עם מגבלות על זמן ביצוע (30 שניות). אידיאלי עבור שערי API ועיבוד קל משקל.
להעריך כל אחד בהתבסס על הכישורים הקיימים של הצוות שלך, דרישות הציות שלך (תשבות נתונים, הסמכה), ועלות כוללת של בעלות בהתחשב בנפח הבקשה ומשך ביצוע.
Best Practices for a Smooth Transition
לשמור על חוזים ברורים
חוזים API Define (OpenAPI או GraphQL) עבור כל פונקציה.זה מאפשר לאבולוציה עצמאית ומאפשר לצוותים לעבוד במקביל. השתמש באימות של סכימה בשער ה- API שלך כדי לאכוף חוזים.
אוטומטי הכל
תשתיות כקוד (AWS CDK, Terraform, Pulumi) חיוני עבור פריסות ללא שרת, בדיקות, וגלגלות. השתמש צינורות CI /CD כי פריסת פונקציות באופן עצמאי.זה מקטין את השגיאה האנושית ומזרז את ההסרה.
אבטחה ראשונה
החל תפקידי IAM לפחות לכל פונקציה.הצפנת נתונים של Enforce במנוחה ובמעבר. השתמש במנהל סודות (מנהל סודות של AWS, Azure Key Vault) במקום משתנים סביבתיים עבור תצורה רגישה.
מיומנויות צוות וחשיבה
מפתחים שהתרגלו למונוליטיות לעתים קרובות נאבקים עם תפקוד גרפיטי, ניהול המדינה, ו debugging מערכות מבוזרות. Invest in Training: Event-oriented design, observability Tools (מופץ מסלול, כניסה), ובדיקת אסטרטגיות עבור מהנדסים חסרי שרת. pair מנוסים עם מפתחים מסורתיים במהלך הגירה.
מלכודות נפוצות להימנע
- (FLT:0)Cold מתחיל הפתעות נדיבות.FreaLT:1 פונקציות אשר מופעלות באופן בלתי צפוי עשויים לקחת שניות כדי להתחיל. Mitigate עם קונפדרציה מספקת עבור פונקציות רגישות לעקביות או להשתמש בפונקציות ענן סינכרוניות (Cloud Run) כי לשמור מקרים חמים.
- (FLT:0)Vendor Lock-in.FLT:1 מסגרות ללא Server לעתים קרובות קשורות מאוד לשירותי ספק בענן.R.A.ex Away ספק-specific Code באמצעות אובייקטים האירוע / ה-context של הפונקציה, ולשמור על לוגיקה עסקית בפונקציות טהורות. שקול אמצעי זהירות כמו מסגרת Serverless Framework או AWS Lambda Powertools המספקים דפוסים ניידים.
- (FLT:0Misunderstanding Cost.FLT:1נמוך עלויות ל-request נמוך יכול להוסיף אם יש לך פונקציות בעלות ביצועים גבוהים עם זמני ביצוע ארוכים.מודל עומס העבודה הצפויים שלך (בממוצע משך, זיכרון שהוקצה) באמצעות מחשבון התמחור של הספק לפני ביצוע.
- (FLT:0) ,Neglecting observability.BuilddFLT:1 ; יומן יישום מונוליטי הוא פשוט: לבדוק שרת אחד עם מאות פונקציות, אתה צריך ריכוזיות, לוחות נתונים מטריים, וטריגה מבוזרת. להגדיר את הכלים האלה מיום אחד, לא אחרי בעיות מתעוררות.
- (FLT:0) בעת התחדשות גדולה במפץ גדול.BuildFLT) 1 מצב הכישלון הנפוץ ביותר. Resist את הדחף לשכתב מחדש את כל המונוליטים בבת אחת.הגירה של Incremental מפחיתה את הסיכון, משמרת המשכיות עסקית ומאפשרת לצוות שלך ללמוד מטעויות מוקדמות.
מעקב ושקיפות בעולם החדש
מערכות ללא שרת מייצרות נתונים רבים יותר מאשר מונוליטיות.מיישם את השכבות האלה:
- (FLT:0) החלפה של ההרחבה.FLT:1 כל פונקציה חייבת להניב יומני JSON עם תעודות זהות תואמים, לבקש תעודות זהות וגרסה פונקציה. Centralize יומניs בכלי כמו CloudWatch Logs, Azure Log Analytics, או פתרון צד שלישי (כלב נתונים, Sumo Logic).
- (FLT:0)Distributed tracing.cioFLT:1) השתמש ב-AWS X-Ray, Azure Application Insights, או Google Cloud Trace כדי לדמיין את בקשות הקצה מקצה לקצה כפי שהן עוברות דרך פונקציות מרובות ושירותים מנוהלים.זוהי הדרך היחידה ל debug latency Bottlenecks וכישלונות מתקפלות.
- (FLT:0) מסובכות ואזהרות.FLT:1 [ה] ספירת הייעוד, שיעור השגיאה, משך, אירועים מכווצים, ועלות לתפקוד. Set התראות עבור אנומליות.חשבו על מדדים עסקיים כמו השלמת סדר מוצלח, לא רק שגיאות טכניות.
- (FLT:0) לוחות המחוונים של FLT:1 להשתמש בכלים של עלות ענן או פלטפורמות צד שלישי (CloudHealth, Vantage) כדי לעקוב אחר ההוצאות על תפקוד ועל צוות.
שיקולים ארוכי טווח
לאחר הגירה, המודל המבצעי משתנה באופן משמעותי.אין שרתים לתיקון, אבל עליך לנהל:
- (FLT:0Function versioning and aliasing.archFLT:1) השתמש פריסות צנריות כדי לגלול גרסאות פונקציה חדשות בהדרגה.לנהל את ההליות (למשל, "PRODUCTION", "STAGING") כדי להצביע על גרסאות יציבות.
- (ב) לכל חשבון יש גבול קונפליאלי אזורי לתפקוד.תוכנית לספיצי תנועה על ידי בקשה להעלאת עלויות מראש.
- (FLT:0)Cold מתחיל כוונון.FLT:1eur באופן קבוע ביקורת הקצאת זיכרון (אשר משפיע גם על הקצאת CPU) ובחירת זמן ריצה.לדוגמה, Python מתחיל קר איטי יותר מאשר Node.js. השתמש Lambda SnapStart עבור פונקציות Java או מתן מטבע coned עבור נתיבים קריטיים.
- (FLT:0) אתגרים עקביים של נתונים.FLT:1 בסופו של דבר מערכות עקביות דורשות תכנון חוויית משתמש זהיר. קוגניט למשתמשים כי כמה פעולות (כמו חיפוש אינדקס לאחר כתיבת) עשויות להיות כמה שניות של עיכוב.
מסקנה
מעבר ממונוליטי לאדריכלות חסרת שרת אינו פרויקט יחיד אלא מסע מתמשך של שיפור מצטבר.זה דורש חשיבה מחדש על עיצוב יישומים, אימוץ שיטות תפעוליות חדשות, והשקעה בעקביות ואוטומציה.השלם - דרוגנות גבוהה, צמצם תפעולית מופחתת, ואספקה מהירה יותר - הוא משמעותי לארגונים שמצביעים על כך שהתחלתם עם פונקציות קטנות, ללא הגבלת זמן, שימוש במנגנון זה יכול למזער שיפור מתמיד של שינוי, ופתרון קבוע, עם שינוי מתמיד של שינוי, עם תכנון יעיל יותר, עם תכנון, עם שינוי מתמיד, ופתרון יעיל יותר, ופתרון יעיל יותר, עם שינוי מתמיד, עם תכנון יעיל יותר, עם שינוי, עם תכנון יעיל יותר, עם שינוי, ואפקטיבי קבוע, עם שינוי, עם תכנון יעיל יותר, הוא יעיל יותר, עם תכנון יעיל יותר, עם שיפור מתמיד, עם תכנון יעיל יותר, עם שיפור מתמיד, עם שיפור מתמיד של שינוי יעיל יותר, ואפקטיביות קבוע, עם שיפור מתמיד, עם תכנון מחדש של פעילות גופנית, ואפקטיביות, עם תכנון יעיל יותר, עם שינוי מתמיד של פעילות גופנית, עם תכנון מחדש של פעילות גופנית, עם תכנון יעיל יותר, עם תכנון יעיל יותר, ואפקטיביות, עם התקדמות ללא שינוי מתמיד, הוא יכול להיות יעיל יותר, ואפקט
(ב) לעיין בתבנית המקורית של [[המאה ה-1]], [[1924]]]], [[1924]]]], [[1924]]]], [[1924]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]]]]]], [[1924]]]]]], [[1924]]]], [[1924]]]], [[1924]]]]]]]], [[1924]]]]]]]]]]]]]]]] ו[[1924]], [[1924]], [[1924]], [[1924]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]