聲明:本文來自于微信公眾號InfoQ(ID:infoqchina),作者:Tina,授權(quán)轉(zhuǎn)載發(fā)布。
7月13日晚間,B 站因無法訪問登上熱搜榜。
昨天深夜,B 站出現(xiàn)訪問故障,無法打開,頁面提示加載失敗。除了網(wǎng)站和移動端顯示加載錯誤之外,B 站出品的輕視頻、剪輯軟件必剪等均無法打開,顯示頁面加載出錯。
一個網(wǎng)站的短暫崩潰,居然引起這么大的聲響?
公司2020年第三季度財報顯示,去年8月,B 站的月活用戶突破2億。最新數(shù)據(jù)則顯示,B 站月活用戶為2.23億,其中35歲及以下的月活用戶比重超過86%。
B 站故障之后,消息迅速擴散,“B 站崩了”沖上了各種熱搜榜。微博熱搜第一,知乎的提問下截至目前為止,總共有12727個回復(fù)。連朋友圈里,都被 B 站技術(shù)總監(jiān)分享過的“高可用架構(gòu)實踐”演講刷屏。
故障持續(xù)了一個多小時,同時崩潰的還有老牌二次元網(wǎng)站 AcFun(A 站)以及豆瓣、晉江,但豆瓣、A 站等很快就得以恢復(fù)了。
一個網(wǎng)站的“崩潰”,讓無數(shù)習(xí)慣了互聯(lián)網(wǎng)生活的人睡不著覺,也有不少網(wǎng)友一起幫忙分析到底是互聯(lián)網(wǎng)的哪個環(huán)節(jié)出了問題,甚至還因此驚動了消防局。
對于網(wǎng)傳“B 站崩了是因為有火情發(fā)生”,上海消防辟謠道:“經(jīng)了解,位于上海市政立路485號國正中心內(nèi)的嗶哩嗶哩彈幕網(wǎng) B 站(總部)未出現(xiàn)火情,未接到相關(guān)報警。具體情況以站方公布為準(zhǔn)。”
今年3月份,曾發(fā)生過數(shù)據(jù)中心失火造成360萬網(wǎng)站下線的事故,因此有人猜測是云海數(shù)據(jù)服務(wù)中心發(fā)生了火情,消防也對此表示了極大關(guān)注。
什么原因會導(dǎo)致網(wǎng)站宕機?
至14日凌晨2點15分,B 站所有功能均恢復(fù)正常。B 站官方7月14日凌晨發(fā)布消息稱,昨(7月13日)晚,B 站的部分服務(wù)器機房發(fā)生故障,造成無法訪問。技術(shù)團隊隨即進行了問題排查和修復(fù),現(xiàn)在服務(wù)已經(jīng)陸續(xù)恢復(fù)正常。
但是對于具體宕機原因,B 站并未作說明。InfoQ 聯(lián)系了 B 站相關(guān)技術(shù)人員詢問具體情況,截止發(fā)稿前仍然沒有得到答復(fù)。
對于網(wǎng)站宕機常見原因,開源基礎(chǔ)軟件公司 Zilliz 的質(zhì)量保障團隊負責(zé)人喬燕良認(rèn)為,主要可分為軟件服務(wù)引起的故障和硬件服務(wù)引起的故障。
軟件服務(wù)故障一般可理解為代碼邏輯缺陷,常見的是新增或更新某個功能而引入缺陷導(dǎo)致整個服務(wù)中斷;硬件服務(wù)故障一般是由于某些服務(wù)設(shè)備的損壞造成服務(wù)中斷,比如光纖被挖斷了。
互聯(lián)網(wǎng)服務(wù)中鏈路的每個環(huán)節(jié)都有可能導(dǎo)致問題發(fā)生,據(jù)另一位數(shù)據(jù)庫專家分析,因為這次 B 站主站都掛了,應(yīng)該和數(shù)據(jù)庫沒有關(guān)系;宕機發(fā)生的時候,通過技術(shù)分析,可以看出 CDN 查不到相關(guān)機房的數(shù)據(jù)。由此推測,B 站這次應(yīng)該屬于機房級別的故障,需要增強多機房容災(zāi)能力。
這次故障,對 B 站的影響不小,綜合損失應(yīng)該也不小,但如果去提升業(yè)務(wù)的連續(xù)性,還需要很大成本。常見的可用性通常以百分比表示,這也意味著高可用性不是絕對的。換句話說,100% 的可用性是不可能達到的,可用性從99.99% 提升到99.999%,每提升一個9,需要十倍百倍的成本。可用性的效果和開銷對應(yīng)的比例并不是線性增長的,每提高一點可用性,所花費的成本都會遠超之前。
雖然企業(yè)需要在這個非線性增加的成本和可用性之間進行權(quán)衡,但對于一些公司來講,肯定還會去嘗試獲得更多的 “9”,減少應(yīng)用的宕機時間,降低宕機成本。
如何用合適手段降低宕機風(fēng)險、提高服務(wù)的高可用呢?喬燕良認(rèn)為:“首先從架構(gòu)上,建議采用云原生架構(gòu),實現(xiàn)自動容錯機制和故障隔離,能夠在服務(wù)出現(xiàn)故障時快速遷移或回滾。對于網(wǎng)站來說,實現(xiàn)數(shù)據(jù)服務(wù)高可用的挑戰(zhàn)可能會比較突出,因為目前架構(gòu)下多數(shù)服務(wù)都是無狀態(tài)的、可以完成平滑遷移,而數(shù)據(jù)服務(wù)往往是有狀態(tài)的,云原生服務(wù)(如目前的一些云原生數(shù)據(jù)庫)通常具有很好的自動容錯、彈性伸縮、安全隔離等功能。其次為防止硬件故障類風(fēng)險,需要有完善的災(zāi)備方案。針對傳統(tǒng)服務(wù)架構(gòu)已經(jīng)有比較成熟的同城雙活和異地災(zāi)備方案,而基于云原生的高可用方案,比如 kubeadm 也已經(jīng)比較成熟,只是國內(nèi)企業(yè)在這塊投入比較‘節(jié)約’。”
就像人工智能無法替代人類一樣,目前的軟件仍然是不可完全信任的。我們的世界瞬息萬變,我們的軟件(包括人工智能)只是對世界當(dāng)前場景的理解和判斷,隨著時間的推進,某一時刻這些理解判斷的邏輯會出現(xiàn)不適用甚至錯誤。這一時刻何時到來、環(huán)境又會變得怎樣,將永遠是最不可預(yù)測的因素。