انتقل إلى المحتوى

تخصيص الموارد لعقدة Wallarm

كمية الذاكرة وموارد المعالج المخصصة لعقدة التصفية تحدد جودة وسرعة معالجة الطلبات. تصف هذه التعليمات التوصيات لتخصيص ذاكرة عقدة التصفية.

في عقدة التصفية هناك مستهلكين رئيسيين للذاكرة والمعالج:

  • Tarantool، يُسمى أيضًا وحدة postanalytics. هذا هو النظام الخلفي لتحليلات البيانات المحلية والمستهلك الأساسي للذاكرة في عقدة التصفية.

  • NGINX هو العقدة الرئيسية للتصفية ومكون الوكيل المعكوس.

يعتمد استخدام المعالج لـNGINX على العديد من العوامل مثل مستوى RPS، والحجم الوسطي للطلب والاستجابة، وعدد قواعد مجموعة القواعد المخصصة التي تتعامل معها العقدة، وأنواع وطبقات ترميزات البيانات المستخدمة مثل Base64 أو ضغط البيانات، إلخ.

بمتوسط، يمكن لنواة المعالج التعامل مع حوالي 500 RPS. عند التشغيل في وضع الإنتاج، يُوصى بتخصيص نواة واحدة على الأقل لعملية NGINX ونواة واحدة لعملية Tarantool. في معظم الحالات يُوصى بإفراط في تخصيص التوفير لعقدة التصفية في البداية، رؤية الاستخدام الفعلي للمعالج والذاكرة لمستويات حركة المرور الإنتاجية الفعلية، وتقليل الموارد المخصصة تدريجياً إلى مستوى معقول (مع وجود مجال لتقلبات حركة المرور وتكرار العقدة بمقدار 2x على الأقل).

Tarantool

Postanalytics uses the in-memory storage Tarantool. The Tarantool 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 Tarantool 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 Controller

Tarantool memory is configured for the ingress-controller-wallarm-tarantool pod using the following sections in the values.yaml file:

  • To set up memory in GB:

    controller:
      wallarm:
        tarantool:
          arena: "1.0"
    

  • To set up memory in CPU:

    controller:
      wallarm:
        tarantool:
          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.tarantool.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.tarantool.arena='0.4' <INGRESS_CONTROLLER_RELEASE_NAME> wallarm/wallarm-ingress -n <KUBERNETES_NAMESPACE>

تخصيص الموارد إذا كنت تستخدم البرنامج المثبت كلياً

يتم التحكم في حجم ذاكرة Tarantool باستخدام صفة SLAB_ALLOC_ARENA في ملف التكوين /opt/wallarm/env.list. لتخصيص ذاكرة:

  1. افتح ملف /opt/wallarm/env.list للتعديل:

    sudo vim /opt/wallarm/env.list
    
  2. حدد صفة SLAB_ALLOC_ARENA إلى حجم الذاكرة. يمكن أن تكون القيمة عدداً صحيحاً أو عائماً (نقطة . هي فاصل عشري). على سبيل المثال:

    SLAB_ALLOC_ARENA=1.0
    
  3. أعد تشغيل خدمات Wallarm:

    sudo systemctl restart wallarm.service
    

تخصيص الموارد في خيارات النشر الأخرى

يتم التحكم في حجم ذاكرة Tarantool باستخدام صفة SLAB_ALLOC_ARENA في ملف التكوين /etc/default/wallarm-tarantool. لتخصيص ذاكرة:

  1. افتح ملف تكوين 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. حدد صفة SLAB_ALLOC_ARENA إلى حجم الذاكرة. يمكن أن تكون القيمة عدداً صحيحاً أو عائماً (نقطة . هي فاصل عشري). على سبيل المثال:
SLAB_ALLOC_ARENA=1.0
  1. أعد تشغيل 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

يعتمد استهلاك ذاكرة NGINX على العديد من العوامل. بمتوسط يمكن تقديره كما يلي:

عدد الطلبات المتزامنة * حجم الطلب الوسطي * 3

على سبيل المثال:

  • تعمل عقدة التصفية على معالجة 10000 طلب متزامن في الذروة،

  • حجم الطلب الوسطي هو 5 kB.

يمكن تقدير استهلاك ذاكرة NGINX على النحو التالي:

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

لتخصيص كمية الذاكرة:

  • لوحدة pod NGINX Ingress controller (ingress-controller)، قم بضبط الأقسام التالية في ملف values.yaml باستخدام خيار --set من helm install أو helm upgrade:

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

    مثال على الأوامر التي تغير الإعدادات:

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

    هناك أيضاً إعدادات أخرى مطلوبة لتثبيت Ingress controller بشكل صحيح. يرجى تمريرها في خيار --set أيضاً.

    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>
    
  • لخيارات النشر الأخرى، استخدم ملفات تكوين NGINX.

استكشاف الأخطاء وإصلاحها

إذا استهلكت عُقدة Wallarm مزيداً من الذاكرة والمعالج مما كان متوقعاً، لتقليل استخدام الموارد، اطلع على التوصيات من مقال استكشاف مشاكل الاستخدام العالي للمعالج واتبعها.