2011-12-25 73 views
1

因此,我已经在Google AppEngine上运行了此服务器应用程序,并且我想迁移到node.js.在node.js中构建映像服务的最佳方法

我主要关注的是构建一个类似于功能强大的GAE blobstore/imageservice combinaison的API来托管和服务用户上传的图片。

我对node.js非常陌生,我只读过一些文档,查看了一些视频,并且到目前为止一直在播放节点。我想有什么将是最佳的解决方案的一些见解:

  • 主机图片
  • 为他们服务,通过高效的高速缓存系统

目前,我靠着向redis存储和缓存图片,我还没有看过所有的节点模块(还有很多!)。

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

+0

这太大,太模糊了一个问题,不能合理回答。你基本上是问“我如何使用我从未用过的东西创建一个网站”。 – cHao 2011-12-26 05:36:42

+0

我认为在坦率地说,stackoverflow中存在比这个更模糊/难以解决的问题。我没有看到有经验的人回答这两个问题的困难,或者至少就他们对这些问题的经验给予反馈。 – 2011-12-26 07:24:57

+0

这里有很多未解决的问题:您是否使用Amazon AWS或Windows Azure这样的云?你有什么扩展需求?是否有理由缓存图像,而不是使用云存储/ CDN进行滚动?这些问题的答案将有助于为你塑造一个更好的方向。 – 2011-12-26 08:15:19

回答

3

关于node.js基础结构,您可能需要使用express framework来构建应用程序。我不知道你是否还需要一些图像处理功能,但有一个node module来包装imagick库。它看起来像一个正在进行的发展,但不知道它已经可用。无论如何,您绝对需要避免在节点单线程事件循环中运行任何图像处理代码。

对于您的应用程序的上传部分,我首先看node-formidablethis question

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

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

我不确定缓存是否真的需要。如果图像存储在文件系统中,也许可以依靠文件系统缓存来避免I/O。 Node非常擅长将文件操作委派给libeio线程池以避免阻塞主事件循环。我并不确信用Redis缓存图像内容会带来任何好处。我会先尝试文件系统缓存,然后只在需要时才调查更复杂的缓存。

+0

谢谢,我已经尝试过强大的节点redis,它们很适合我的需求。关于缓存,我会遵循你的话,似乎我已经得到一些非常好的基准,已经直接使用'fs'。它已经与appengine imageservice保持一致,我根本不会怀疑它。 – 2011-12-26 19:35:15

+0

感谢Didier,正在考虑基于RAM的项目图像缓存。我将不得不深入挖掘以找到更适合的方式。基于文件的解决方案对于读 - >处理 - >写入的每帧来说有点太慢。 – 2012-05-22 16:44:09

相关问题