Я ищу решение для распределенной файловой системы/сетевую файловую систему, которую можно использовать в следующем сценарии:
- У меня есть Docker Swarm со многими хостами, но каждый хост по существу автономен и ничем не отличается от любого другого хоста. Мы просто используем их для масштабирования. Это означает, что на каждом хосте выполняются все рабочие процессы, необходимые для работы системы, и в идеале одна задача, поступающая в систему, полностью выполняется на хосте, который первым ее запустил.
- Обработка задачи состоит из нескольких шагов. Каждый шаг генерирует большой файл размером от 1 до 10 ГБ. Прежде всего, рабочие на каждом хосте будут работать только с файлами, которые уже хранятся локально.
- Однако иногда хост может быть перегружен, и я хочу, чтобы рабочие на другом хосте взяли на себя оставшиеся этапы обработки. Для этого мне нужно, чтобы файлы хранились в общем томе, который работники на других хостах могут прозрачно использовать для доступа к файлам, хранящимся на другом хосте.
Другими словами: каждый хост будет иметь один и тот же «сетевой том», смонтированный в каком-то месте, и он содержит некоторые файлы, которые фактически хранятся на текущем хосте (эти файлы в первую очередь важны), и некоторые файлы, которые хранятся на другом хосте. Тем не менее, рабочие в основном (90-95% раз) получают доступ к файлам, которые являются локальными для их хоста.
Мне не нужна репликация (файлы актуальны только 30-60 минут, а после этого они уже не нужны) и я специально не хочу центральное хранилище.
Пропускная способность в системе измеряется скорее в минутах на задачу, а не в задачах в секунду. Есть несколько больших файлов, а не много маленьких файлов. Кроме того, файлы записываются один раз и читаются только один или два раза.
Есть ли хорошее решение для этого? я взглянул на GlusterFS
, EdgeFS
, Межпланетная файловая система
, Цеф
и некоторые другие, но ни один не казался правильным выбором.