昨天微信發(fā)生部分服務(wù)故障,媒體微博上面就此事表現(xiàn)相當(dāng)熱鬧,這也從另一方面印證了微信的江湖地位以及移動(dòng)互聯(lián)網(wǎng)改變生活的真實(shí)寫(xiě)照。
從用戶(hù)角度來(lái)說(shuō),一直好好的一個(gè)東西突然壞了,很大情況下可能不會(huì)首先想到是這東西本身壞了,而是先從別的地方找原因,這也是人的一種慣性思維。 而一旦發(fā)現(xiàn)是用的這東西本身壞了,憤怒和無(wú)奈的程度會(huì)更加加倍。但是有一點(diǎn)大家想過(guò)沒(méi)有,任何一個(gè)東西的可用性都是需要有一定代價(jià)才能保證的。 越能用得長(zhǎng)的東西,要么就是質(zhì)量一流,要么就是需要不斷檢修和維護(hù),這都需要不斷付出努力才能做到。
服務(wù)可用性落實(shí)到具體的可以衡量的指標(biāo)上來(lái)說(shuō),通常用幾個(gè)9 來(lái)表示。通常大家所說(shuō)的3個(gè)9 (99.9%), 是說(shuō)一個(gè)業(yè)務(wù)系統(tǒng)造成大部分用戶(hù)無(wú)法使用的時(shí)間一年中不超過(guò) 8小時(shí)46分鐘,而全球互聯(lián)網(wǎng)中的老大Google 對(duì)于服務(wù)可用性達(dá)到了5個(gè)9(99.999%), 也就是一年內(nèi)故障時(shí)間不超過(guò) 5分鐘 15 秒,這個(gè)故障時(shí)間對(duì)用戶(hù)基本無(wú)感知。對(duì)于用戶(hù)數(shù)量和交易數(shù)量可預(yù)測(cè)或者憑經(jīng)驗(yàn)就可以了解的,而又關(guān)系到國(guó)計(jì)民生的行業(yè),譬如銀行、電信企業(yè)來(lái)說(shuō),一般都要求達(dá)到5個(gè)9。 然而對(duì)于互聯(lián)網(wǎng)而言,5 個(gè)9 的服務(wù)可用性需要付出的代價(jià)和挑戰(zhàn)是相當(dāng)巨大的。
首先,在基礎(chǔ)設(shè)施方面,針對(duì)服務(wù)質(zhì)量,IDC 也分成很多等級(jí);A 級(jí)一般承諾服務(wù)可用性達(dá)到或者接近4 個(gè)9, 這就要求至少以下幾個(gè)方面: 必須多路電源接入(如果只有一路電源,萬(wàn)一沒(méi)電了就瞎了),必須有支持至少 5 小時(shí)的蓄電設(shè)備、必須有獨(dú)立的發(fā)電設(shè)備、所有設(shè)備和線(xiàn)路冗余備份(是所有設(shè)備),整個(gè)系統(tǒng)無(wú)單點(diǎn)故障。 以上這些還是比較粗的幾條。
有了這樣的基礎(chǔ)設(shè)施保證,如果應(yīng)用系統(tǒng)本身支持不到相應(yīng)的幾個(gè)9, 那么整個(gè)業(yè)務(wù)系統(tǒng)就服從木桶原則,哪個(gè)服務(wù)可用性低就是哪個(gè)。 而動(dòng)不動(dòng)就上億用戶(hù)一起訪(fǎng)問(wèn)的互聯(lián)網(wǎng)應(yīng)用來(lái)說(shuō),要做到 4 個(gè)或者5個(gè)9, 至少需要在幾個(gè)方面來(lái)考慮:架構(gòu)上的合理性和靈活性、整個(gè)系統(tǒng)成本的控制、運(yùn)維的方便和高效。
先說(shuō)說(shuō)成本,對(duì)于類(lèi)似傳統(tǒng)的金融系統(tǒng)等而言,一般采用的是大塊頭的機(jī)器,因?yàn)槠浞⻊?wù)規(guī)模相對(duì)可控,譬如同時(shí)進(jìn)行存錢(qián)、取錢(qián)轉(zhuǎn)賬的用戶(hù)也就說(shuō)那么萬(wàn)級(jí)別。 但是對(duì)于互聯(lián)網(wǎng)系統(tǒng)而言,如果也采用大塊頭的機(jī)器,那么整個(gè)系統(tǒng)的花費(fèi)將是天文數(shù)字。所以除了特別關(guān)鍵的數(shù)據(jù)會(huì)采用大塊頭機(jī)器來(lái)處理,一般都買(mǎi)的是普通的商業(yè)計(jì)算機(jī)(小幾萬(wàn)一個(gè)), 隨著用戶(hù)規(guī)模的增加不斷買(mǎi)新的機(jī)器進(jìn)行擴(kuò)充,這本身也符合發(fā)展規(guī)律。 但是一般的商用機(jī)器故障率還是相當(dāng)高的。你如果買(mǎi)過(guò)家用電腦,估計(jì)也經(jīng)常碰到機(jī)器開(kāi)不起來(lái)的問(wèn)題吧。 那么怎么樣在一堆機(jī)器里面的幾個(gè)機(jī)器壞了的情況下,系統(tǒng)還能正常工作呢,這就要求在應(yīng)用設(shè)計(jì)的時(shí)候能采用集群技術(shù),自動(dòng)進(jìn)行故障轉(zhuǎn)移和容錯(cuò)。 這就要求在架構(gòu)上要能考慮到這些因素。
然后我們?cè)賮?lái)看,你如果所有的機(jī)器放在一個(gè)地方,即使能夠在一個(gè)機(jī)房放得下, 在地大物博的中國(guó),從北京來(lái)訪(fǎng)問(wèn)在杭州的服務(wù)器,如果是跨運(yùn)營(yíng)商的網(wǎng)絡(luò)之間來(lái)訪(fǎng)問(wèn),估計(jì)比坐飛機(jī)快不了多少。 這樣的速度顯然不符合好的體驗(yàn)這條金律。 而且把所有機(jī)器放在一個(gè)地方,萬(wàn)一這個(gè)地方出了什么問(wèn)題,豈不是全完蛋了! 所以不能把雞蛋放在一個(gè)籃子里面,就需要根據(jù)用戶(hù)的分布情況在不同的城市、同一城市的不同區(qū)域來(lái)建設(shè)業(yè)務(wù)系統(tǒng)。但是在邏輯上, 不同城市的系統(tǒng)應(yīng)該又是同一個(gè)系統(tǒng)的,否則我在杭州加了一個(gè)在北京的朋友,如果過(guò)兩天看不到了,誰(shuí)還用啊。
這里又有一些問(wèn)題需要解決,譬如就在某一天某個(gè)城市的開(kāi)挖下水道,把光纖給挖斷了, 導(dǎo)致訪(fǎng)問(wèn)到這個(gè)城市的系統(tǒng)無(wú)法使用了,那怎么辦呢? 把這些用戶(hù)分流到別的城市的系統(tǒng)上去不就行了? 是的,理論上是可以的。 但是就相當(dāng)于如果一個(gè)城市被臺(tái)風(fēng)影響,需要把全部居民轉(zhuǎn)移到另外一個(gè)城市或者幾個(gè)城市里一樣,轉(zhuǎn)移到哪個(gè)城市、接收的城市是否能容納這些新增加的居民,這些居民的銀行存款等數(shù)據(jù)是否也能保證到了新城市后還能保持可用?在實(shí)在萬(wàn)不得已的情況下,有一部分居民可能無(wú)法轉(zhuǎn)移。大規(guī);ヂ(lián)網(wǎng)系統(tǒng)在故障時(shí)的處理思路也大致如此。 首先需要規(guī)劃哪個(gè)城市給哪些用戶(hù)服務(wù),容量是多少,如果要接收別的城市的居民,那么還需要留多少容量,接收哪個(gè)城市來(lái)的用戶(hù),事先要把這些用戶(hù)的信息能同步過(guò)來(lái)保存著等等。 即便如此在規(guī)劃無(wú)法做到十分完善的情況下,部分用戶(hù)可以繼續(xù)服務(wù),部分用戶(hù)只能降級(jí)服務(wù)甚至拒絕服務(wù),這也是為了保障整個(gè)系統(tǒng)能盡可能提供有限服務(wù)。
還有一個(gè)就是運(yùn)維的高效性, 在故障出現(xiàn)后或者出現(xiàn)之前就能及時(shí)啟動(dòng)合理的應(yīng)急措施,進(jìn)行用戶(hù)的分流,甚至對(duì)部分用戶(hù)進(jìn)行限流等。
如果在有些地方考慮不周,譬如我之前所在一家知名 IM 企業(yè),由于地震導(dǎo)致海底光纜故障,很大部分的用戶(hù)無(wú)法通過(guò)原路徑訪(fǎng)問(wèn)系統(tǒng),系統(tǒng)本身無(wú)法在中國(guó)提供應(yīng)用層面的路由選擇;只能依賴(lài)運(yùn)營(yíng)商來(lái)調(diào)整路由,這就在時(shí)間上大大超出可用性承諾的時(shí)間,無(wú)論最終是誰(shuí)的原因, 最終導(dǎo)致用戶(hù)大量流失。 也碰到過(guò)由于沒(méi)有對(duì)部分用戶(hù)降級(jí)服務(wù)或者延遲服務(wù),而導(dǎo)致全部用戶(hù)不斷進(jìn)行服務(wù)恢復(fù)嘗試,形成浪涌和雪崩,導(dǎo)致整個(gè)服務(wù)最終拒絕服務(wù)(Deny of Service).
這些對(duì)于目前我們自己擁有上千萬(wàn)并發(fā)的個(gè)推系統(tǒng)而言,也都是一直在完善的方面。
對(duì)于騰訊而言,這十幾年來(lái)對(duì)于幾億 QQ 用戶(hù)的服務(wù),積累了大量的有價(jià)值的經(jīng)驗(yàn). 微信出現(xiàn)這樣的情況,應(yīng)該說(shuō)還是不多見(jiàn)的, 可能也說(shuō)明在騰訊內(nèi)部的資源分配還存在一定不均衡。 不過(guò)相信他們可以很快進(jìn)行調(diào)整和完善,當(dāng)然在這背后也意味著他們巨大的努力和付出。