ThinkPHP5.1使用CDN加速-MISS缓存未命中解决
作者:温新
时间:2021-10-24
什么要使用CDN
“cdn简介 CDN的全称是Content Delivery Network,即内容分发网络。
为什么使用CDN
CDN就近节点访问,提高了网站加载速度,降低延时;能起到分流作用,减轻服务器负载,
使用动静分离提高网站访问速度。
配置实现
这个呢,我是部署在了生产环境,实际测试大并发高流量处理,当然了,也有很多的不足。
环境
服务器:腾讯云
系统:CentOS7
框架:ThinkPHP5.1
使用阿里云OSS+CDN并配置缓存
当然还要有经过备案的域名。
关于怎么使用阿里云OSS对象存储系统,Laravel6.x上传视频到阿里云Oss对象存储 这篇文章记录过。
bucket创建完成后,可以在列表中看到 '阿里云 CDN 加速',点击这个进行相关的CDN操作,配置完后需要在域名中进行解析。
问题
在单独给首页配置CDN加速后,出现了X-Cache: MISS TCP_MISS dirn:-2:-2
,MISS也就是缓存没有被命中。这个问题不是配置错了,而框架问题。
解决方法如下:
第一步:public/index.php
读取/设置缓存限制器
<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"><?</span><span style="box-sizing: border-box;color: rgb(130, 177, 255)">php</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(199, 146, 234)">namespace</span> <span style="box-sizing: border-box">think</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(84, 110, 122)">// 设置缓存限制</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(222, 203, 107)">session_cache_limiter</span>(<span style="box-sizing: border-box;color: rgb(195, 232, 141)">'public'</span>);</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(199, 146, 234)">require</span> <span style="box-sizing: border-box;color: rgb(247, 118, 105)">__DIR__</span> . <span style="box-sizing: border-box;color: rgb(195, 232, 141)">'/../thinkphp/base.php'</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(130, 177, 255)">Container</span>::<span style="box-sizing: border-box;color: rgb(130, 177, 255)">get</span>(<span style="box-sizing: border-box;color: rgb(195, 232, 141)">'app'</span>)<span style="box-sizing: border-box">-></span><span style="box-sizing: border-box;color: rgb(130, 177, 255)">run</span>()<span style="box-sizing: border-box">-></span><span style="box-sizing: border-box;color: rgb(130, 177, 255)">send</span>();</span>
第二步:开启请求缓存
<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(84, 110, 122)">// 文件位置: config/app.php</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(195, 232, 141)">'request_cache'</span> <span style="box-sizing: border-box">=></span> <span style="box-sizing: border-box;color: rgb(247, 118, 105)">true</span>,</span>
ab压测
如下压测是经过了CDN+OSS之后的结果,可以看到qps
可以达到573
<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box">$ ab</span> <span style="box-sizing: border-box;color: rgb(255, 203, 107)">-c100</span> <span style="box-sizing: border-box;color: rgb(255, 203, 107)">-n1000</span> 你的页面URL</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">This is ApacheBench, Version <span style="box-sizing: border-box;color: rgb(247, 118, 105)">2</span>.3 <<span style="box-sizing: border-box">$Revision</span>: <span style="box-sizing: border-box;color: rgb(247, 118, 105)">1430300</span> <span style="box-sizing: border-box">$></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Copyright <span style="box-sizing: border-box;color: rgb(247, 118, 105)">1996</span> Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Licensed to The Apache Software Foundation, http://www.apache.org/</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Benchmarking miaosha.nikexu.com (be patient)</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Completed <span style="box-sizing: border-box;color: rgb(247, 118, 105)">100</span> requests</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Completed <span style="box-sizing: border-box;color: rgb(247, 118, 105)">200</span> requests</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Completed <span style="box-sizing: border-box;color: rgb(247, 118, 105)">300</span> requests</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Completed <span style="box-sizing: border-box;color: rgb(247, 118, 105)">400</span> requests</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Completed <span style="box-sizing: border-box;color: rgb(247, 118, 105)">500</span> requests</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Completed <span style="box-sizing: border-box;color: rgb(247, 118, 105)">600</span> requests</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Completed <span style="box-sizing: border-box;color: rgb(247, 118, 105)">700</span> requests</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Completed <span style="box-sizing: border-box;color: rgb(247, 118, 105)">800</span> requests</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Completed <span style="box-sizing: border-box;color: rgb(247, 118, 105)">900</span> requests</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Completed <span style="box-sizing: border-box;color: rgb(247, 118, 105)">1000</span> requests</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Finished <span style="box-sizing: border-box;color: rgb(247, 118, 105)">1000</span> requests</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> </span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Server Software: Tengine</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Server Hostname: miaosha.nikexu.com</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Server Port: <span style="box-sizing: border-box;color: rgb(247, 118, 105)">80</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Document Path: /</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Document Length: <span style="box-sizing: border-box;color: rgb(247, 118, 105)">774</span> bytes</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Concurrency Level: <span style="box-sizing: border-box;color: rgb(247, 118, 105)">100</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Time taken <span style="box-sizing: border-box;color: rgb(199, 146, 234)">for</span> tests: <span style="box-sizing: border-box;color: rgb(247, 118, 105)">1</span>.745 seconds</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Complete requests: <span style="box-sizing: border-box;color: rgb(247, 118, 105)">1000</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Failed requests: <span style="box-sizing: border-box;color: rgb(247, 118, 105)">0</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Write errors: <span style="box-sizing: border-box;color: rgb(247, 118, 105)">0</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Total transferred: <span style="box-sizing: border-box;color: rgb(247, 118, 105)">1403829</span> bytes</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">HTML transferred: <span style="box-sizing: border-box;color: rgb(247, 118, 105)">774000</span> bytes</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Requests per second: <span style="box-sizing: border-box;color: rgb(247, 118, 105)">573</span>.16 [<span style="box-sizing: border-box;color: rgb(84, 110, 122)">#/sec] (mean)</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Time per request: <span style="box-sizing: border-box;color: rgb(247, 118, 105)">174</span>.472 [ms] (mean)</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Time per request: <span style="box-sizing: border-box;color: rgb(247, 118, 105)">1</span>.745 [ms] (mean, across all concurrent requests)</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Transfer rate: <span style="box-sizing: border-box;color: rgb(247, 118, 105)">785</span>.76 [Kbytes/sec] received</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Connection Times (ms)</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> min mean[<span style="box-sizing: border-box">+</span>/-sd] median max</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Connect: <span style="box-sizing: border-box;color: rgb(247, 118, 105)">15</span> <span style="box-sizing: border-box;color: rgb(247, 118, 105)">17</span> <span style="box-sizing: border-box;color: rgb(247, 118, 105)">1</span>.5 <span style="box-sizing: border-box;color: rgb(247, 118, 105)">16</span> <span style="box-sizing: border-box;color: rgb(247, 118, 105)">25</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Processing: <span style="box-sizing: border-box;color: rgb(247, 118, 105)">18</span> <span style="box-sizing: border-box;color: rgb(247, 118, 105)">91</span> <span style="box-sizing: border-box;color: rgb(247, 118, 105)">113</span>.4 <span style="box-sizing: border-box;color: rgb(247, 118, 105)">71</span> <span style="box-sizing: border-box;color: rgb(247, 118, 105)">1195</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Waiting: <span style="box-sizing: border-box;color: rgb(247, 118, 105)">18</span> <span style="box-sizing: border-box;color: rgb(247, 118, 105)">90</span> <span style="box-sizing: border-box;color: rgb(247, 118, 105)">113</span>.4 <span style="box-sizing: border-box;color: rgb(247, 118, 105)">71</span> <span style="box-sizing: border-box;color: rgb(247, 118, 105)">1195</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Total: <span style="box-sizing: border-box;color: rgb(247, 118, 105)">36</span> <span style="box-sizing: border-box;color: rgb(247, 118, 105)">107</span> <span style="box-sizing: border-box;color: rgb(247, 118, 105)">113</span>.4 <span style="box-sizing: border-box;color: rgb(247, 118, 105)">87</span> <span style="box-sizing: border-box;color: rgb(247, 118, 105)">1212</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Percentage of the requests served within a certain time (ms)</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(247, 118, 105)">50</span>% <span style="box-sizing: border-box;color: rgb(247, 118, 105)">87</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(247, 118, 105)">66</span>% <span style="box-sizing: border-box;color: rgb(247, 118, 105)">99</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(247, 118, 105)">75</span>% <span style="box-sizing: border-box;color: rgb(247, 118, 105)">103</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(247, 118, 105)">80</span>% <span style="box-sizing: border-box;color: rgb(247, 118, 105)">105</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(247, 118, 105)">90</span>% <span style="box-sizing: border-box;color: rgb(247, 118, 105)">120</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(247, 118, 105)">95</span>% <span style="box-sizing: border-box;color: rgb(247, 118, 105)">195</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(247, 118, 105)">98</span>% <span style="box-sizing: border-box;color: rgb(247, 118, 105)">437</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(247, 118, 105)">99</span>% <span style="box-sizing: border-box;color: rgb(247, 118, 105)">834</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(247, 118, 105)">100</span>% <span style="box-sizing: border-box;color: rgb(247, 118, 105)">1212</span> (longest request)</span>
在来看看500个并发的压测。
<span style="box-sizing: border-box;padding-right: 0.1px">ab -c500 -n10000 你的页面URL</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Requests per second: 965.61 [#/sec] (mean)</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Time per request: 517.806 [ms] (mean)</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Time per request: 1.036 [ms] (mean, across all concurrent requests)</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">Percentage of the requests served within a certain time (ms)</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> 50% 257</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> 66% 319</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> 75% 541</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> 80% 1043</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> 90% 1102</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> 95% 1281</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> 98% 1560</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> 99% 1821</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> 100% 3771 (longest request)</span>
通过这个两个手段,已经可以看到还并发量提供,500的并发量,80%的用户可以在1s左右打开。在没有使用CDN+OSS前,我压测的结果是 150的并发,CPU就冲到了90%。使用OSS+CDN的优势就不言而喻了。
我是温新
每天进步一点点,就一点点
请登录后再评论