查看原文
其他

一次很意外的网站故障经历。

鱼皮 程序员鱼皮 2024-01-21

一次很意外的网站故障经历

大家好,我是鱼皮。这个周末不太愉快,因为今天刚起床迷迷糊糊地,我就收到了用户反馈说 “鱼皮,你的网站又打不开了!一直在加载!”

我直接精神了好吧!

首先我们来看下故障的具体表现。

故障表现

正常情况下,我的网站在 1 秒内就加载完成了:

但故障发生时,网站加载了近 30 秒才只加载了一个 loading 转圈圈:

但是等了一分多钟,网站还是能加载完成的。所以看上去就像是网速不好、或者服务器带宽不足。

然后我去看了下服务器的监控面板,果然当时服务器的带宽基本上被打满了!

如下图,左侧是正常的网络 IO 流量曲线,右侧是网站故障时的流量曲线,明显高了一大截:

好吧,肯定又是哪个小可爱在攻击网站,模拟真实用户在刷我的流量吧。已经习以为常了,哪天没攻击我才觉得奇怪。。

为什么有攻击网站的访问就变慢了呢?

其实很好理解,如果把服务器网络传输比作交通运输,路上如果都是肇事车辆,那么正常的车辆就难以通行了,只能一直堵着。而且恶性循环,越来越堵。

结果看了下日志,发现服务器今天并没有被攻击的记录,无论是 DDOS 还是 CC 攻击都没有。

看来攻击者又整新活儿了啊,那难道是利用了某些漏洞?

算了,不瞎猜了,接下来我们看看攻击者是攻击了哪个程序,或者恶意频繁访问了哪个网站。

我们进入服务器的终端控制台,输入 nethogs 命令,查看当前服务器上每个进程使用的网络带宽情况:

以下截图是事后截的,数值和当时不同

很容易就找出了是哪个进程占用了大量的网络带宽(上图第 1 个),进程号为 2500。

然后使用 ps -ef | grep <pid> 命令查看 2500 进程的信息,定位到具体是哪个项目,如下图:

咦,kkdaxue?这是啥项目来着?

哦,想起来了,是我之前给 B 站几百万粉的知名校园 UP 主取景框看世界(以下简称框框)做的各专业建议网站 框框大学,不过已经很久没有刻意维护了,网站也一直稳定运行。

为什么攻击者会盯上这么一个免费的公益网站呢?而且为什么这次攻击没有被拦截呢?

我百思不得其解。。。

正当我犯愁时,找我做网站的框框微信给我发了条消息,瞬间解决了我的疑惑。如下图:

我又去看了下这个网站的监控统计,果然,这个网站今天短短几小时的访问量竟然比上周全天还多了 16 倍!

我滴妈呀,万万没想到,这次竟然不是攻击!而是真的有那么多用户同时访问网站!把我的大水管都撑爆了!

朋友们谁懂啊,被黑客攻击了这么多次的我,第一次体会到了被真实用户 “攻击” 的感觉,真是哭笑不得。

处理方式

虽然用户都是真实用户,但由于这个服务器的总带宽是有限的,如果继续让这个网站的流量消耗资源,还会影响服务器上其他项目的访问,所以我只能选择先把这个网站停掉了(反正大家也挤不进去)。

于是,很多小伙伴又看到了熟悉的 “笑脸”:

那么如何解决呢?

带宽不够,那就加呗!增加服务器的带宽是我直接能想到的最简单粗暴的方式。

于是花了点小钱给服务器加了带宽,相当于水管变大了,应该能容纳更多用户的同时访问。

然后我就重新开启了这个网站。但没想到还是顶不住,网站又卡爆了、加载不出来。。。

那就只能再想其他解决方案了,加带宽治标不治本;而且又不能因为用户多就限流吧,理想情况下当然希望所有人都能同时访问。

所以我去找框框确认下 “大概会有多少人同时访问网站”,便于我评估方案:

结果我发现量级比我想的还要大。。。这个网站竟然登上了抖音上海同城榜的 第一 !!!

看来没办法了,只能用那个了。。。那个危险但是牛皮的技术。。。

没错,就是 CDN!

因为网站主要的流量和带宽资源占用在于前端网页文件,所以 CDN 会比什么水平扩容的容器技术更直接有效。

所谓 CDN(内容分发网络),是指把用户要访问的资源(比如网站文件)提前加载到离用户较近的节点服务器上,这样用户需要访问网站时,不用只从我那一台服务器去取,而是可以从不同的、较近的服务器节点访问,不仅分散了原始服务器的压力、也能提高用户访问速度。

CDN 原理图

使用 CDN 后,网站就能够正常访问了,理论上 人再多也不怕!

这么牛的技术,为啥之前我不用呢?答案很简单,CDN 要花 money,流量越大,花的越多。。。

所以不到万不得已,我现在很不想用 CDN。毕竟本来框框大学就是免费的,网站稳定的情况下,能省则省。



好吧,整个事情就是这样。最后也是希望我们开发的框框大学网站能够给学弟妹们带来帮助。虽然这次我是幕后的技术支持,但是仍然为框框的想法和工作点赞,并且为我们的作品感到骄傲,希望有更多前辈们可以在网站上留下您宝贵的经验~

框框大学:https://www.kkdaxue.com/

一张很有趣的截图哈哈:

往期推荐

看完这个,我直接把 SQL 刷通了!

实习天天crud,很迷茫...

我入伙了!

千万千万不要在方法上打断点!太坑了!

手写 OJ 系统,真的很难么?

被字节拷打了!基础还是太重要了...

继续滑动看下一个

一次很意外的网站故障经历。

鱼皮 程序员鱼皮
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存