参加hello radar回来

公司为了扩大大家的技术知识面,同时也对radar上的新技术进行一些探索,因此开始了hello radar系列session,这期的主题是nodejs。其实我在之前已经写过一些关于nodejs的文章。这回也算是总结一下这阶段的探索经历。

nodejs无疑是目前互联网开发方面最热门的技术之一。究其原因一是其能够支持超高的并发连接(单服务器能做到>8000的并发量),二是使用事件异步编程模式,三是采用了javascript作为服务器端编程语言. 这三个方面也正是目前大多数主流框架正在解决但未解决好的.对于目前的web服务器来说, 单服务器的连接并发量能到3000~5000已经非常不错了. 但这样的并发量对于当前具有海量用户的大型网站来说还是非常的少. 主要的原因是大多数web服务器对每一个request请求要么使用一个线程要么使用一个进程来处理,这也就是说在这个request返回之前线程或进程占用的资源是不会释放的.以每个线程占用2m的内存来说, 5000个并发就需要10g的内存(很恐怖吧). 我们来看一下nodejs是怎么解决这一问题的? 我们都知道nodejs是一个单线程单进程的服务器, 它对于request的请求并不使用线程去处理, 而采用了注册回调的方式. 也就是说对于request请求并不等到整个处理结束就释放连接去服务另一个请求.而处理过程被委托到后台线程(这里的线程与rquest的线程是不同的)中执行, 直到之前的处理结束再将数据发送回客户端.这样nodejs服务器就可以处理大量的并发连接.另外由于js天生对事件模型的支持并且拥有广大的开发群体, Ryan很自然就选择js作为nodejs的开发语言.

那么我们说任何的新技术都不能可能解决所有的问题,nodejs也一样. 假设我们现在有10000个并发请求, 每一个请求需要10s去完成.那么根据nodejs的机制,我们大概可以知道每秒钟需要返回10000块数据回客户端, 如果每块数据100k, 那么传输的数据量就达到1g, 并且会有90000个请求等待返回. 这时候网络的I/O就成为了服务器的瓶颈.从这里可以看出nodejs并不适合处理这样的情况. 根据Ryan自己描述每个request请求处理不超过5ms会有较好的性能.具体的文章可以看这里.那么什么样的应用符合这样的要求呢? 我认为微博, 聊天室和某些mobile应用是适合的.

作为完整的开发栈, nodejs提供了良好的包管理程序npm (node package management), 还有版本管理程序nvm (nodejs version management). nodejs的发展速度是惊人的,到目前为止已经有6000+的模块被开发出来, 这也是nodejs的一大特色. 关于npm可以看这里. 关于nvm可以看这里. 同样api文档对于开发者来说也是极其重要的, nodejs.org也提供了比较完善的api文档.对于任何程序来说,调试永远是必须的.nodejs是基于google的v8引擎实现的,那么我们同样可以使用eclipse的v8调试插件来实现对nodejs的调试.关于如何调试nodejs可以看这里

nodejs是一项新技术,尽管其发展的很快,给我们带来了很多新的开发理念. 但还有些领域处于摸索阶段, 一个是如何测试nodejs程序,特别是单元测试; 二是持续构建的框架.对于一个完整的项目来说测试和持续构建是重要的两个环节. 

posted @ 2012-01-07 23:24  moonz-wu  阅读(281)  评论(0编辑  收藏  举报