При попытке создать высокодоступный веб-сервер, я провел тест нагрузки с чрезвычайно простым контейнером док-станции NGINX, обслуживающим один статический файл.Почему я не вижу более высокие параллельные запросы при увеличении узлов/контейнеров на простом докере-кластере NGINX?
Сначала я попробовал с одним узлом (n1-standard-4) & одним кластером поддонов, чтобы сравнить количество одного «блока». Эта установка с одним узлом/модулем может справиться с одновременными запросами около 20 тыс. До начала таймаута для некоторых запросов/снижения пропускной способности.
Затем я добавил еще один узел того же типа машины и масштабировал контейнеры до двух реплик. Как только я подтвердил, что оба модуля/узлы встали, я снова проверил тест с 20k. Производительность была хорошей, поэтому я столкнулся до 40k - ожидая, что я увижу аналогичные результаты с 20k на настройке 1 узел/блок.
Однако исполнение было очень плохим, никогда с запросами в секунду, прыгающими яростно между 15k и 30k.
Я попробовал тот же тест снова с 4 узлами/контейнерами и увидел похожие, если не немного худшие результаты.
Мой вопрос (ы):
я неправильно думать, что мои одновременные запросы должны масштабироваться линейно таким образом, с GKE/контейнеров/kubernetes?
Что мне не хватает, чтобы достичь желаемых результатов, чтобы справиться с N одновременными пользователями с M узлами/контейнерами в кластере?
EDIT: Я также не считаю, что это проблема с инструментом для тестирования нагрузки - как я с помощью внешней платной услуги, которая утверждает, чтобы иметь возможность моделировать до 100k одновременных запросов.
EDIT 2: Вот еще некоторая информация о настройках:
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:
<head><title>Load Test Page</title></head><body><h3>Load Test!</h3></body>
Я использовал сервис LoadBalancer, который, как я полагаю, устанавливает Google Cloud Balancer (я подтвердил это и увидел, что к нему добавлены узлы). Ниже приведены файлы ниже, которые я использовал с кубернетами для управления кластером.
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
услуги.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
Дайте нам еще кое-что, чтобы продолжить .. Можете ли вы предоставить ссылку на свой файл докеров? Кроме того, как вы балансируете свою нагрузку? Кластеризация сильно зависит от хорошего метода балансировки нагрузки. Из ваших тегов Я собираюсь предположить, что вы использовали кубернете. Вы использовали loadbalancer? Вы видите движение, идущее на оба узла? – RoyB
Привет, @RoyB - спасибо за комментарий. Я редактировал вопрос, чтобы включить важные файлы (включая Dockerfile). Я действительно использовал службу LoadBalancer с кубернетами, которые создали Google Cloud Balancer, и я видел, что к ним добавлены узлы, однако я не проверял трафик непосредственно на любом из узлов. – Sam
Привет @Sam, проверка трафика на каждом узле может быть полезна. Это может помочь определить, является ли Cloud Cloud Balancer узким местом. – caesarxuchao