Вопрос немного риторический...
Есть такой стек:
NGINX + LUA
В LUA используется проверка кое-чего по ключу в Redis: если он есть, то отдаём статику...иначе - 404...
Всё ништяк - всё работает :)
Вопрос вот в чём:
До "прикручивания" проверки на LUA в NGINX'е с помощью теста нагрузки через
WRK он показывал около 370 запросов/сек и трафик около 10.5Мб/сек...
После "прикручивания" проверки - показывает примерно столько же: 360 запросов/сек и 10.3Мб/сек...
Т.е. мой скрипт на LUA особо ничего не поменял в плане производительности...
Размер отдаваемого статического файла на котором запускался тест около ~30кб...
Моя скорость инета по замеру
speedtest.net около 90Мбит/сек...
Сервер в Германии (Hetzner). Я запускал тест со своего компа из России...в 8 потоков и 200 соединений в течение 15 сек...
wrk -t8 -c200 -d15s --latency http://example.com/file.jpg
Это нормальная
отдача?
Что можно улучшить? Если учесть, что без всяких скриптов, получается, что benchmark почти такой же (можно списать на погрешность даже думаю)...
Ниже основные параметры конфига NGINX'а привожу:
nginx.conf:
user www-data;
worker_processes auto;
worker_rlimit_nofile 65535;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 65535;
use epoll;
multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 30;
keepalive_requests 100;
client_body_timeout 10;
client_header_timeout 15;
reset_timedout_connection on;
send_timeout 2;
types_hash_max_size 4096;
server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
#access_log /var/log/nginx/access.log;
#error_log /var/log/nginx/error.log;
access_log off;
error_log /var/log/nginx/error.log crit;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
open_file_cache max=200000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Вот часть "хоста" с LUA скриптом:
#.. тут стандартная "петушня"...
location ~* ^ХАЛИ_ГАЛИ_ТЫРЫМ_ПЫРЫМ$ {
#set $images_dir "PATH_TO_FOLDER";
# $4 - берётя из location...
# Выносим весь Lua код в отдельный файл
content_by_lua_file /etc/nginx/lua/img_data.lua;
#lua_code_cache off; #dev
}
# Этот "локатион" вызывается из LUA в случае "успеха", иначе сразу - 404 прям из LUA с помощью - ngx.exit(ngx.HTTP_NOT_FOUND)
location @imagedata {
try_files /$images_dir/$4 =404;
}
#...далее тоже ничего значительного...
Железо:
Intel Xeon E3-1275v5
2x HDD SATA (RAID 1)
4x RAM 16384 МБ DDR4 ECC
ОС:
Debian 9
Мне кажется, что можно лучше... :)
UPD:
Взял щас к примеру вот такую картинку с сервера Яндекса (маркет):
https://avatars.mds.yandex.net/get-mpic/1883514/im...
Запустил аналогичный тест и получил около 200 запросов в секунду...и тот же трафик около 10Мб/сек при весе этой картинки 35кб...
Походу с производительностью всё норм получается...если посчитать Яндекс за эталон (но это не точно:) )...
Либо я тупо упираюсь в канал передачи данных...