Какую технологию следует использовать для обслуживания большого количества статических файлов? - PullRequest
1 голос
/ 27 августа 2010

Моя главная цель - обслуживать большое количество XML-файлов (> 1 млрд. Каждый <1 КБ) через веб-сервер.Файлы можно рассматривать как устаревшие, поскольку они будут модифицироваться внешним кодом с относительно очень низкой частотой (около 50 тыс. Обновлений в день).Файлы будут запрашиваться с высокой частотой (> 30 req / sec).

В настоящее время моя команда предлагает создать специальное Java-приложение для реализации протокола HTTP и использовать memcached для ускорения работы, сохраняя все данные файла.в RDBMS и избавлении от файловой системы.

С другой стороны, я думаю, достаточно настроить Apache Web Server или lighttpd.Кэширование можно оставить для кэширования дефалта ОС или веб-сервера.Нет смысла хранить данные в БД, если требуется один и тот же вывод и запрашивается только на основе имени файла.Не уверен, как memcached будет работать здесь.Также обновление внешнего кэша (memcached) при обновлении файла с помощью внешнего кода добавит сложности.

Также другой вопрос, если я решу использовать файлы, можно сохранить их в каталоге, например \ a \ b \ c \ d.xml и доступ через abcd.xml?Или я должен поместить все 1 млрд. Файлов в один каталог (не уверен, что ОС разрешит это или нет).

Это НЕ веб-сайт, а API-интерфейс приложения в закрытой сети, поэтому Cloud / CDN бесполезен.

Я планирую использовать CentOS + Apache / lighttpd.Предложите любое альтернативное и наилучшее возможное решение.

Эта является единственной общедоступной заметкой, найденной по этой теме, и она также немного устарела.

Ответы [ 3 ]

3 голосов
/ 28 августа 2010

1 млрд. Файлов по 1 КБ каждый, это около 1 ТБ данных.Впечатляет.Так что он не поместится в память, если у вас нет очень дорогого оборудования.Это может быть даже проблемой на диске, если ваша файловая система тратит много места для небольших файлов.

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

Поэтому мой совет: положите файлы XML на жесткий диск и предоставьте их на простом ванильном веб-сервере по вашему выбору.Затем измерьте пропускную способность и оптимизируйте ее, если вы не достигаете 50 файлов в секунду.Но не вкладывайте ни во что, если вы не показали, что это является ограничивающим фактором.

Возможные оптимизации:

  • Найдите лучший макет в файловой системе, то есть распространяйте ваши файлыдостаточно нескольких каталогов, чтобы у вас не было слишком много файлов (более 5000) в одном каталоге.
  • Распределите файлы по нескольким жестким дискам, чтобы они могли обращаться к файлам параллельно
  • Используйте более быстрый жесткий диск
  • Используйте твердотельные диски (SSD).Они дороги, но могут легко обслуживать сотни файлов в секунду.

Если большое количество файлов запрашивается несколько раз в день, тогда даже медленного жесткого диска будет достаточно, потому что ваша ОС будетесть файлы в файловом кеше.И с сегодняшним размером файлового кэша, значительное количество ваших ежедневных доставок будет помещаться в кэш.Поскольку при 30 запросах в секунду вы обслуживаете 0,25% всех файлов в день, самое большее.

Что касается распределения ваших файлов по нескольким каталогам, вы можете скрыть это с помощью Apache RewriteRule , например::

RewriteRule ^/xml/(.)(.)(.)(.)(.*)\.xml /xml/$1/$2/$3/$4/$5.xml
1 голос
/ 30 августа 2010

Еще одна вещь, на которую вы можете посмотреть: Гранат , что очень похоже на то, что вы пытаетесь сделать.

0 голосов
/ 27 августа 2010

Я считаю, что лучшим выбором будет специальное приложение со всем, что питается от Memcache DB.

...