У меня есть несколько веб-сайтов для загрузки файлов с файлами размером от сотен килобайт до нескольких гигабайт.
В настоящее время у меня есть все файлы в томе Gluster с распределением-репликацией на нескольких серверах.
Моя самая большая проблема с Gluster - это скорость.
Например, у меня есть папка с ~ 80 000 изображений, в среднем по 500 КБ каждое, и мне потребовалось несколько часов, чтобы сменить владельца изображений.
На данный момент все довольно неплохо, но я беспокоюсь о том, что файлов будет намного больше и сколько времени потребуется для работы с ними.
Какие у меня есть альтернативы? Я что-то не так делаю с Gluster?
Это моя конфигурация gluster:
performance.cache-size: 1GB
performance.cache-refresh-timeout: 60
performance.cache-max-file-size: 100KB
cluster.choose-local: true
performance.readdir-ahead: on
performance.io-thread-count: 16
client.event-threads: 3
server.event-threads: 3
Любая распределенная файловая система пострадает при выполнении пакетных операций с большим количеством файлов: в конце концов, она должна была распространить все изменения на удаленную машину, и задержка взлетела по сравнению только с локальным хостом. Это может быть особенно заметно при выполнении операций изменения метаданных: не касаясь реальных данных, они очень быстры локально; однако удаленная репликация будет полностью ограничена задержкой.
В основном у вас есть два решения:
lsyncd
(или что-то в этом роде. on rsync
) У меня есть использовал программу lsyncd
в аналогичной ситуации, когда мне нужно было синхронизировать контент серверов. Внутренне он использует rsync
для синхронизации файлов между серверами.
Однако недостатком является то, что вам нужно направлять загрузки на один сервер и синхронизировать файлы с этого сервера на все серверы.