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

从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引流的论坛使用了一个什么牛逼的服务器呢?

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

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术翻译

Kubernetes,Kafka事件采购架构模式和用例示例

随着当今业务和技术的快速变化,开发人员,数据科学家和IT运营部门正在共同构建具有新技术和动态架构的智能应用程序,因为它们具有灵活性,交付速度和可维护性。这篇文章...

1532
来自专栏Bug生活2048

告别单调工作系列——利用python「拯救」漂亮妹子

在进入正题前想聊下这位漂亮妹子「不要想多了,只是聊聊漂亮妹子的工作」,这位妹子虽然苦恼,但她做这样的事情已经一年多了,可谓毅力可嘉,有时候我就会觉得很奇怪,为什...

842
来自专栏后端技术探索

LinkedIn 架构这十年

2003年是LinkedIn元年,公司成立的目标是连接你的个人人脉以获得更好的的工作机会。上线第一周才有2700个会员注册,时光飞梭,LinkedIn的产品、会...

951
来自专栏互联网高可用架构

互联网性能与容量评估的方法论和典型案例5 性能评估参考标准

4064
来自专栏公有云的互联网缓存与存储

什么时候应该用cdn

导语:这篇文章面向是cdn的首次使用者,什么叫首次使用者,就是对cdn完全不了解,对http也不怎么了解的同学。那么大神的读者,也希望您能瞄一下小弟的文章,看看...

64315
来自专栏乐沙弥的世界

DBA 的那些事

      说起DBA,全称是Database Administrator,不是Doctor of Business Administration,千万不要误解...

1110
来自专栏数据和云

对话张冬洪 | 全面解读NoSQL数据库Redis的核心技术与应用实践

互联网和Web的蓬勃发展正在改变着我们的世界,随着互联网的不断发展和壮大,企业数据规模越来越大,并发量越来越高,关系数据库无法应对新的负载压力,随着Hadoop...

3315
来自专栏H2Cloud

H2Engine服务器引擎介绍

H2Engine服务器引擎介绍 简介   H2Engine服务器引擎架构是轻量级的,与其说是引擎,个人觉得称之为平台更为合适。因为它封装的功能非常精简,但是提供...

5038
来自专栏SEO

Google新动作:处理重复内容

31110
来自专栏腾讯云安全的专栏

授权登录的安全短板——[移动 APP 安全揭秘]第二期

1764

扫码关注云+社区