LINUX.ORG.RU
ФорумAdmin

Ускорение отдачи видео

 ,


0

2

Коллеги , добавили в сервер видео стриминга быстрые ssd диски , для ускорения отдачи видео , но так как их объем суммарно меньше чем других основных винтов , то нужно только часть Nтоп видео отдавать с SSD .

Какие сейчас есть решения по типа bcache и bcachefs и насколько они актуальны сейчас ?

Сейчас отдается посредством CDN (правда в кеш попадает только 20-25% ) + nginx + kaltura

★★★★★

В LVM можно организовать дисковый кеш на SSD. Но это немного другое. Я так понял, нужно перенести на SSD конкретное содержимое.

anti_win ★★ ()

У вас там видеоролики не более 1 минуты и отдаются целиком, чтобы считать процент попадания в кеш? А так в основном будут скачивать/смотреть только начало видео - первые несколько десятков секунд. Вот и настраивайте свой кеш под такой шаблон.

anonymous ()
Ответ на: комментарий от anti_win

Сделал просмотр по access time по файлам за последние сутки , и оказалось за 30к , Думаю сделать следующее :

парсить логи и находить наиболее популярные и их переводить на быстрые SSD диски посредство символической ссылки ?

pinachet ★★★★★ ()
Ответ на: комментарий от pinachet

В смысле переводить символической ссылкой?
Я бы объединил 2 папки, типа unionfs, aufs. 1 папка hdd, 2 папка ssd. И перемещал между ними файлы.

Bers666 ★★★★★ ()

bcachefs вообще не продакшн, bcache - пожалуйста.

А какой примерно размер горячих данных, может ты тупо оперативки туда пихнешь пару сотен гигабайт и дело с концом?

t184256 ★★★★★ ()
Ответ на: комментарий от t184256

размер горячих (ну то что за сутки дергались в районе 12 терабайт, и оно быстро растет ) оперативки на сервере 96 гигов .

pinachet ★★★★★ ()
Ответ на: комментарий от pinachet

Если честно, то у тебя в сообщении набор терминов использованных без понимания связи, особенно - CDN и ssd-диски для одного сервера. (Это троллинг, грязное прощупывание форумчан на знание каких-то технологий?)

CDN - это как раз сеть для ускорения отдачи контента. Причем тут ssd-диски для одного (основного) сервера?

kaltura - как понимаю, это сервис для раздачи видео под ключ. Зачем заниматься гаданием на форуме, если эффективнее спросить у них?

В общем, тебе нельзя помочь.

anonymous ()

Какие сейчас есть решения по типа bcache и bcachefs и насколько они актуальны сейчас

А зачем тебе bcache? На nginx можно настроить, чтобы в определенном location-е файл брался из каталога, а в качестве 404 page указать другой location, который шлет X-Accel-Redirect на отдачу файла с жесткого диска.

Добавляешь ко всей этой роскоши парсер access логов, который определяет популярные файлы и перекладывает их на ssd по крону, и вуаля!

kawaii_neko ★★★★ ()
Ответ на: комментарий от kawaii_neko

Ему надо определится, что за сервис него. И если это не противоречит, то перейти на hls или dash или что-то подобное, когда видео разбивается на кусочки, а клиенту отдается плейлист на эти кусочки. И пусть кешированием этих кусочков занимается соотвествующий прокси/cdn/или_другой_интеренсный_для_него_термин, можно даже с использованием ssd в качестве дисков.

anonymous ()

Мне понравилось как zfs при настройках может кешировать даже контент для последовательного чтения. - Довольно не плохой результат в моем случае оказался. И ещё более приятно, что можно натолкать туда SSD в режиме raid-0, то есть, даже если навернется, оно само сообразит и прочитает с жесткого диска.

DALDON ★★★★★ ()
Ответ на: комментарий от kawaii_neko

Добавляешь ко всей этой роскоши парсер access логов, который определяет популярные файлы и перекладывает их на ssd по крону, и вуаля!

Я так и думаю сделать, но немного непонятно это

На nginx можно настроить, чтобы в определенном location-е файл брался из каталога, а в качестве 404 page указать другой location, который шлет X-Accel-Redirect на отдачу файла с жесткого диска.

Поподробнее плиз

pinachet ★★★★★ ()
Ответ на: комментарий от pinachet

Ты очень странный.

Если у тебя hls-стриминг спрятанный за cdn, то у тебя основная нагрузка должна ложится на cdn. Особенно для популярных видео. И статистика «популярности» видео для cdn никак не должно отражать реальную популярность.

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

anonymous ()
Ответ на: комментарий от anonymous

У меня никакого бардака нету , cdn отдает но только для 25 % остальные все равно сервер грузят сильно очень

pinachet ★★★★★ ()
Ответ на: комментарий от pinachet

У меня никакого бардака нету , cdn отдает но только для 25 % остальные все равно сервер грузят сильно очень

Тогда зачем тебе cdn, если всё тянется с одного сервера? Почему cdn не работает? 25% - это ничто. Зачем ты платишь за то, что не работает?

Я вообще не понимаю зачем тебе все эти умные слова. Выглядит как - выделили тебе бюджет и тебе надо его освоить - на данный момент надо куда-то пристроить ssd. Естетственно без особого эффекта, так как по твоим словам у тебя почти равномерное распределение запросов, какой отсутствующий «пик» распределения ты хочешь спрятать за «ускорителем»?

anonymous ()
Ответ на: комментарий от anonymous

Я не говорил про равномерное распределение,да его и не может быть ,в таких серверах. насчет cdn он реально спасает и понятное дело у меня не один сервер .

Скажи лучше что то по задаче

pinachet ★★★★★ ()
Ответ на: комментарий от pinachet

CDN (правда в кеш попадает только 20-25% )

cdn он реально спасает

Если и спасает, то не там, где нужно в этом обсуждении.

Если cdn (кешировнаие, проксирование) для статического контента настроено правильно, то до основного сервера будут доходить только запросы на новый контент, который будет запрашиваться только единожды (в основном). И без разницы где будут единожды запрашиваемый контент - на hdd или sdd, где и как будет кешироваться (и лучше не кешировать единожды используемый контент).

anonymous ()
Ответ на: комментарий от pinachet

Подробнее что именно? Пробежаться по настройкам bcache или рассказать, почему его решение - хрупкий идиотизм?

t184256 ★★★★★ ()

У меня похожая задача есть, тупо по количеству просмотров за последние пары часов видосы rsync-аю на кучу дешевых серверов с ssd и с них раздаю.

pi11 ★★★★★ ()
Ответ на: комментарий от pinachet

Роутинг - клиентам другой домен отдаю просто для этих видосов. Сервера на online.net по 11 евро или около того. 100gb винт, сеть 1гбит (где-то 250 мбит можно забивать спокойно, без потери скорости сервера). Но сейчас там новые проблематично брать, т.к. у них после телеги куча адресов в блоке.

pi11 ★★★★★ ()
Последнее исправление: pi11 (всего исправлений: 1 )
Ответ на: комментарий от pinachet

На 120 gb ssd какие-то (какие именно мне пофиг, там процы дохлые и больше 250-300 мбит уже тормозить начинают). Есть ещё за примерно такую же цену на 1gb hdd, там 200 мбит можно выжимать спокойно - их тоже юзаю.

pi11 ★★★★★ ()
Ответ на: комментарий от t184256

Сорри, просто если оно говно как решение, то плиз поделитесь опытом .

pinachet ★★★★★ ()
Ответ на: комментарий от pinachet

Сорри, не могу этой информацией делиться.

pi11 ★★★★★ ()
Ответ на: комментарий от pinachet

У него там полтора уника в день, не обращай внимания.

anonymous ()

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

cyberpunk_ ()
Ответ на: комментарий от smilessss

если вопрос ко мне, этот https://github.com/kaltura/nginx-vod-module это для видео по запросу, вовза как я знаю из оперы лайв стриминга, для нее такое решение https://docs.peer5.com/guides/use-nginx-as-wowza-cache/ аналоги ее nginx-rtmp или платный Nimble Streamer.

cyberpunk_ ()
Ответ на: комментарий от smilessss

А у вас какая задача / проблема ? Сейчас в пике на сервак приходиться за 600 мегаБАЙТ в сек ( столько я с рейда отдаю )

pinachet ★★★★★ ()
Ответ на: комментарий от pinachet

nginx.conf

user  nginx;
worker_processes  auto;
pid  /var/run/nginx.pid;
    ##
    # Modules
    ##

    load_module modules/ngx_http_vod_module.so;
    load_module modules/ngx_http_secure_token_filter_module.so;

events {
    worker_connections  1024;
}


