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

הבנה של אדריכלות Serverless

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

מעבר ל- FaaS, השרתים כוללים גם שירותים מנוהלים כמו AWS DynamoDB, Aurora Serverless, Amazon API Gateway, CloudFront ו-SQS יישום אמיתי ללא שרת המחזק את השירותים האלה יחד למרקם מונע אירוע.היתרונות העיקריים הם דרוג אוטומטי, ריצוף גרפיטי (אתה משלם רק עבור הזמן הנייח), ומהיר יותר לשוק כולל אתגרים חסרי מנוחה, בטווח הארוך, כדי להימנע מצריכת משאבים קצרים (ברכה) ובלבד שברשותה, תוך 15 דקות נסיעה מוגבלת ל-זמנית) על ידי ניהולית (כלומר, תוך כדי צורך) ו-זמנית של ניהול משאבים למשך זמן ניהול משאבים (כלומר, תוך 15 דקות נסיעה מוגבלת של ניהול משאבים (כלומר, תוך 15 דקות נסיעה מוגבלת ל-זמנית של ניהולית (מחץ נמוך יותר) ו-AWS) על ידי שימוש) על ידי שימושית (מחץ נמוך יותר מ-זמנית של זמן ניהול משאבים (עד 15 דקות נסיעה מהירה יותר) על ידי שימושית (מחץ ניהול משאבים למשך זמן מוגבל של זמן מוגבל של זמן ניהול מוגבל של זמן ניהול מוגבל של זמן ניהול מוגבל של זמן ניהול משאבים עבור זמן ניהול מהיר יותר עבור זמן ניהול מוגבל של זמן ניהול משאבים עבור זמן ניהול מוגבל של זמן ניהול משאבים (מחץ נמוך יותר) ו-

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

ביצועי מפתח וסחר-offs

כדי לעצב עבור עומס גבוה וכבדות נמוכה, עליך להגדיר מדדים ברורים ולהבין את ההסכמים המסחריים הטבועים:

  • (FLT:0 ThroughputerFLT:1) - מספר הבקשות או האירועים המערכת יכולה לעבד לשנייה.זה מוגבל על ידי פונקציות מסחר (רכה וקשה), מכסת שירות במורד הזרם (למשל, יכולת טבלת דינמוDB), ורוחב הפס של הרשת.
  • (FLT:0) LatencyFLT:1) - הזמן מבקשת מסירה תגובה. Cold Start, Network hops, שאילתות מסד נתונים, וסידור / התחדשות כל לתרום.
  • (FLT:0) CostveFLT:1 ; תמחור ללא שרת מבוסס על זמן ביצוע (GB-שניות), ספירת ייעוד, ועברת נתונים גבוהה יותר מוביל לעתים קרובות בעלות גבוהה יותר לכל בקשה, במיוחד אם פונקציות הן צ'אט או שימוש שיחות סינכרוניות.
  • (FLT:0) עקביות לעומת ביצועים FLT:1; מאגרי נתונים עקביים מאוד (למשל, דינמוDB במצב קריאה עקבי) להוסיף שקיפות.בסופו של דבר מערכות עקביות (למשל, דינמוDB קורא, בסופו של דבר, CloudFront Edge caches) לשפר את ביצועי הקריאה בעלות של staleness.

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

עקרונות מרכזיים עבור High Throughput and Low Latency

העקרונות הבאים מהווים את הבסיס של יישומים בעלי ביצועים גבוהים ללא שרת:

המונחים: Utilization

Auto-scaling הוא טמבל לשרת, אבל לא כל הסקאלה היא מיידית.AWS Lambda, למשל, מתחיל להקפיץ של 500 הוצאות להורג במקביל לדקה עבור כל פונקציה (בכפוף למגבלת המטבע השבר) עבור ספייקי תנועה שעולה על שיעור זה, בקשות מתמוססות עם שגיאה 429, אתה יכול לבקש ציטוט גבוה יותר, טרום-מפרק פונקציות זיכרון (בנוסף, כולל פונקציות מרובות) עם תפקודים (תוספת) עם תפקודים) עם תפקודים עם תפקודים (תוספת של 10 הדבקה) עם תפקודים) עם תפקודים (תוספת של זיכרון רגיל יותר, כולל תפקודים) או הקצאהיתר של 0.

אחסון נתונים

בחירת מסד הנתונים משפיעה באופן דרמטי על הטיות ועל ידי לוח. יישומים ללא מרשם לעתים קרובות יחד עם דינמוDB (NoSQL) או Aurora Serverless (relational) DynamoDB יכול לטפל במיליוני בקשות לשנייה אם אתה מעצב את הטבלאות שלך עם מפתחות מחיצות מתאימות כדי למנוע מחיצות חמות. השתמש באינדקסים משניים גלובליים (GS) עם טיפול - לכל GSI יש יכולת חיבור משלה.

אדריכלות: Asynchronous and Event-Driven Architecture

