一次很意外的网站故障经历
大家好,我是鱼皮。这个周末不太愉快,因为今天刚起床迷迷糊糊地,我就收到了用户反馈说 “鱼皮,你的网站又打不开了!一直在加载!”
我直接精神了好吧!
首先我们来看下故障的具体表现。
正常情况下,我的网站在 1 秒内就加载完成了:
但故障发生时,网站加载了近 30 秒才只加载了一个 loading 转圈圈:
但是等了一分多钟,网站还是能加载完成的。所以看上去就像是网速不好、或者服务器带宽不足。
然后我去看了下服务器的监控面板,果然当时服务器的带宽基本上被打满了!
如下图,左侧是正常的网络 IO 流量曲线,右侧是网站故障时的流量曲线,明显高了一大截:
好吧,肯定又是哪个小可爱在攻击网站,模拟真实用户在刷我的流量吧。已经习以为常了,哪天没攻击我才觉得奇怪。。
为什么有攻击网站的访问就变慢了呢?
其实很好理解,如果把服务器网络传输比作交通运输,路上如果都是肇事车辆,那么正常的车辆就难以通行了,只能一直堵着。而且恶性循环,越来越堵。
结果看了下日志,发现服务器今天并没有被攻击的记录,无论是 DDOS 还是 CC 攻击都没有。
看来攻击者又整新活儿了啊,那难道是利用了某些漏洞?
算了,不瞎猜了,接下来我们看看攻击者是攻击了哪个程序,或者恶意频繁访问了哪个网站。
我们进入服务器的终端控制台,输入 nethogs
命令,查看当前服务器上每个进程使用的网络带宽情况:
以下截图是事后截的,数值和当时不同
很容易就找出了是哪个进程占用了大量的网络带宽(上图第 1 个),进程号为 2500。
然后使用 ps -ef | grep <pid>
命令查看 2500 进程的信息,定位到具体是哪个项目,如下图:
咦,kkdaxue?这是啥项目来着?
哦,想起来了,是我之前给 B 站几百万粉的知名校园 UP 主取景框看世界(以下简称框框)做的各专业建议网站 框框大学
,不过已经很久没有刻意维护了,网站也一直稳定运行。
为什么攻击者会盯上这么一个免费的公益网站呢?而且为什么这次攻击没有被拦截呢?
我百思不得其解。。。
正当我犯愁时,找我做网站的框框微信给我发了条消息,瞬间解决了我的疑惑。如下图:
我又去看了下这个网站的监控统计,果然,这个网站今天短短几小时的访问量竟然比上周全天还多了 16 倍!
我滴妈呀,万万没想到,这次竟然不是攻击!而是真的有那么多用户同时访问网站!把我的大水管都撑爆了!
朋友们谁懂啊,被黑客攻击了这么多次的我,第一次体会到了被真实用户 “攻击” 的感觉,真是哭笑不得。
虽然用户都是真实用户,但由于这个服务器的总带宽是有限的,如果继续让这个网站的流量消耗资源,还会影响服务器上其他项目的访问,所以我只能选择先把这个网站停掉了(反正大家也挤不进去)。
于是,很多小伙伴又看到了熟悉的 “笑脸”:
那么如何解决呢?
带宽不够,那就加呗!增加服务器的带宽是我直接能想到的最简单粗暴的方式。
于是花了点小钱给服务器加了带宽,相当于水管变大了,应该能容纳更多用户的同时访问。
然后我就重新开启了这个网站。但没想到还是顶不住,网站又卡爆了、加载不出来。。。
那就只能再想其他解决方案了,加带宽治标不治本;而且又不能因为用户多就限流吧,理想情况下当然希望所有人都能同时访问。
所以我去找框框确认下 “大概会有多少人同时访问网站”,便于我评估方案:
结果我发现量级比我想的还要大。。。这个网站竟然登上了抖音上海同城榜的 第一!!!
看来没办法了,只能用那个了。。。那个危险但是牛皮的技术。。。
没错,就是 CDN!
因为网站主要的流量和带宽资源占用在于前端网页文件,所以 CDN 会比什么水平扩容的容器技术更直接有效。
所谓 CDN(内容分发网络),是指把用户要访问的资源(比如网站文件)提前加载到离用户较近的节点服务器上,这样用户需要访问网站时,不用只从我那一台服务器去取,而是可以从不同的、较近的服务器节点访问,不仅分散了原始服务器的压力、也能提高用户访问速度。
使用 CDN 后,网站就能够正常访问了,理论上人再多也不怕!
这么牛的技术,为啥之前我不用呢?答案很简单,CDN 要花 money,流量越大,花的越多。。。
所以不到万不得已,我现在很不想用 CDN。毕竟本来框框大学就是免费的,网站稳定的情况下,能省则省。
好吧,整个事情就是这样。最后也是希望我们开发的框框大学网站能够给学弟妹们带来帮助。虽然这次我是幕后的技术支持,但是仍然为框框的想法和工作点赞,并且为我们的作品感到骄傲,希望有更多前辈们可以在网站上留下您宝贵的经验~
框框大学:/
一张很有趣的截图哈哈:
往期推荐
关键词: