在node.js中构build映像服务的最佳方法

所以我有这个服务器应用程序运行在Google AppEngine上,我想迁移到node.js.

我主要关心的是构build一个类似于强大的GAE blobstore / imageservice组合的API来托pipe和提供用户上传的图片。

我对node.js真的很陌生,我只读过一些文档,查看了一些video,到目前为止一直在播放节点。 我想了解什么是最好的解决scheme:

  • 主持图片
  • 通过高效的caching系统为他们服务

目前,我倾向于Redis存储和caching图片,我还没有看所有的节点模块(有很多!)。

这样的应用程序将select什么样的架构?

关于node.js基础结构,您可能希望使用express框架来构build应用程序。 我不知道你是否也需要一些image processingfunction,但有一个节点模块来包装imagick库。 它看起来像一个正在进行的发展,但不知道它已经可用。 无论如何,您绝对需要避免在节点单线程事件循环中运行任何image processing代码。

对于你的应用程序的上传部分,我会先看看node-strongidable或这个问题 。

现在,对于存储本身来说,Redis非常高效地存储大量的小对象,但并不是真正用于存储大对象的。 最近的Redis版本基于jemalloc,它是一个很好的通用内存分配器,但如果使用Redis存储大型对象,则会生成一些内部碎片。 Redis中没有类似memcached的slab分配器。

所以我不会将图像本身存储在Redis中,而只是将元数据及其相关索引(文件path,所有者,大小,标签等)存储起来。 图像将被更好地直接存储在文件系统IMO。 有一个非常好的node-redis模块可以从node.js访问Redis

我不确定caching是否真的需要。 如果图像存储在文件系统中,也许可以依靠文件系统caching来避免I / O。 节点相当擅长将文件操作委托给libeio线程池,以避免阻塞主事件循环。 我并不确信使用Rediscaching图像内容会带来任何好处。 我会先尝试文件系统caching,并且只在需要的时候调查更复杂的caching。