אתם צופים במסמכי התיעוד של Apigee Edge.
כדאי לעיין במסמכי התיעוד של Apigee X. מידע
proxy ל-API הוא ממשק לאפליקציות לקוח שמשמש להתחברות לשירותי קצה עורפי. ב-Apigee Edge יש כמה דרכים להתחבר לשירותים לקצה העורפי דרך שרת proxy ל-API:
- TargetEndpoint כדי להתחבר לכל שירותי היעד של HTTP/HTTPs, NodeJS או Hosted Target.
- מדיניות ServiceCallout להפעלת שירות חיצוני כלשהו לפני או אחרי הפעלת שרת היעד ב-TargetEndpoint.
- קוד בהתאמה אישית שנוסף למדיניות JavaScript או למדיניות JavaCallout כדי להתחבר לשירותי קצה עורפי.
חיבורים קבועים
חיבור HTTP מתמשך, שנקרא גם HTTP keep-alive או שימוש חוזר בחיבור HTTP, הוא מושג שמאפשר לשלוח ולקבל כמה בקשות או תגובות HTTP בחיבור TCP יחיד, במקום לפתוח חיבור חדש לכל זוג של בקשה ותגובה.
Apigee Edge משתמש בחיבור מתמשך כדי לתקשר עם שירותי קצה עורפי. כברירת מחדל, חיבור נשאר פעיל למשך 60 שניות. כלומר, אם חיבור לא פעיל במאגר החיבורים יותר מ-60 שניות, החיבור ייסגר.
אפשר להגדיר את משך הזמן הקצוב לתפוגה של הודעת keep-alive באמצעות מאפיין בשם keepalive.timeout.millis, שמוגדר בהגדרות של TargetEndpoint של proxy ל-API. לדוגמה, אפשר להגדיר את משך הזמן של keep alive ל-30 שניות לשירות לקצה העורפי ספציפי ב-TargetEndpoint.
בדוגמה שלמטה, הערך של keepalive.timeout.millis מוגדר ל-30 שניות בהגדרות של TargetEndpoint:
<!-- /antipatterns/examples/disable-persistent-connections-1.xml --> <TargetEndpoint name="default"> <HTTPTargetConnection> <URL>http://mocktarget.apigee.net</URL> <Properties> <Property name="keepalive.timeout.millis">30000</Property> </Properties> </HTTPTargetConnection>Disable HTTP persistent (Reusable keep-alive) connections </TargetEndpoint>
בדוגמה שלמעלה, keepalive.timeout.millis שולט בהתנהגות של שמירת החיבור לשירות לקצה העורפי ספציפי ב-proxy ל-API. יש גם מאפיין ששולט בהתנהגות של שמירת החיבור פעיל לכל שירותי ה-Backend בכל ה-Proxy. אפשר להגדיר את HTTPTransport.keepalive.timeout.millis
ברכיב מעבד בקשות. למאפיין הזה יש גם ערך ברירת מחדל של 60 שניות. כל שינוי בנכס הזה משפיע על התנהגות החיבור הפתוח בין Apigee Edge לבין כל השירותים בקצה העורפי בכל שרתי ה-proxy של ה-API.
תבנית אנטי
לא מומלץ להשבית חיבורים מתמשכים (keep alive) על ידי הגדרת המאפיין keepalive.timeout.millis
לערך 0 בהגדרת TargetEndpoint של API Proxy ספציפי, או על ידי הגדרת HTTPTransport.keepalive.timeout.millis לערך 0 ב-Message Processors, כי זה ישפיע על הביצועים.
בדוגמה שלמטה, ההגדרה TargetEndpoint משביתה חיבורים קבועים (keep alive) לשירות לקצה העורפי ספציפי על ידי הגדרת keepalive.timeout.millis ל-0:
<!-- /antipatterns/examples/disable-persistent-connections-2.xml --> <TargetEndpoint name="default"> <HTTPTargetConnection> <URL>http://mocktarget.apigee.net</URL> <Properties> <Property name="keepalive.timeout.millis">0</Property> </Properties> </HTTPTargetConnection> </TargetEndpoint>
אם השבתתם את החיבורים הפתוחים לאחד או יותר משירותי ה-Backend, Edge יצטרך לפתוח חיבור חדש לכל בקשה חדשה לשירותי ה-Backend של היעד. אם ה-Backend הוא HTTPS, Edge יבצע גם לחיצת יד של SSL לכל בקשה חדשה, מה שיוסיף לזמן האחזור הכולל של בקשות ה-API.
השפעה
- הגדלת זמן התגובה הכולל של בקשות ל-API, כי Apigee Edge צריך לפתוח חיבור חדש ולבצע לחיצת יד של SSL לכל בקשה חדשה.
- יכול להיות שייגמרו החיבורים בתנאים של תנועה גבוהה, כי לוקח זמן לשחרר חיבורים בחזרה למערכת.
שיטה מומלצת
- שירותי הבק-אנד צריכים לכבד ולטפל בחיבור HTTP מתמשך בהתאם לתקנים של HTTP 1.1.
- שירותי קצה עורפי צריכים להגיב עם כותרת
Connection:keep-aliveאם הם יכולים לטפל בחיבורים מתמשכים (keep alive). - שירותי קצה עורפיים צריכים להגיב עם כותרת
Connection:closeאם הם לא יכולים לטפל בחיבורים מתמשכים.
הטמעה של התבנית הזו תבטיח ש-Apigee Edge יוכל לטפל באופן אוטומטי בחיבור מתמשך או לא מתמשך לשירותים לקצה העורפי, בלי שיהיה צורך לבצע שינויים ב-proxy ל-API.