某在线电影网站迁移kangle成功案例

原创
2012/12/11 07:29
阅读数 922

1.背景介绍

某在线电影网站(为了隐私,这里隐去名字和域名),随着访问量的上涨,之前使用IIS,其cpu经常性的100%,长期90%以上。网站访问打开奇慢,严重影响用户体验,业务发展碰到瓶颈。
相关信息:
alexa世界排名,三个月平均48000. 连接信息30秒内高锋5000.
windows 2008操作系统。
cpu Xeon L5320 1.86 双cpu,每cpu4核心,总共8核心cpu
内存: 8G

2.强制缓存

前段时间听说 kangle不错,购买一个kangle商业版(3.0.2)。测试性使用kangle,我们技术人员帮他做常规技术支持。做强制缓存,配置如下:

<response action='allow' >
           <table name='BEGIN'>
                  <chain  action='continue' >
                    <!--此规则是压缩网页-->
                    <acl_header header='content-type' regex='1'><![CDATA[text/ht*]]></acl_header>
                    <mark_response_flag   flagvalue='gzip,'></mark_response_flag>
                  </chain>
                  <chain  action='default' >
                         <!--强制缓存 1800秒-->
                         <mark_cache_control   max_age='1800' static='1'></mark_cache_control>
                  </chain>
          </table>
   </response>

发现cpu无法降下来。

3.移除随机参数

经过我们的分析,进入kangle web控制平台http://ip:3311/,点连接信息,发现连接内有大量的如下的url:
  1. /plugins/rating/config.xml?0.8560413579778041(此为随机数)
  2. /public/js/looking.js?_=1354929049203(此为随机数)
复制代码
分析原因其url中使用了随机数,严重影响缓存命中率。强制缓存基本无效。

换用kangle 3.1.4 kangle 3.1中新增remove_param可以移除url中的一些参数。对付这种情况。
在请求控制(request)中的BEGIN表中增加一条规则链.如下配置:
<request action='vhs'>
       <table name='BEGIN'>
          <chain  action='continue'  name='移除随机,提高缓存命中'>
            <mark_remove_param  params='((0\.)|(rand)|(_))' raw='0' nc='1'>
            </mark_remove_param>
          </chain>
        </table>
    </request>

重起kangle后,cpu终于下来了。强制缓存有效.

4.优化搜索

测试过两天,用户满意,正式迁移到kangle后,发现cpu还是很高,90%以上。其中mysql占到90%以上。整站都无法打开。
点连接信息,发现有大量的类型如下连接:

/?keyword=关键词
询问用户,是其网站的搜索电影服务。经查询用户的php代码,得知搜索是使用mysql的like算法,非常消耗资源。
经我们建议,把搜索服务独立一个虚拟主机,使用一个单独的域名,这样我们对搜索的虚拟主机设置一个单独的工作者。
我们仅设置为2个工作者。其cpu终于降下来,到10%左右。搜索也正常。
分析原因是搜索消耗cpu,就像堵车,谁都想走,结果谁都走不了。把它设置为最大工作数为2,搜索就会排队,效果反而更好。不堵了,效率更高。

5.缓存命中统计

我们使用商业版的缓存命中统计,其主站缓存命中率在95%,搜索缓存命中率在91%。
cpu维持一个较低的水平(10%),用户非常满意,我们也惊叹kangle的效果。

6.案例启示:

1.用好kangle的强制缓存,会收到奇效。
2.使用remove_param模块,移除一些随机参数,提高缓存命中率。
3.对于一些消耗资源的服务,可以独立一个虚拟主机,使用独立工作者,使其不影响到其它服务。
4.工作数不是越多越好,也不是越少越好,适合的才是最好。
展开阅读全文
打赏
0
6 收藏
分享
加载中

引用来自“苗哥”的评论

工作者是個什么概念,怎么看不明白,是两台分布式的服务器……?
类似apache的worker。
2015/03/11 16:31
回复
举报
keengo博主

引用来自“苗哥”的评论

工作者是個什么概念,怎么看不明白,是两台分布式的服务器……?

可以理解为php进程数。
2013/12/21 07:00
回复
举报
工作者是個什么概念,怎么看不明白,是两台分布式的服务器……?
2013/12/20 22:50
回复
举报
yeah
www.tianfutv.net
2013/04/25 17:47
回复
举报
更多评论
打赏
4 评论
6 收藏
0
分享
在线直播报名
返回顶部
顶部