Table of Contents

אתגר החוסן ב- Serverless Computing

מחשוב Serverless עיצב מחדש את האופן שבו מפתחים בונים ופרוסים יישומים על ידי ניהול תשתיות מופשטות ומציעים פלטפורמות אוטומטיות של פלטפורמות כמו AWS Lambda, Azure Functions ו-Google Cloud Functions מאפשרות לצוותים להתמקד בלוגיקה עסקית תוך תשלום רק לשימוש בפועל.עם זאת, מודל זה מציג אתגרים ייחודיים של עמידות מעגלית.תפקודים הם חסרי מצב, אפסיים, ולעתים קרובות לתקשר על פני שירותים מבוזרים - אי-ספיקות אחת יכולה להיות יעילה של קודר, כדי למנוע תקלות, כדי למנוע תקלות, כדי למנוע את היתרונות של קודרים פשוטים, כדי למנוע תקלות, כדי למנוע תקלות, לחץ אחד, לחץ אחד, לחץ דם, לחץ דם, לחץ דם, כדי למנוע תקלות, לחץ אחד, כדי למנוע תקלות, לחץ אחד, לחץ דם פשוט, לחץ דם קלושים, לחץ דם פשוט, לחץ דם פשוט, לחץ דם קלושים, הם בהכרח, כדי למנוע.

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

הבנת תבנית השבירה המעגלית ב- Depth

