Лучшие практики для отделения базы данных от очереди сообщений - PullRequest
0 голосов
/ 18 октября 2011

Я создаю веб-приложение, которое позволяет пользователю загружать изображение.Когда изображение загружено, его необходимо изменить до одного или нескольких размеров, каждый из которых необходимо отправить в Amazon s3 для хранения.Метаданные и URL для каждого размера изображения хранятся в одной записи базы данных на веб-сервере.Я использую очередь сообщений для асинхронного изменения размера и загрузки (поскольку существует возможность для больших изображений и нескольких размеров для каждого запроса).Когда задача изменения размера / загрузки завершена, запись базы данных должна быть обновлена ​​с помощью URL.

Моя проблема в том, что работник, выполняющий задачу, не будет иметь доступа к базе данных.Я думал о запуске обратного вызова http от работника обратно в веб-приложение после завершения задачи с соответствующей информацией для обновления записи в базе данных.Есть ли другие альтернативы или причины, по которым я должен сделать это по-другому?

Я использую python / pylons для веб-интерфейса, mysql для базы данных и celery / amqp для обмена сообщениями.

Спасибо!

1 Ответ

2 голосов
/ 18 октября 2011

Похоже, ваша цель не отделить базу данных от MQ, а скорее от рабочих.Таким образом, вы можете создать еще одну очередь, которая получает уведомления о завершении, и иметь еще одного работника, который собирает уведомления и соответствующим образом обновляет базу данных.

...