node.js内存缓存的性能情况

时间:2021-12-25 05:15:31

1. WEB 服务性能测试和优化

1.1   测试环境搭建

网络环境:内网

压力测试服务器:

服务器系统:Linux 2.6.18

服务器配置:Intel® Xeon™ CPU 3.40GHz 4 CPUS

内存:6GB

反向代理服务器:Nginx服务器

服务器系统:Linux 2.6.18

服务器配置:Pentium® Dual-Core CPU E5800 @ 3.20GHz 2CPUS

内存:2GB

发包服务器:

发包工具:apache 2.2.19自带的ab测试工具

服务器系统:Linux 2.6.18

服务器配置:Pentium® Dual-Core CPU E5800 @ 3.20GHz 2CPUS

内存:1GB

1.2   CPU性能测试

Nginx可作为HTTP服务器,在处理高并发请求的时候拥有比现在主流的Apache服务器更高的性能,同时Nginx也是一个优秀的反向代理服务器。所以在服务器端开启一个或多个Node.JS进程在多核CPU上运行,我们利用Nginx来进行反向代理和负载均衡,监听8888端口,直接通过使用Apache自带的ab测试包对8888端口进行压力测试。获得的测试结果如下所示:

Type

单进程

双进程

三进程

Commond

1000/30

1000/30

1000/30

rps

203

311

432

tpq

4.93

3.2

2.37

50%req

4500ms

1500ms

750ms

Fail

0

0

0

表一  Node.JS多进程压力测试表

注:1000/30:代表命令./ab -c 1000 -t 30 http://10.1.155.40:8888/

rps:代表每秒处理请求数,并发的主要指标

tpq:每个请求处理的时间,单位毫秒

fail:代表平均处理失败请求个数

50%req:代表50%的请求在多少毫秒内返回

在有业务处理压力的情况下,单开Node.JS和多开Node.JS性能有明显差别, 每秒处理请求数性能提升100%,从用户响应速度上提升200%,从稳定性上提升200%。所以在多核CPU运行Node.JS 的时候可将1个CPU绑定Nginx进程使用,其他的CPU绑定Node.JS进程,这样可以明显提升服务器的性能和稳定性。

1.3   缓存优化策略

通过上面的论述我们介绍了Node.JS主要的两个缺点:V8内存限制和Node.JS的单线程等;这里我们给出了几种主要的解决方案,从而有助于其提高Node.JS的响应速度和WEB服务性能。

对于缓存要求不高的Web应用来说,在Node中做缓存最简单高效的方法是使用一个Object对象,将缓存以key-value的形式存入这个对象中,这么做的理由是拥有更快的存取速度。通过测试得知,相比Redis通过TCP连接的形式与客户端进行通信,在程序中直接使用对象进行存储的效率会是Redis的40倍。

对于解决资源不足的问题,尤其是内存方面的问题,通常采用风险转移的方式。即将缓存点从Node.JS进程中转移到第三方成熟的缓存(如Redis,varnish等)中去即可。这样做的优点在于:1、缓存内容没有冗余;2、集中式缓存,减少不一致性的发生;3、更加优秀的缓存算法以保证较高的命中率;3、让Node.JS保持轻量,以解决它更擅长的问题[1]

对于上面提到的请求上涨,硬盘IO 读取压力的问题,我们可以做如下改进:1、为指定几种后缀的文件,在响应时添加Expires头和Cache-Control: max-age头。超时日期设置为1年。2、由于这是静态文件服务器,为所有请求,响应时返回Last-Modified头。3、为带If-Modified-Since的请求头,做日期检查,如果没有修改,则返回304。若修改,则返回文件。4、使用GZip压缩文件可以减少响应的大小,能够达到节省带宽的目的。