Beim Versuch, eine hoch verfügbare Webserver-Einrichtung zu erreichen, führte ich einen Belastungstest gegen einen extrem einfachen NGINX-Docker-Container durch, der eine einzige statische Datei lieferte.Warum werden beim Erhöhen von Knoten/Pods auf einem einfachen NGINX-Dockercluster keine höheren gleichzeitigen Anforderungen angezeigt?
Zuerst versuchte ich mit einem einzigen Knoten (n1-standard-4) & single pod Cluster, um zu messen, wie viel eine "Einheit" tun könnte. Dieses Einzelknoten-/Pod-Setup konnte mit etwa 20.000 gleichzeitigen Anfragen fertig werden, bevor mit dem Timeout für einige Anfragen/Durchsatzeinbrüche begonnen wurde.
Ich fügte dann einen anderen Knoten desselben Maschinentyps hinzu und skalierte die Pods auf zwei Replikate. Nachdem ich bestätigt hatte, dass beide Pods/Nodes aktiv waren, habe ich den Test erneut mit 20k durchgeführt. Die Leistung war gut und ich stieg auf 40k - in der Erwartung, dass ich ähnliche Ergebnisse wie die 20k beim 1-Knoten/Pod-Setup sehen würde.
Allerdings war die Leistung sehr schlecht, niemals mit Anfragen pro Sekunde, die heftig zwischen 15k und 30k springen.
Ich versuchte den gleichen Test erneut mit 4 Knoten/Pods und sah ähnliche, wenn nicht etwas schlechtere Ergebnisse.
Meine Frage (n) sind:
Bin ich falsch zu glauben, dass meine gleichzeitige Anforderungen mit GKE/Container/Kubernetes linear auf diese Weise skalieren sollte?
Was vermisse ich, um die gewünschten Ergebnisse zu erzielen, um N gleichzeitige Benutzer mit M Knoten/Pods im Cluster zu bewältigen?
EDIT: Ich glaube auch nicht, dass es ein Problem mit dem Lasttest-Tool - wie ich einen externen bezahlten Dienst verwende, die 100k gleichzeitige Anforderungen simulieren bis zu können, behauptet.
EDIT 2: Hier einige weitere Informationen über das Setup:
Dockerfile:
FROM nginx
ADD nginx.conf /etc/nginx/nginx.conf
ADD index.html /usr/share/nginx/html/index.html
ADD data.json /usr/share/nginx/html/data.json
nginx.conf:
user nginx;
worker_processes 4;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 4096;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log off;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
server {
listen 80 default_server;
listen [::]:80 default_server;
root /usr/share/nginx/html;
# Serve the index.html page
location/{
try_files /index.html =404;
}
}
include /etc/nginx/conf.d/*.conf;
}
index.html:
Ich habe den Dienst "LoadBalancer" verwendet, von dem ich glaube, dass er ein Google Cloud Balancer ist (ich habe dies bestätigt und festgestellt, dass die Knoten hinzugefügt wurden). Hier sind die Dateien, die ich mit kubernetes verwendet habe, um den Cluster zu verwalten.
rc.yml:
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx-rc
labels:
name: nginx-rc
spec:
replicas: 2
selector:
name: nginx-server
template:
metadata:
labels:
name: nginx-server
name: nginx-server
spec:
containers:
- name: nginx-server
image: [[ my image ]]
ports:
- containerPort: 80
hostPort: 80
Dienstleistungen.yml:
apiVersion: v1
kind: Service
metadata:
labels:
name: nginx-lb
name: nginx-lb
spec:
ports:
- port: 80
targetPort: 80
selector:
name: nginx-server
type: LoadBalancer
Geben Sie uns einige weitere, um weiterzugehen .. Können Sie einen Link zu Ihrer Dockerfile bereitstellen? Wie balancierst du deine Ladung? Das Clustering hängt stark von einer guten Lastausgleichsmethode ab. Von Ihren Tags gehe ich davon aus, dass Sie kubernetes verwendet haben. Haben Sie den Loadbalancer benutzt? Siehst du den Verkehr zu beiden Knoten? – RoyB
Hey @RoyB - danke für den Kommentar. Ich habe die Frage bearbeitet, um die wichtigen Dateien (einschließlich der Dockerfile) einzuschließen. Ich habe tatsächlich den LoadBalancer-Dienst mit Kubernetes verwendet, der einen Google Cloud Balancer erstellt hat - und ich habe gesehen, dass die Knoten hinzugefügt wurden. Ich habe jedoch nicht direkt auf einem der Knoten nach Verkehr gesucht. – Sam
Hi @Sam, die Überprüfung des Datenverkehrs auf jedem Knoten kann hilfreich sein. Es kann helfen, festzustellen, ob Google Cloud Balancer der Engpass ist. – caesarxuchao