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

Распределенная файловая система для хранения временных файлов

У нас есть кластер веб-серверов, на котором в настоящее время хранятся временные файлы (которые были загружены пользователями) в центральной общей файловой системе. Ограничение состоит в том, что каждый раз, когда сервер, содержащий общую файловую систему, выходит из строя, весь наш сайт выходит из строя (или, по крайней мере, выходит из строя). Я рассмотрел такие решения, как Gluster и GridFS, для создания отказоустойчивой файловой системы, но ни одно из них не показалось идеальным для эфемерных файлов, которые часто создаются и удаляются. Безопасность также важна, и у Gluster, похоже, не было никаких средств шифрования по сети.

Какие есть хорошие варианты отказоустойчивой распределенной файловой системы, которые могут быть безопасными и обрабатывать частое создание / удаление файлов?

Зависит от того, как вы хотите / хотите получить доступ к файловой системе. Если вы не против использования вызовов API, вы можете сделать что-то столь же простое, как S3, или, чтобы сохранить это внутри компании, запустить кластер RIAK для аналогичного опыта.

Если это слишком тяжело, вы можете запустить что-то вроде etcd (https://github.com/coreos/etcd). etcd разработан для работы на каждом узле и имеет очень высокую производительность, если для взаимодействия с ним потребуется немного больше работы.

openAFS --- (открыть файловую систему Andrew)

Предупреждение: самоуверенный контент.

Распределенные файловые системы - отстой. Существуют хорошие хранилища распределенных объектов, такие как cassandra и ceph, но всегда любая эмуляция файловой системы наверху является проблематичным зверьком, потому что операции файловой системы не очень хорошо сопоставляются с распределением (блокировка, fsync () ing), и это оставляет проблему необходимо поместить код в ядро ​​для их поддержки, а не в ваше приложение.

Я ценю простоту предоставления доступа ко всему вашему контенту через файловую систему, но, возможно, проще написать немного больше кода и использовать распределенное хранилище объектов, как будто оно предназначено для использования.