共創(chuàng)共識(shí) 相互支撐
——小米公司軟件服務(wù)端質(zhì)量提升背后的故事
□ 本報(bào)記者 彭 燮
大面積宕機(jī)、大規(guī)模斷網(wǎng)、大量用戶(hù)無(wú)法訪問(wèn)……近年來(lái),多家互聯(lián)網(wǎng)企業(yè)接連發(fā)生服務(wù)端質(zhì)量事故。因此,軟件服務(wù)端質(zhì)量保障成為各企業(yè)關(guān)注的重點(diǎn)項(xiàng)目,小米公司也不例外。
服務(wù)端被稱(chēng)為軟件系統(tǒng)的“基礎(chǔ)設(shè)施”,一旦出現(xiàn)故障,會(huì)給業(yè)務(wù)端帶來(lái)很大負(fù)面影響。但由于其自身的復(fù)雜性以及軟件開(kāi)發(fā)的隨機(jī)復(fù)雜性,服務(wù)端“零故障”在現(xiàn)有條件下是不可能實(shí)現(xiàn)的。因此,作為一家服務(wù)全球數(shù)億用戶(hù)的移動(dòng)互聯(lián)網(wǎng)公司,小米公司能做的就是,盡可能降低服務(wù)端質(zhì)量事故發(fā)生的概率,以及在事故發(fā)生后,盡可能減少對(duì)用戶(hù)的負(fù)面影響。
這也是小米公司軟件服務(wù)端質(zhì)量提升專(zhuān)項(xiàng)(以下簡(jiǎn)稱(chēng)“專(zhuān)項(xiàng)”)的目標(biāo)。2023年1月,小米公司由負(fù)責(zé)基礎(chǔ)服務(wù)的集團(tuán)信息技術(shù)部牽頭,聯(lián)合4個(gè)重點(diǎn)業(yè)務(wù)部門(mén)以及集團(tuán)質(zhì)量辦共同成立專(zhuān)項(xiàng)工作組,圍繞10個(gè)重點(diǎn)業(yè)務(wù)和25個(gè)核心基礎(chǔ)服務(wù),全力治理軟件服務(wù)端的質(zhì)量風(fēng)險(xiǎn),目的是夯實(shí)基礎(chǔ)服務(wù)容災(zāi)能力,并提升重點(diǎn)業(yè)務(wù)的逃生能力。
容災(zāi)和逃生,聽(tīng)起來(lái)像是應(yīng)對(duì)各類(lèi)災(zāi)害的專(zhuān)業(yè)用語(yǔ),在專(zhuān)項(xiàng)工作組看來(lái),服務(wù)端質(zhì)量故障,就屬于“技術(shù)災(zāi)害”,提高防災(zāi)減災(zāi)救災(zāi)能力,是小米公司必須要修煉的“內(nèi)功”。
相互支撐的5毫秒
服務(wù)端和業(yè)務(wù)端共同完成各項(xiàng)互聯(lián)網(wǎng)應(yīng)用技術(shù)保障,分工不同,但目標(biāo)一致。而專(zhuān)項(xiàng)工作組的工作之一就是要加強(qiáng)服務(wù)端和業(yè)務(wù)端的雙向配合。
配合的基礎(chǔ)是共識(shí),在技術(shù)上被稱(chēng)為“SLA握手”,即雙方就基礎(chǔ)服務(wù)的具體技術(shù)指標(biāo)達(dá)成一致。其難度在于,業(yè)務(wù)端主要關(guān)注業(yè)務(wù)指標(biāo)對(duì)于提升用戶(hù)體驗(yàn)和質(zhì)量水平的重要性,而軟件服務(wù)端主要從現(xiàn)有能力出發(fā),更多考慮業(yè)務(wù)指標(biāo)的提升路徑和相應(yīng)成本。
專(zhuān)項(xiàng)工作組給記者講述了一個(gè)關(guān)于“5毫秒”的故事。
5毫秒,對(duì)于日常生活來(lái)說(shuō),是完全可忽略不計(jì)的時(shí)間??蓪?duì)于Redis(一個(gè)存儲(chǔ)數(shù)據(jù)庫(kù))日志組件來(lái)說(shuō),5毫秒?yún)s是目前業(yè)界公認(rèn)的,能實(shí)現(xiàn)良好用戶(hù)體驗(yàn)的最短延遲時(shí)長(zhǎng)。
在軟件服務(wù)端質(zhì)量提升專(zhuān)項(xiàng)實(shí)施之前,米家工程師小張并不了解,在小米,其實(shí)有兩個(gè)5毫秒:一個(gè)5毫秒是他所熟悉的,米家相關(guān)應(yīng)用Redis日志延遲時(shí)長(zhǎng)的標(biāo)準(zhǔn),盡管延遲超過(guò)100毫秒用戶(hù)才會(huì)明顯感覺(jué)到“有點(diǎn)慢”,但米家依然把延遲時(shí)長(zhǎng)標(biāo)準(zhǔn)定為5毫秒,這也是目前業(yè)界公認(rèn)的最高標(biāo)準(zhǔn);另一個(gè)5毫秒是軟件服務(wù)端監(jiān)測(cè)的服務(wù)器Redis日志延遲時(shí)長(zhǎng),目的也是想給米粉們提供最好的體驗(yàn)。
可問(wèn)題是,這兩個(gè)5毫秒,并不能劃等號(hào)。
小張說(shuō),在實(shí)際應(yīng)用中,他們時(shí)常發(fā)現(xiàn)Redis日志延遲時(shí)長(zhǎng)達(dá)到6-7毫秒,雖然用戶(hù)對(duì)于多出的1-2毫秒并無(wú)感知,但小米的工程師們不會(huì)視而不見(jiàn)。他猜想,是不是軟件服務(wù)端出了問(wèn)題?
通過(guò)專(zhuān)項(xiàng),小張發(fā)現(xiàn)自己想錯(cuò)了——軟件服務(wù)端的工程師們一直堅(jiān)守著“5毫秒”的標(biāo)準(zhǔn),而且從目前技術(shù)數(shù)據(jù)看,基本上不會(huì)出現(xiàn)延遲時(shí)長(zhǎng)達(dá)到6-7毫秒的情況。
那問(wèn)題到底出在哪里呢?
經(jīng)過(guò)雙方工程師的共同排查和數(shù)據(jù)“拉齊”,他們找到了延時(shí)時(shí)長(zhǎng)增加的原因,小張管它們叫“中間地帶”,包括網(wǎng)絡(luò)、云平臺(tái)容器等。一般來(lái)說(shuō),它們會(huì)增加1~2毫秒的延遲時(shí)長(zhǎng)。甚至有一次云平臺(tái)容器基礎(chǔ)設(shè)施升級(jí),業(yè)務(wù)端的延遲時(shí)長(zhǎng)最高超過(guò)20毫秒。
問(wèn)題找到了,那實(shí)現(xiàn)“SLA握手”的有兩種方案:一是以業(yè)務(wù)端的5毫秒為基準(zhǔn),讓軟件服務(wù)端把“中間地帶”造成的延遲算進(jìn)去,進(jìn)一步縮短延遲;另一種是以軟件服務(wù)端的5毫秒為基準(zhǔn),綜合考慮“中間地帶”的因素,業(yè)務(wù)端適當(dāng)提高延遲時(shí)長(zhǎng)標(biāo)準(zhǔn)。
對(duì)于小張和同事們來(lái)說(shuō),第一種方案顯然是最簡(jiǎn)便也是最好操作的,因?yàn)橹恍枰春米约簶I(yè)務(wù)的數(shù)據(jù),就可以保證不出現(xiàn)延遲問(wèn)題。但最終,他們卻自愿選擇了第二種方案。
“我們覺(jué)得,考慮問(wèn)題不能只想著自己怎么方便怎么來(lái),而是要從集團(tuán)整體角度來(lái)判斷,什么是最優(yōu)解的?!毙埖目紤]有兩方面,一是在現(xiàn)有技術(shù)條件下,如果要保證業(yè)務(wù)端的5毫秒,就意味著軟件服務(wù)端要把延時(shí)控制在3~4毫秒,這需要公司投入巨大成本,投入產(chǎn)出嚴(yán)重不成比例;二是對(duì)于軟件服務(wù)端的同事來(lái)說(shuō),他們平時(shí)主要是著眼于基礎(chǔ)服務(wù),對(duì)“中間地帶”的運(yùn)行原理和相關(guān)情況的了解不如業(yè)務(wù)線多,讓他們?nèi)ヘ?fù)責(zé)排查“中間地帶”的問(wèn)題,要多花費(fèi)很多的時(shí)間和人力?!斑@樣做,他們的壓力太大了,不光要管自己,還要管自身以外的一些業(yè)務(wù)?!毙堈f(shuō)。
就這樣,原本是“自說(shuō)自話(huà)”的兩個(gè)5毫秒,通過(guò)“SLA握手”,雙向奔赴、合二為一。而工程師們也從在一個(gè)園區(qū)里上班卻少有聯(lián)絡(luò)的“網(wǎng)友”,變成了互相支持、互相信賴(lài)的真朋友。
讓人“上癮”的“噩夢(mèng)”演練
如果盤(pán)點(diǎn)小米工程師的“噩夢(mèng)”,交換機(jī)斷網(wǎng)肯定可以算一件。 一臺(tái)交換機(jī)斷網(wǎng)已是大事故,更不用說(shuō)兩臺(tái)交換機(jī)同時(shí)斷網(wǎng)了。然而,就在2023年5月20日凌晨,小米公司近百位工程師共同“圍觀”兩臺(tái)交換機(jī)同時(shí)斷網(wǎng)。那個(gè)場(chǎng)面讓軟件服務(wù)端運(yùn)維工程師劉工至今難忘。
為了驗(yàn)證專(zhuān)項(xiàng)通過(guò)推進(jìn)“SLA握手”提升災(zāi)備能力的成效,提升各業(yè)務(wù)端和軟件服務(wù)端的協(xié)調(diào)作戰(zhàn)能力,工作組先后組織了4場(chǎng)集團(tuán)級(jí)別的應(yīng)急有損演練——幾乎輻射小米所有業(yè)務(wù)線。作為應(yīng)急演練的具體負(fù)責(zé)人,劉工用“糾結(jié)”兩個(gè)字來(lái)形容自己當(dāng)時(shí)的心情。
讓人糾結(jié)的點(diǎn)在于,因?yàn)槭怯袚p演練,萬(wàn)一演練過(guò)程中引發(fā)了更大的問(wèn)題,波及的用戶(hù)數(shù)量可能是數(shù)以?xún)|計(jì)的?!半m然公司不追責(zé),但怎么和米粉們交代呢?”劉工記得,有位業(yè)務(wù)工程師曾質(zhì)問(wèn)他:“干嘛非要搞個(gè)事出來(lái)!”
“沒(méi)事找事”的背后,是因?yàn)楣ぷ鹘M深知,問(wèn)題不會(huì)因?yàn)椴谎菥毦筒话l(fā)生,與其因?yàn)橐馔馇闆r失控,還不如通過(guò)有損演練把預(yù)案做好。這就和消防演練對(duì)防火工作的重要性一樣。再難也得干!而且他們直接挑戰(zhàn)兩臺(tái)交換機(jī)同時(shí)斷網(wǎng),這在小米歷史上是從未發(fā)生過(guò)的。
2023年7月25日凌晨,近百名小米工程師在工作群里集合,之所以選擇這個(gè)時(shí)間,也是為了盡量減少對(duì)用戶(hù)可能造成的影響。
“倒計(jì)時(shí)10分鐘。”
劉工發(fā)出第一條指令。各業(yè)務(wù)線工程師開(kāi)始按照之前預(yù)演過(guò)的流程進(jìn)行準(zhǔn)備,監(jiān)控相關(guān)數(shù)據(jù)。
“倒計(jì)時(shí)5分鐘?!?/p>
劉工發(fā)出第二條指令。各業(yè)務(wù)線工程師再次確認(rèn)應(yīng)急預(yù)案。相關(guān)操作人員進(jìn)行準(zhǔn)備。
“倒計(jì)時(shí)1分鐘?!?/p>
劉工發(fā)出第三條指令。這一刻好像空氣都凝固了,群里看似靜悄悄,又仿佛能聽(tīng)到大家的心跳。
“光纖接口已斷開(kāi)?!?/p>
負(fù)責(zé)“制造”交換器斷網(wǎng)的工程師在群里發(fā)布了最新情況,隨后群里逐漸熱鬧了起來(lái)。有的工程師表示,確實(shí)如預(yù)判的一樣,后臺(tái)數(shù)據(jù)明顯波動(dòng),但好在有預(yù)案,用戶(hù)基本感受不到;有的工程師表示,居然沒(méi)有出現(xiàn)預(yù)想的問(wèn)題;有幾位本來(lái)是“觀戰(zhàn)”的工程師說(shuō),自己的業(yè)務(wù)后臺(tái)數(shù)據(jù)竟然出現(xiàn)了抖動(dòng)。
讓人糾結(jié)的演練終于結(jié)束了,結(jié)果令人欣慰——事實(shí)證明,軟件服務(wù)端質(zhì)量提升專(zhuān)項(xiàng)確實(shí)提升了業(yè)務(wù)端和服務(wù)端的“合力”和災(zāi)備能力,通過(guò)雙方“握手”和數(shù)據(jù)“拉齊”實(shí)現(xiàn)的預(yù)防方案,能夠應(yīng)對(duì)突發(fā)情況的挑戰(zhàn)。
更讓人欣慰的變化是,這場(chǎng)演練居然讓小米工程師“上癮”了,一些之前觀望的業(yè)務(wù)線,主動(dòng)找到工作組要求參與演練;工程師在評(píng)估業(yè)務(wù)量的時(shí)候會(huì)考慮演練所涉及的容災(zāi)內(nèi)容;甚至有些工程師在得知演練沒(méi)有發(fā)現(xiàn)問(wèn)題的時(shí)候,會(huì)感嘆“白演練了”。
實(shí)踐證明,故障演練很好地驗(yàn)收了對(duì)前期項(xiàng)目推進(jìn)的成效,也全面檢驗(yàn)了各團(tuán)隊(duì)?wèi)?yīng)急響應(yīng)能力、預(yù)案執(zhí)行效率、系統(tǒng)協(xié)同能力。
從“治病”到“治未病”,從“救火”到“防火”,這是專(zhuān)項(xiàng)給小米質(zhì)量工作帶來(lái)的積極變化。雖然推進(jìn)過(guò)程非常艱難且糾結(jié),但正如劉工所說(shuō):“我們多糾結(jié)一點(diǎn),用戶(hù)選擇小米的心就會(huì)更加堅(jiān)定一些?!?/p>
《中國(guó)質(zhì)量報(bào)》