Назад | Перейти на главную страницу

Как организовать миллионы статических файлов для эффективного обслуживания через Интернет?

Я хотел бы создать сервис для обслуживания нескольких сотен тысяч файлов меньшего размера (от 5 до 500 КБ, в основном около 10–100 КБ). Думайте об этом как о чем-то вроде gravatar.com, который обслуживает эти маленькие картинки аватаров по URL-адресам вроде https://secure.gravatar.com/avatar/1545f91437e2576b910dbd1023a44756

Я хочу использовать описательный URL без каких-либо идентификаторов или хешей, например, как http://www.server.com/This-is-my-file.ext, Нет повторяющихся имен файлов.

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

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

Одна из идей - сохранить файлы в простой структуре каталогов, основанной на первых символах имени файла, поэтому пример будет обслуживаться из T / h / This-is-my-file.ext с простым правилом перезаписи в конфигурации nginx. . Это приведет к очень неравномерному распределению по разным каталогам. Использование значений из позволяет сказать, что хеш md5 имени файла приведет к хорошему распределению, но потребует большей вычислительной мощности ...

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

Хешируйте имена файлов.

Инструкция set_md5 doc

# You can do this:
# I didn't test this. 
location /hashed/([0-9a-f]{2})([0-9a-f]*)/(.*) {
  try_files /$1/$2/$3;
}
set_md5 $digest $request_uri;
location / {
  rewrite .* /hashed/$digest/$request_uri;
}