ThinkPHP5.1使用CDN加速-MISS缓存未命中解决

作者: 温新

分类: 【ThinkPHP】

阅读: 2445

时间: 2021-10-24 08:49:51

作者:温新

时间: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的优势就不言而喻了。

我是温新

每天进步一点点,就一点点

请登录后再评论