我们正计划开始一个相当复杂的门户网站,预计将吸引良好的本地流量,我的老板告诉我考虑/分析服务端的node.js。我认为可伸缩性和多核支持可以通过Nginx或Cherokee来处理。
1)这个node.js准备好做一些严肃的/大的业务了吗?
2)服务器端的这种“事件/异步”范例是否有可能支持大流量和数据操作?考虑到“一切”都是在一个线程中处理的,如果它崩溃了,所有的活动连接都会丢失(尽管它很容易重启)。
3)与基于线程的编程方式相比,基于事件的编程有什么优势?反之亦然。(我知道与线程切换相关的成本较高,但硬件可以通过事件模型来压缩。)
以下是有趣但(在某种程度上)相互矛盾的论文:
1) http://www.usenix.org/events/hotos03/tech/full_papers/vonbehren/vonbehren_html
2) http://pdos.csail.mit.edu/~rtm/papers/dabek:event.pdf
发布于 2011-01-03 23:56:21
1. Cleaner-looking code than threaded code (in JavaScript, that is)
2. The JavaScript engine is extremely efficient with processing events and handling callbacks, and its easily one of the languages seeing the most runtime optimization right now.
3. Harder to fit when you are thinking in terms of control flow. With events, you can never be sure of the flow. However, you can also come to think of it as more dynamic programming. You can treat each event being fired as independent.
4. It forces you to be more security-conscious when programming, for the above reason. In that sense, its better than linear systems, where sometimes you take sanitized input for granted.
至于这两篇论文,都是比较老的。第一个基准测试,如你所见,有一个关于这些研究的更新的注释:
http://www.eecs.harvard.edu/~mdw/proj/seda/
它还引用了您链接的第二篇关于他们所做的工作的论文,但拒绝评论它与基于事件的系统和基于线程的系统之间的比较的相关性:)
发布于 2011-02-15 19:02:18
Try yourself发现真相
发布于 2012-10-06 12:55:33
请参阅What is Node.js?,我们将在其中准确介绍这些内容:
Node在生产中绝对是可能的,但离文档中似乎承诺的“交钥匙”部署还很远。在Nodev0.6.x中,“集群”已经集成到平台中,提供了基本的构建块之一,但我的"production.js“脚本仍然需要大约150行逻辑来处理诸如创建日志目录、回收死的工作进程等工作。公平地说,Rails确实存在这个问题。它是通过两个互补的机制解决的: 1)将Rails/Node放在一个专用的via服务器(用C编写并经过多次测试)后面,比如Nginx (或Apache / Lighttd)。sub服务器可以高效地提供静态内容、访问日志记录、重写URL、终止SSL、执行访问规则以及管理多个子服务。对于命中实际节点服务的请求,hit服务器通过代理发送请求。2)使用像"Unicorn“这样的框架来管理工作进程,定期回收它们,等等。我还没有找到一个看起来完全成熟的节点服务框架;它可能存在,但我还没有找到它,在我手写的"production.js”中仍然使用了大约150行代码。
https://stackoverflow.com/questions/4578484
复制相似问题