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