Pular para conteúdo

Alocando Recursos para o Nó Wallarm

A quantidade de memória e recursos de CPU alocados para o nó de filtro determina a qualidade e a velocidade do processamento da solicitação. Estas instruções descrevem as recomendações para a alocação de memória do nó de filtragem.

Em um nó de filtragem existem dois principais consumidores de memória e CPU:

  • Tarantool, também chamado de módulo pós-analítico. Este é o backend de análise de dados local e o principal consumidor de memória em um nó de filtragem.

  • NGINX é o principal nó de filtragem e componente de proxy reverso.

A utilização da CPU do NGINX depende de muitos fatores, como o nível de RPS, o tamanho médio de solicitação e resposta, o número de regras de conjunto de regras personalizadas manipuladas pelo nó, tipos e camadas de codificações de dados utilizadas, como Base64 ou compressão de dados, etc.

Em média, um núcleo de CPU pode manipular cerca de 500 RPS. Ao ser executado no modo de produção, é recomendado alocar pelo menos um núcleo de CPU para o processo NGINX e um núcleo para o processo Tarantool. Na maioria dos casos, é recomendado inicialmente sobrealocar um nó de filtragem, ver o uso real da CPU e da memória para os níveis de tráfego de produção reais e reduzir gradualmente os recursos alocados para um nível razoável (com pelo menos 2x de folga para picos de tráfego e redundância do nó).

Tarantool

O Postanalytics usa o armazenamento em memória Tarantool. O banco de dados Tarantool é usado para manter em um buffer circular uma cópia local do fluxo de dados processados por um nó de filtragem, incluindo cabeçalhos de solicitação/resposta e corpos de solicitação (mas não corpos de resposta).

Para tornar um nó de filtragem eficiente, o banco de dados deve manter pelo menos 15 minutos de dados transmitidos com cerca de 2x de sobrecarga para a serialização de dados. Seguindo esses pontos, a quantidade de memória pode ser estimada pela fórmula:

Velocidade de processamento de solicitações por minuto em bytes * 15 * 2

Por exemplo, se um nó de filtragem está manipulando no pico 50 Mbps de solicitações de usuários finais, o consumo de memória do banco de dados Tarantool necessário pode ser estimado da seguinte forma:

50 Mbps / 8 (bits em um byte) * 60 (segundos em um minuto) * 15 * 2 = 11.250 MB (ou ~ 11 GB)

Alocando Recursos no Controlador de Ingresso do Kubernetes

A memória do Tarantool é configurada para o pod ingress-controller-wallarm-tarantool usando as seguintes seções no arquivo values.yaml:

  • Para configurar a memória em GB:

    controller:
      wallarm:
        tarantool:
          arena: "1.0"
    

  • Para configurar a memória em CPU:

    controller:
      wallarm:
        tarantool:
          resources:
            limits:
              cpu: 400m
              memory: 3280Mi
            requests:
              cpu: 200m
              memory: 1640Mi
    

Os parâmetros listados são definidos usando a opção --set dos comandos helm install e helm upgrade, por exemplo:

helm install --set controller.wallarm.tarantool.arena='1.0' <INGRESS_CONTROLLER_RELEASE_NAME> wallarm/wallarm-ingress -n <KUBERNETES_NAMESPACE>

Também existem outros parâmetros necessários para a instalação correta do Controlador de Entrada. Por favor, passe-os na opção --set também.

helm upgrade --reuse-values --set controller.wallarm.tarantool.arena='0.4' <INGRESS_CONTROLLER_RELEASE_NAME> wallarm/wallarm-ingress -n <KUBERNETES_NAMESPACE>

Alocando Recursos em Outras Opções de Implantação

O dimensionamento da memória do Tarantool é controlado usando o atributo SLAB_ALLOC_ARENA no arquivo de configuração /etc/default/wallarm-tarantool. Para alocar memória:

  1. Abra para edição o arquivo de configuração do Tarantool:
sudo vim /etc/default/wallarm-tarantool
sudo vim /etc/default/wallarm-tarantool
sudo vim /etc/default/wallarm-tarantool
sudo vim /etc/default/wallarm-tarantool
sudo vim /etc/default/wallarm-tarantool
sudo vim /etc/sysconfig/wallarm-tarantool
sudo vim /etc/sysconfig/wallarm-tarantool
sudo vim /etc/sysconfig/wallarm-tarantool
sudo vim /etc/sysconfig/wallarm-tarantool
  1. Defina o atributo SLAB_ALLOC_ARENA para o tamanho da memória. O valor pode ser um número inteiro ou um número de ponto flutuante (um ponto . é um separador decimal). Por exemplo:
SLAB_ALLOC_ARENA=1.0
  1. Reinicie o Tarantool:
sudo systemctl restart wallarm-tarantool
sudo systemctl restart wallarm-tarantool
sudo service wallarm-tarantool restart
sudo service wallarm-tarantool restart
sudo service wallarm-tarantool restart
sudo systemctl restart wallarm-tarantool
sudo systemctl restart wallarm-tarantool
sudo systemctl restart wallarm-tarantool
sudo systemctl restart wallarm-tarantool

NGINX

O consumo de memória do NGINX depende de muitos fatores. Em média, pode ser estimado da seguinte maneira:

Número de requisições simultâneas * Tamanho médio da requisição * 3

Por exemplo:

  • O nó de filtragem está processando no pico 10000 solicitações simultâneas,

  • o tamanho médio da solicitação é 5 kB.

O consumo de memória do NGINX pode ser estimado da seguinte maneira:

10000 * 5 kB * 3 = 150000 kB (ou ~150 MB)

Para alocar a quantidade de memória:

  • para o pod do controlador de Ingresso NGINX (ingress-controller), configure as seguintes seções no arquivo values.yaml usando a opção --set de helm install ou helm upgrade:

    controller:
      resources:
        limits:
          cpu: 400m
          memory: 3280Mi
        requests:
          cpu: 200m
          memory: 1640Mi
    

    Exemplo de comandos alterando os parâmetros:

    helm install --set controller.resources.limits.cpu='2000m',controller.resources.limits.memory='3280Mi' <INGRESS_CONTROLLER_RELEASE_NAME> wallarm/wallarm-ingress -n <KUBERNETES_NAMESPACE>
    

    Também há outros parâmetros necessários para a correta instalação do controlador de Ingresso. Por favor, passe-os na opção --set também.

    helm upgrade --reuse-values --set controller.resources.limits.cpu='2000m',controller.resources.limits.memory='3280Mi' <INGRESS_CONTROLLER_RELEASE_NAME> wallarm/wallarm-ingress -n <KUBERNETES_NAMESPACE>
    
  • para outras opções de implantação, use os arquivos de configuração do NGINX.

Solução de Problemas

Se um nó Wallarm consome mais memória e CPU do que o esperado, para reduzir o uso de recursos, familiarize-se com as recomendações do artigo de solução de problemas de alto uso de CPU e siga-as.