http {
    
    # upstream
    upstream kaltura {
      #ip_hash;
      server unix:/var/run/nginx.sock;
    }


    # cache, размер кеша не указан, папка смонтированная на отдельный диск
    proxy_cache_path /cache/nginx levels=1:2 use_temp_path=off keys_zone=my-cache:60m inactive=96h;   
    proxy_redirect off;
    proxy_read_timeout 25s;
    proxy_send_timeout 25s;
    proxy_connect_timeout 30s;
    proxy_temp_path  my-cache;
    proxy_cache_methods GET POST HEAD;
    types_hash_max_size 2048;
    # basic
    set_real_ip_from unix:; 
    vod_hls_absolute_index_urls off;    

    sendfile on;
    tcp_nodelay on;
    tcp_nopush on;
    server_tokens off;
    keepalive_timeout  300s;  
    include    /etc/nginx/mime.types;
    default_type  application/octet-stream;      
    
    
    #keepalive_requests 100;
    reset_timedout_connection on;
    client_body_timeout 10;
    send_timeout 2;
    
    

    # logs
    log_format rt_cache '$remote_addr - $upstream_cache_status [$time_local]  '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"'; 
   
    access_log /var/log/nginx/cache.log rt_cache;    
#    access_log off;
    error_log /var/log/nginx/error.log;


    # ssl
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/dhparam.pem; # need to generate the .pem certifiate before using this
    resolver 8.8.4.4 8.8.8.8 valid=300s ipv6=off;
    resolver_timeout 10s;
    

    # gzip
    gzip on;
 #   gzip_disable "msie6";
    gzip_http_version 1.1;
    gzip_comp_level 6;
    gzip_types application/vnd.apple.mpegurl;

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

secure_token_akamai $token {
  key 0000;
  acl /*;
  param_name token;
  ip_address $remote_addr;
  start 0;
  end 14400;
}

map $request_uri $request_uri_path {
  "~(?P<path>[^?]*)(\?.*)?"  $path;
}

map $request_uri_path $no_cache {
  "~\.m3u8"     1;
  default       0;
}



}

domain.conf

server { 
        listen 8.8.8.8:443 ssl http2;
        server_name  domain.con;
        include /etc/nginx/acme;
        ##SSL global settings
        ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
        #add_header Strict-Transport-Security max-age=31536000;
        ssl_protocols   TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
        ssl_buffer_size 16k;
        ssl_prefer_server_ciphers on;
    
        # nginx status page
        location /nginx_status {
	  stub_status on;
	  access_log off;
	}

        # vod status page
        location /vod_status {
	 vod_status;
	 access_log off;
	}
       
    location / {

        proxy_cache my-cache;
        proxy_cache_revalidate on;
        proxy_cache_min_uses 2;
        proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
        proxy_cache_background_update on;
        proxy_cache_lock on;
        proxy_cache_key $request_uri_path; 
        proxy_cache_valid 96h;
        proxy_no_cache $no_cache;
        proxy_cache_bypass $no_cache;
        aio threads;

        add_header X-Cache-Status $upstream_cache_status;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header  Referer $http_referer;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_pass        http://kaltura;

    }

    
  
      
}

server {

        listen unix:/var/run/nginx.sock;

        access_log off;
        error_log off;  
      
        #vod settings
        vod_mode local;
        vod_segment_duration 10000; # 2s
        vod_align_segments_to_key_frames on;
        vod_manifest_segment_durations_mode accurate;
        vod_last_modified 'Sun, 19 Nov 2000 08:52:00 GMT';
        vod_last_modified_types *;
        vod_mode local;
        #vod caches
        vod_metadata_cache metadata_cache 4096m;
        vod_response_cache response_cache 512m;

        vod_hls_absolute_index_urls off;
         
        #file handle caching / aio
        open_file_cache max=1000 inactive=5m;
        open_file_cache_valid 5m;
        open_file_cache_min_uses 1;
        open_file_cache_errors on;
        aio on;

   location ~* "^/hls/(.*)/" {
        include /etc/nginx/cors.conf;

        vod hls;
        root /media/storage/vod;      
        secure_token_encrypt_uri on;
        secure_token_encrypt_uri_key 000000000000000000000000;
        secure_token_encrypt_uri_iv  0000000000000000000;
        secure_token_encrypt_uri_part $1;
         
        vod_hls_absolute_master_urls off;
        vod_hls_absolute_index_urls off;
        vod_hls_absolute_iframe_urls off;


        secure_token $token;
        secure_token_types application/vnd.apple.mpegurl;
 
        secure_token_uri_filename_prefix index;
      # secure_token_uri_filename_prefix master;
        secure_token_expires_time 100d;
        secure_token_query_token_expires_time 1h;
        secure_token_tokenize_segments on;     


        akamai_token_validate $arg_token;
        akamai_token_validate_key 000000;



    }

} 
cyberpunk_ ()
Ответ на: комментарий от smilessss

Как понять свое и какая задача? для какого стриминга, нагрузка какая?

cyberpunk_ ()
Ответ на: комментарий от pinachet

насколько я понял использовать по максимуму всё, что есть в wowza
остальное самим допилить

smilessss ★★★★★ ()
Ответ на: комментарий от cyberpunk_

Поясни плиз это для чего у тебя ?

map $request_uri $request_uri_path {
  "~(?P<path>[^?]*)(\?.*)?"  $path;
}

и кеш растет до каких размеров ?

pinachet ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.