שרשרת סינכרוניות - פונקציונליות A קורא פונקציונלי B, אשר מכנה פונקציונלי C - מציג שקיפות ו cascade trottling. במקום, רכיבי decouple עם תורי הודעות (אמזון SQS), אוטובוסים אירועים (אמזון EventBridge), או פלטפורמות הזרמת (Kinesis, קפקא) לדוגמה, API יכול להציב בקשה תורים על תור SQS, ולאחר מכן להחזיר מיד 202 תגובה מקבל את הפונקציה aSync.

צוק מחשוב

העברת חישוב קרוב יותר למשתמשי קצה מפחיתה את זמן ה-סבב של הרשת באופן דרסטי.שירותים כמו AWS Lambda@Edge ו-CloudFront function מאפשרים לך לבצע קוד קל במקומות קצה ענן-פרינט - מעל 450 נקודות נוכחות ברחבי העולם. השתמש בפונקציות קצה עבור אימות, קידוד כתובת URL, מניפולציה ראש או A / B מבלי לבצע טיול למקור.

אסטרטגיות עיצוב ב Depth

תפקודים ללא מדינה עם מדינה חיצונית

כל פונקציה בייעוד צריכה להיות עצמאית ולשתף שום דבר עם ייעודים אחרים. המדינה (נתונים, תצורה, ההקשר המשתמש) חייב להיות מאוחסן חיצונית - ב-DymoDB, ElastiCache (Redis/Memcached), או חנות אובייקטים.זה מאפשר לדרג את הפלטפורמה לפונקציות arbitrbitrbitrbitrbitrbitrbitrbitrbitrbitrbitrbitrbitrb ללא תוכן. for highput, אציין כותב מסד נתונים באמצעות שימוש ב-FLT: DIQ: תצורה של תצורה של תצורה של תצורה: DIQ: DIX: DIX-D.

המונחים: Caching Layers

Caching היא טכניקת הניכוי העוצמתית ביותר.הטמעת דחיסה ברמות מרובות:

  • (FLT:0) שכפול ⁇ FLT:1 - בתוך מקרה פונקציה, cache לעתים קרובות גישה לנתונים בזיכרון (למשל, מילון של פרמטרים תצורה כי לעתים רחוקות שינוי).
  • (FLT:0Database cachingFLT:1) - השתמש ב- DAX או ElastiCache כדי לטמון את תוצאות השאילתות היקרות.
  • (FLT:0CDN/Edge cachingFirLT:1) - נכסים סטטיים ואפילו תשובות API ניתן לכווץ ב-CloudFront. השתמש במפתחות cache בהתבסס על פרמטרים של שאילתה, ראשים ועוגיות. הגדר TLs מתאימים המבוססים על דרישות טריות נתונים.
  • (FLT:0) לצד צ'ינגFLT:1 - להורות לדפדפנים לנכסים מטמון באמצעות ראשי Cache-Control. for API, ליישם דפוסים מעודנים.

מעקב אחר cache פגע יחסים והתאמה של מדיניות פינוי.אסטרטגיה של צ'ינג מאויש היטב יכול להפחית את העומס המקור על ידי 80-90% ולהפחית את זמני התגובה ממאות אלפי שניות לדיגיטלות בודדות.

תגיות: Cold Starts

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

  • השתמש בתכונה (FLT:0) שניתנת למטבע מבוזר 1 (FLT:0) כדי לשמור על מספר קבוע של מקרים חמים.AWS Lambda תשלום עבור מטבע מבוזר גם כאשר הוא, כך זה החלפה בין עלות לעקביות.
  • שמור חבילות פריסה קטנות. השתמש מנהלי תלות ספציפית שפה (npm, pip) כדי לכלול רק את מה שאתה צריך.חשב באמצעות שכבות AWS Lambda לשתף ספריות נפוצות ללא נפיחות של פונקציות בודדות.
  • קוד אופטימיזציה של קוד ה-Sateation.הזיז יבוא כבד ותצורה עומס מחוץ למטפלים, כך שהם רצים רק פעם אחת לכל מיכל (בהתחלה קרה) ולא על כל ייעוד.
  • השתמש בזמני ריצה מקומיים שבהם ניתן. Java ו .NET קור מתחילים הם איטיים לשמצה מאשר Node.js, Python, או Go.If you must use Java, מאפשר ל Lambda SnapStart, אשר מצלם את סביבת ההוצאה לאחר ההתחלתיזציה ומשחזר ממנה, צמצום זמן התחלה קר עד 200 מ'.
  • יישום לוח זמנים "keep-warm" המזין את הפונקציה שלך כל כמה דקות.זה האקר ולא מומלץ לייצור כי זה מוסיף עלות ואינו מבטיח חום אם הגדלים של הפונקציה מעבר למקרים החמים.

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

