אנטי-דפוס: רישום נתונים בשרתים של צד שלישי באמצעות מדיניות JavaScript

כרגע מוצג התיעוד של Apigee Edge.
כניסה למסמכי התיעוד של Apigee X.
מידע

רישום ביומן הוא אחת מהדרכים היעילות לניפוי באגים. אפשר לתעד את כל הפרטים של בקשת ה-API, כמו כותרות, פרמטרים של טפסים, פרמטרים של שאילתות, משתנים דינמיים וכו', לעיון במועד מאוחר יותר. אפשר לרשום את המידע באופן מקומי במעבדי ההודעות (Apigee Edge לענן פרטי בלבד) או בשרתים של צד שלישי כמו Sumo Logic, Splunk או Loggly.

דוגמת עיצוב

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

LogData_JS:

<!-- /antipatterns/examples/1-4.xml -->
<Javascript async="false" continueOnError="false" enabled="true" timelimit="2000" name="LogData_JS">
  <DisplayName>LogData_JS</DisplayName>
  <ResourceURL>jsc://LogData.js</ResourceURL>
</Javascript>

LogData.js:

<!-- /antipatterns/examples/1-5.xml -->
var sumoLogicURL = "...";
httpClient.send(sumoLogicURL);
waitForComplete();

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

השפעה

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

שיטה מומלצת

  • משתמשים במדיניות MessageLogging כדי להעביר או לתעד נתונים של שרתי יומן או של שירותי ניהול יומנים של צד שלישי, כמו Sumo Logic, Splunk, Loggly וכו'.
  • היתרון הכי משמעותי של המדיניות בנושא רישום הודעות ביומן הוא שאפשר להגדיר אותה בתהליך יצירת הלקוח של הלקוח, שמבוצע אחרי שהתגובה נשלחת בחזרה לאפליקציית הלקוח ששלחה את הבקשה.
  • כשהמדיניות הזו מוגדרת בתהליך של לקוח הפוסט, אפשר להפריד בין פעילות הרישום ביומן לבין עיבוד הבקשה/התשובה, וכך נמנעים מזמני אחזור.
  • אם יש דרישה ספציפית או סיבה לבצע רישום ביומן באמצעות JavaScript (ולא האפשרות של תהליך הלקוח של הפרסום שצוינה למעלה), צריך לעשות זאת באופן אסינכרוני. במילים אחרות, אם אתם משתמשים באובייקט httpClient, עליכם לוודא ש-JavaScript לא מטמיע את waitForComplete.

קריאה נוספת