一次很意外的網(wǎng)站故障經(jīng)歷。
一次很意外的網(wǎng)站故障經(jīng)歷
大家好,我是魚皮。這個(gè)周末不太愉快,因?yàn)榻裉靹偲鸫裁悦院兀揖褪盏搅擞脩舴答佌f “魚皮,你的網(wǎng)站又打不開了!一直在加載!”
我直接精神了好吧!
首先我們來看下故障的具體表現(xiàn)。
故障表現(xiàn)
正常情況下,我的網(wǎng)站在 1 秒內(nèi)就加載完成了:
但故障發(fā)生時(shí),網(wǎng)站加載了近 30 秒才只加載了一個(gè) loading 轉(zhuǎn)圈圈:
但是等了一分多鐘,網(wǎng)站還是能加載完成的。所以看上去就像是網(wǎng)速不好、或者服務(wù)器帶寬不足。
然后我去看了下服務(wù)器的監(jiān)控面板,果然當(dāng)時(shí)服務(wù)器的帶寬基本上被打滿了!
如下圖,左側(cè)是正常的網(wǎng)絡(luò) IO 流量曲線,右側(cè)是網(wǎng)站故障時(shí)的流量曲線,明顯高了一大截:
好吧,肯定又是哪個(gè)小可愛在攻擊網(wǎng)站,模擬真實(shí)用戶在刷我的流量吧。已經(jīng)習(xí)以為常了,哪天沒攻擊我才覺得奇怪。。
為什么有攻擊網(wǎng)站的訪問就變慢了呢?
其實(shí)很好理解,如果把服務(wù)器網(wǎng)絡(luò)傳輸比作交通運(yùn)輸,路上如果都是肇事車輛,那么正常的車輛就難以通行了,只能一直堵著。而且惡性循環(huán),越來越堵。
結(jié)果看了下日志,發(fā)現(xiàn)服務(wù)器今天并沒有被攻擊的記錄,無論是 DDOS 還是 CC 攻擊都沒有。
看來攻擊者又整新活兒了啊,那難道是利用了某些漏洞?
算了,不瞎猜了,接下來我們看看攻擊者是攻擊了哪個(gè)程序,或者惡意頻繁訪問了哪個(gè)網(wǎng)站。
我們進(jìn)入服務(wù)器的終端控制臺,輸入 nethogs 命令,查看當(dāng)前服務(wù)器上每個(gè)進(jìn)程使用的網(wǎng)絡(luò)帶寬情況:
以下截圖是事后截的,數(shù)值和當(dāng)時(shí)不同
很容易就找出了是哪個(gè)進(jìn)程占用了大量的網(wǎng)絡(luò)帶寬(上圖第 1 個(gè)),進(jìn)程號為 2500。
然后使用 ps -ef | grep <pid> 命令查看 2500 進(jìn)程的信息,定位到具體是哪個(gè)項(xiàng)目,如下圖:
咦,kkdaxue?這是啥項(xiàng)目來著?
哦,想起來了,是我之前給 B 站幾百萬粉的知名校園 UP 主取景框看世界(以下簡稱框框)做的各專業(yè)建議網(wǎng)站 框框大學(xué),不過已經(jīng)很久沒有刻意維護(hù)了,網(wǎng)站也一直穩(wěn)定運(yùn)行。
為什么攻擊者會盯上這么一個(gè)免費(fèi)的公益網(wǎng)站呢?而且為什么這次攻擊沒有被攔截呢?
我百思不得其解。。。
正當(dāng)我犯愁時(shí),找我做網(wǎng)站的框框微信給我發(fā)了條消息,瞬間解決了我的疑惑。如下圖:
我又去看了下這個(gè)網(wǎng)站的監(jiān)控統(tǒng)計(jì),果然,這個(gè)網(wǎng)站今天短短幾小時(shí)的訪問量竟然比上周全天還多了 16 倍!
我滴媽呀,萬萬沒想到,這次竟然不是攻擊!而是真的有那么多用戶同時(shí)訪問網(wǎng)站!把我的大水管都撐爆了!
朋友們誰懂啊,被黑客攻擊了這么多次的我,第一次體會到了被真實(shí)用戶 “攻擊” 的感覺,真是哭笑不得。
處理方式
雖然用戶都是真實(shí)用戶,但由于這個(gè)服務(wù)器的總帶寬是有限的,如果繼續(xù)讓這個(gè)網(wǎng)站的流量消耗資源,還會影響服務(wù)器上其他項(xiàng)目的訪問,所以我只能選擇先把這個(gè)網(wǎng)站停掉了(反正大家也擠不進(jìn)去)。
于是,很多小伙伴又看到了熟悉的 “笑臉”:
那么如何解決呢?
帶寬不夠,那就加唄!增加服務(wù)器的帶寬是我直接能想到的最簡單粗暴的方式。
于是花了點(diǎn)小錢給服務(wù)器加了帶寬,相當(dāng)于水管變大了,應(yīng)該能容納更多用戶的同時(shí)訪問。
然后我就重新開啟了這個(gè)網(wǎng)站。但沒想到還是頂不住,網(wǎng)站又卡爆了、加載不出來。。。
那就只能再想其他解決方案了,加帶寬治標(biāo)不治本;而且又不能因?yàn)橛脩舳嗑拖蘖靼桑硐肭闆r下當(dāng)然希望所有人都能同時(shí)訪問。
所以我去找框框確認(rèn)下 “大概會有多少人同時(shí)訪問網(wǎng)站”,便于我評估方案:
結(jié)果我發(fā)現(xiàn)量級比我想的還要大。。。這個(gè)網(wǎng)站竟然登上了抖音上海同城榜的 第一 !!!
看來沒辦法了,只能用那個(gè)了。。。那個(gè)危險(xiǎn)但是牛皮的技術(shù)。。。
沒錯(cuò),就是 CDN!
因?yàn)榫W(wǎng)站主要的流量和帶寬資源占用在于前端網(wǎng)頁文件,所以 CDN 會比什么水平擴(kuò)容的容器技術(shù)更直接有效。
所謂 CDN(內(nèi)容分發(fā)網(wǎng)絡(luò)),是指把用戶要訪問的資源(比如網(wǎng)站文件)提前加載到離用戶較近的節(jié)點(diǎn)服務(wù)器上,這樣用戶需要訪問網(wǎng)站時(shí),不用只從我那一臺服務(wù)器去取,而是可以從不同的、較近的服務(wù)器節(jié)點(diǎn)訪問,不僅分散了原始服務(wù)器的壓力、也能提高用戶訪問速度。
使用 CDN 后,網(wǎng)站就能夠正常訪問了,理論上 人再多也不怕!
這么牛的技術(shù),為啥之前我不用呢?答案很簡單,CDN 要花 money,流量越大,花的越多。。。
所以不到萬不得已,我現(xiàn)在很不想用 CDN。畢竟本來框框大學(xué)就是免費(fèi)的,網(wǎng)站穩(wěn)定的情況下,能省則省。
好吧,整個(gè)事情就是這樣。最后也是希望我們開發(fā)的框框大學(xué)網(wǎng)站能夠給學(xué)弟妹們帶來幫助。雖然這次我是幕后的技術(shù)支持,但是仍然為框框的想法和工作點(diǎn)贊,并且為我們的作品感到驕傲,希望有更多前輩們可以在網(wǎng)站上留下您寶貴的經(jīng)驗(yàn)~
框框大學(xué):https://www.kkdaxue.com/
一張很有趣的截圖哈哈:
往期推薦
