所以我在Google AppEngine上运行了这个服务器应用程序,我想迁移到node.js。
我主要担心的是构建一个类似于功能强大的GAE的blobstore / imageservice combinaison的API来托管和提供用户上传的图片。
我是node.js的新手,我只阅读了一些文档,查看了一些视频,并且到目前为止还在播放节点。我想对一些最佳解决方案有所了解:
目前,我倾向于使用redis来存储和缓存图片,我还没有查看所有节点模块(有很多!)。
这种应用程序的首选架构是什么?
答案 0 :(得分:3)
关于node.js基础结构,您可能希望使用express framework来构建应用程序。我不知道你是否还需要一些图像处理功能,但是有一个node module来包装imagick库。它看起来像是一个正在进行的开发 - 不确定它是否已经可用。无论如何,您绝对需要避免在节点单线程事件循环中运行任何图像处理代码。
对于申请的上传部分,我首先要查看node-formidable或this question。
现在对于存储本身来说,Redis非常有效地存储大量小对象,但并不是真正用于存储大型对象。最近的Redis版本基于jemalloc,它是一个很好的通用内存分配器,但如果你使用Redis存储大对象,它将产生一些内部碎片。 Redis中没有类似memcached的slab分配器。
所以我不会将图像本身存储在Redis中,而只存储元数据及其相关索引(文件路径,所有者,大小,标签等)。图像将更好地直接存储在文件系统IMO上。有一个很好的node-redis模块可以从node.js
访问Redis我不确定是否真的需要缓存。如果图像存储在文件系统中,也许您可以依赖文件系统缓存来避免I / O. Node非常擅长将文件操作委托给libeio线程池,以避免阻塞主事件循环。我真的不相信使用Redis缓存图像内容会带来任何好处。我会首先尝试文件系统缓存,并且只在需要时调查更复杂的缓存。