没有扩容机器,抗住了70多倍的流量增长

258 阅读5分钟

欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~

作者:黄希彤 ,腾讯云专家工程师

从2012年开始,我们就吧腾讯公司内各个业务的404页面导流给宝贝回家,从2013年开始,我们更开放了404寻亲接入给第三方网站。这些导流给宝贝回家论坛带来了巨大的访问压力,于是我们又把宝贝回家的论坛服务器迁移到腾讯云上面来提供更稳定的服务。一晃块4年了。

国庆上班,宝贝回家的志愿者开始说网站好像有点慢了,再后来说网站打不开了。登录服务器一看log,访问量增长的有点厉害啊,疑似CC攻击,打开了各种防护,流量还是居高不下。只好赶快把弹性伸缩打开,在机器扛不住的时候迅速扩容扛过去。

(弹性伸缩是程序员和运维最好的朋友之一)

接着又找运维和安全的兄弟帮忙分析log,分析不出所以然,但是看到头像的请求量明显暴涨了数百倍,占据了log的大头,于是对头像的请求进行了分流,把头像都转向到CDN透传来缓解压力。但是CDN无法缓存用户没有设置头像(404)的情况,于是又修改了服务器配置,支持“软404”,也就是说在找不到头像的时候用默认头像通过200的方式返回,避免404。

这样折腾了一通以后,访问量终于降下来了,重新分析log,发现新增了数十倍的访问量,几乎全部来自于安卓手机。这时突然想起一件事。国庆前内部有个小群,在讨论把“QQ浏览器”的失败页面指向寻亲项目的事。当时也没上心,因为按照百度统计,QQ浏览器在国内的也就不到10%的市场份额,估计应该不会给项目带来太大的流量冲击。莫非,当时大家讨论的其实不是“QQ浏览器”而是“X5内核”?

X5是腾讯的移动端浏览器内核,被广泛应用在微信、手机QQ等腾讯的安卓客户端上。回到国庆前的群里面一问,果然不小心招来了这个大客户。这个客户有多大呢,也就比微信和手机QQ加起来大一些,没有意外的话就是全国最大了

有流量是好事,但是寻亲项目是个公益项目,没有提前准备好这么多预算啊……还是先从技术上想办法吧,谁让我们是专业志愿者呢?

1 先检查头像流量异常暴涨的问题:为什么页面访问量增长数十倍,头像的访问量增长了数百倍呢?对比分析了discuz的移动端和PC段页面后很快找到了原因:discuz论坛打开一个帖子的时候会显示所有评论者的头像,因此头像的访问量本来应该是帖子访问量的十几倍到几十倍。但是discuz对于PC端的头像加载采用了链接静态化、懒加载等优化手段,配合协议缓存大大减少了头像的访问量,而移动端没有做这些优化。

移动端的头像没有做链接静态化和懒加载

知道原因就好办了,在template/default/touch/forum/viewthread.htm中把

<span class="avatar"><img src="<!--{if !$post['authorid'] || $post['anonymous']}--><!--{avatar(0, small, true)}--><!--{else}--><!--{avatar($post[authorid], small, true)}--><!--{/if}-->" style="width:32px;height:32px;" /></span>

改为

<span class="avatar" style="zoom:0.62">
	   	<!--{if !$post['authorid'] || $post['anonymous']}--><!--{avatar(0, small, false, false, true)}--><!--{else}--><!--{avatar($post[authorid], small, false, false, true)}--><!--{/if}-->

沿用了PC端的头像链接生成方式。但是PC端的头像尺寸比移动端大一些,所以做了个zoom。

但是这样做完,服务器流量并没有降下来……因为头像被CDN全面分流以后,帖子的访问能力被释放出来了,现在访问论坛的帖子成了主要压力来源。

Discuz的论坛帖子是可以做伪静态化的,但是不能支持真静态化。有几个原因:如果访客是带着登录态来的,那么应该给他显示个性化的动态数;统一个链接如果由PC、手机、pad和WAP终端访问,应该返回各自对应的版本。因此discuz主要靠服务器缓存机制而不是静态化来扛压力。

但是分析一下用户场景就能发现在现状下其实是有很大的优化余地的:超过90%的用户都是由X5引流的其他app的用户,基本上不会论坛的注册用户,显示设备就是安卓手机,不用过多考虑多种设备的兼容问题。

因此我们把寻亲页面导流导一个独立的域名 404.baobeihuijia.com上,这个域名通过CDN来带cache透传论坛帖子,并利用discuz的伪静态化链接来实现真静态化。而对于终端兼容的问题要做两件事: a:修改后台php,识别到通过404.baobeihuijia.com域名访问的情况下,总是返回移动手机版本的帖子 b:在静态化的帖子的页面脚本上监测用户客户端。当发现当前用户其实不是移动终端的时候,用脚本调回到原来的域名bbs.baobeihuijia.com上提供动态服务。

做了这些事情以后,CDN吧绝大多数的新增压力分流走了:,静态

优化后虽然服务器负载还是比以前重了很多,但是已经可以用一台服务器扛起来了

那么最终这个抗住了X5引流的论坛使用了一个什么牛逼的服务器呢?

为啥配置这么低呢?谁叫这腾讯云的服务器这么能扛啊~~~

##阅读推荐

一站式满足电商节云计算需求的秘诀 基于空闲资源的弹性计算实践 如果在护卫神镜像中安装 SQL SERVER?

此文已由作者授权腾讯云技术社区发布,转载请注明文章出处 原文链接: https://cloud.tencent.com/community/article/271724