sdevalex
@sdevalex

Автошаринг файлов

В самом простом варианте нужну написать фотохостинг (часть другого сервиса) и подумав про будущее я немного в тупик уперся. Предложим сейчас у меня есть 1 сервер, который раздает статику. А как поступить, если появится второй сервер? Как разнести файлы поровну и сделать балансировку нагрузки? Есть ли что-то автоматической, как автошаринг в MongoDb?

Сейчас я вижу только один выход, сделать на MongoDb+NodeJS раздачу картинок, которые храняться в базе. MongoDb поддерживает автошаринг и, при добавлении нового сервера, растащит файлы.

Ничего толкового в гугле не нашел, пожет не то искал? Где можно о таком почитать?
  • Вопрос задан
  • 2741 просмотр
Пригласить эксперта
Ответы на вопрос 3
vaevictus
@vaevictus
один из самых простых вариантов — сделать несколько серверов под именами s1.site.com, s2.site.com,… и случайным образом заливать файлы на них. Балансировка на уровне формы отправки изображения(банальным рандомом)
Ответ написан
Комментировать
Aco
@Aco
Заклинатель кода
Шардинг в MongoDB шикарен. Однако скорость отдачи файлов не является лучшей стороной MongoDB GridFS. Есть модуль Nginx-а для раздачи файлов из GridFS, но коннекты у него блокирующие с вытекающими из этого последствиями. Как аналог, приходит в голову rsync + MongoDB capet collection + MongoDB tailable cursor. а если подумать то монгу предложенном варианте можно заменить на redis: в редисе заводится очередь на каждый сервера, на каждом сервер висит скрипт с blPop (очень интересная команда, в асинхронной модели будет работать отлично), когда есть изменения (добавили/удалил/изменили файл) другой скрипт, который принял данную комманду, делает rpop в очереди серверов у redis с соответвующий opcod-ом, ну а дальше rsync или что либо ещё. тем самым получаю синхронизацию фс. Скорость редиса ничуть не уступает скорости memcached, проверено. Это то, что сходу пришло в голову.
Ответ написан
Комментировать
Aco
@Aco
Заклинатель кода
Если есть какая-то десинхронизация в фс то тут отлично поможет rsync
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы