Durch das Deaktivieren der Proxy-Pufferung von Nginx wird die Antwort nicht synchronisiert

Durch das Deaktivieren der Proxy-Pufferung von Nginx wird die Antwort nicht synchronisiert

Mein Verständnis von deaktivierter Proxy-Pufferung von Nginx ist, dass der App-Server und nicht Nginx auf die Antwort des Clients wartet. Daher sollte ich viele offene Verbindungen sehen, aber bei meinen Tests ist das nicht der Fall.

Aufstellen:

client (10.2.0.7) <===> Nginx (10.2.0.5) <===> PythonApp (10.2.0.4, port 8000)

500 langsame, vom Client initiierte Verbindungen slowhttptest -c 500 -H -g -o my_header_stats -i 10 -r 50 -t GET -u http://pythonapp.com -x 24 -p 3

Nginx-Konferenz:

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events
{
    worker_connections 768;
    # multi_accept on;
}

http
{

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    # gzip on;
    upstream pythonapp
    {
        server 10.2.0.4:8000;
    }

    proxy_buffering off;
    server
    {
        listen 80;
        proxy_buffering off;
        server_name pythonapp.com;

        location /
        {
            proxy_buffering off;
            proxy_pass http://pythonapp;
        }
    }

    # include /etc/nginx/conf.d/*.conf;
    # include /etc/nginx/sites-enabled/*;
}

Es wird nur 1 offene Verbindung von Nginx angezeigt. Nur 1 offene Verbindung

Wenn ich langsame Verbindungen vom Client direkt zum PythonApp-Server initiiere, sehe ich viele offene Verbindungen. Setup:

client (10.2.0.7) <===> PythonApp (10.2.0.4, port 8000)

500 langsame, vom Client initiierte Verbindungen slowhttptest -c 500 -H -g -o my_header_stats -i 10 -r 50 -t GET -u http://10.2.0.4:8000 -x 24 -p 3 Bildbeschreibung hier eingeben

Meine Fragen sind

  1. Warum hat mein App-Server nicht viele offene Verbindungen, nachdem Nginx einen Reverse-Proxy dafür erstellt hat?
  2. Wenn meine Einstellung falsch ist, können Sie einen expliziten Code und ein Konfigurationsbeispiel zum Einrichten der entsprechenden Umgebung bereitstellen, um den Leistungs- oder Durchsatzunterschied zwischen aktivierter und deaktivierter Remote-Pufferung anzuzeigen?

Antwort1

Schließlich habe ich herausgefunden, wie man den Durchsatzunterschied zwischen aktiviertem und deaktiviertem Proxy-Puffern testen kann. Ich denke, slowtestes ist kein gutes Tool, um das zu testen. Ich habeArbeit

Mein neues Setup:

Slow client (10.2.0.7) \
                        \
                        Nginx (10.2.0.5) <===> PythonApp (10.2.0.4, port 8000)
                       /
                      /
Fast client (10.2.0.6)

Sie können darauf verweisenLeitfaden zum digitalen OzeanSo richten Sie die Flask-App und die Python-App ein:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "<h1 style='color:blue'>Hello There!</h1>"

@app.route("/big-file")
def big_file():
    return "<h1 style='color:blue'>" + "Hello There!"*1000000 + "</h1>"

if __name__ == "__main__":
    app.run(host='0.0.0.0')

Langsamer Client:

# modprobe ifb
# ip link set dev ifb0 up
# tc qdisc add dev eth0 ingress
# tc filter add dev eth0 parent ffff: \
protocol ip u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0
# tc qdisc add dev ifb0 root netem delay 750ms

Führen Sie den WRK-Test auf einem schnellen und langsamen Client aus:

Langsamer Client:

# wrk -t4 -c10 -d30  http://pythonapp.com/big-file

Schneller Client:

# wrk -t2 -c100 -d10 http://pythonapp.com

Für langsame Clients ist es ein Muss, auf den Pfad /big-file zuzugreifen, der eine ziemlich große Antwort zurückgibt. Wenn die Antwort kleiner ist alsProxy-Puffergröße, die Verbindung zwischen Nginx und dem Proxyserver wird sehr schnell geschlossen und Sie können die Blockierung nicht simulieren.

Von langsamen Clients belegte Verbindungen ohne Proxy-Pufferung in Nginx und Durchsatz schneller Clients: Von langsamen Clients belegte Verbindungen

Durchsatz schneller Clients ohne Proxy-Pufferung Testergebnis des schnellen Clients ohne Proxy-Pufferung

Wenn Proxy_Buffering vorhanden ist, werden Sie keine von langsamen Clients belegten Verbindungen sehen. Sie können die Befehle für langsame Clients ausführen, um zuerst langsame Antworten herunterzuladen, und dann die Verbindungen in Nginx überprüfen. Keine belegten Anschlüsse durch langsame Clients

Durchsatz schneller Clients bei Proxy-Pufferung Bildbeschreibung hier eingeben

verwandte Informationen