אופטימיזציה של מסד נתונים ועיצוב Query

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

  • (FLT:0) תבניות גישה עיצוב תחילה.FLT:1 ב- DynamoDB, להגדיר את דפוסי הגישה העיקריים שלך (GetItem, Query) ועיצוב מפתח החלוקה / אולט בהתאם.
  • (FLT:0) Use GlobalטבלאותFLT:1 עבור פריסות מרובות רגולציה כדי להפחית את השקיפות של הדחיסה חוצה-אזורית. אמזון דינמוDB טבלאות גלובליות משכפלות נתונים בזמן הקרוב.
  • (FLT:0) פעולות בוץ' 1 (FLT:1) כדי להפחית את הנסיעות העגולות במקום לקרוא GetItem עבור כל אחד מ-20 רשומות, השתמש ב- Batch Get Item במקום לכתוב פריט אחד בכל פעם, להשתמש ב- BatchWrite Item (מקסימום 25 פריטים לכל אצווה).
  • (ב) ויקרא ב[[1924]]]], [[1924]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]]
  • (ב) ⁇ :0)Use DAXIRFLT:1 כ- cache עבור דינמוDB. DAX מפחית זמני תגובה ממילימטרים דיגיטליים למיקרו-שניים עבור פריטים חצופים.
  • (FLT:0) עבור מסדי נתונים יחסיים של מאגרי מידע 1 (FLT:1), השתמש בהצהרות מוכנות ובחיבור המאגד. Aurora Serverless v2 עם ממשקי API של נתונים מבטל את הצורך בחיבורים מתמשכים, אך מוסיף שקיפות רשתית.

עיבוד סינכרוני ו- Queue Tuning

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

  • (ב) ,0) ,התראות בזמן אמת (הראשונה ל- 6× 1), כך שהודעה כושלת הופכת להתגלות שוב לאחר עיבוד זמן (למשל, קבעה את זה ל-6× זמן ההוצאה הממוצע של הפונקציה).
  • (ב) אינטגרציה של SQS Lambda מאפשרת ייעוד אחד לקבל עד 10 הודעות (עם FLT:1) זה עולה דרך חישוב למילוי ולהפחית את העלות.
  • (ב) ,0) ראה תורים מתים של צומת 1 (FLT:0) כדי ללכוד הודעות שנכשלו לאחר פיגור מקסימלי.
  • (FLT:0) לייעל עיבוד של ההרחבה:1 (Kinesis, DynamoDB Streams), Lambda invocation מאגד רשומות ומעבד אותם על מנת ל-Shard. להגדיר את גודל המנה כדי למקסם את התפוקה תוך כדי שהייה בתוך זמן הביצוע של הפונקציה.

תקשורת וחיבור שירות

ביישומים רבים ללא שרת, נקודת קצה אחת עשויה להיות צורך לתזדור שיחות לשירותים מרובים של החזרת קישורים (A call B, ולאחר מכן B קורא C) במקום, להשתמש ב-FLT:0Step FunctionsFLT:1 כדי לתאם את זרימת העבודה באופן מסונכרן או במקביל, פונקציות שלב יכולות לבצע פעולות מרובות במקביל (למשל, שלוש מעבורות במקביל) להורדת אישור שירות ipon-L (L) באופן גירסאות של שירות פתוח (L.

יישום אמיתי: מקרה מחקר

פלטפורמת מסחר אלקטרוני מובילה הגירה את מוצריה וזרימת הצ'ק לערימה חסרת שרת לחלוטין כדי להתמודד עם ספייק תנועה של Black Friday.The Architecture Used:

  • (ב) ,0)API GatewayofLT:1 עם הפצת CloudFront עבור ריצוף קצה עולמי של רשומות מוצרים ונכסים סטטיים.
  • (ה-0)AWS LambdaveFLT:1 (Node.js 18) עם קונפדרציה עבור חיפוש מוצרים (כדי לשמור על נטיות קרות מתחת לגיל 50 מ's) ועל פי דרישה לתנודות עבודה לבדיקה.
  • (FLT:0)ynamoDBirFLT:1 עם DAX עבור קטלוג המוצר קורא; לכתוב-heavy פעולות (עדכונים תוך ורטורי) הלך ישירות לדינמוDB עם דינמודיונים גורמים לתפקוד עיבוד הזמנה סינכרוני.
  • QSQSigFLT:1 כדי לבטל את הגשת ההזמנה ממילוי.כל הזמנה הוקדשה, ותפקיד למגדה סקר את התור, כתיבה לאמזון S3 לאחסון ארוך טווח ושולח אירועים לאירועי EventBridge.
  • (ב) ,0) , רפורמסמנטFLT:1 כדי לתזדור אימות תשלום, זיהוי הונאה ומשלוח דור במקביל.

במהלך התנועה לשיא של 1.2 מיליון בקשות לדקה, המערכת שמרה על עקשנות מתחת 150 מ"מ עבור נקודת מוצא המוצר ופחות מ 2 שניות לבדיקה (כולל עיבוד הזמנה סינכרוני) המנחנים העיקריים היו קצה caching (אשר שירת 85% של חיפושי מוצר), DAX מקטין מסד נתונים קורא על ידי 60%, ואת תור קולטן מסונכרן סופג קפיצות ללא לחץ על ה- API המעקבי על בסיס קבוע XD וקיבולת ה-DDy, ו-DDDDEXDDD.

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

מסקנה

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