שלוט בשימוש ב-API על ידי הגבלת תדירות הקריאות (לדוגמה, 100 קריאות/דקה) לעומת סך הקריאות על פני תקופה ארוכה יותר (לדוגמה, 10,000 קריאות/חודש).
→השתמש במדיניות `rate-limit` עבור תדירות הקריאות. השתמש במדיניות `quota` עבור נפח הקריאות הכולל.
למה: `rate-limit` מגביל עליות קצרות טווח ומחזיר HTTP 429. `quota` אוכף מגבלת שימוש לטווח ארוך יותר (לדוגמה, תקופת חיוב) ומחזיר HTTP 403 כאשר חורגים ממנה.
מקור↗
שמור תגובות API במטמון ב-API Management כדי להפחית את העומס על הקצה העורפי, כאשר מפתח המטמון משתנה לפי כותרת בקשה.
→השתמש במדיניות `<cache-lookup vary-by-header="..." />` בקטע inbound ובמדיניות `<cache-store duration="..." />` בקטע outbound.
למה: שילוב מדיניות דו-חלקי זה מאפשר שמירת תגובות במטמון. `cache-lookup` בודק פריט שנשמר במטמון, ו-`cache-store` שומר את התגובה. תכונות ה-`vary-by` מבטיחות ערכי מטמון ייחודיים עבור וריאציות בקשה שונות.
נהל שינויים ב-API. נדרש שינוי שובר תאימות (breaking change) לעומת שינוי שאינו שובר תאימות (non-breaking change) שצריך להיבדק.
→השתמש ב-Versions עבור שינויים שוברי תאימות (לדוגמה, /v1, /v2). השתמש ב-Revisions עבור שינויים שאינם שוברי תאימות והשקות בטוחות ומדורגות.
למה: גרסאות (Versioning) מאפשרות למספר גרסאות API להיות פעילות בו-זמנית. תיקונים (Revisions) מאפשרים לך לשנות API במצב לא מקוון, לבדוק אותו, ולאחר מכן להפוך אותו לתיקון "הנוכחי" ללא השבתה.
הודע למספר שירותים במורד הזרם, בלתי תלויים, כאשר מתרחש אירוע בשירות Azure (לדוגמה, blob נוצר, resource group נוצרה).
→השתמש ב-Azure Event Grid. צור topic מערכת עבור משאב Azure ומנויי אירועים עבור כל handler במורד הזרם.
למה: Event Grid הוא שירות pub/sub מנוהל במלואו, מבוסס push, המפריד בין מפרסמי אירועים למנויים, ומאפשר ארכיטקטורות ריאקטיביות מונעות אירועים.
מקור↗
קלוט זרם גדול של נתוני טלמטריה או אירועים (מיליוני אירועים בשנייה) ממכשירים רבים.
→השתמש ב-Azure Event Hubs.
למה: Event Hubs היא פלטפורמת הזרמת נתונים הניתנת להרחבה מאסיבית המיועדת לקליטה בתפוקה גבוהה. היא משתמשת במודל צרכנים מחולק למחיצות (partitioned consumer model) עבור עיבוד מקביל.
ודא שאירועים מאותו מקור (לדוגמה, מכשיר IoT ספציפי) מעובדים בסדר על ידי אותו צרכן.
→שלח אירועים ל-Event Hubs עם partition key המוגדר למזהה המקור (לדוגמה, device ID).
למה: Event Hubs מנתב את כל ההודעות עם אותו partition key לאותה מחיצה. בתוך מחיצה, סדר ההודעות נשמר.
עבד רצף של הודעות קשורות בסדר First-In, First-Out (FIFO) קפדני.
→השתמש ב-Azure Service Bus sessions. שלח את כל ההודעות הקשורות עם אותו `SessionId`.
למה: Sessions מספקות זרם הודעות מקביל ומסודר. מקבל מודע-ל-session נועל את ה-session, ומבטיח שההודעות יעובדו ברצף על ידי צרכן יחיד.
מפרסם יחיד שולח הודעות ל-topic, אך מספר מנויים רוצים רק קבוצת משנה של הודעות אלה בהתבסס על מאפייני הודעה.
→השתמש ב-Service Bus topic עם מספר מנויים. החל SQL filters או Correlation filters על כל מנוי.
למה: זוהי תבנית publish-subscribe קנונית עם ניתוב מבוסס תוכן. כל מנוי מקבל עותק של ההודעה אם היא תואמת לכלל הסינון שלו.
הודעה לא ניתנת לעיבוד בהצלחה לאחר ניסיונות חוזרים ונשנים וחייבת להיות מוצבת בצד לבדיקה מאוחרת יותר.
→תן להודעה להיכשל בעיבוד עד שיעלה על סף המסירה המקסימלי שלה. היא תועבר אוטומטית ל-Dead-Letter Queue (DLQ).
למה: ה-DLQ הוא sub-queue מובנה להודעות בעייתיות (poison messages). זה מונע מהודעה נכשלת לחסום את התור הראשי ומאפשר ניתוח ועיבוד מחדש במצב לא מקוון.
בחר שירות העברת הודעות עבור: פקודות ארגוניות, אירועים ריאקטיביים או טלמטריה בנפח גבוה.
→Service Bus לפקודות (הזמנות, עסקאות). Event Grid לאירועים ריאקטיביים (blob נוצר, משאב השתנה). Event Hubs לטלמטריה (נתוני IoT, clickstreams).
למה: Service Bus מציע תכונות עשירות כמו סדר, טרנזקציות ו-dead-lettering. Event Grid מיועד לניתוב אירועים קל משקל מבוסס push. Event Hubs מיועד להזרמת נתונים בתפוקה גבוהה.