Configurare il supporto del payload dei messaggi di grandi dimensioni in Apigee hybrid

Panoramica

Apigee hybrid supporta payload di messaggi di grandi dimensioni fino a 30 MB. A partire dalla versione 1.15.1, hybrid può consentire payload di messaggi di grandi dimensioni fino a 75 MB. La dimensione predefinita del payload del messaggio è 10 MB. Vedi Dimensioni del payload del messaggio.

Configurare il supporto per i payload dei messaggi fino a 30 MB

Per consentire agli ambienti nell'installazione ibrida di supportare payload di messaggi di grandi dimensioni, devi apportare le seguenti modifiche alla configurazione di runtime:

  • Aumenta la dimensione dell'heap ad almeno 4 Gi.
  • Aumenta i limiti di memoria ad almeno 6 Gi.
  • Aumenta le richieste di risorse di memoria ad almeno 4 Gi.

Puoi configurare queste impostazioni per singoli ambienti o per tutti gli ambienti dell'installazione.

Configurare singoli ambienti per supportare payload di messaggi di grandi dimensioni

Se i proxy configurati per supportare payload di messaggi di grandi dimensioni hanno endpoint in uno o pochi ambienti dell'installazione, puoi configurare gli ambienti in modo che supportino payload di grandi dimensioni. In questo modo si evita di aggiungere memoria aggiuntiva agli ambienti che non dovranno supportare payload di grandi dimensioni.

Per configurare singoli ambienti in modo che supportino payload di messaggi di grandi dimensioni, puoi utilizzare le proprietà envs.components.runtime. Apporta le seguenti modifiche al file overrides.yaml:

  1. Aggiungi la seguente strofa al file overrides.yaml:
    envs:
    - name: ENV_NAME
      components.
        runtime:
          cwcAppend:
            bin_setenv_max_mem: 4096Mi   # Increase max heap size to 4 gigs
          resources:
            requests:
              memory: 4Gi
            limits:
              memory: 6Gi
    

    Vedi:

  2. Aggiorna il grafico apigee-env per ogni ambiente che stai aggiornando:

    Prova:

    helm upgrade ENV_RELEASE_NAME apigee-env/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --set env=ENV_NAME \
      -f OVERRIDES_FILE \
      --dry-run=server
    
    • ENV_RELEASE_NAME è un nome utilizzato per tenere traccia dell'installazione e degli upgrade del grafico apigee-env. Questo nome deve essere univoco rispetto agli altri nomi delle release Helm nell'installazione. Di solito è uguale a ENV_NAME. Tuttavia, se il tuo ambiente ha lo stesso nome del tuo gruppo di ambienti, devi utilizzare nomi di release diversi per l'ambiente e il gruppo di ambienti, ad esempio dev-env-release e dev-envgroup-release. Per saperne di più sulle release in Helm, consulta Tre concetti importanti nella documentazione di Helm.
    • ENV_NAME è il nome dell'ambiente che stai eseguendo l'upgrade.
    • OVERRIDES_FILE è il file overrides.yaml modificato.
  3. Esegui l'upgrade del grafico:

    Prova:

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

Configura tutti gli ambienti in modo che supportino payload di messaggi di grandi dimensioni

Le modifiche alla sezione runtime imposteranno i limiti di heap e memoria per tutti gli ambienti dell'installazione. Puoi eseguire l'override di queste impostazioni per singoli ambienti con le proprietà envs.components.runtime.

  1. Aggiungi la seguente strofa al file overrides.yaml:
    runtime:
      cwcAppend:
        bin_setenv_max_mem: 4096Mi   # Increase max heap size to 4 gigs
      resources:
        requests:
          memory: 4Gi
        limits:
          memory: 6Gi
    

    Vedi:

  2. Esegui l'upgrade del grafico apigee-env per ogni ambiente dell'installazione:

    Prova:

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

    Esegui l'upgrade del grafico:

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

Linee guida per i payload dei messaggi tra 30 MB e 75 MB

La determinazione della dimensione ottimale dell'heap per un processore di messaggi per scenari con payload di grandi dimensioni dipende dal tuo caso d'uso specifico. Tuttavia, Apigee offre linee guida generali per aiutarti in questo processo.

Per calcolare le dimensioni dell'heap per ogni processore di messaggi (MP), utilizza i seguenti valori:

  • Q - QPS max per pod MP
  • L - Latenza di andata e ritorno per richiesta (95° percentile della latenza prevista)
  • C: concorrenza totale per MP, il numero massimo di richieste che possono essere persistenti contemporaneamente nell'MP in un determinato momento. Questo valore viene calcolato come C = Q * L.
  • P_req - Dimensione del payload (in MB) della richiesta inviata dal client ad Apigee
  • P_resp - Dimensioni payload (in MB) della risposta ricevuta dal target
  • S - Fattore di sicurezza (Apigee consiglia un intervallo compreso tra 1,5 e 2)
  • BASE_HEAP: dimensione heap di base per tenere conto delle risorse non correlate alle richieste, come le configurazioni proxy. (Apigee consiglia 3072Mi)

Tenendo conto del fattore di sicurezza S, insieme a una dimensione dell'heap di base, l'heap totale per MP viene calcolato come segue:

Dimensioni heap per MP = BASE_HEAP + C * (P_req + P_resp) * S

La configurazione degli override di base per lo scenario Large Payload è:

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

Calcolo di esempio

Di seguito è riportato un esempio di calcolo con i seguenti valori:

  • QPS max, Q: 2
  • Latenza, L: 7 s
  • Dimensioni payload richiesta, P_req: 40 MB
  • Dimensioni payload risposta, P_resp: 40 MB
  • Fattore di sicurezza, S: 1,5
  • Dimensioni heap di base, BASE_HEAP: 3072 Mi

Heap size = 3072 + (2 * 7) * (40+40) * 1.5 = 4752Mi

Si prevede che limits.memory superi di 1 GB l'heap consigliato.

In questo esempio, devi aggiungere quanto segue a overrides.yaml:

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

Considerazioni

Picchi di traffico

HPA garantisce che i MP vengano scalati all'aumentare delle QPS. Tuttavia, puoi aspettarti che HPA impieghi circa 60 secondi per attivare lo scale up. Un picco di traffico irragionevolmente elevato può causare errori di memoria insufficiente (OOM) sul tuo MP.

Se prevedi questi picchi di traffico, aumenta l'utilizzo dell'heap utilizzando un fattore di sicurezza che ti sembra appropriato. Ad esempio, S = 2.

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

Utilizzo delle policy

Il calcolo riportato sopra non include l'utilizzo di Policy. Apigee consente ai clienti di creare copie dei payload di richiesta / risposta e questo può alterare in modo significativo l'utilizzo dell'heap.

Ad esempio, se hai una policy JavaScript che crea 3 copie dell'intera risposta di destinazione, l'equazione da utilizzare è:

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

Esempi di policy che potrebbero potenzialmente aumentare l'utilizzo della memoria:

  • AssignMessage
  • Callout JavaScript
  • JavaCallout

Monitoraggio

Le linee guida fornite qui hanno lo scopo di fungere da punto di partenza. È consigliabile monitorare e inviare avvisi sull'utilizzo della memoria. Utilizza un fattore di sicurezza maggiore se l'utilizzo dell'heap è costantemente elevato.

Vedi anche: