Configurar o suporte a payloads de mensagens grandes na Apigee híbrida

Visão geral

A Apigee híbrida oferece suporte a payloads de mensagens grandes de até 30 MB, com um máximo teórico de 75 MB. O tamanho padrão do payload da mensagem é de 10 MB. Consulte Tamanho do payload da mensagem.

Configurar o suporte para payloads de mensagens de até 30 MB

Para ativar ambientes na sua instalação híbrida e oferecer suporte a payloads de mensagens grandes, faça as seguintes mudanças na configuração do ambiente de execução:

  • Aumente o tamanho do heap para pelo menos 4Gi.
  • Aumente os limites de memória para pelo menos 6 Gi.
  • Aumente as solicitações de recursos de memória para pelo menos 4 Gi.

É possível configurar essas opções para ambientes individuais ou para todos os ambientes na sua instalação.

Configurar ambientes individuais para oferecer suporte a payloads de mensagens grandes

Se os proxies configurados para oferecer suporte a grandes payloads de mensagens tiverem endpoints em apenas um ou alguns ambientes na sua instalação, configure os ambientes para oferecer suporte a grandes payloads. Isso evita adicionar mais memória a ambientes que não precisam oferecer suporte a payloads grandes.

Para configurar ambientes individuais para oferecer suporte a payloads de mensagens grandes, use as propriedades envs.components.runtime. Faça as seguintes mudanças no arquivo overrides.yaml:

  1. Adicione a seguinte estrofe ao arquivo 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
    

    Veja estes tópicos:

  2. Faça upgrade do gráfico apigee-env para cada ambiente que você está atualizando:

    Simulação:

    helm upgrade ENV_RELEASE_NAME apigee-env/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --set env=ENV_NAME \
      -f OVERRIDES_FILE \
      --dry-run=server
    
    • ENV_RELEASE_NAME é um nome usado para acompanhar a instalação e os upgrades do gráfico apigee-env. Ele precisa ser diferente dos outros nomes de versão do Helm na sua instalação. Normalmente, é o mesmo que ENV_NAME. No entanto, se o ambiente tiver o mesmo nome do grupo de ambientes, use nomes de lançamento diferentes para o ambiente e o grupo de ambientes, por exemplo, dev-env-release e dev-envgroup-release. Para mais informações sobre lançamentos no Helm, consulte Três grandes conceitos na documentação do Helm.
    • ENV_NAME é o nome do ambiente que você está fazendo upgrade.
    • OVERRIDES_FILE é o arquivo overrides.yaml editado.
  3. Faça upgrade do gráfico:

    Simulação:

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

Configurar todos os ambientes para oferecer suporte a payloads de mensagens grandes

As mudanças na seção runtime definem os limites de heap e memória para todos os ambientes na instalação. É possível substituir essas configurações em ambientes individuais com as propriedades envs.components.runtime.

  1. Adicione a seguinte estrofe ao arquivo overrides.yaml:
    runtime:
      cwcAppend:
        bin_setenv_max_mem: 4096Mi   # Increase max heap size to 4 gigs
      resources:
        requests:
          memory: 4Gi
        limits:
          memory: 6Gi
    

    Veja estes tópicos:

  2. Faça upgrade do gráfico apigee-env para cada ambiente na instalação:

    Simulação:

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

    Faça upgrade do gráfico:

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

Diretrizes para payloads de mensagens entre 30 MB e 75 MB

Determinar o tamanho ideal do heap para um processador de mensagens em cenários de payload grande depende do seu caso de uso específico. No entanto, a Apigee oferece diretrizes gerais para ajudar nesse processo.

Para calcular o tamanho do heap por processador de mensagens (MP, na sigla em inglês), use os seguintes valores:

  • Q: QPS máximo por pod de MP
  • L: latência de ida e volta por solicitação (95º percentil da latência esperada)
  • C: simultaneidade total por MP, o número máximo de solicitações que podem persistir simultaneamente no MP a qualquer momento. Isso é calculado como C = Q * L.
  • P_req: tamanho do payload (em MB) da solicitação enviada pelo cliente à Apigee
  • P_resp: tamanho do payload (em MB) da resposta recebida do destino.
  • S: fator de segurança (a Apigee recomenda um intervalo de 1,5 a 2)
  • BASE_HEAP: tamanho do heap de base para considerar recursos não relacionados à solicitação, como configurações de proxy. (A Apigee recomenda 3072Mi)

Considerando o fator de segurança S e um tamanho de heap básico, o heap total por MP é calculado da seguinte forma:

Tamanho do heap por MP = BASE_HEAP + C * (P_req + P_resp) * S

A configuração de substituições de base para o cenário de payload grande é:

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

Exemplo de cálculo

Confira um exemplo de cálculo com os seguintes valores:

  • QPS máximo, Q: 2
  • Latência, L: 7s
  • Tamanho do payload da solicitação, P_req: 40 MB
  • Tamanho do payload de resposta, P_resp: 40 MB
  • Fator de segurança, S: 1,5
  • Tamanho do heap de base, BASE_HEAP: 3072Mi

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

Espera-se que limits.memory seja 1 GiB maior que o heap recomendado.

Neste exemplo, você adicionaria o seguinte ao seu overrides.yaml:

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

Considerações

Picos de tráfego

O HPA garante que os MPs sejam escalonados à medida que o QPS aumenta. No entanto, o HPA leva cerca de 60 segundos para acionar o escalonamento vertical. Um pico de tráfego muito alto pode causar erros de falta de memória (OOM) no seu MP.

Se você prevê esses bursts de tráfego, escalonar verticalmente o uso do heap usando um fator de segurança que pareça adequado. Por exemplo, S = 2

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

Uso de políticas

O cálculo acima não inclui o uso da política. A Apigee permite que os clientes façam cópias dos payloads de solicitação / resposta, o que pode alterar significativamente o uso do heap.

Por exemplo, se você tiver uma política de JavaScript que faz três cópias de toda a resposta de destino, a equação a ser usada será:

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

Exemplos de políticas que podem aumentar o uso da memória:

  • AssignMessage
  • JavaScript Callout
  • JavaCallout

Monitoramento

As diretrizes fornecidas aqui servem como ponto de partida. Recomendamos monitorar e alertar sobre o uso de memória. Use um fator de segurança maior se o uso do heap for consistentemente alto.

Consulte também: