Высокопроизводительные способы потоковой передачи локальных файлов при записи в сеть - PullRequest
0 голосов
/ 14 марта 2020

Сегодня существует система, которая будет записывать файлы захвата пакетов на локальный диск по мере их поступления. Удаление файлов на локальный диск в качестве первого шага считается желательным по причинам отказоустойчивости. Если клиент умирает, и ему необходимо восстановить соединение или быть воспитанным где-то еще, мы наслаждаемся возможностью воспроизведения с диска.

Следующим шагом в конвейере данных является попытка получить эти данные, которые были переданы на диск. удаленным клиентам. Предполагая, что на диске достаточно места, мне кажется очень удобным использовать локальный диск (и кеш страниц поверх него) в качестве постоянного безлимитного FIFO. Также желательно использовать файловую систему, чтобы поддерживать связь между производителем и потребителем на низком уровне.

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

Мои вопросы:

  1. Есть ли в этой архитектуре недостаток, который я не замечаю или косвенно преуменьшаю?

  2. Существуют ли рекомендации по использованию файла в процессе его записи, эффективной блокировке и / или асинхронно получать уведомления, когда в файле доступно больше данных?

  3. Цель состоит в том, чтобы явно или неявно получить пользу для потребителя от тепла кэша страниц. Есть какие-нибудь рекомендации по оптимизации для этого?

1 Ответ

0 голосов
/ 14 марта 2020

Файловое решение звучит неуклюже, но может работать. Аналогично тому, как tail -f делает это:

  • read файл до EOF, но не закрывает его
  • настроить просмотр inode (с inotify ) , ожидая больше записей
  • повтор

Сложность обычно заключается в ротации и очистке файлов, т.е. вам нужно следить за новыми файлами и / или усечением.

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

...