AWS和Node.js,我需要nginx还是apache?

时间:2012-08-23 12:51:49

标签: apache node.js nginx amazon-web-services

我确实在serverfault上发布了此消息,但未获得任何观看或响应。

我在这里阅读了一些关于在使用Node.js时是否需要网络服务器的帖子,并且提供静态文件似乎总是肯定的。

我的问题是这个。如果我正在处理的网站主要是动态的,我不能只使用Node.js作为服务器和动态部分,然后将所有静态文件(css,js,images等)放在CloudFront上为它们服务吗?这样我就不用担心缓存(通过清漆或redis或者你有什么),或运行像nginx这样的http服务器并通过代理来访问Node.js(我读过这会导致socket.io出现问题) )。

沿着类似的话题,亚马逊的ELB是否足以作为负载均衡器,或者如果站点足够大以需要负载均衡,我还需要做其他事吗?提前谢谢!

2 个答案:

答案 0 :(得分:5)

我不能明确地谈论node.js架构决策,但我可以解决您的CloudFront和ELB问题。

CloudFront是静态资产的绝佳CDN,但有一些问题。俗话说,"There are only two hard problems in Computer Science: cache invalidation and naming things."如果你想用相同名称但更新的资产替换你的静态资产,你将不得不开始使用cache-control-headers,来确定任何给定的CF节点缓存多长时间一项资产。如果将CF设置得太低,在CF中缓存几乎没有什么优势。这是一种痛苦,我强烈建议您对资产进行版本控制,并以同时部署资产和更新资产引用的方式设置应用程序。此时,无法通过API调用或其他方法手动使对象的缓存从CF到期。

至于ELB缩放:是的。使用它们。 Netflix确实如此,如果可以,也可以。 ELB使用的关键是了解它们在应用程序流量中的作用:您希望它们具有高可用性,这意味着在多个可用区域中维护一组Web服务器,并确保ELB已正确配置以实现它们。事实上,Netflix最近open-sourced他们的cloud management application称为“Asgard”。我建议检查一下。链接的博客文章对ELB的使用有很好的解释,而Asgard看起来像是一种管理云部署而不需要停机的好方法。

答案 1 :(得分:2)

如果您使用像Express这样的Node.js框架,您可以轻松指定静态文件所在的位置,从而允许您使用CDN。你可以简单地使用express cdn.之类的东西。如果您需要负载平衡,有几种方法可以处理它,但EBS很可能就足够了。