Не так давно я открыл для себя GlusterFS. Если бы я сделал это на пару месяцев раньше - я бы съэкономил себе туеву кучу времени и нервов. Возможно мои записки помогут кому-то избежать этой ошибки.
Дело в том что в жизни каждого успешного проекта наступает момент когда он ну никак уже не умещается на одном фронте - поставить второй сервер и раскатать на него исходники - не большая проблема. Но как быть с загружаемым контентом ? Ведь почти в каждом приложении пользователям нужно заливать какие-нибуть файлики - которые должны быть доступны на всех фронтах. Как с ними быть ?
1. Можно закинуть rsync(или другой его клон) в крон, и синхронизировать таким образом загружаемый контент. Но это накладывает кучу ограничений - чтобы загрузка контента все время шла на один сервер, нужно довольно большое время на синхронизацию файлом между серверами, и чем больше размер загружаемого контента - тем больше времени будет требоватся rsync. В общем костыль он и есть костыль.
2. Можно обрабатывать 404 запросы, и в случае отсутсвия какого-то файла - загружать его с главного сервера и скармливать nginx-у через X-Accel-Redirect
3. Можно положить все файлы на nfs раздел - как-то худо бедно оно будет работать. До поры до времени так сказать. Медленность nfs помоему всем известна.
4. Можно настроить GlusterFS. Не знаю как в режиме распределенного хранилища - но в режиме репликации чтение с GlusterFS должно быть таким же быстрым как и с локальной файловой системы.
Если немного подробнее - то GlusterFS может работаь в нескольких режимах.
1. Распределенный режим - когда один файл записывается на первую ноду, второй на вторую, третий на третью и так далее.
2. Режим репликации - когда каждая нода хранит весь набор файлов. В этом режиме файловая система становится немного медленней на запись - за то скорость на чтение не отличается от чтения с локальной FS (оно так и происходит по факту), плюс вы получаете отказоустойчивать в подарок.
3. Также возможны промежуточные варианты - но об этом читайте подробнее в документации :-)
Насколько я помню, в действительно крупных и успешных проектах делают намного проще. Заводят отдельные фронты для файликов. Заливают прямо на эти фронты и обращаются прямо к этим фронтам по url типа files123.project.ru.
ОтветитьУдалитьКак по мне, это будет попроще и хранить полную копию ФС на каждом из фронтов не приходится.