У меня сейчас 5 серверов. 1 сервер используется в качестве основного сервера, на котором хранятся все видеофайлы, остальные 4 реплицируются и извлекают видео с основного сервера с помощью rsync. Видео доставляются через HTTP через псевдопоток nginx.
Я бы хотел спросить, есть ли лучший подход к этому? Было бы лучше, если бы один конкретный сервер содержал только этот файл? например: file1.mp4 не будет реплицироваться на все серверы и останется только на одном сервере? Снизит ли этот подход нагрузку на ввод-вывод?
Потому что прямо сейчас зрители случайно перенаправляются на любой из этих серверов при просмотре видео. Поскольку на всех этих серверах хранятся одни и те же файлы, я предполагаю, что для поиска потребуется время, потому что для каждого из них есть около 13 000 видео.
Кроме того, есть ли какие-то настройки в TCPIP / sysconf для оптимизации этого видеосервиса?
Конфигурация сервера:
Прежде всего, начните собирать метрики. Метрики на все, что можно и хранить. Узнайте, какие файлы обрабатываются, как часто, какие серверы, какие запросы приходят, откуда они, использование полосы пропускания, задержка в сети, доступ к вводу-выводу. Ваша система ждет файловую систему? Или чтобы Nginx обработал запрос? Не полагайтесь на догадки и не думайте, что скорость вашей архитектуры сдерживается из-за одного аспекта. С таким же успехом это могло быть другое. Сказав это, вот некоторые мелочи, которые вы можете изменить.
Вы можете выключить atime
обновления для файловых систем, если вы еще этого не сделали. Поскольку это своего рода веб-система, вам лучше использовать свои журналы, чем полагаться на понятие времени доступа файловой системы. Это позволит избежать лишних ненужных записей на диск.
Единственный вариант TCP, который я бы хотел изменить, - это включить Явное уведомление о перегрузке. Хотя это не так широко распространено, я думаю, что со временем оно станет более распространенным. По мере распространения это поможет уменьшить перегрузку каналов между вашими серверами и вашими пользователями.
Одно предостережение относительно ECN - некоторые старые маршрутизаторы с ошибками игнорируют пакеты с ECN. Если вы готовы пойти на такой риск, включите его.
Вы также можете исследовать раздувание буфера если возможно. Хотя фактическая потоковая передача не слишком заботится о буферах (пока видеопакеты попадают туда до того, как локальный буфер исчерпан, видеопроигрыватель не особо возражает), начальный GET
запросы будут. Это просто то, о чем нужно знать, поскольку потоковое видео - верный способ перегрузки сети.
Я бы воспроизвел их на ваших серверах, если у вас есть видео, которое становится вирусным, вы получите огромную нагрузку на один сервер. Если вы реплицируете их, вы можете распределить эту нагрузку на другие серверы.
Если он продолжает расти, я предлагаю вам изучить специальные варианты хранения, такие как SAN.