Одновременный upload + streaming

iHector
На сайте с 29.03.2013
Offline
93
1764

В общем есть сервер Intel Xeon E3-1230 / 8GB DDR3 / 4x1TB SATA2 / 100Mbps Unmetered

Создан raid 10. Забит на 50% файлами.

Проблема следующего плана. При нагрузке на канал в 50 мбит, нагрузка на винты порядка 50%, оперативка почти вся забита. Но если загружать файл то нагрузка на винты стремительно растет до 100%. Все хорошо но используется chunked upload порциями. Вот тут начинаются проблемы. Каждый chunk идет сброс части файла (копирование move_upoloaded_file) в указанную директорию и в это время сервак дико тормозит.

Вопрос. Кто как конфигурирует серверы под одновременный upload/download/streaming? Я так понимаю что винты офигевают от одновременного стения/записи. У меня пока мысль только одна, для upload использовать отдельный винт. А может просто памяти маловато?

Angel OSHQ.cc
На сайте с 23.07.2007
Offline
225
#1

попробуйте отдельный ccд или сас диск для записи файлов.

Добавление памяти поможет хранить больше кеша, тем самым освободив ресурсы диска.

также лучше поставить 7200 hdd если у вас 5200

Безлимитный хостинг ( https://oshq.cc/unlimhost.html ) в NL от 0.5$. Аренда серверов во Франции ( https://oshq.cc/serverf.html ) от (15 евро)
Andron_buton
На сайте с 19.07.2007
Offline
264
#2

iHector, для отдачи используйте aio on;+ output_buffers 1 1m; памяти действительно, можно и по-более. Сколько вообще конектов к серверу в пиках и какого рода файлы (размер) грузятся раздаются с сервера?

IS Andrew
На сайте с 13.01.2006
Offline
338
#3

Для upload обычно используют отдельную группу серверов, но судя по вашему конфигу вы либо не посчитаете это целесообразным, либо это выходит за рамки бюджета, поэтому как вариант повесить туда пару SSD.

is*hosting - профессиональный провайдер с глобальным присутствием.
iHector
На сайте с 29.03.2013
Offline
93
#4
extra:
Для upload обычно используют отдельную группу серверов, но судя по вашему конфигу вы либо не посчитаете это целесообразным, либо это выходит за рамки бюджета, поэтому как вариант повесить туда пару SSD.

Можно подробнее? Как происходит транспортировка файлов на стриминг сервер файлов с upload сервера? Сетевой диск?

---------- Добавлено 23.01.2014 в 16:58 ----------

Andron_buton:
iHector, для отдачи используйте aio on;+ output_buffers 1 1m; памяти действительно, можно и по-более. Сколько вообще конектов к серверу в пиках и какого рода файлы (размер) грузятся раздаются с сервера?

На сервере установлена связка nginx + php-fpm, файл отдается скриптом:

header("X-Accel-Limit-Rate: 102400");

header("X-Accel-Redirect: /file/" . $path);

Коннектов одновременно порядка 50-60 (это судя по стате счетчика - реальных онлайн в среднем). В пиках 90. По команде netstat -an | grep :80 | wc -l - показывает 100-120 сейчас.

Размер файлов 500мб-1гб... Но нагрузка на винты не всегда высокая. Иногда при большей загруженности канала винты себя чувствуют хорошо.

Andron_buton
На сайте с 19.07.2007
Offline
264
#5

iHector, конфиг нгинкса можете привести?

iHector
На сайте с 29.03.2013
Offline
93
#6

server {

listen 80;

server_name s1.xxxxx.com;

root /home/s1.xxxxx.com;

index index.html index.htm index.php;

access_log off;

location / {

}

location ~ \.flv$ {

flv;

internal;

access_log /var/log/nginx/flvstream-access.log main;

}

location ~ \.php$ {

access_log /var/log/nginx/s1.xxxxx.com-access.log main;

fastcgi_pass unix:/tmp/php-fpm-webuser.socket;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}

}

И главный конфиг:

user nginx;

worker_processes 10;

error_log /var/log/nginx/error.log warn;

pid /var/run/nginx.pid;

events {

worker_connections 1024;

}

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 /var/log/nginx/access.log main;

sendfile on;

#tcp_nopush on;

keepalive_timeout 65;

#gzip on;

client_max_body_size 2000m;

include /etc/nginx/conf.d/*.conf;

}

Andron_buton
На сайте с 19.07.2007
Offline
264
#7

Сделайте так:

location ~ \.flv$ {

output_buffers 1 1m;
aio on;
directio 1m;
flv;
internal;
access_log /var/log/nginx/flvstream-access.log main;
}

Вообще плохо тут делает sendfile on; его лучше использовать только тогда, когда есть очень популярные файлы, которые полностью помещаются в оперативе.

IS Andrew
На сайте с 13.01.2006
Offline
338
#8

iHector, ну у кого как реализовано. Чаще всего через curl с подтверждением, если без оного - netcat

iHector
На сайте с 29.03.2013
Offline
93
#9
Andron_buton:
Сделайте так:
location ~ \.flv$ {

output_buffers 1 1m;
aio on;
directio 1m;
flv;
internal;
access_log /var/log/nginx/flvstream-access.log main;
}


Вообще плохо тут делает sendfile on; его лучше использовать только тогда, когда есть очень популярные файлы, которые полностью помещаются в оперативе.

Спасибо сделал. Сейчас посмотрю что это даст и отпишу.

---------- Добавлено 23.01.2014 в 18:36 ----------

Уменьшилась нагрузка на диски. Спасибо! Если еще будут проблемы - отпишу.

twinlv
На сайте с 11.12.2013
Offline
65
#10

А причем тут конфиг и сами диски ?

Скороей всего стоят какие-то дешевые диски, райд софтварный.

Тут не одного коментария про преформанс на диски.

железный райд, хорошие диски в нормальном райде, лучше поставить, чем больше дисков тем лучше преформанс на запись и чтение.

Так-же надо смотреть на саму систему что больше делается, райды тоже разные есть каждый под свое.

Для бюджетных вариантов используют самые дешевые диски.

Поставь карту райд с нормальным рамом на ней (лучше еще батарейку всунь), посмотри по нагрузке на что больше идет и прочитай про отличие райдов на википедии, поставь тот что надо на чтение или запись, поставь RE4 WD BLACK и радуйся жизни.

CloudHosting.lv - полный комплекс услуг на базе собственного ДЦ (г. Рига, Латвия) https://www.cloudhosting.lv (https://www.cloudhosting.lv)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий