Chr*_*s F 46 deployment node.js
我已将此发布到ServerFault,但Node.js社区似乎很小,所以我希望这会带来更多曝光.
我有一个Node.js(0.4.9)应用程序,正在研究如何最好地部署和维护它.我想在云端(EC2或RackSpace)以高可用性运行它.该应用应该在HTTPS上运行.稍后我会担心East/West/EU完全故障转移.
我已经做了大量关于keep-alive(Upstart,Forever),多核实用程序(Fugue,多节点,Cluster)和代理/负载均衡器(node-http-proxy,nginx,Varnish和Pound)的阅读.但是,我不确定如何结合我可用的各种实用程序.
我有这个设置,需要解决一些问题并获得反馈.
一般的问题:
我真的很想知道人们如何建立当前的生产环境以及他们喜欢哪种工具组合.非常感激.
Chr*_*s F 21
自从我提出这个问题以来,已经有好几个月了,而不是很多回答.Samyak Bhuta和nponeccop都有很好的建议,但我想讨论我在问题中找到的答案.
以下是我在生产系统中已经确定的内容,但总是在进行进一步的改进.我希望它能帮助处于类似情况的任何人.
使用Cluster生成任意数量的子进程,以便处理多核虚拟机或物理机上的传入请求.这绑定到单个端口,使维护更容易.我的经验法则是n - 1群集工作者.您不需要Forever就可以了,因为Cluster重新生成了死亡的工作进程.要在群集父级别具有弹性,请确保使用Upstart脚本(或等效的)来守护Node.js应用程序,并使用Monit(或等效的)来监视Cluster父级的PID并在其死亡时重新生成它.您可以尝试使用Upstart的respawn功能,但我更喜欢让Monit看东西,所以我觉得最好让Monit处理respawn.
在端口80上运行每个应用服务器使用1个nginx,只需在您绑定到的任何端口(1)中反向代理到您的群集.可以使用node-http-proxy,但是nginx更加成熟,功能更强,并且在提供静态文件方面更快.运行nginx lean(不记录,不要gzip小文件)以最小化它的开销.
如上所述,在至少2个可用区域中至少具有2x服务器,如果在AWS中,使用在端口443上终止HTTPS/SSL并在HTTP端口80上与node.js应用服务器通信的ELB.ELB很简单,如果您愿意,可以让它更容易自动缩放.你可以运行多个nginx共享一个IP或循环由你的DNS提供商自己平衡,但我现在发现这有点过分.此时,您将删除每个应用服务器上的nginx实例.
我不需要WebSockets所以nginx仍然适用,当WebSockets出现时我会重新审视这个问题.
欢迎反馈.
| 归档时间: |
|
| 查看次数: |
12176 次 |
| 最近记录: |