דפוס השבירה המעגלי היה פופולרי על ידי מייקל Nygard בספרו (FLT:0)Release It!ve!FLT:1 ומאוחר יותר פורמציה בדפוסים של ענן-native.It מתנהג כמו פורץ מעגל חשמלי: כאשר מעגלים מזהים פגם (למשל, קצר), הוא פותח ומעצור את זרימת התוכנה הנוכחית.

  • (ב) ⁇ :0) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
  • (ב) [ה]: [ה] [ה]], [הבקשה] [ה] [ה] [ה]] [ה]]] [ה]] [ה]]]]] [התחילה] [ה], [ה], [ה], [ה], [ה]], [הההההההה]], 30 שניות], מעברי"הדורות" (ב"ה', כ"ה'] ל'], כ"ה'], כ"ה'[ה'], כ"ה'], כ"ה', כ"ה'[ה'], כ'[ה'[ה'], כ'], כ"ה'], כ'[ה'[ה'[ה'], כ'], כ'], [ה'[ה'], [ה'], כ'[ה'], כ'], [ה'], כ'], כ'[ה'[ה'], [ב'[ה'[ה'[ה'], כ'[ה'[ה'[ה'[
  • (ב) ניתן ל[[1924]]: [[1924]]]], מספר מוגבל של בקשות למשפט, אם הן מצליחות (בקביעת קריטריונים להצלחה), המעגל מתאפס על מנת ליישב:2ClosedFLT 3: 3 (אם הכשלונות נמשכים, הוא חוזר ל-FLT:4 OpenFLT:5 והזמן הוא לעתים קרובות מתבטל או מוחלף.

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

[01:0] מאמרו המלא של מרטין פאולר על שבר המעגל BreakerFLT:1 נשאר ההתייחסות הבסיסית.הוא מסביר כיצד התבנית משתלבת עם דפוסים אחרים של חוסן כמו Retry ו-Bolkhead.

« « TERMS OF Tuning

כל יישום פורץ מעגל חושף פרמטרים ניתנים לזיהוי שיש להתאים להתנהגות היישום שלך:

  • (ב) ,0) ,(ב) ,(ב) ,ב) ,(המספר של כישלונות רצופים (או מעל חלון) כדי לפתוח את המעגל.
  • פרק 1:0 (זמן) אורך: 1: כמה זמן המעגל נשאר פתוח לפני המעבר ל-חצי פתוח.
  • סעיף 1 (ב) מספר הבקשות המוצלחות הנדרש לסגירת המעגל.
  • (ב) מה זה אומר:0 (הפסקה: 1) אילו תגובות נחשבות כשלונות? 5xx בלבד? 4xx? 4xx? (בדרך כלל רק שגיאות של השרת).
  • (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇

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

הטמעת שוברי המעגל בסביבה ללא Server

יישום פורץ מעגל בארכיטקטורה ללא שרת דורש להתאים את התבנית למגבלות הפלטפורמה.We'll מכסה שלוש גישות עיקריות: באמצעות תכונות API מנוהלות, תוך מינוף ספריות של צד שלישי בתוך קוד הפונקציה שלך, והפעלה של שירותי תזמורת כמו פונקציות של AWS Step.

גישה 1: API Gateway-Level Throttling ו-Breaks

שער API של AWS יכול לפעול כשבר מעגל נדיר על ידי בקשות מתעתקות לתפקוד של Lambda backend. כאשר הפונקציה מחזירה יותר מ 5xx שגיאות או מעבר לגבולות מטבע מבוזר, ניתן להגדיר את שערי API כדי להחזיר תגובה נופל (למשל, הודעה סטטית ממחבר מותאם אישית או תגובה אינטגרציה).

דוגמה: הגדר תוכנית שימוש ב- API Gateway עם גבול ומגבלת קצב מתפוצצת המשקפת את יכולת ההחזר שלך.כאשר הפונקציה Lambda מוצפת, API Gateway מגיב עם FLT:0 מיד, מתנהג כמו פורץ דרך אחד.

2 תגובות על In-Function Circuit Breakers with Libraries

הגישה הגמישה ביותר היא להטמיע ספריית שוברת מעגלים בתוך פונקציות Lambda שלך. כי פונקציות Lambda הן ללא תנאי ואופקיות, מדינת שובר המעגל חייבת להיות מאוחסן חיצונית כך שכל ייעוד יכול לבדוק את המדינה הנוכחית. דפוס משותף משתמש ב-FLT:0) אמזון דינמוייב (DymoDBFLT:1) (או Redis with ElastiacheC) כדי להמשיך את המעגל על פני תפקוד המדינה במילוי.

עבור Node.js, The FLT:0[OpossumFLT] Library הוא פורץ מעגלים בשימוש נרחב.It תומך בתפקודי Fallback, Timeout ו- נפח.כאן יישום פשוט מותאם עבור AWS Lambda:

const CircuitBreaker = require('opossum');
const AWS = require('aws-sdk');
const dynamo = new AWS.DynamoDB.DocumentClient();

const circuitBreakerState = {
 state: 'CLOSED',
 failureCount: 0,
 lastFailureTime: null
};

// Persist state in DynamoDB after each transition
async function persistState(newState) {
 await dynamo.put({
 TableName: 'CircuitBreakerState',
 Item: { serviceId: 'payment-service', ...newState }
 }).promise();
}

async function loadState() {
 const data = await dynamo.get({
 TableName: 'CircuitBreakerState',
 Key: { serviceId: 'payment-service' }
 }).promise();
 return data.Item || circuitBreakerState;
}

// The actual downstream call
async function callPaymentService(payload) {
 const http = require('axios');
 const response = await http.post('https://payment.example.com/charge', payload);
 return response.data;
}

// Circuit breaker options
const options = {
 errorThresholdPercentage: 50,
 resetTimeout: 30000,
 volumeThreshold: 10
};

// Create breaker with external state integration (simplified)
const breaker = new CircuitBreaker(callPaymentService, options);

breaker.fallback(() => ({ error: 'Payment service unavailable, order processed in offline mode' }));

exports.handler = async (event) => {
 // Load state from DynamoDB and update breaker
 const savedState = await loadState();
 // Opossum doesn't natively restore state; you'd need to implement a wrapper.
 // For brevity, assume the breaker is fresh per function invocation but uses external checks.

 // In production, use a shared cache with TTL instead of per-invocation state load.
 return breaker.fire(event.body);
};

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

גישה 3: AWS Step Functions - Orchestration-Level Circle Breaker

עבור גלגולי עבודה רב-שלביים (למשל, בדיקת מסחר אלקטרוני), פונקציות AWS Step יכולות לעצב שובר מעגל כמכונה מדינה.מצב FLT:2 יכול לבדוק דגל או דגל המאוחסנים בטבלה דינמוDB.אם ספירת הכשל עולה על סף, זרימת העבודה מפנה לנתיב נופל (למשל דוא"ל, תור ניהולי, לעיבוד ידני) מספק שירות רחב יותר.

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

אתגרים ללא תשלום ופתרונות

  • (FLT:0)Cold מתחיל: FLT:1 המדינה שוברת המעגל צריך לשרוד את הפונקציה למשל מחזור. השתמש במצב חיצוני עם TTL קצר כדי לסגור אוטומטית את המעגל לאחר תקופה של פעילות.
  • (FLT:0)Concurrency:cioFLT:1 , מקרים רבים של תפקוד עשויים לבדוק ולעדכן את המדינה בו זמנית. השתמש במנעול אופטימי (ביטויי מצב DynamoDB) או דפוסים של עלייה אטומית / הכרעה.
  • (FLT:0) Cost:igFLT:1 כל בודק המדינה מוסיף קריאה / כתיבת עלויות.Cache המדינה בתוך אמפורה עם קוצר רוח (למשל, 1 שנייה) באותו אופן פונקציה כדי להפחית את דינמוDB קורא, אך מקבל בסופו של דבר עקביות.
  • (FLT:0) ,Timeout granularity:FLT:1 , Lambda פונקציות יש זמן ייעוד מקסימלי (15 דקות). רצף מחזורי זמן צריך להיות הרבה יותר קצר (שניים) כדי למנוע החזקת פתוחה הפונקציה.

היתרונות של שימוש ב-Crererectioners

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

עמידות משופרת - מניעת כישלונות של קשיש

שרשרת ללא שרת הן שבריריות.אם שירות A קורא B, ו- B קורא C, ו- C נכשל, הכישלונות propagates. a Circle breaker על שיחת B ל- C יגרום ל- B לפתוח את המעגל לאחר כמה כישלונות.עכשיו, בקשות מ-A ל- B נדחות מיד עם נפילה, למנוע B מתישות מגבול המטבע שלה ולהפוך לצוואר.

שחזור מהיר יותר – הגשמה עצמית ללא עריכת ידני

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

חוויית המשתמש המוגברת - Graceful Degradation

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

חיסכון בעלויות - הימנעות מביטולים

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

Best Practices for Deploying Circle Breakers

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

כישלונות מועדפים ומכשולים

סף בסיס על SLAs ריאליים.לדוגמה, אם שירות מטה הזרם שלך מכוון ל-99.9% מהזמן, סף של 5 כישלונות לדקה עשוי להיות רגיש מדי (זה יכול לפתוח במהלך שבריריות קטנות) להתחיל עם סף גבוה יותר (למשל, 20% שיעור השגיאה מעל חלון של 1 דקות) ולהתאים את השימוש ב-Timeouts בזמן מעקב.

« « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « «

כל בקשה פתוחה-הקורסית צריכה להיות נפילה.אפשרויות כוללות:

  • Retrieve דחוס נתונים (מ-ElastiCache, CloudFront, או מסד נתונים).
  • עיין בבקשת עיבוד מאוחר יותר (למשל, SQS DLQ).
  • החזרת ערך ברירת מחדל או תגובה סטטית.
  • הפניה לגרסה מוזנחת של התכונה (למשל, אישיות בלתי ניתנת להפרדה).

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

עקבו אחרי Log Circuit States

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

שילוב עם תבניות עמידות אחרות

  • (ב) [ה]ה' [ה']'[דרוש מקור]'[דרוש מקור] [ב]], [ב[[1924]]], [[1924]], [[1924]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]], [[1924]], [[1924]], [[1924]]]]]]]], [[1924]]]]]]]] [[1924]]]]]]]]]]]]]]]]]]]]]] [[1924]]]]]]]] [[[[1924]]]]]] [[1924]]]]]]]]]] [[[[1924]]]]]]]]
  • (FLT:0)Bulkhead: 1FLT:1 משאבים בלתי פתורים על ידי פונקציה או שירות.לדוגמה, שמורה על גבול מטבע עבור פונקציות קריטיות לעומת תפקודים לא קריטיים. כאשר מעגל נפתח, הוא מפחית עומס על השירות הכושל, למנוע ממנו להשפיע על חלקים אחרים של המערכת.
  • [ה]מסלול:0]Timeout: (ראה: 1:1 ), תמיד קבע זמן על שיחות מטה הזרם - קצר יותר מחלון הכישלונות של השופר.
  • (FLT:0) לבדוק נקודות קצה: FLT:1hil להשתמש בתהליך רקע (למשל, אירוע מתוכנן ענן צפה) כדי להפעיל באופן זמני נקודת סיום של בדיקת בריאות.אם בדיקת הבריאות נכשלת, פתחה את המעגל לפני שמשתמשים מושפעים.

בדוק את שובר המעגל שלך תחת כישלון

הנדסה של כאוס היא החבר שלך. השתמש בכלים כמו AWS Fault הזרקת סימולטור (FIS) כדי להזריק כישלונות לתוך השירותים שלך למטה הזרם ולהתבונן בהתנהגות שוברת המעגל.

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

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

השתמש בחנות המדינה החיצונית עם TTL

ללא שרת, אתה לא יכול להסתמך על הזיכרון המקומי על ייעודים. השתמש ב-DymoDB, ElastiCache for Redis, או שירות שנעשה כמו Eureka. Set a Time-to-Live (TTL) על הרשומה המדינה כך שאם הפונקציה שלך אינה פעילה לתקופה ארוכה, המעגל באופן אוטומטי מתאפס כדי לסגור.זה מונע מצב פתוח מחסימת תנועה לאחר שירות התאושש.

מסקנה

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

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