我正在使用PHP和Graphicsmagick,并且我有一群用户正在上传批量的图像。大批图像调整大小并存储
这些批次从一个图像运行到数百个,甚至可能有一千个。
我需要在Amazon S3上存储这些原始上传文件,并且我还需要将每个图像的大小调整为三种不同的大小,并将这些副本存储在Amazon S3上。
这需要尽可能实时。
您将如何设计这个最佳性能?
我正在使用PHP和Graphicsmagick,并且我有一群用户正在上传批量的图像。大批图像调整大小并存储
这些批次从一个图像运行到数百个,甚至可能有一千个。
我需要在Amazon S3上存储这些原始上传文件,并且我还需要将每个图像的大小调整为三种不同的大小,并将这些副本存储在Amazon S3上。
这需要尽可能实时。
您将如何设计这个最佳性能?
很容易实现。当用户上载图像时,将其添加到(lpush)消息队列中。当您向队列中添加消息时,您并不打扰网站用户使用该工作(等待),而是在离线状态下进行。我会去redis,因为它非常强大,快速,易于使用。你应该看看redis,因为你也可以用它来满足你的缓存需求,甚至更多。很好。接下来生成几个工作进程,他们除了处理(blpop)队列中的消息(一个接一个)之外什么也不做。他们会从队列中获取消息,执行任务(图像调整大小),并在完成后从队列中获取下一条消息。它非常简单而且非常快速。特别是如果您使用编译为C的C++语言(C语言非常快),例如phpredis。
P.S:良好的入门教程说明redis的=>http://simonwillison.net/static/2010/redis-tutorial/(必须阅读;))