Unterstützung für große Nachrichtenn-Nutzlast in Apigee Hybrid konfigurieren

Übersicht

Apigee Hybrid unterstützt große Nachrichtennutzlasten bis zu 30 MB. Ab Hybrid 1.15.1 können große Nachrichtennutzlasten bis zu 75 MB zugelassen werden. Die Standardgröße der Nachrichtennutzlast beträgt 10 MB. Weitere Informationen finden Sie unter Größe der Nachrichtennutzlast.

Unterstützung für Nachrichtennutzlasten bis zu 30 MB konfigurieren

Damit Umgebungen in Ihrer Hybridinstallation große Nachrichtennutzlasten unterstützen, müssen Sie die folgenden Änderungen an Ihrer Laufzeitkonfiguration vornehmen:

  • Erhöhen Sie die Heap-Größe auf mindestens 4 Gi.
  • Erhöhen Sie die Speicherlimits auf mindestens 6 Gi.
  • Erhöhen Sie die Speicherressourcenanfragen auf mindestens 4 Gi.

Sie können diese Einstellungen für einzelne Umgebungen oder für alle Umgebungen in Ihrer Installation konfigurieren.

Einzelne Umgebungen für die Unterstützung großer Nachrichtennutzlasten konfigurieren

Wenn die Proxys, die für die Unterstützung großer Nachrichtennutzlasten konfiguriert sind, nur in einer oder wenigen Umgebungen in Ihrer Installation Endpunkte haben, können Sie die Umgebungen so konfigurieren, dass sie große Nutzlasten unterstützen. So wird vermieden, dass Umgebungen, die keine großen Nutzlasten unterstützen müssen, zusätzlicher Arbeitsspeicher hinzugefügt wird.

Wenn Sie einzelne Umgebungen so konfigurieren möchten, dass sie große Nachrichtennutzlasten unterstützen, können Sie die envs[].components.runtime-Attribute verwenden. Nehmen Sie die folgenden Änderungen an der Datei overrides.yaml vor:

  1. Fügen Sie der Datei overrides.yaml die folgende Stanza hinzu:
    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
    

    Weitere Informationen:

  2. Aktualisieren Sie das apigee-env-Diagramm für jede Umgebung, die Sie aktualisieren:

    Probelauf:

    helm upgrade ENV_RELEASE_NAME apigee-env/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --set env=ENV_NAME \
      -f OVERRIDES_FILE \
      --dry-run=server
    
    • ENV_RELEASE_NAME ist ein Name, mit dem die Installation und Upgrades des apigee-env-Diagramms verfolgt werden. Dieser Name muss sich von den anderen Helm-Releasenamen in Ihrer Installation unterscheiden. Normalerweise ist dies mit ENV_NAME identisch. Wenn Ihre Umgebung jedoch denselben Namen wie Ihre Umgebungsgruppe hat, müssen Sie für die Umgebung und die Umgebungsgruppe unterschiedliche Releasenamen verwenden, z. B. dev-env-release und dev-envgroup-release. Weitere Informationen zu Releases in Helm finden Sie in der Helm-Dokumentation unter Drei große Konzepte.
    • ENV_NAME ist der Name der Umgebung, die Sie aktualisieren.
    • OVERRIDES_FILE ist die bearbeitete Datei overrides.yaml.
  3. Aktualisieren Sie das Diagramm:

    Probelauf:

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

Alle Umgebungen für die Unterstützung großer Nachrichtennutzlasten konfigurieren

Durch Änderungen an der runtime-Strophe werden die Heap- und Arbeitsspeicherlimits für alle Umgebungen in Ihrer Installation festgelegt. Sie können diese Einstellungen für einzelne Umgebungen mit den envs[].components.runtime-Attributen überschreiben.

  1. Fügen Sie der Datei overrides.yaml die folgende Stanza hinzu:
    runtime:
      cwcAppend:
        bin_setenv_max_mem: 4096m   # Increase max heap size to 4 gigs
      resources:
        requests:
          memory: 4Gi
        limits:
          memory: 6Gi
    

    Weitere Informationen:

  2. Aktualisieren Sie das apigee-env-Diagramm für jede Umgebung in Ihrer Installation:

    Probelauf:

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

    Aktualisieren Sie das Diagramm:

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

Richtlinien für Nachrichtennutzlasten zwischen 30 MB und 75 MB

