
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.
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
Meine Fragen sind
- Warum hat mein App-Server nicht viele offene Verbindungen, nachdem Nginx einen Reverse-Proxy dafür erstellt hat?
- 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, slowtest
es 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:
Durchsatz schneller 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.