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