Будет некий сервис, в котором пользователь может загрузить медийный-файл а сам сервис должен изменить в нем некие св-ва.
Будет:
N-главных серверов. Назовем M*. Эти сервера общаются с пользователем. Прием файла от пользователя и необходимых надстроек над файлом. N-задачных серверов. Назовем W*. Эти серевера будут производить те самые изменения в файлах.
Вся реализация будет на python+twisted.
Схема:
При загрузки пользователем файла на M сервер, файл с сервера M отправляется на наиболее «свободный» W сервер, попадая в очередь. W сервер сообщает о успешном завершении операции с ID очереди (для связи. Узнать статус либо при получении уведомления).
После завершения изменений с файлом на сервере W, этот сервер уведомляет M о успешности выполнения задачи. Для всего обмена данными хочу написать собственный сервис.
1. Насколько нормальна будет такая схема?
2. Файлы могут быть большими, 1Гб например. Беспокоит то, что приходится «гонять» файлы туда-сюда, с M сервера на W (и может быть обратно, хотя этот шаг можно обойти отдавая пользователю результат файла напрямую с сервера W).
1) Нормальная схема. Нечто подобное используют многие, например, Flickr.
2) ну и что, что будут гоняться? Межсерверные линки всё равно быстрее WAN'а. А раздавать файлы с воркеров — идея плохая. Воркеры должны иметь возможность умирать, ничего не затрагивая, а только увеличивая время обработки файликов.
> Для всего обмена данными хочу написать собственный сервис.
Зачем? Воспользуйтесь сервером очередей.
Зачем передавать большие объёмы в сервер очереди? Там должен быть таск: возьми (опционально, у того-то сервера) такой-то файлик, сделай с ним тот-то (опционально, кинь результат туда-то).
Gearman, PgQ, RabbitMQ и прочие.
Я бы выделил еще сервер Q, который будет содержать и обслуживать очередь, в него будут складываться сырые файлы. Серверы W будут смотреть, есть еще задания для выполнения, а после выполнения результат складывать на тот же сервер W, в очередь готовых файлов.
По-моему, так легче будет масштабироваться, да и логика серверов М немного упростится.
Я так понимаю, что Melkij отвечал мне.
В очереди действительно лучше держать адрес файла и требуемое действие. Просто изначально я подумал, что серверы М — это фронтенд, на котором нежелательно держать такие объемы информации. После вашего ответа перечитал постановку задачи, дошло, что М — это медиа серверы для хранения больших файлов.