2011-10-18 45 views
0

我正在构建一个允许用户上载图像的Web应用程序。上传图片时,需要将其调整为一种或多种尺寸,每种尺寸都需要发送到Amazon s3进行存储。每个图像大小的元数据和URL都存储在Web服务器上的单个数据库记录中。我正在使用消息队列异步执行调整大小和上传(因为每个请求可能会有大图像和多个大小调整)。调整大小/上传任务完成时,数据库记录需要使用url进行更新。将数据库与消息队列分离的最佳做法

我的问题是执行任务的工作人员将无法访问数据库。我正在考虑在完成任务后使用适当的信息更新数据库记录,从工作人员发回http回调到Web应用程序。有其他的选择或原因,我应该以另一种方式做到这一点?

我使用python/pylons作为web后端,mysql作为数据库,而celery/amqp作为消息传递。

谢谢!

+0

“...执行任务的工作人员将无法访问数据库。”有什么特别的原因? –

+0

大多数情况下,工作人员将在不同的机器上运行,并且不会直接访问数据库(出于安全原因)。 –

回答

2

看来你的目标不是将数据库从MQ中分离出来,而是从工人中分离出来。因此,您可以创建另一个接收完成通知的队列,并让另一个工作人员选择通知并适当地更新数据库。

+0

+1:另一个队列。 –

+0

正确,标题可能有点误导。我曾考虑过把它分成两个单独的任务,但没有考虑过另一个队列。这实际上很有意义,因为我可以将需要数据库访问的任务发送给特权机器。谢谢。 –

相关问题