PassJava 小破站生產(chǎn)級(jí)事故,請(qǐng)放棄這個(gè) CDN 吧!
昨天讀者群里反饋我的網(wǎng)站 ??passjava.cn?
? 崩了,上去一看果然崩了。
原因就是我的網(wǎng)站引用了這個(gè)站點(diǎn) ??cdn.jsdelivr.net?
? 的靜態(tài)文件,而這個(gè)站點(diǎn)崩了!
它是一個(gè)國(guó)際的免費(fèi)的 CDN 站點(diǎn),很多公開的 npm 包、Github 倉(cāng)庫(kù),都可以使用它來作為靜態(tài)資源服務(wù)器,而且很多國(guó)內(nèi)和國(guó)外的知名網(wǎng)站都用了。
有些同學(xué)可能對(duì) CDN 不了解,這里做個(gè)說明:
內(nèi)容分發(fā)網(wǎng)絡(luò)(Content Delivery Network,CDN)通過將站點(diǎn)內(nèi)容發(fā)布至遍布全球的海量加速節(jié)點(diǎn),使其用戶可就近獲取所需內(nèi)容,避免因網(wǎng)絡(luò)擁堵、跨運(yùn)營(yíng)商、跨地域、跨境等因素帶來的網(wǎng)絡(luò)不穩(wěn)定、訪問延遲高等問題,有效提升下載速度、降低響應(yīng)時(shí)間,提供流暢的用戶體驗(yàn)。
這個(gè) CDN 是免費(fèi)的、速度又快,白嫖它誰(shuí)說不香呢?是真的嗎?
墨菲定律
我們生產(chǎn)環(huán)境前幾個(gè)月爆過一次雷,客戶反饋后臺(tái)管理系統(tǒng)崩了,也是因?yàn)橐眠@個(gè)站點(diǎn)的 JS 腳本文件加載不出來的問題。
恰巧前天晚上我其實(shí)也發(fā)現(xiàn)了這個(gè)站點(diǎn)訪問不了,但過了一個(gè)小時(shí)后就恢復(fù)訪問了。
但昨天下午讀者又反饋長(zhǎng)時(shí)間不能訪問,那這個(gè)就是生產(chǎn)級(jí) T0 的事故了。
這就是墨菲定律??!如果事情有變壞的可能,不管這種可能性有多小,它總會(huì)發(fā)生。
報(bào)錯(cuò)截圖如下所示:
遇到這種情況怎么辦?
關(guān)于修復(fù)方案
- 先安撫讀者情緒。
- 將問題原因用能聽懂的話描述出來。
- 提供一個(gè)修復(fù)方案。
- 提供修復(fù)完成的時(shí)間。
晚上回家后,我就趕緊開始修復(fù)了,其實(shí)修復(fù)方案也挺簡(jiǎn)單,就是把所有引用這個(gè) CDN 的靜態(tài)文件替換成一個(gè)可以訪問的鏈接就可以了。具體修復(fù)方案如下:
- 先將 cdn.jsdelivr.net 的靜態(tài)文件一個(gè)一個(gè)全部下載下來(瀏覽器直接輸入這個(gè)文件鏈接,然后保存下來)。我的網(wǎng)站上引用了 javascript 腳本、css 文件、json 文件。
- 然后將這些下載的靜態(tài)文件全部都放到自己的服務(wù)器或者 CDN 上。
- 替換自己的網(wǎng)站里面的鏈接。
這里有個(gè)問題:這個(gè)網(wǎng)站 cdn.jsdelivr.net 已經(jīng)崩了,如何能下載上面的靜態(tài)文件?
方案一:等網(wǎng)站恢復(fù)后再下載,不斷重試,有幾率一直訪問不了。
方案二:我已經(jīng)把我用到的靜態(tài)文件上傳到 GitHub 倉(cāng)庫(kù)了,如果你用的也是 docsify 框架搭建的網(wǎng)站,可以直接訪問這個(gè) Github 倉(cāng)庫(kù)下載。
關(guān)于 CDN
我個(gè)人是買了七牛云 CDN 服務(wù)和對(duì)象存儲(chǔ)的,網(wǎng)站流量不大,所以資費(fèi)不貴。首先把文件都丟到七牛云的對(duì)象存儲(chǔ)里面,然后拿到文件對(duì)應(yīng)的 CDN 地址,替換到自己的網(wǎng)站中。
注意:有些 js 腳本的代碼中也引用了 cdn.jsdelivr.net 的文件,所以還需要改 js 腳本代碼,比如我引用的 github 上的 autoload.js 文件里面就有。
如果沒有自己購(gòu)買 CDN 服務(wù),直接上傳到大廠商的對(duì)象存儲(chǔ)也行,比如七牛云、阿里、騰訊的對(duì)象存儲(chǔ),這幾家都提供了免費(fèi)的空間。上傳到自己的公開的對(duì)象存儲(chǔ)上之后,就可以拿到靜態(tài)文件的公有鏈接了。
如下圖所示,我上傳到了七牛云上面的對(duì)象存儲(chǔ)上了,同時(shí)七牛云會(huì)提供一個(gè) CDN 的鏈接給我。
另外需要注意的是如果覆蓋上傳了文件到自己的對(duì)象存儲(chǔ)后,則需要刷新下 CDN,不然網(wǎng)站加載的文件還是之前上傳的,導(dǎo)致網(wǎng)站上看不到改動(dòng)的效果。如下圖所示的刷新界面,填入刷新的目錄,點(diǎn)擊刷新就可以了,不過有刷新限制,不要頻繁刷新。
網(wǎng)站恢復(fù)
好了,經(jīng)過 2 個(gè)小時(shí)的緊急修復(fù):下載文件、修改 js 腳本、上傳文件、刷新 CDN、替換鏈接等一系列操作,我的小破站終于恢復(fù)正常了。趕緊在群里給讀者反饋網(wǎng)站恢復(fù)了。但問題是讀者們把我的這個(gè)月的績(jī)效扣沒了。。。
最后再說一句,我的小破站買的最低配的服務(wù)器,別給我的網(wǎng)站壓測(cè)了??,在此蟹蟹了??。
電腦端訪問:www.passjava.cn。