Ana içeriğe geç

Wallarm NGINX node için Kaynak Ayırma

Wallarm NGINX node için ayrılan bellek ve CPU kaynaklarının miktarı istek işleme kalitesini ve hızını belirler. Bu talimatlar, self-hosted NGINX node bellek tahsisine yönelik önerileri açıklar.

Bir NGINX filtreleme düğümünde bellek ve CPU kaynaklarını tüketen iki ana bileşen vardır:

  • wstore, post-analiz modülü olarak da adlandırılır. Bu, yerel veri analitiği arka ucu olup filtreleme düğümündeki birincil bellek tüketicisidir.

  • NGINX ana filtreleme düğümü ve ters proxy bileşenidir.

NGINX CPU kullanımı; RPS düzeyi, istek ve yanıtın ortalama boyutu, düğümün işlediği özel kurallar kümesindeki kural sayısı, Base64 veya veri sıkıştırma gibi kullanılan veri kodlamalarının türleri ve katmanları vb. birçok faktöre bağlıdır.

Ortalama olarak bir CPU çekirdeği yaklaşık 500 RPS işleyebilir. Production modda çalışırken NGINX süreci için en az 1 CPU çekirdeği ve wstore süreci için 1 çekirdek ayırmanız önerilir. Çoğu durumda, önce filtreleme düğümünü fazla tahsis etmek, gerçek production trafik seviyeleri için fiili CPU ve bellek kullanımını gözlemlemek ve ayrılan kaynakları kademeli olarak makul bir seviyeye düşürmek (trafik sıçramaları ve düğüm yedekliliği için en az 2x marjla) önerilir.

wstore

Postanalytics uses the in-memory storage wstore. The wstore database is used to keep in a circular buffer a local copy of the data stream processed by a filtering node, including request/response headers and request bodies (but not response bodies).

To make a filtering node efficient, the database should keep at least 15 minutes of transmitted data with about 2x overhead for data serialization. Following these points, the amount of memory can be estimated by the formula:

Speed of request processing per minute in bytes * 15 * 2

For example, if a filtering node is handling at peak 50 Mbps of end user requests, the required wstore database memory consumption can be estimated as the following:

50 Mbps / 8 (bits in a byte) * 60 (seconds in a minute) * 15 * 2 = 11,250 MB (or ~ 11 GB)

Kubernetes Ingress denetleyicisinde Kaynak Ayırma

wstore memory is configured using the following sections in the values.yaml file:

  • To set up memory in GB:

    controller:
      wallarm:
        postanalytics:
          arena: "1.0"
    

  • To set up memory in CPU:

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

Listed parameters are set by using the --set option of the commands helm install and helm upgrade, for example:

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

There are also other parameters required for correct Ingress controller installation. Please pass them in the --set option too.

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

All-in-One Installer kullanılıyorsa Kaynak Ayırma

wstore belleğinin boyutlandırılması, /opt/wallarm/env.list yapılandırma dosyasındaki SLAB_ALLOC_ARENA özniteliği kullanılarak kontrol edilir. Bellek ayırmak için:

  1. /opt/wallarm/env.list dosyasını düzenlemek üzere açın:

    sudo vim /opt/wallarm/env.list
    
  2. SLAB_ALLOC_ARENA özniteliğini bellek boyutuna ayarlayın. Değer tam sayı veya kayan nokta olabilir (ondalık ayırıcı nokta . olmalıdır). Örneğin:

    SLAB_ALLOC_ARENA=1.0
    
  3. Wallarm servislerini yeniden başlatın:

    sudo systemctl restart wallarm.service
    

Amazon Machine Image kullanılıyorsa Kaynak Ayırma

  • Wallarm node, ayrılan kaynakları wstore ve NGINX arasında otomatik olarak dağıtır.

  • Wallarm NGINX Node AMI üzerinden bir Wallarm node örneği başlatırken, test için t3.medium ve production için m4.xlarge örnek tiplerini kullanmanızı öneririz.

NGINX

NGINX bellek tüketimi birçok faktöre bağlıdır. Ortalama olarak aşağıdaki şekilde tahmin edilebilir:

Eşzamanlı istek sayısı * Ortalama istek boyutu * 3

Örneğin:

  • Filtreleme düğümü, zirvede 10000 eşzamanlı isteği işliyor,

  • ortalama istek boyutu 5 kB.

NGINX bellek tüketimi aşağıdaki gibi tahmin edilebilir:

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

Bellek miktarını ayarlamak için:

  • NGINX Ingress denetleyici pod'u (ingress-controller) için, helm install veya helm upgrade komutlarının --set seçeneğini kullanarak values.yaml dosyasındaki aşağıdaki bölümleri yapılandırın:

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

    Parametreleri değiştiren komut örnekleri:

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

    Doğru Ingress denetleyicisi kurulumu için diğer parametreler de gereklidir. Lütfen bunları da --set seçeneğinde iletin.

    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>
    
  • diğer dağıtım seçenekleri için NGINX yapılandırma dosyalarını kullanın.

Sorun Giderme

Bir Wallarm node beklenenden daha fazla bellek ve CPU tüketiyorsa, kaynak kullanımını azaltmak için CPU yüksek kullanım sorun giderme makalesindeki önerileri inceleyip uygulayın.