הבנת הנוף ללא בעיות Serverlessshooting

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

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

קוד פתוח: גורמים, מדידה, ומייגציה

מה טריגר מתחיל קר

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

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

השפעה קרה מתחילה

(הופנה מהדף ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇

כלי ההרחבה של אמזון CloudWatch LogsFLT:1 ו-FLT:2DatadogsFLT 3 מאפשר לך לסנן את הייעוד הראשון של פונקציה לאחר פערים, בונה אחוז של עמותות קרות ואת החדירה החציונית שלהם מעל ראש.

אסטרטגיות לצמצום הגישות של ה-Cretency

  • (FLT:0) צמצום חבילת הפריסה בגודל של 1FLT:1, הסרת ספריות לא בשימוש, השתמש חלופות קלות יותר במידת האפשר, ומנף את שכבת Lambda עבור תלות משותפת כי הם כבר חמים על הפלטפורמה.
  • (ב) ,0) ,Use mited concurrencyFLT:1 - שמור מספר תצורה של מקרים של תפקוד חם.זה מבטל את תחילת הקר עבור אלה חריצים אבל מוסיף עלות (לשלם עבור מקרים חמים גם כאשר idle).
  • (FLT:0)Optimize קוד ההפעלה של ה-StarFLT:1 - Defer Heavy ראשוניזציה (קשרי בסיס נתונים, לקוחות SDK) באמצעות טעינה עצלנית.
  • (FLT:0)Choose מהירים יותר בריצה מהירה יותר של צומת:1 - Node.js ו Python בדרך כלל יש התחלה קרה מהירה יותר מאשר Java או .NET. עבור שבילים קריטיים לעקביות, לשקול לכתוב את הפונקציה בזמני ריצה קלים יותר.
  • (FLT:0)Use VPCibve בחוכמה FLT:1 - פונקציות בתוך VPC לעתים קרובות ניסיון קר יותר מתחיל כי הפלטפורמה חייבת לצרף ממשק רשת אלסטיאלס.אם הפונקציה שלך אינה זקוקה למשאבים של VPC, להפעיל אותו מחוץ ל-VPC.

התייחסות חיצונית:0 (AWS Lambda Runtime DocumentsFLT) 1 מספק פרטים על מחזור החיים הראשוני.

הוצאות להורג וניהול תפקוד

איך הזמן מנבא הכי

פלטפורמות ללא שרת לאכוף את משך ההוצאה המקסימלית: AWS Lambda ברירת מחדל ל-3 שניות (מקסימום 15 דקות), פונקציות ענן של גוגל מאפשרות עד 60 דקות, ו- Azure Functions יש ברירת מחדל של 5 דקות עבור HTTP (עם תוכנית שירות App המאפשרת יותר) כאשר פונקציה עולה על זמן מוגדר שלה, הביטול הוא נגמר ו-F:0TimeoutphtalF:1 הוא לעתים קרובות פגום בתהליכים חלקיים, או חלקית, כותב נתונים.

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

אבחון גורם

התחל על ידי סקירה של יומני פונקציה.חפש את ההודעה 1 1 (Lambda) או שווה ערך.להגדיל את זמן באופן זמני כדי לאפשר את הפונקציה להשלים, ולאחר מכן לבדוק את גרף משך הזמן כדי לראות איפה הזמן הוא בילה. השתמש מסלול מבוזר (AWS X-Ray, Azure Application Insights) כדי לאתר את התלות האיטית ביותר.

עבריינים נפוצים:

  • (ב) עיין ב-[[1924]], [[1924]], [[1924]]]], [[1924]], [[1924]]]], [[1924]], [[1924]]]]]]
  • (ב) ,0) שיחות API חיצוניות (External API) 1FLT:1 – שירותים של צד שלישי איטיים או לא מגיבים.
  • (ב) ,0) ,Large payload processingFLT:1 , פרסלינג קבצים ענקיים של JSON או הפעלת אלגוריתמים CPU-intensive.
  • (ב) ,0) סערות של מילואים (FLT:1) - קוד שהדהד נכשל בפעולות ללא החזר אקספוננציאלי, מה שגורם לאותו פעולה לחסום את כל זמנו.

גישה מיידית

  • (FLT:0) הגבלת זמן רק כאתר אחרון של ®WalveFLT:1) - זמן ארוך יותר מסיכה בעיות בסיסיות ויכולת פלטפורמה פסולת.
  • (FLT:0)Use asynchronous עיבוד: 1) - עבור זרימות עבודה העולה על גבולות מקס, לשבור לעבוד לתוך נתחים קטנים יותר באמצעות פונקציות שלב (AWS) או פונקציות דורות (אזור) זה גם משפר את יכולת הסקאלה.
  • (FLT:0)Set Customer-side timeoutsph:1) - שיחות HTTP, חיבורי מסד נתונים ו- SDK לקוחות לזמן מוקדם.אל תתנו לתלויה איטית אחת לצרוך את משך הפונקציה כולו.
  • (ב) [ה]:0] ,החזרה מעצמן ו-JitterFLT:1] – כאשר הם מנסים מחדש, ממתינים יותר ויותר ומוסיפים אקראיות כדי להימנע מבעיות רעמים.

התייחסות חיצונית:0 ((00)תפקודי זמן (Timeoutתיעודs) מספר 1:0) מסביר התנהגויות שונות של זמן התוכנית.

ארכיון תגיות: Memory, CPU, and Storage Limits

זיכרון ו CPU Correlation

ברוב הספקים חסרי השרתים, הקצאת זיכרון קובעת גם את הקצאת CPU. פונקציה עם 128 MB מקבל חלק של CPU בהשוואה לאחד עם 1024 MB. Insufficient Memory מובילה ל-FLT:0Out ofMemoryFLT שגיאות 1:1, איסוף אשפה מתפוגג (Java, .NET), או תהליכים לא מגיבים (Nodejs).

מגבלות אחסון חלות גם: AWS Lambda מספקת 512 MB של אחסון אמפירי ב-FLT:2 (התקבלה ל-10 GB) הממצה את החלל הזה גורם ל-FLT 3 שגיאות או אובדן נתונים באופן דומה, גודל החבילה של הפריסה מוגבל (250 MB ללא zipped).

פתרון משאבים Exhaustion

מעקב אחר ניצול זיכרון עם ציון פלטפורמה.ב Lambda, לבדוק את ה-FLT:0 (מקסמארטיאושרטוט 1:1 כניסה.אם זה מגיע באופן עקבי או מתקרב לזיכרון שהוקצה, להגדיל את תצורת הזיכרון.עבור בעיות CPU, תראה יותר זמן ביצוע ללא ברור I/O Waits - זיכרון מרגיע (ולכן CPU) כדי להאיץ משימות חד-פעמיות.

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

סודיות

ביצועים בודקים את הפונקציות שלך עם רמות זיכרון שונות (128 MB, 256 MB, 512 MB, 1024 MB, ומעבר) עוזר למצוא את המיקום המתוק בעל ביצועים גבוהים. עבור פונקציות I / O-bound, זיכרון גבוה יותר מפחית עלויות כי הפונקציה מסתיימת מהר יותר, לעתים קרובות מוביל להורדת משך קבוע הכולל (מחיר GB-II).

התייחסות חיצונית:0 (AWS Lambda מחשוב Power GuideveFLT:1) מסביר את הקשר בין זיכרון, VCPU וביצועים.

אתגרים ברשת ו- VPC

מדוע פונקציות VPC-Native הן טריקיות

כאשר פונקציה ללא שרת פועל בתוך ענן פרטי וירטואלי (VPC) כדי לגשת למשאבים פרטיים (RDS, ElastiCache, ממשקי API פנימיים), הפלטפורמה מייחסת את ממשק רשת אלסטי (ENI) לסביבה הביצועית של הפונקציה.הקצאת ENI מוסיפה שקיפות משמעותית להתחלה קרה (לפעמים 10+ שניות) היא גם צורכת כתובות IP של תת-ה-ה-ה-ה-ה-ה-ה-ה-ה-ה- IP שלך, אשר יכול להוביל ל-F:5 חסימת: 5.

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

אבחון בעיות VPC

בדוק את הפעולות הבאות כאשר פונקציות בתוך VPC נכשלות:

  • (ב) ,0) ,13 , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
  • (FLT:0)Subnet IP exhaustionFLT:1) , Monitor VPC subnet ניצול IP בקונסולת AWS.להגדיל את גודל תת-נט או להשתמש במספר רב של תת-נטות קטנות יותר.
  • (ב) ,0) , ⁇ (ה) ו-NACL כללים (FCL) , (ה) , (ה) ,הסברים ב-APT1 (במסגרתו של תסריט נופל).
  • (FLT:0)NAT Gateway for InternetFLT:1 - אם הפונקציה זקוקה לגישה לאינטרנט (למשל, שיחות API חיצוניות), להבטיח ש- NAT Gateway נמצא במצע ציבורי, ולשולחן התוואי יש מסלול ברירת מחדל מצביע על כך.

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

אינטגרציה, מעקב, וכדאיות

בניית observability Stack

ללא יומנים ומדדים, מחיקת השרתים היא כמו מציאת מחט במטלית של טיראק, קידוד מובנה עם תעודות זהות תואמים כך שתוכל לעקוב אחר בקשה אחת על פני פונקציות מרובות, תורים ומאגרי מידע. השתמש בספריית כניסה כמו FLT:0PinoFLT:1 (לא מהדורות) או FLT:2ucture for LTs (Fonitsights) , 3.

עבור עקבות מבוזרים, לאפשר ל-AWS X-Ray על Lambda או להשתמש ב- Azure Application Insights.כלים אלה מראים את נתיב הבקשה כולו, כולל שיחות שירות מטה-stream, ולהדגיש את החלקים האיטיים.

מפתחי Metrics to Watch

  • (ב) ,0) ,Invocation CountveFLT:1 (הספייקים סודדן) עשויים להצביע על סערה או התנהגות דמוית DDoS.
  • (p50, p95, píduFLT) 1:1 - מעקב אחר נטיות כדי לזהות השפעות התחלה קרות ולהגדיל את זמני ביצוע.
  • (ב) [15] , [15] , [15] , [15] , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
  • (ב) ,0) ,ThrottlesFLT:1 - כאשר גבולות קונפדרציונאליים נפגעים, בקשות מוכות.
  • (FLT:0 Iterator Age (לגבי גורמים מבוססי זרם) אנדרט 1:1 - ב Kinesis או DynamoDB Streams, גיל המאיץ מציין את הגיבוי של רשומות לא מעובדות.

המונחים: up noise

השתמש ב-CloudWatch אזעקה או ב- Azure Monitor כדי להודיע על סף קריטי: שיעור השגיאה העולה על 1%, p99 משך מעל SLA שלך, או תעלולים להתרחש.Pair אזעקה עם ספרים אוטומטיים (למשל, דרוג הוראות או מתגלגל חזרה פריסה).

חוסר יכולת ושיקום

הרוצח השקט: תרגומים

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

כדי לבצע פונקציות idempotent, השתמש במפתחות idempotency (כמו ראש מזהה בקשה) ולבדוק מסד נתונים לפני ביצוע תופעות לוואי.חנות תעודות מעובדות ב cache עם TTL מתאים לעיבוד מבוסס תור, ליישם את השכפול באמצעות הודעות הודעה dedup IDs (SQS FIFOs) או טבלאות דינמו.

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

  • (FLT:0) חזרה אחראית עם JitterFLT:1; כאשר הפונקציה קוראת שירותים חיצוניים, ליישם רטיבות אשר מגבירות את זמן ההמתנה ולהוסיף אקראיות.
  • (FLT:0) תורים דקר יותר (Dead-letter תורs) 1 (conformat DLQs) לאירועים הממצהים את כל הבקשות.Inspect DLQ תוכן באופן קבוע כדי לזהות כישלונות מערכתיים.
  • (FLT:0) מנסה רק כישלונות טרנספורמטיביים 1:1 - אל תחזרו 4xx שגיאות לקוח (למשל, 400 בקשות רעות) אלה מצביעים על קלט רע ושיקום לא יעזור.

ניהול אבטחה וניהול חשאי

מלכודות נפוצות

סודות (מפתחי API, סיסמאות מסד נתונים) בקוד או במשתנים סביבתיים הם מסוכנים.ניתן לבדוק סביבות ללא תשלום באמצעות יומני או להיחשף באמצעות תקלות.כל נפגע יכול להדלף את האישורים תמיד להשתמש בסודות: FLT:0AWS Secrets Manager FLT:1, FLT:2Zonee Key VaultFLT 3, או FLT: 4033, או 4Fir for the first cachetialation Life for the VLT5thrys and Rebritial for the VLT5thb.

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

בעיות פייפר

« « « ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇

(AWS SAM, Serverless Framework, Terraform) לעיתים קרובות ליצור ולעדכן פונקציות במקביל.קצב ה- API על CloudFormation או ה-Leda API יכול לגרום לכישלונות של הפריסה.

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

מסקנה

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

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

המונחים:

  • (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
  • (ב) ◄ [15] ⁇ ⁇ ⁇
  • (ב) ,0) Google Cloud Functions Best Practices