У меня есть приложение, которое необходимо масштабировать по горизонтали, чтобы охватить веб-узлы и узлы служб (на данный момент они все в одном), но взаимодействовать с одним и тем же набором баз данных и исходных файлов (как кода приложения, так и настраиваемых ресурсов). База данных не проблема, она уже обработана репликацией в MongoDB.
Также конфигурация серверов такая же (100% linux). Этот вопрос буквально касается совместного использования файловой системы между машинами, чтобы ее содержимое всегда было правильным, независимо от узла, обращающегося к нему.
Мои две мысли до сих пор заключались в том, что NFS и SAN - SAN чрезмерно дороги, а NFS имеет некоторые проблемы с производительностью на втором узле в отношении glob () в PHP.
Есть ли у кого-нибудь рекомендуемые стратегии или другие методы, которые не включают сегментирование данных между узлами или какие-либо потенциальные ошибки в NFS, которые могут вызвать медленное время поиска на диске?
Чтобы дать вам представление о масштабе, главный узел инициализирует свои прикладные модули примерно за 0,01 секунды. Вторичный занимает ~ 2,2 секунды. Это виртуальные машины в локальной виртуальной сети в ESXi, и время пинга между ними составляет ~ 0,3 мс.
Похоже, вы делаете что-то патологически неправильное с NFS - например, помещаете десятки тысяч файлов в один каталог или что-то в этом роде. NFS отлично работает даже с большими (TB +) наборами данных, так что это возможно.
Вы, однако, необходимость файловая система? Я обычно считаю, что вы можете получить гораздо лучшую производительность и инкапсуляцию, открыв более ограниченный набор примитивов вашему хранилищу данных и работая с ними. Вместо того, чтобы повторять все заново, я просто укажу вам на предыдущий ответ Я написал, что в нем есть все детали.
SVN / git проверяет отдельные узлы. Rsync между узлами. Сервер Samba смонтирован всеми узлами. В принципе, ничего, кроме NFS.