从性能角度看Node.js---《Node.js实战(第2季)》试读

阅读更多

作为一个还算资深的测试人员,除了对测试技术的热衷追求,还有对新技术的渴望。由于工作中涉及大量的性能测试工作,也对所有可以优化性能的开发框架、IO平台都有一定的向往。Node.js恰好是其中之一,也是进来最流行的基于javascript建立的平台。

 

Node.js 是一种建立在Google Chrome’s v8 engine上的 non-blocking (非阻塞), event-driven (基于事件的) I/O平台。以事件驱动为核心,单线程,单进程。Node.js 最大的特点就是采用异步式 I/O 与事件驱动的架构设计。对于高并发的解决方案,传统的架构是多线程模型,也就是为每个业务逻辑提供一个系统线程,通过系统线程切换来弥补同步式 I/O 调用时的时间开销。Node.js 使用的是单线程模型,对于所有 I/O 都采用异步式的请求方式,避免了频繁的上下文切换。Node.js 在执行的过程中会维护一个事件队列,程序在执行时进入事件循环等待下一个事件到来,每个异步式 I/O 请求完成后会被推送到事件队列,等待程序进程进行处理。事件驱动机制是Node.js通过内部单线程高效率地维护事件循环队列来实现的,没有多线程的资源占用和上下文切换,这意味着面对大规模的http请求,Node.js凭借事件驱动搞定一切。因为Node是基于事件驱动和无阻塞的,所以非常适合处理并发请求。可以通过运行多个Node.js进程的方式来有效利用多个CPU。

 

然而就像试读章节中所说,往往在互联网后端架构,不可能一下子切换到Node.js,比如原有的系统是用java开发的,但在一些非常适合Node.js发挥场景的地方修改为Node.js来开发。那么两者之间的通信就成了一个非常重要的课题,既要保证不同语言的兼容性,又要保证其性能消耗。

 

试读章节中给我们提供了一个方法,就是使用RabbitMQ队列,当然,也不仅仅限于这种队列,有更多的队列都可以使用。以Node.js作为生产者,以其他语言底层为消费者,反之亦然。这样由于双方都是使用HTTP协议,没有任何障碍;同时又具有了不错的性能,利用HTTP协议的keepalive可以免去多次重复创建和断开连接的开销。

 

Node.js仍然在不断发展中,相信未来Node.js会成为在javascript端最重要的平台,甚至某些程度上取代java的部分效能。

你可能感兴趣的:(从性能角度看Node.js---《Node.js实战(第2季)》试读)