Die Bestimmung der optimalen Heap-Größe für einen Message Processor für Szenarien mit großen Nutzlasten hängt von Ihrem spezifischen Anwendungsfall ab. Apigee bietet jedoch allgemeine Richtlinien, die Sie bei diesem Prozess unterstützen.

Verwenden Sie die folgenden Werte, um die Heap-Größe pro Message Processor (MP) zu berechnen:

  • Q – Maximale Abfragen pro Sekunde pro MP-Pod
  • L: Round-Trip-Latenz pro Anfrage (95. Perzentil der erwarteten Latenz)
  • C: Gesamte Nebenläufigkeit pro MP, die maximale Anzahl von Anfragen, die gleichzeitig im MP bestehen können. Die Berechnung sieht so aus: C = Q * L.
  • P_req: Nutzlastgröße (in MB) der Anfrage, die vom Client an Apigee gesendet wurde
  • P_resp: Nutzlastgröße (in MB) der vom Ziel empfangenen Antwort
  • S: Sicherheitsfaktor (Apigee empfiehlt einen Bereich von 1,5 bis 2)
  • BASE_HEAP: Basis-Heap-Größe, um nicht anfragebezogene Ressourcen wie Proxy-Konfigurationen zu berücksichtigen. (Apigee empfiehlt 3072Mi)

Unter Berücksichtigung des Sicherheitsfaktors S und einer Basis-Heap-Größe wird der Gesamt-Heap pro MP so berechnet:

Heap-Größe pro MP = BASE_HEAP + C * (P_req + P_resp) * S

Die Basiskonfiguration für das Szenario mit großer Nutzlast sieht so aus:

envs:
  components:
    runtime:
      resources:
        requests:
          cpu: 2000m
          memory: 2Gi
        limits:
          cpu: 4000m
          memory: 4Gi
      cwcAppend:
        bin_setenv_max_mem: 3072m # base heap size

Beispielrechnung

Hier ein Beispiel für eine Berechnung mit den folgenden Werten:

  • Maximale Abfragen pro Sekunde, Q: 2
  • Latenz, L: 7 s
  • Größe der Anfragenutzlast, P_req: 40 MB
  • Größe der Antwortnutzlast, P_resp: 40 MB
  • Sicherheitsfaktor, S: 1,5
  • Basis-Heap-Größe, BASE_HEAP: 3072Mi

Heap-Größe = 3072 + (2 * 7) * (40+40) * 1.5 = 4752Mi

limits.memory wird voraussichtlich 1 Gi über dem empfohlenen Heap liegen.

In diesem Beispiel würden Sie Folgendes zu Ihrer overrides.yaml hinzufügen:

envs:
  components:
    runtime:
      resources:
        requests:
          memory: 4Gi
        limits:
          memory: 5.75Gi # approximately 1Gi over 4.75Gi
      cwcAppend:
        bin_setenv_max_mem: 4752m

Hinweise

Traffic-Bursts

HPA sorgt dafür, dass MPs skaliert werden, wenn die QPS steigen. Es kann jedoch etwa 60 Sekunden dauern, bis HPA die Hochskalierung auslöst. Ein unangemessen hoher Traffic-Anstieg kann zu OOM-Fehlern (Out of Memory) auf Ihrem MP führen.

Wenn Sie solche Traffic-Bursts erwarten, sollten Sie die Heap-Nutzung mit einem angemessenen Sicherheitsfaktor erhöhen. Beispiel: S = 2.

Heap = BASE_HEAP + (Q * L) * (P_req + P_resp) * 2

Richtliniennutzung

Die obige Berechnung beinhaltet nicht die Nutzung von Richtlinien. Apigee ermöglicht es Kunden, Kopien ihrer Anfrage-/Antwortnutzlasten zu erstellen. Dies kann die Heap-Nutzung erheblich verändern.

Wenn Sie beispielsweise eine JavaScript-Richtlinie haben, die drei Kopien Ihrer gesamten Zielantwort erstellt, lautet die zu verwendende Gleichung:

Heap per MP = Base Heap + (Q * L) * (P_req + P_resp * 4) * S

Beispiele für Richtlinien, die die Arbeitsspeichernutzung potenziell erhöhen könnten:

  • AssignMessage
  • JavaScript Callout
  • JavaCallout

Monitoring

Die hier aufgeführten Richtlinien dienen als Ausgangspunkt. Wir empfehlen dringend, die Speichernutzung zu überwachen und Benachrichtigungen einzurichten. Verwenden Sie einen höheren Sicherheitsfaktor, wenn die Heap-Nutzung konstant hoch ist.

Weitere Informationen