הגדרה של תמיכה במטען ייעודי (payload) של הודעות גדולות ב-Apigee Hybrid

סקירה כללית

החל מגרסה 1.14.2,‏ Apigee Hybrid תומך במטענים (payloads) גדולים של הודעות, עד 30MB. החל מגרסה 1.14.3, אפשר להשתמש ב-Apigee Hybrid כדי לאפשר מטען ייעודי (payload) גדול של הודעות, עד 75MB. גודל מטען ההודעה שמוגדר כברירת מחדל הוא 10MB. גודל המטען הייעודי (payload) של ההודעה

הגדרת תמיכה במטענים ייעודיים (payloads) של הודעות בגודל של עד 30MB

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

  • מגדילים את גודל ה-heap ל-4Gi לפחות.
  • להגדיל את מגבלות הזיכרון ל-6Gi לפחות.
  • צריך להגדיל את בקשות המשאבים של הזיכרון ל-4Gi לפחות.

אתם יכולים להגדיר את ההגדרות האלה לסביבות בודדות או לכל הסביבות בהתקנה.

הגדרה של סביבות נפרדות לתמיכה במטענים גדולים של הודעות

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

כדי להגדיר סביבות בודדות לתמיכה במטענים גדולים של הודעות, אפשר להשתמש במאפיינים envs[].components.runtime. מבצעים את השינויים הבאים בקובץ overrides.yaml:

  1. מוסיפים את הפסקה הבאה לקובץ 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
    

    מידע נוסף:

  2. משדרגים את התרשים 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 שעבר עריכה.
  3. שדרוג התרשים:

    הרצת בדיקה:

    helm upgrade ENV_RELEASE_NAME apigee-env/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --set env=ENV_NAME \
      -f OVERRIDES_FILE
    

הגדרה של כל הסביבות לתמיכה במטענים גדולים של הודעות

שינויים בקטע runtime מגדירים את מגבלות ה-heap והזיכרון לכל הסביבות בהתקנה. אפשר לשנות את ההגדרות האלה לסביבות ספציפיות באמצעות המאפיינים envs[].components.runtime.

  1. מוסיפים את הפסקה הבאה לקובץ overrides.yaml:
    runtime:
      cwcAppend:
        bin_setenv_max_mem: 4096m   # Increase max heap size to 4 gigs
      resources:
        requests:
          memory: 4Gi
        limits:
          memory: 6Gi
    

    מידע נוסף:

  2. משדרגים את התרשים 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
    

הנחיות לגבי מטען ייעודי (payload) של הודעות בגודל 30MB עד 75MB

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

כדי לחשב את גודל ה-heap לכל מעבד הודעות (MP), משתמשים בערכים הבאים:

  • ‫Q – מספר QPS מקסימלי לכל פוד של MP
  • ‫L – זמן הטעינה של הלוך ושוב לכל בקשה (האחוזון ה-95 של זמן הטעינה הצפוי)
  • ‫C – מספר הבקשות המקסימלי שיכולות להיות בו-זמנית ב-MP בכל זמן נתון. הערך הזה מחושב כך: C = Q * L.
  • ‫P_req – גודל המטען הייעודי (payload) (ב-MB) של הבקשה שנשלחה על ידי הלקוח אל Apigee
  • ‫P_resp – גודל המטען הייעודי (payload) (ב-MB) של התגובה שהתקבלה מ-Target
  • ‫S – מקדם בטיחות (מומלץ להשתמש בטווח של 1.5 עד 2 ב-Apigee)
  • ‫BASE_HEAP – גודל הערימה הבסיסי שכולל משאבים שלא קשורים לבקשות, כמו הגדרות proxy. (מומלץ על ידי Apigee 3072Mi)

כדי לחשב את גודל ה-heap הכולל לכל MP, צריך להביא בחשבון את מקדם הבטיחות S ואת גודל ה-heap הבסיסי:

‫Heap size per 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: 7s
  • גודל המטען הייעודי (payload) של הבקשה, P_req: 40MB
  • גודל המטען הייעודי (payload) של התגובה, P_resp: 40MB
  • מקדם בטיחות, S: 1.5
  • גודל הערימה הבסיסי, BASE_HEAP: 3072Mi

גודל ה-Heap‏ = 3072 + (2 * 7) * (40+40) * 1.5 = 4752Mi

‫limits.memory צפוי להיות גדול ב-1Gi מהערך המומלץ של ה-heap, כדי להתחשב בתקורה של מערכת ההפעלה ובשימוש אחר בזיכרון שאינו 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 יתאים את עצמו לעלייה ב-QPS. עם זאת, צפוי ש-HPA יפעיל הגדלה תוך כ-60 שניות. פרץ תנועה גבוה באופן לא סביר עלול להוביל לשגיאות Out of Memory (OOM) ב-MP.

אם צפויים פרצי תנועה כאלה, מומלץ להגדיל את השימוש ב-heap באמצעות מקדם בטיחות שנראה מתאים. לדוגמה, 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 Callout
  • JavaCallout

מעקב

ההנחיות שמופיעות כאן נועדו לשמש כנקודת התחלה. מומלץ מאוד לעקוב אחרי השימוש בזיכרון ולקבל התראות על חריגות. אם השימוש ב-Heap גבוה באופן עקבי, כדאי להשתמש במקדם בטיחות מוגדל.

מידע נוסף: