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

Файловая система Linux или CDN для миллионов файлов с репликацией

Скажите, пожалуйста, решение для этого сценария:

Когда количество файлов стало больше 2 миллионов, у нас возникла проблема с медленным временем произвольного доступа. Файловая система ext3 с noatime и dir_index параметры, но нет необходимости использовать такие команды, как 'ls' или 'find'.

Решения, которые я считаю возможными:

  1. оставайтесь с ext3 и просто преобразуйте древовидную структуру каталогов в "img / 889 / 8f6 / 152 / a0ecd7997a68631768fb72e9ac2efe1_1.jpg"
  2. перейти на другую файловую систему (ReiserFS, XFS, EXT4 и т. д.)
  3. настроить механизм хранения с распределенной файловой системой (привести примеры)
  4. а может другой ...

Если мы выберем 1 или 2, как насчет репликации? rsync не может обрабатывать такое количество данных в файловой системе ext3.

Лучшее решение для нас - использовать Amazon S3, но это слишком дорого с нашим трафиком ... Может быть, вы порекомендуете какие-то аналоги (дешевый CDN или проект с открытым исходным кодом)

Миллионы файлов в одном каталоге - плохой дизайн и будут медленными. Разбейте их на каталоги с меньшим количеством записей.

Взгляни на https://unix.stackexchange.com/questions/3733/number-of-files-per-directory

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

Рассмотрим XFS, особенно при использовании нескольких дисков и нескольких каталогов, это может дать вам хороший выигрыш (см., Например, этот нить для вариантов использования. Он дает несколько советов для XFS на md RAID).

Лично я бы:

  1. Придерживайтесь своей текущей FS. Разделите их на каталоги, как вы предложили, если хотите, вы все равно можете представить его как один каталог, например с участием mod_rewrite (предполагая, что это приложение типа CDN)
  2. Регистрируйте изменения, которые необходимо реплицировать, например ежедневно / ежечасно и т. д., так что каждый раз, когда вам нужно синхронизировать, выяснение того, какие файлы нужно скопировать, может быть таким же простым, как запуск diff в журналах (т.е. вы всегда синхронизируете журналы и сначала синхронизируете их, но выполняете разницу перед их заменой, чтобы вычислить, что еще нужно скопировать).