【发布时间】:2014-10-25 05:18:23
【问题描述】:
我有一个提供 Web 请求的 NodeJS 服务器,用户也可以将图像上传到我的服务器。我目前正在同一台服务器上处理这些图像。这确实是一个权宜之计,直到我可以做得更好,因为图像处理会占用大量 CPU,而且我不想在我的网络服务器上这样做。
处理类型很简单:
- 自动定位图像,将图像 POST 到处理服务器并 让它返回一个定向图像。
- 创建缩略图,将图像 POST 到处理服务器并拥有 它返回一个缩略图。
我希望能够将此图像处理服务器用于许多其他服务器。我还希望它以很少的内存/cpu 运行。 IE。如果我有更多可用的 CPU/内存,那就太好了,但如果部署在资源有限的服务器上,我不希望它崩溃。
我目前处理这个问题的方式是我有一个配置文件,指定我可以同时处理多少张图像。如果我的资源非常有限,我将一次只处理 1 个图像,而将其余图像排队。现在这很好用,因为 Web 服务器和图像处理服务器是一体的。
我的独立图像处理服务器必须对请求进行“排队”,以便限制一次处理的图像数量。
我真的不想将图像存储在处理服务器上。主要是因为我的网络服务器知道数据结构(哪些图像属于哪些内容)。所以我真的很想向服务器发出请求并取回处理后的图像。
一些问题。
- NodeJS 实现是一个好的解决方案吗?
- 这应该是一个 RESTful http api。我想知道这一点,因为考虑到一次只处理一定数量的图像的要求,我不确定我是否可以完成它。如果我同时收到 15 个请求,我不知道该怎么做,我不想处理第一个请求,而其他请求则等待响应(处理后的图像)。
- 可以使用套接字将我的 Web 服务器与我的图像处理服务器连接起来,以避免出现问题 #2。这不是“功能强大”,因为它可能更难与其他服务器一起使用。但确实让我摆脱了上面#2 中的请求/响应问题。 IE 网络服务器可以推送要在套接字上处理的图像,并且处理服务器可以在完成后在套接字上回复。
- 是否有一些可以在 linux/unix 上运行的开源解决方案满足我的需求。这似乎是一个很常见的问题,实现起来应该很有趣,但如果我可以使用/贡献另一个产品,我会讨厌重新发明轮子。我见过Apace::ImageMagick,但我无法发布它们必须已经驻留在服务器上的图像。还有一些我无法使用的仅限 Windows 的解决方案。
请帮忙...
【问题讨论】:
-
您使用的是 Linux 还是 Windows?在 Linux 上,您可以将 RAM 作为磁盘写入,然后使用
convert*和-auto-orientate生成这些图像。因为它是基于 RAM 的,所以几乎没有 I/O 瓶颈,只是 CPU 运行。