nginx cache 调研过程

一 、调研过程:

选择fastcgi_cache做页面缓存之前,选定了ngx_srcache , lua-resty-cache  和fastcgi_cache这三个做对比 ,ngx_srcache , lua-resty-cache  这两个是lua 写的nginx 扩展(都是upstream 到redis 进行存储)。可能是走网络存储的原因,lua版的在Jmeter压测后,TPS 达到 400/sec就上不去了。而fastcgi_cache则在1000/sec 浮动。

这三个cache 都有一个我们比较棘手的问题,就是cookie管理问题。(fastcgi_cache,ngx_srcache 会缓存住response的set-cookie ,而 lua-resty-cache则会清空)。想到的解决方案:

1、开始想的解决方案,把需要种的Cookie 用独立的接口封装起来,当nginx 接收到请求的时候,用lua的ngx.location.capture 同步发起subrequest ,同步返回。初步实践后,发现效果不尽人意。所以放弃了

2、通过js 异步去请求cookie 接口。但是这无疑又引来了新的请求。

老板们说马上打广告了,流量会飞涨。基于性能上和时间上的考虑,我们决定选择了fastcgi_cache这个来解决燃眉之急。 所以,我们目前只选择了首页和详情页,这两个目前并不太关心cookie的页面进行缓存。目前只缓存5min。

eg;  xxx

二、遇到的问题:

在过程中,由于对C端代码了解不多,只区分了pc 和wap ,并没有区分wap 和app的,所以造成第一次上一台机器的时候发现,wap 和app有样式冲突。后来在nginx 配置里进行了区分。

三、原理和缓存策略可见wiki:

看上一篇

四、前后数据对比:

根据分析nginx access log统计, 命中概率: 缓存请求 / 请求总量 = 39% 左右。因为异步请求的接口访问量太大。所以造成负载的降低并不是太明显。

所以只从响应时间的维度来分析:

1、具体接口的响应时间:

首页www/fyc

cache 前50ms

cache后0 ~20ms

相比较,响应时间 缩减了 最低60 %

如下图:

nginx cache 调研过程_第1张图片

2、 全量平均响应:

cache 前60ms

cache后20ms ~ 30ms

相比较,响应时间  缩减了 50 %

如下图:

nginx cache 调研过程_第2张图片

以上都是根据C端机器 进行的分析。

你可能感兴趣的:(nginx cache 调研过程)