סקירה כללית
Apigee Hybrid תומך במטענים ייעודיים (payloads) גדולים של הודעות, עד 30MB. החל מגרסה 1.15.1 של Hybrid, אפשר להעביר הודעות גדולות בנפח של עד 75MB. גודל ברירת המחדל של המטען הייעודי (payload) של ההודעה הוא 10MB. גודל המטען הייעודי (payload) של ההודעה
הגדרת תמיכה במטענים ייעודיים (payloads) של הודעות בגודל של עד 30MB
כדי לאפשר לסביבות בהתקנה ההיברידית לתמוך במטענים ייעודיים גדולים של הודעות, צריך לבצע את השינויים הבאים בהגדרות של זמן הריצה:
- מגדילים את גודל ה-heap ל-4Gi לפחות.
- מגדילים את מגבלות הזיכרון ל-6Gi לפחות.
- מגדילים את בקשות המשאבים של הזיכרון ל-4Gi לפחות.
אתם יכולים לקבוע את ההגדרות האלה לסביבות ספציפיות או לכל הסביבות בהתקנה.
הגדרת סביבות נפרדות לתמיכה במטענים ייעודיים (payloads) גדולים של הודעות
אם לשרתי ה-Proxy שמוגדרים לתמוך במטענים ייעודיים גדולים של הודעות יש נקודות קצה רק בסביבה אחת או בכמה סביבות בהתקנה, אתם יכולים להגדיר את הסביבות כך שיתמכו במטענים ייעודיים גדולים. כך נמנעת הוספה של זיכרון לסביבות שלא יצטרכו לתמוך במטענים ייעודיים גדולים.
כדי להגדיר סביבות ספציפיות לתמיכה במטענים גדולים של הודעות, אפשר להשתמש במאפיינים של envs[].components.runtime. מבצעים את השינויים הבאים בקובץ overrides.yaml:
-
מוסיפים את הבית הבא לקובץ
overrides.yaml:envs: - name: ENV_NAME components: runtime: cwcAppend: bin_setenv_max_mem: 4096m # Increase max heap size to 4 gigs resources: requests: memory: 4Gi limits: memory: 6Giלמידע נוסף:
-
משדרגים את תרשים ה-
apigee-envלכל סביבה שמעדכנים:הרצת בדיקה:
helm upgrade ENV_RELEASE_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ -f OVERRIDES_FILE \ --dry-run=server
- ENV_RELEASE_NAME הוא שם שמשמש למעקב אחרי ההתקנה והשדרוגים של התרשים
apigee-env. השם הזה חייב להיות ייחודי ושונה משמות אחרים של גרסאות Helm בהתקנה. בדרך כלל זהה ל-ENV_NAME. עם זאת, אם לסביבה יש שם זהה לקבוצת הסביבות, צריך להשתמש בשמות שונים לגרסאות של הסביבה ושל קבוצת הסביבות, לדוגמהdev-env-releaseו-dev-envgroup-release. מידע נוסף על גרסאות ב-Helm זמין בקטע Three big concepts במאמרי העזרה של Helm. - ENV_NAME הוא שם הסביבה שמשדרגים.
- OVERRIDES_FILE הוא הקובץ הערוך של
overrides.yaml.
- ENV_RELEASE_NAME הוא שם שמשמש למעקב אחרי ההתקנה והשדרוגים של התרשים
-
כדי לשדרג את התרשים:
הרצת בדיקה:
helm upgrade ENV_RELEASE_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ -f OVERRIDES_FILE
הגדרת כל הסביבות לתמיכה במטענים ייעודיים (payloads) גדולים של הודעות
שינויים בבית runtime מגדירים את מגבלות ה-heap והזיכרון לכל הסביבות בהתקנה. אפשר לשנות את ההגדרות האלה לסביבות ספציפיות באמצעות המאפיינים של envs[].components.runtime.
-
מוסיפים את הבית הבא לקובץ
overrides.yaml:runtime: cwcAppend: bin_setenv_max_mem: 4096m # Increase max heap size to 4 gigs resources: requests: memory: 4Gi limits: memory: 6Giלמידע נוסף:
-
משדרגים את התרשים של
apigee-envלכל סביבה בהתקנה:הרצת בדיקה:
helm upgrade ENV_RELEASE_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ -f OVERRIDES_FILE \ --dry-run=server
כדי לשדרג את התרשים:
helm upgrade ENV_RELEASE_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ -f OVERRIDES_FILE
הנחיות למטענים ייעודיים של הודעות בגודל שבין 30MB ל-75MB
כדי לקבוע את הגודל האופטימלי של ה-heap למעבד בקשות בתרחישים של עומסי נתונים גדולים, צריך להתייחס לתרחיש הספציפי שלכם. עם זאת, Apigee מציעה הנחיות כלליות שיעזרו בתהליך הזה.
כדי לחשב את גודל ה-heap לכל מעבד בקשות (MP), משתמשים בערכים הבאים:
-
Q– מספר השאילתות המקסימלי לשנייה (QPS) לכל pod של MP L– זמן הטעינה של הלוך ושוב לכל בקשה (האחוזון ה-95 של זמן הטעינה הצפוי)-
C– מספר הבקשות המקסימלי שיכולות להיות בו-זמנית ב-MP בכל זמן נתון. החישוב הואC = Q * L. P_req– גודל המטען הייעודי (ב-MB) של הבקשה שנשלחה על ידי הלקוח ל-ApigeeP_resp– גודל המטען הייעודי (במגה-בייט) של התגובה שהתקבלה מהיעד-
S– מקדם בטיחות (ההמלצה של Apigee היא טווח של 1.5 עד 2) -
BASE_HEAP– גודל הערימה הבסיסי שכולל משאבים שלא קשורים לבקשות, כמו הגדרות של שרת proxy. (ההמלצה של Apigee היא3072Mi)
אם לוקחים בחשבון את מקדם הבטיחות S, יחד עם גודל בסיסי של ערמה, הערמה הכוללת לכל מגה-פיקסל מחושבת באופן הבא:
גודל ה-heap לכל MP = BASE_HEAP + C * (P_req + P_resp) * S
הגדרת ברירת המחדל לשינוי ההגדרות בתרחיש של מטען ייעודי גדול היא:
envs:
components:
runtime:
resources:
requests:
cpu: 2000m
memory: 2Gi
limits:
cpu: 4000m
memory: 4Gi
cwcAppend:
bin_setenv_max_mem: 3072m # base heap size
חישוב לדוגמה
הנה דוגמה לחישוב עם הערכים הבאים:
- מספר QPS מקסימלי,
Q: 2 - זמן אחזור,
L: 7 שניות - גודל המטען הייעודי (payload) של הבקשה,
P_req: 40MB - גודל המטען הייעודי (payload) של התגובה,
P_resp: 40MB - מקדם בטיחות,
S: 1.5 - גודל בסיסי של ה-heap,
BASE_HEAP: 3072Mi
גודל הערימה = 3072 + (2 * 7) * (40+40) * 1.5 = 4752Mi
limits.memory צפוי להיות בנפח של 1Gi מעל ה-heap המומלץ.
בדוגמה הזו, צריך להוסיף את הפרטים הבאים ל-overrides.yaml:
envs:
components:
runtime:
resources:
requests:
memory: 4Gi
limits:
memory: 5.75Gi # approximately 1Gi over 4.75Gi
cwcAppend:
bin_setenv_max_mem: 4752m
לתשומת ליבכם
פרצי תנועה
ה-HPA מבטיח שה-MP יתאימו לעומס ככל שמספר השאילתות לשנייה עולה. עם זאת, צפוי ש-HPA יפעיל את הגדלת קנה המידה תוך כ-60 שניות. עלייה חדה ובלתי סבירה בתנועה עלולה לגרום לשגיאות של מחסור בזיכרון (OOM) במעבד ההודעות.
אם אתם צופים עלייה חדה כזו בתנועה, כדאי להגדיל את השימוש בערימה באמצעות מקדם בטיחות שנראה מתאים. לדוגמה, S = 2.
Heap = BASE_HEAP + (Q * L) * (P_req + P_resp) * 2
שימוש במדיניות
החישוב שלמעלה לא כולל את השימוש במדיניות. Apigee מאפשרת ללקוחות ליצור עותקים של המטען הייעודי (payload) של הבקשות והתגובות שלהם, וזה יכול לשנות באופן משמעותי את השימוש בערימה.
לדוגמה, אם יש לכם מדיניות JavaScript שיוצרת 3 עותקים של כל התגובה של היעד, המשוואה שבה צריך להשתמש היא:
Heap per MP = Base Heap + (Q * L) * (P_req + P_resp * 4) * S
דוגמאות למדיניות שעשויה להגדיל את השימוש בזיכרון:
- AssignMessage
- קריאה ל-JavaScript
- JavaCallout
מעקב
ההנחיות שמפורטות כאן נועדו לשמש כנקודת התחלה. מומלץ מאוד לעקוב אחרי השימוש בזיכרון ולהגדיר התראות. אם השימוש ב-Heap גבוה באופן עקבי, כדאי להגדיל את מקדם הבטיחות.
מידע נוסף:
- גודל ההודעה
envs[].components.runtime.resources.limits.memoryenvs[].components.runtime.resources.requests.memoryruntime.resources.limits.memoryruntime.resources.requests.memory