本報(bào)記者 任曉寧 北京報(bào)道
微信為什么沒崩過?
12億中國人都在使用微信,卻很少有人思考過這個(gè)問題。其實(shí),微信也曾徘徊在瀕臨崩潰的邊緣,騰訊基礎(chǔ)架構(gòu)部運(yùn)營管理支撐中心總監(jiān)鄒方明現(xiàn)在還記得2014年除夕,人們剛學(xué)會(huì)用微信發(fā)拜年視頻,流量直接爆掉,系統(tǒng)瀕臨崩盤,公司上下所有人的壓力都集中到他一個(gè)人身上,等他做出決定。他說,那是他最痛苦的時(shí)刻。
直到現(xiàn)在,在微信使用量最大的時(shí)刻,比如除夕,或是元旦、七夕、中秋,或是情人節(jié),騰訊團(tuán)隊(duì)也會(huì)提前幾個(gè)月籌備資源。前幾年的高峰期,負(fù)責(zé)騰訊紅包系統(tǒng)運(yùn)維的肖攀甚至?xí)菀幌翾Q公仔,就像拜佛一樣,求系統(tǒng)不崩。
現(xiàn)在,他們已經(jīng)積累了一整套保證系統(tǒng)不崩的方法論。
騰訊10年維護(hù)微信系統(tǒng)不崩的故事,是一個(gè)從手忙腳亂到心平氣和的成長故事,是一個(gè)技術(shù)系統(tǒng)從無到有的故事,也是一個(gè)國民級用戶產(chǎn)品的技術(shù)秘密。騰訊技術(shù)團(tuán)隊(duì)向經(jīng)濟(jì)觀察報(bào)講述了這些故事,他們構(gòu)建的系統(tǒng),使用的技術(shù),在運(yùn)行中積累的經(jīng)驗(yàn)教訓(xùn),對于其他公司,或可提供些許借鑒。
瀕臨崩盤的時(shí)刻
一刀切關(guān)閉系統(tǒng)、還是繼續(xù)尋找漏洞?是鄒方明必須立刻做出的判斷。
他是騰訊的老人,2006年進(jìn)入騰訊,負(fù)責(zé)技術(shù),一手搭建了QQ和微信的聊天圖片、視頻系統(tǒng)。但在2014年除夕微信流量爆發(fā)而瀕臨崩盤的時(shí)刻,他依舊承受不住這種壓力。“系統(tǒng)全方位崩盤,流量也爆了,前端的系統(tǒng)就好像洪水一樣的,后端的系統(tǒng)更脆弱,連著倒了三四個(gè)系統(tǒng)和平臺,不光我們的平臺倒了,底層存儲的其他部門其他系統(tǒng)也倒了。”
體現(xiàn)在用戶側(cè)的感受是,用戶在朋友圈把視頻發(fā)出去了,但身邊朋友一個(gè)都沒看到。
用戶投訴源源不斷而來,鄒方明需要立刻做出判斷。他可以花更多時(shí)間去查一下到底是什么原因?qū)е拢瑥氐捉鉀Q問題,或是干脆一刀割下去,先暫時(shí)限制視頻功能。“哪個(gè)方案能夠最快恢復(fù)服務(wù),我事后在腦海里模擬了無數(shù)遍,也想不出哪一個(gè)更快。”
鄒方明站在機(jī)房前,對著那臺顯示崩盤的電腦,身邊的運(yùn)維看著他,手指放在鍵盤上等待指令,老板在辦公室一言不發(fā),產(chǎn)品團(tuán)隊(duì)需要一個(gè)回復(fù),公司外數(shù)以億計(jì)的用戶,所有人都在等待著他的指令。
雖然只有十幾分鐘,但每一秒都是煎熬。
鄒方明最終決定一刀切。至少切斷后,再次恢復(fù),能給到用戶繼續(xù)使用的可能性。否則,不知道要排查多久才能真正找出問題。直到現(xiàn)在,他也不能說自己的選擇是最正確的,但那是最快解決問題的選擇。
微信誕生早期,上面的時(shí)刻時(shí)有發(fā)生。2015年,微信紅包贊助春晚,除夕當(dāng)天紅包量級從10萬級提升到10億級,負(fù)責(zé)運(yùn)維的肖攀,買了個(gè)QQ公仔,插上兩根香,每當(dāng)覺得心里不穩(wěn)妥,就去公仔前拜一拜,祈求千萬不要出事。
微信后期,一套成熟的穩(wěn)定系統(tǒng)已經(jīng)形成,依舊有不可預(yù)料的事情發(fā)生。2020年2月,騰訊會(huì)議在一個(gè)月時(shí)間增長1000倍,騰訊云副總裁、騰訊基礎(chǔ)架構(gòu)部總經(jīng)理肖志立也遇到了難題,他的難題不是技術(shù)原因,而是物力資源跟不上。
當(dāng)時(shí),因?yàn)橐咔椋\(yùn)營商的BGP帶寬滿足不了、外網(wǎng)IP地址滿足不了,并且,由于設(shè)備供應(yīng)商無法復(fù)工,設(shè)備也供應(yīng)不了。
肖志立給聯(lián)想打電話,詢問能不能給庫房供1萬臺機(jī)器,對方說不好意思,員工都回家了,疫情期間沒有辦法回來。
直到最后,新機(jī)器也沒有送到。最終,還是只能死磕技術(shù),通過軟件的優(yōu)化,把之前一個(gè)單元支持100路的技術(shù),提升到支持200路,才解決了物理資源不足的難題。
一個(gè)從無到有的系統(tǒng)
12億用戶感知到的,是每天都在使用的微信這個(gè)產(chǎn)品。他們感知不到的地方,微信背后僅技術(shù)平臺就包括圖片平臺、音視頻傳輸平臺、紅包系統(tǒng)、小視頻平臺等等,這些平臺接入騰訊內(nèi)部超過90%的業(yè)務(wù)。
平臺組合在一起,形成龐大的系統(tǒng),基本能解決已知與未知的問題。這些平臺的形成,不是一蹴而就的,而是經(jīng)歷了漫長的過程。
圖片系統(tǒng)歷史最悠久,早在2006年的QQ時(shí)代就開始使用。當(dāng)年,QQ用戶突破1000萬,上線了QQ空間相冊,產(chǎn)品很受歡迎,但對于技術(shù)團(tuán)隊(duì)來說,一個(gè)首先面對的問題就是:撐不住了。存儲方案也好,流量方案也好,索引方案也好,都支撐不了用戶訴求。“整個(gè)底層存儲都已經(jīng)瘋掉了,”鄒方明來到這個(gè)部門時(shí),恰好經(jīng)歷了這樣的時(shí)代。一些公司在近幾年贊助春晚或遇到突發(fā)事件時(shí),突然發(fā)現(xiàn)的問題,騰訊在十幾年前也遇到過。現(xiàn)在微信、QQ系統(tǒng)的穩(wěn)定,是當(dāng)年吃虧后積累的經(jīng)驗(yàn)教訓(xùn)。
用戶對圖片的訴求,延伸出了騰訊第一代存儲系統(tǒng),衍生了TFS,之后有了相冊系統(tǒng),不過,當(dāng)時(shí),他們還沒有想到做技術(shù)平臺。
不久,新矛盾爆發(fā)。QQ農(nóng)場火爆后,每個(gè)用戶都有很多頭像,但原有的相冊系統(tǒng)支撐不了圖像高IO(輸入輸出)。這種情況下,鄒方明把相冊系統(tǒng)做了簡單的分支,就叫頭像系統(tǒng)。
頭像系統(tǒng)和相冊系統(tǒng),都是圖片,應(yīng)該分開還是融合?內(nèi)部當(dāng)時(shí)有些焦灼,經(jīng)過很長的PK,他們覺得,還是應(yīng)該融合到一起。融合之后,騰訊有了第一個(gè)技術(shù)平臺,圖片平臺。
相對于之前各自分離的系統(tǒng),平臺的優(yōu)勢在于成本。騰訊其他團(tuán)隊(duì)也在做圖片服務(wù),他們發(fā)現(xiàn),花了這么多年研發(fā)精力,還不如接入到圖片平臺中,把研發(fā)團(tuán)隊(duì)的生產(chǎn)力解放出來。
騰訊的其他平臺隨后逐漸誕生。
2016年,視頻平臺誕生。2019年,音視頻傳輸平臺形成。期間還有紅包系統(tǒng)、文件系統(tǒng)、網(wǎng)盤系統(tǒng),用戶最核心的幾個(gè)場景平臺,都由基礎(chǔ)架構(gòu)部搭建完成。
長期以來,騰訊在互聯(lián)網(wǎng)公司中都以產(chǎn)品力著稱,產(chǎn)品的背后,是技術(shù)平臺的助力。
去年火爆的視頻號就是一個(gè)典型案例,一年時(shí)間,視頻號推出了一系列功能,產(chǎn)品人員提出功能需求后,技術(shù)人員第二天或者是第三天就能拿出方案,這離不開平臺的服務(wù)和支撐。“產(chǎn)品有想法時(shí),研發(fā)人員能夠很快速做出一個(gè)模型,盡快做迭代和嘗試。”鄒方明解釋,“能夠在60分的基礎(chǔ)上去做加法,產(chǎn)品技術(shù)團(tuán)隊(duì)可以把視角放在用戶喜歡玩的玩法上面,放在終端體驗(yàn)的細(xì)節(jié)上面去,從而從整個(gè)研發(fā)的長周期中掙脫出來。”
微信誕生10年,背后的系統(tǒng)也有所不同。2016年之前,系統(tǒng)處于性能不足階段,當(dāng)時(shí)出現(xiàn)問題,無論是漏洞或是代碼問題,事件爆發(fā)的根本原因是,系統(tǒng)能力不足導(dǎo)致的故障。
2016年之后,系統(tǒng)升級,此后再有熱點(diǎn),或是再有突然事件,對于技術(shù)來說,就只是量級提高了,都在系統(tǒng)可以支撐的范圍內(nèi)。
在云時(shí)代,系統(tǒng)的支撐能力又有了增加。QQ于2020年完全上云,整體都在云端。微信花了3年時(shí)間上云,今年會(huì)全部上云。上云的好處是,如果有突發(fā)情況要從其他的業(yè)務(wù)騰挪資源,速度快很多。“否則我們就得先把設(shè)備從A業(yè)務(wù)上下來,再添加到B業(yè)務(wù)去,再做測試驗(yàn)證,這樣時(shí)間就長很多。”
微信10年,系統(tǒng)的基礎(chǔ)建設(shè)主要朝著兩個(gè)主要的目標(biāo)在做。“一個(gè)是系統(tǒng)的健康性,比如你的熔斷能力,自我恢復(fù)能力,每年我們都在找方法。另一個(gè)方向就是系統(tǒng)單位成本的承載能力。從字面上去解釋,因?yàn)槲覀兊馁Y源團(tuán)隊(duì)、產(chǎn)品團(tuán)隊(duì),都會(huì)給出一個(gè)固定的成本,這固定的10000臺設(shè)備,能夠支撐100萬次請求,還是500萬次請求,是每年都在持續(xù)優(yōu)化和迭代的過程。我們會(huì)發(fā)現(xiàn),只要你的承載能力強(qiáng)了,就可以把每個(gè)危急時(shí)刻變成不危急。”鄒方明說。
產(chǎn)品不崩的方法論
不過,即使有了系統(tǒng),也不能完全保證不崩。尤其對于一款12億人使用的社交產(chǎn)品,任何時(shí)刻都有不可控性。
直到現(xiàn)在,騰訊技術(shù)團(tuán)隊(duì)也不敢打包票說系統(tǒng)完全可控。“推演也是算不過來的,總會(huì)算錯(cuò)的。比如說零點(diǎn)全國發(fā)紅包的人到底有多少?公司發(fā)紅包的量到底有多少?這個(gè)東西說實(shí)話不是那么好估了,這個(gè)時(shí)候我們就會(huì)想,有沒有保底的大招,來使得這個(gè)訪問量控制在系統(tǒng)可接受的范圍之內(nèi),這是非常重要的保底措施。”肖志立說。
崩盤之前,技術(shù)部門會(huì)提前預(yù)演,策劃好“劇本”,“劇本”是一種柔性控制,也可以統(tǒng)稱為降級。微信用戶有時(shí)在高峰期會(huì)覺得微信消息有延遲,或是朋友圈視頻分辨率降低,就是一種降級。
當(dāng)系統(tǒng)遭遇了遠(yuǎn)超預(yù)估的訪問量,就要降級,比如朋友圈視頻平時(shí)一個(gè)視頻大概2兆,但高峰時(shí)刻可以先砍一刀,把2兆砍成1兆,讓更多的人有視頻可以看。
在不可預(yù)判的業(yè)務(wù)場景,他們基本上都會(huì)以這種方法去應(yīng)對。“高突發(fā)的時(shí)候,用戶不會(huì)用得那么爽,但能讓90%用戶覺得滿意,不至于說突然量超過預(yù)期了,然后就立刻不行了”。
肖志立告訴記者,騰訊一直有一個(gè)海量之道的技術(shù)方法。在突發(fā)比較高時(shí),始終有一個(gè)漏斗模型,“第一層先去頂住絕大部分的請求,把符合要求的再往下層漏,再往下層交易最重的系統(tǒng)。這樣能保證承擔(dān)的請求是真正需要的請求,而不是把前面所有的請求都打到后面去。”
這個(gè)技術(shù)方法論被視為騰訊的保底大招,多年來屢試不爽。
如今只道是尋常
2021年春節(jié),騰訊基礎(chǔ)架構(gòu)部在一片祥和中度過。除夕5點(diǎn)半,肖志立把當(dāng)時(shí)留守的幾十個(gè)兄弟拉到辦公室對面的一個(gè)餐廳聚餐,吃到6點(diǎn)半,回來守著機(jī)器一起度過了除夕夜。
全程沒有任何驚險(xiǎn)時(shí)刻,無驚無喜。
肖志立依舊全程盯著。他每年春節(jié)前后都在,春節(jié)是最考驗(yàn)微信的時(shí)刻,在他們技術(shù)內(nèi)部看來,平時(shí)吹什么牛,都不如扛過春晚的流量來的實(shí)在。“每次我也在想,我也不去敲代碼,也不去做指令,為什么我要在?我能夠感覺到就是崩盤了之后,大家都指著我去做‘要人命’的決定,出了故障我才有價(jià)值,沒出故障我就像一個(gè)閑人。”鄒方明已經(jīng)記不清自己守過了多少個(gè)春晚,只是覺得很感慨。
在基礎(chǔ)架構(gòu)師的職業(yè)生涯里,非常重要的一點(diǎn),就是在關(guān)鍵時(shí)刻做出關(guān)鍵決策。
2018年之后,微信很少再有關(guān)鍵時(shí)刻。這一年,微信紅包的用戶量基本上接近于微信的用戶量,之后的增長基本上已經(jīng)平穩(wěn)。
肖攀最近兩年也沒有再拜過QQ公仔了,“都比較有信心。”
現(xiàn)在的系統(tǒng),已經(jīng)不再需要大的變動(dòng)。并且多年春節(jié)經(jīng)驗(yàn)后,團(tuán)隊(duì)值班的手段和策略都是已經(jīng)完備和成熟的,還可以提前預(yù)判事件。比如今年,他們預(yù)測云年夜飯會(huì)提前導(dǎo)致一個(gè)小高峰,果然,當(dāng)晚7點(diǎn)的流量是往年5倍,因?yàn)橐呀?jīng)提前預(yù)測,今年也平穩(wěn)度過。
對于現(xiàn)在的騰訊技術(shù)團(tuán)隊(duì),不再有驚心動(dòng)魄的故事發(fā)生。
架構(gòu)師的經(jīng)驗(yàn)教訓(xùn)
微信成立10年,騰訊技術(shù)團(tuán)隊(duì)也跟著走了10年,他們經(jīng)歷高壓,經(jīng)歷崩潰,經(jīng)歷焦慮,到現(xiàn)在視為尋常,一路走來,他們見證微信用戶從0漲到12億用戶,與有榮焉。“做技術(shù)支撐的團(tuán)隊(duì),一定要有一個(gè)好的心態(tài),就是你不在聚光燈下,但是我們心里面知道今天在臺上的產(chǎn)品那么成功,跟我們是有很大關(guān)系的,自己的內(nèi)心要足夠強(qiáng)大,要相信這一點(diǎn)。”
他們也摸索出了足夠多和業(yè)務(wù)部門溝通的方法。鄒方明經(jīng)常給團(tuán)隊(duì)灌輸?shù)睦砟钍牵悄阌写_鑿的依據(jù)能證明你是對的,不然你就先聽業(yè)務(wù)部門的。
目前,微信背后的技術(shù)系統(tǒng)已經(jīng)接近完善,“沒有特別明顯的缺陷和短板。”肖志立對此很自信。
不過,技術(shù)團(tuán)隊(duì)依舊存在焦慮感。其實(shí),騰訊這支技術(shù)團(tuán)隊(duì)一直很穩(wěn)定,騰訊內(nèi)部架構(gòu)幾經(jīng)大動(dòng),技術(shù)部門始終沒變。他們經(jīng)歷了文字互聯(lián)網(wǎng)時(shí)代、圖片互聯(lián)網(wǎng)時(shí)代,到了視頻互聯(lián)網(wǎng)時(shí)代,再到現(xiàn)在的實(shí)時(shí)音視頻互聯(lián)網(wǎng)時(shí)代,技術(shù)一直在演進(jìn),內(nèi)容越來越豐富,實(shí)時(shí)性越來越強(qiáng)。這對于背后系統(tǒng)承載能力的要求,對于穩(wěn)定性、延時(shí)的要求,也要比原來高很多,技術(shù)永無止境,他們也永遠(yuǎn)等待攻克下一個(gè)難關(guān)。
鄒方明還在持續(xù)學(xué)習(xí)中。他經(jīng)常參加線下活動(dòng),在一些論壇或峰會(huì)上,奔到現(xiàn)場面對面和業(yè)界大牛交流取經(jīng),“我們不能夠關(guān)著門做,你必須要到外面找一些可學(xué)習(xí)的點(diǎn),業(yè)界的大牛很多,他們會(huì)有很多比較好的創(chuàng)意和方法論。”“你永遠(yuǎn)不知道什么時(shí)候冒出一個(gè)新的東西。”肖志立很感慨,“作為支撐團(tuán)隊(duì),我們得有這種魄力和能力,能夠在彈藥不夠的情況下支持業(yè)務(wù)團(tuán)隊(duì)打勝仗。”
京公網(wǎng)安備 11010802028547號