NodeJS的一些总结

NodeJS的一些总结

Node 公开宣称的目标是 “旨在提供一种简单的构建可伸缩网络程序的方法”。

当前的服务器程序有什么问题?我们来做个数学题。

在 Java™ 和 PHP 这类语言中,每个连接都会生成一个新线程,每个新线程可能需要 2 MB 的配套内存。

在一个拥有 8 GB RAM 的系统上,理论上最大的并发连接数量是 4,000 个用户。 随着您的客户群的增长,如果希望您的 Web 应用程序支持更多用户,那么,您必须添加更多服务器。

当然,这会增加服务器成本、流量成本和人工成本等成本。除这些成本上升外,还有一个潜在技术问题,即用户可能针对每个请求使用不同的服务器,因此,任何共享资源都必须在所有服务器之间共享。

鉴于上述所有原因,整个 Web 应用程序架构(包括流量、处理器速度和内存速度)中的瓶颈是:服务器能够处理的并发连接的最大数量。

Node 解决这个问题的方法是:更改连接到服务器的方式。每个连接发射一个在 Node 引擎的进程中运行的事件,而不是为每个连接生成一个新的 OS 线程(并为其分配一些配套内存)。

Node 声称它绝不会死锁,因为它根本不允许使用锁,它不会直接阻塞 I/O 调用。Node 还宣称,运行它的服务器能支持数万个并发连接。

现在您有了一个能处理数万个并发连接的程序,那么您能通过 Node 实际构建什么呢? 如果您有一个 Web 应用程序需要处理这么多连接,那将是一件很 “恐怖” 的事!那是一种 “如果您有这个问题,那么它根本不是问题” 的问题。

在回答上面的问题之前,我们先看看 Node 的工作原理以及它的设计运行方式。

使用经验总结:


最重要的场合:逻辑简单的高并发场合!

ebay选择Nodejs的理由:
        动态语言:开发效率非常高,并有能力构建复杂系统,如ql.io。
        性能和I/O负载:Nodejs非常好的解决了IO密集的问题,通过异步IO来实现。
        连接的内存开销:每个Node.js进程可以支持超过12万活跃的连接,每个连接消耗大约2K的内存。
        操作性:实现了Nodejs对于内存堆栈的监控系统。

不适合的领域
        0. 最不擅长CPU和内存的编程操作。
        1. 计算密集型应用,让Javascript和C去拼计算性能,估计是不可能赢的。
        2. 内存控制,让Javascript和Java比较复杂数据类型定义,也是很困难的。因为Javascript的面向对象是基于JSON的,而Java是直接使用内存结构。所以,通过JSON序列化和反序列的过程控制内存,Javascript就已经输了。
        3. 大内存的应用,由于V8引擎有内存设计的限制,32位环境中最大堆是1G,64位环境中最大堆也不到2G,如果要一次读入10G数据,对于Nodejs来说也无法实现。
        4. 静态服务器,虽然Nodejs的优势在IO密集集应用,但是和Nginx的处理静态资源还是有很大的差距。
        5. 不需要异步的应用:比如系统管理,自行化脚本等,还是Python更顺手,Nodejs的异步调用可能会给编程带来一些麻烦。

增加NodeJS程序的稳定性
        1.使用 try{…} catch(error){…} 来执行容易出错的代码段。比如解析一个外来的json字符串等。
        2.使用 process.on(‘uncaughtException’, function(err){…}); 来处理未被捕捉的错误。
        3.试用奶妈进程来启动你的程序,检测子进程的退出,然后自动重启该进程。比如 mother.js :
        4.使用 nohup 让nodejs进程在后台运行。 比如运行”nohup node yourjsfile.js > /dev/null &”

来源于网络,以后持续修改。