4

我确实在 serverfault 上发布了这个,但没有得到任何意见或回复。

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

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

在类似的主题中,亚马逊的 ELB 是否足以作为负载均衡器,或者如果站点足够大以至于需要进行负载均衡,我是否需要做其他事情?提前致谢!

4

2 回答 2

5

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

CloudFront 是一个很棒的静态资产 CDN,但也有一些问题。俗话说“计算机科学只有两个难题:缓存失效和命名事物”。如果你想用同名但更新的资产替换你的静态资产,你必须开始使用缓存控制标题,它决定了任何给定的 CF 节点缓存资产的时间。如果将其设置得太低,则在 CF 中进行缓存几乎没有优势。这太痛苦了,我强烈建议您对资产进行版本控制并设置您的应用程序,以便同时部署资产和更新资产引用。目前,无法通过 API 调用或其他方法手动使 CF 中的对象缓存过期。

至于 ELB 扩展:是的。使用它们。Netflix 可以,如果可以的话,你也可以。使用 ELB 的关键是了解它们在应用程序流量中的作用:您希望它们具有高可用性,这意味着在多个可用区域中维护一组 Web 服务器,并确保 ELB 已正确配置以命中它们。事实上,Netflix 最近开源了他们的云管理应用程序“Asgard”。我建议检查一下。链接的博客文章对 ELB 的使用进行了很好的解释,而 Asgard 看起来像是一种管理云部署且停机时间为零的不错方式。

于 2012-08-23T17:21:36.807 回答
3

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

于 2012-08-23T17:36:32.433 回答