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 dei messaggi è 10 MB. Consulta Dimensioni del payload dei messaggi.

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

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

  • Aumenta le dimensioni 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 della tua installazione.

Configura 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 della tua installazione, puoi configurare gli ambienti in modo che supportino payload di grandi dimensioni. In questo modo, eviti 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 stanza al file 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
    

    Vedi:

  2. Esegui l'upgrade del grafico apigee-env per ogni ambiente che stai aggiornando:

    Dry run:

    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 monitorare l'installazione e gli upgrade del grafico apigee-env. Questo nome deve essere univoco rispetto agli altri nomi delle release Helm nell'installazione. In genere, è uguale a ENV_NAME. Tuttavia, se l'ambiente ha lo stesso nome del 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 ulteriori informazioni sulle release in Helm, consulta Tre concetti fondamentali nella documentazione di Helm.
    • ENV_NAME è il nome dell'ambiente di cui stai eseguendo l'upgrade.
    • OVERRIDES_FILE è il file overrides.yaml modificato.
  3. Esegui l'upgrade del grafico:

    Dry run:

    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 stanza runtime impostano i limiti di heap e memoria per tutti gli ambienti della tua installazione. Puoi eseguire l'override di queste impostazioni per i singoli ambienti con le proprietà envs[].components.runtime.

  1. Aggiungi la seguente stanza al file overrides.yaml:
    runtime:
      cwcAppend:
        bin_setenv_max_mem: 4096m   # 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 della tua installazione:

    Dry run:

    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 assisterti in questo processo.

Per calcolare le dimensioni dell'heap per 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 persistere 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 del 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 del proxy. (Apigee consiglia 3072Mi)

Tenendo conto del fattore di sicurezza S, insieme a una dimensione 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 di base degli override per lo scenario di payload di grandi dimensioni è:

envs:
  components:
    runtime:
      resources:
        requests:
          cpu: 2000m
          memory: 2Gi
        limits:
          cpu: 4000m
          memory: 4Gi
      cwcAppend:
        bin_setenv_max_mem: 3072m # 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 del payload della richiesta, P_req: 40 MB
  • Dimensioni del payload della risposta, P_resp: 40 MB
  • Fattore di sicurezza, S: 1,5
  • Dimensioni heap di base, BASE_HEAP: 3072Mi

Dimensioni heap = 3072 + (2 * 7) * (40+40) * 1.5 = 4752Mi

limits.memory dovrebbe superare di 1 Gi l'heap consigliato.

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

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

Considerazioni

Picchi di traffico

HPA garantisce che i pod MP scalino man mano che le QPS aumentano. Tuttavia, l'HPA impiega circa 60 secondi per attivare lo scale up. Un picco di traffico eccessivamente elevato può causare errori di memoria esaurita (OOM) sul processore di messaggi.

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

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

Utilizzo delle policy

Il calcolo precedente non include l'utilizzo delle policy. Apigee consente ai clienti di creare copie dei payload di richiesta / risposta, il che può alterare in modo significativo l'utilizzo dell'heap.

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

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

Ecco alcuni esempi di policy che potrebbero aumentare l'utilizzo della memoria:

  • AssignMessage
  • Callout JavaScript
  • JavaCallout

Monitoraggio

Le linee guida fornite qui sono da considerarsi un punto di partenza. Ti consigliamo vivamente di monitorare la memoria utilizzata e di configurare i relativi avvisi. Utilizza un fattore di sicurezza maggiore se l'utilizzo dell'heap è costantemente elevato.

Vedi anche: