專(zhuān)訪劉宇:新浪CDN故障響應(yīng)機(jī)制及修復(fù)措施
原創(chuàng)【51CTO專(zhuān)稿】前幾天,51CTO系統(tǒng)頻道推出專(zhuān)訪新浪劉宇的系列文章中第二部分《專(zhuān)訪劉宇:解密新浪CDN服務(wù)器監(jiān)控機(jī)制》,今天專(zhuān)訪的第三部分新鮮出爐,本文中,主要講述了新浪CDN故障響應(yīng)機(jī)制及其修復(fù)措施。對(duì)此感興趣的朋友,可以看看下面的訪談實(shí)錄。
SinaEdge平臺(tái)運(yùn)維主管 劉宇(@守住每一天)
【嘉賓簡(jiǎn)介】劉宇:SinaEdge平臺(tái)運(yùn)維主管,LinuxTone.org的創(chuàng)造人之一,在自動(dòng)化運(yùn)維方向有一定的研究,目前正在籌備《Puppet實(shí)戰(zhàn)》一書(shū),大家可以在微博上@守住每一天和他聯(lián)系。
【采訪實(shí)錄】
51CTO:劉宇您好!首先請(qǐng)您談?wù)勀诠局饕?fù)責(zé)的內(nèi)容。
劉宇: 好的。公司配有全網(wǎng)絡(luò)監(jiān)控,7*24小時(shí)值班的體系,我主要負(fù)責(zé)負(fù)責(zé)CDN的監(jiān)控。我們CDN有自己的響應(yīng)機(jī)制,這個(gè)響應(yīng)機(jī)制和其他各大公司是類(lèi)似的。會(huì)有統(tǒng)一的小組或部門(mén)來(lái)負(fù)責(zé)。打個(gè)比方說(shuō),除了響應(yīng)提示他就涉及到故障了,如果沒(méi)有故障的話就不會(huì)有響應(yīng)。
51CTO:對(duì),響應(yīng)就是針對(duì)故障。
劉宇:和其它公司一樣,新浪針對(duì)不同的故障有著不同的級(jí)別對(duì)待,目前來(lái)說(shuō)跟微博相關(guān)的級(jí)別***,非微博相關(guān)的排其次。但并不代表就不重要。在CDN不管是什么項(xiàng)目,只要在CDN加速的,就是重要的。在大故障與響應(yīng)方面,會(huì)更多地按照公司的標(biāo)準(zhǔn)執(zhí)行。
51CTO:這個(gè)只是按業(yè)務(wù)來(lái)分層級(jí)?就是這個(gè)業(yè)務(wù)出什么問(wèn)題都是最重要的。
劉宇:那不一定,你說(shuō)的這個(gè)就涉及到它的影響范圍了。
像一級(jí),重大故障,影響微博主功能的,比如:無(wú)法登陸微博、刷不了微博、登不進(jìn)去的用戶(hù)投訴、圖片打不開(kāi)等種種情況,而跟我這邊最相關(guān)的可能就是圖片打不開(kāi)。還有另外一個(gè)業(yè)務(wù)比如說(shuō)大面積的視頻無(wú)法播放,微盤(pán)用戶(hù)投訴,像你們現(xiàn)在去微盤(pán),你們看到的比方說(shuō)預(yù)覽??床坏秸椅遥螺d不了找我,所以我們會(huì)根據(jù)影響重要的功能(重要的功能,通常就是說(shuō)這種大面積的訪問(wèn)不了,然后下載不了的)。另外一個(gè)是主要的一些功能在于非這幾大類(lèi)的,如果出了前面的問(wèn)題,涉及到的用戶(hù)面是多少,其他的就是剛才我們說(shuō)的那些不痛不癢的。
通常情況下會(huì)定位只有三級(jí)。然后分不同的權(quán)重比。再根據(jù)除了這三個(gè)之外,再根據(jù)現(xiàn)在影響用戶(hù)的范圍是多少,***用戶(hù)不可達(dá),還是百分之三十、百分之五十、百分之十……類(lèi)似于這樣的情況再排,接著用不同的東西再去說(shuō)明。比方說(shuō)百分百的用戶(hù)是完全不行,部分用戶(hù)不行,偶爾不行,然后亂七八糟的部分,比方說(shuō)故障不可信或是不可重現(xiàn),然后因?yàn)槟侵怀霈F(xiàn)過(guò)一回啊,后來(lái)就好了,類(lèi)似于這種,級(jí)別***的那種。比方說(shuō)完全不可用那解釋說(shuō),那就是說(shuō)在我加速的這個(gè)應(yīng)用里面全部都掛掉了。
其實(shí)對(duì)于CDN運(yùn)營(yíng)級(jí)別***的就是所有服務(wù)都不可用了,就是這是級(jí)別***的。在不可用的情況下,比方說(shuō)微博所有的圖片都打不開(kāi)了,在我手上應(yīng)用,所有圖片打不開(kāi)。當(dāng)然我們剛才所說(shuō)的,再往下排一級(jí)別的情況下,比方說(shuō)網(wǎng)通這一個(gè)用戶(hù)全都都打不開(kāi)了。然后再網(wǎng)上升一層面,比方說(shuō)再往下降廣州市這一個(gè)用戶(hù)打不很開(kāi)了,再往下降,那就比方說(shuō)廣州市里面的百分之三十的用戶(hù)打不開(kāi)了,如果再往下降層面百分之十的用戶(hù)偶爾打不開(kāi),就類(lèi)似于這樣子往下去排,那么公司有一定的這樣的算法,就是要有個(gè)公式然后去算。當(dāng)前這個(gè)情況然后影響多少,然后會(huì)定級(jí)為ABCDE,類(lèi)似這樣的故障級(jí)別,A***,然后E***,***根據(jù)這樣算出來(lái),從而定故障級(jí)別,發(fā)通告。舉個(gè)例子:EF級(jí)別內(nèi)部通知,然后剛開(kāi)始所說(shuō)的涉及到行政那塊東西,AB級(jí)別了,涉及到行政當(dāng)中,行政的話那塊就是要固定的模板,例如故障時(shí)長(zhǎng),故障處理部署,故障處理人員,故障最終結(jié)果,然后這個(gè)故障的后續(xù)的改進(jìn),后續(xù)的跟進(jìn),記錄號(hào)你做什么改進(jìn),然后跟進(jìn)周期是什么時(shí)候,你要做A改動(dòng),什么時(shí)候做完,要特別注重這些細(xì)節(jié)。類(lèi)似于AB級(jí)故障都是要這樣去做,這個(gè)時(shí)候涉及到的人員跟進(jìn)得有四五個(gè)了,公司會(huì)有專(zhuān)門(mén)的處理這種故障的小組來(lái)跟進(jìn)處理,挖掘故障的根本原因,避免以后再出類(lèi)似的故障。也算是一個(gè)故障的總結(jié),個(gè)人認(rèn)為這是非常有必要的,公司在這方面也一直很得很好。
51CTO:就你們組而言,優(yōu)先是恢復(fù)業(yè)務(wù)為主的?
劉宇:我處理故障的思路是,首先確定故障,一定要先把故障定死了,清楚了是什么樣的故障,再分配人員去查,然后預(yù)估這個(gè)故障大概會(huì)影響的范圍和警示度,這個(gè)時(shí)候是需要跟所有人去說(shuō)明白的,這個(gè)故障既然已經(jīng)定下來(lái)了,你要先確定你有多少把握在多少時(shí)間之內(nèi)能ok,在你沒(méi)有任何把握它在某一定時(shí)間能ok的情況下,我就會(huì)通知幾個(gè)人員專(zhuān)門(mén)去通知業(yè)務(wù)部門(mén),做緊急預(yù)案,這個(gè)時(shí)候預(yù)案的話就是屬于故障的另外一個(gè)流程,就是說(shuō)這個(gè)故障已經(jīng)在我手上就不可控了,然后我已經(jīng)無(wú)法去控制這個(gè)故障了,我會(huì)讓他們?nèi)プ吡硗庖粋€(gè)流程說(shuō),讓不同的人負(fù)責(zé)通知不同的業(yè)務(wù),走相關(guān)的故障切換流程,故障處理預(yù)案,走切換服務(wù)的處理。***時(shí)間先保障業(yè)務(wù)可用。從操作到生效服務(wù)恢復(fù)的時(shí)間幾乎是一個(gè)TTL時(shí)間:60s,除響應(yīng)時(shí)間外。
51CTO:什么?60s?
劉宇:對(duì),我們的TTL設(shè)置是60s,也就是說(shuō)這個(gè)故障只要我們操作,在60s之內(nèi)就能解決,然后就是說(shuō)先保證用戶(hù)可用;當(dāng)然這也不排除DNS緩存與個(gè)別生效延遲情況。
如果說(shuō)出現(xiàn)了那種特別大面積的故障,我已經(jīng)完全不可控了,通過(guò)我的這種幾個(gè)級(jí)別的故障處理,我已經(jīng)無(wú)法解決問(wèn)題的時(shí)候,就需要快速上報(bào),并通知四五個(gè)部門(mén),以報(bào)將故障降低至***,各部分也會(huì)針對(duì)這個(gè)故障應(yīng)用不同的策略。
有了這層通知,公司陸陸續(xù)續(xù)的各種各樣的投訴,并且有大面積反饋到前面其他部門(mén)的時(shí)候,他們心里都知道有什么事情,有一個(gè)說(shuō)辭。我們會(huì)在這個(gè)時(shí)間之內(nèi)提出我們這邊出現(xiàn)什么問(wèn)題,大概多長(zhǎng)時(shí)間會(huì)ok,如果有人問(wèn)起,你就用怎么樣的語(yǔ)言去說(shuō),然后可以快速進(jìn)入下一步處理,因?yàn)橥ㄟ^(guò)這種情況的話我可以更加地快,一分鐘之內(nèi)就可以把這個(gè)部門(mén)全部都溝通過(guò)。然后比方說(shuō)再涉及到的那種故障的那種流程的情況下,不可用了,說(shuō)要切換服務(wù),要保證服務(wù)質(zhì)量的情況下,因?yàn)檫@才是優(yōu)先的,這個(gè)時(shí)候會(huì)通知相關(guān)的部門(mén)去走以前商量好的,定制好的那個(gè)預(yù)案,按預(yù)案走就OK,那種情況會(huì)非常的快。
整個(gè)故障上報(bào)除了電話通知,還會(huì)通過(guò)固定的郵箱模板,在后臺(tái)里面啪點(diǎn)一下send,將故障郵件發(fā)送至相關(guān)人員。也就是說(shuō)我這個(gè)預(yù)案前期做得有多好,到你出現(xiàn)故障的時(shí)候,響應(yīng)速度就有多快,這就所謂的應(yīng)急措施,這就是要向公司特別強(qiáng)調(diào)你要去做預(yù)案的重要性,平常一年可能用不到,但是關(guān)鍵時(shí)候用了一次,那就減一半,我們只需要在后臺(tái)你比方說(shuō)我點(diǎn)一下這郵件就啪的一下全部都出去了,非常的快。你不需要琢磨這個(gè)郵件要發(fā)給誰(shuí),郵件內(nèi)容要寫(xiě)什么這樣累世的問(wèn)題。只需要簡(jiǎn)單的改幾個(gè)字,然后點(diǎn)個(gè)send發(fā)送,你就不用管了。所以說(shuō),我一般在這個(gè)里面充當(dāng)?shù)慕巧褪?,前期的確認(rèn)和后期的協(xié)調(diào),然后因?yàn)楣收嫌玫慕鉀Q了的那種請(qǐng)況下我必須要按照別人去配合,我不可能就說(shuō)因?yàn)槟莻€(gè)時(shí)候出現(xiàn)那種大故障的情況下,我的電話是不會(huì)斷的,所以說(shuō)更多的就協(xié)調(diào),讓你們?nèi)ゲ椋缓蟊M快的找到原因,然后再一方面就是就是開(kāi)始著手做協(xié)調(diào)了。不管什么時(shí)候出現(xiàn)故障,我們小組的響應(yīng)速度一般都很快。
51CTO:那這個(gè)預(yù)案系統(tǒng)是你在的時(shí)候做起來(lái)的?
劉宇:公司一直就有,每個(gè)人都有,只是說(shuō)我需要去針對(duì)我現(xiàn)在這個(gè)負(fù)責(zé)的業(yè)務(wù)情況,可能會(huì)增加一些不同的方式或者說(shuō)解決方案。
51CTO:嗯,那比如說(shuō),不管在哪個(gè)層級(jí)從技術(shù)上面處理可能思路差不多吧?先去確定故障,然后快速把這個(gè)故障修復(fù)。
劉宇:對(duì),通常一般的情況下會(huì)***個(gè)先想變更,這個(gè)思路我覺(jué)得跟別的公司沒(méi)有任何區(qū)別,我覺(jué)得是沒(méi)有任何區(qū)別,因?yàn)檎娴模邪司啪妥兏?,先想想有沒(méi)有變更,沒(méi)有變更再想下一步。通常就是***反應(yīng),有沒(méi)有變更,腦子里先過(guò)一遍這兩這幾天的東西,你有沒(méi)有變更,如果沒(méi)有,ok,再往下走。
51CTO:它也是有幾套模板的,除了變更之外,還有什么快速定位故障的?
劉宇:程序。我們有編寫(xiě)了幾個(gè)程序,如果出現(xiàn)這方面問(wèn)題的時(shí),我敲幾個(gè)命令,就能夠快速先排查幾個(gè)問(wèn)題。可能在哪一個(gè)環(huán)節(jié)發(fā)生了問(wèn)題我們就開(kāi)始寫(xiě)程序,因?yàn)镃DN盤(pán)子比較大,涉及到的業(yè)務(wù)線會(huì)比較多,所以先從核心層面去排查,然后核心層面沒(méi)什么問(wèn)題然后再往接著往下,這份故障的話,會(huì)根據(jù)業(yè)務(wù)來(lái),比方說(shuō)你這個(gè)大文件的還是小文件的,還是直播的?會(huì)根據(jù)這幾個(gè)業(yè)務(wù)來(lái)分。
51CTO:每個(gè)業(yè)務(wù)出現(xiàn)的故障可能是不太一樣。
劉宇:除了大的故障之外,就沒(méi)有什么相同的。
51CTO:那么采取的措施是什么樣的?
劉宇:措施是類(lèi)似的,但是可能在定位的那塊不一樣,所以說(shuō)我們對(duì)于不同的應(yīng)用,有不同的程序去探測(cè),我們直接在一個(gè)后臺(tái)里面。最開(kāi)始形成的時(shí)候采用的是程序,每個(gè)人電腦上裝一個(gè),根據(jù)不同的業(yè)務(wù)進(jìn)行檢測(cè)業(yè)務(wù)的可用性。如果對(duì)業(yè)務(wù)有影響的情況下,先保證服務(wù),這也是響應(yīng)機(jī)制??焖儆绊懨恳粋€(gè)投訴與反饋,并快速進(jìn)行定位判斷。
51CTO:要不講講最近遇到的故障?
劉宇: 可以聊聊最近遇到的一個(gè)劫持事件。很多公司都有劫持。通常最多的DNS劫持,不是跳轉(zhuǎn)劫持,我們把它定義為成了TCP層面的劫持。用戶(hù)去看的時(shí)候,通過(guò)各種排查方式,出現(xiàn)問(wèn)題,用戶(hù)說(shuō)我訪問(wèn)同一個(gè)頁(yè)面里面的不同的視頻,然后A同事看不了,B同事能看,然后同一家公司里面,你能看,我不能看。但是后來(lái),就是說(shuō)因?yàn)橛脩?hù)就覺(jué)得,我同一家公司的,為什么我能看,他不能看,為什么今天我這部分視頻能看,明天我這部分視頻不能看。其實(shí)這個(gè)問(wèn)題相當(dāng)詭異的??赡芎芏嗳擞龅絾?wèn)題的時(shí)候,要不然就是全公司的都不能看,要不然固定的時(shí)期不能看 。我們遇到的問(wèn)題是說(shuō),同一家公司的,然后今天是這個(gè)不能看,明天是那個(gè)不能看,然后有些時(shí)候你能看,有些時(shí)候你不能看。然后當(dāng)時(shí)我們遇到這個(gè)問(wèn)題的時(shí)候,覺(jué)得是挺詭異的。不過(guò)后來(lái)我們?nèi)シ治霭l(fā)現(xiàn)用戶(hù),它出口那個(gè)IP是變的,這是一個(gè)規(guī)律,用戶(hù)他有兩個(gè)出口,走A出口的時(shí)候正常,走B出口的時(shí)候不正常,這個(gè)是我們?cè)诳蛻?hù)端去模擬用戶(hù)請(qǐng)求,然后在服務(wù)器端抓包發(fā)現(xiàn)的。
51CTO:他們公司有兩個(gè)外網(wǎng)出口?
劉宇:這個(gè)也能理解,很多公司都有。這是一個(gè)問(wèn)題。第二個(gè)我們發(fā)現(xiàn)用戶(hù)出來(lái)的時(shí)候,它是固定的一個(gè)域名是不正常的。因?yàn)樵谖覀兊囊粋€(gè)視頻里面會(huì)有不同的域名來(lái)調(diào)用,其中發(fā)現(xiàn)只是某一個(gè)域名是不正常的,另外一個(gè)域名是正常的,由此可以判斷出為什么他們會(huì)出現(xiàn)這部分能看,這部分不能看,落在這個(gè)域名下面的是不能看的,后來(lái)我們就集中去排查,發(fā)現(xiàn)最開(kāi)始以為是劫持,很簡(jiǎn)單,如果你DNS被劫持了,然后我們發(fā)現(xiàn),你去dig、ping或者去定緩存,然后就是說(shuō)各種嘗試你發(fā)現(xiàn)沒(méi)問(wèn)題,他的解析是正常的。
dns層面是完全沒(méi)有任何問(wèn)題的,因?yàn)閐ns在windows下是有本地的緩存的,你要把他清掉的情況下,像是去跟全部DNS去查詢(xún)的,所以說(shuō)這種情況下,如果你要是清掉還不正常,那說(shuō)明他沒(méi)有劫持,沒(méi)有任何問(wèn)題。后來(lái)我們?cè)谟脩?hù)那一層面模擬用戶(hù)的請(qǐng)求,因?yàn)槲覀冇惺褂?02跳轉(zhuǎn)技術(shù),用戶(hù)跳轉(zhuǎn)之后302收到的請(qǐng)求是正常的,但下一次去訪問(wèn)時(shí)異常了,通過(guò)這次判斷,應(yīng)該是用戶(hù)走這個(gè)出口,公司有限制。這種做法在小運(yùn)營(yíng)商里面是常見(jiàn)的,但通常都是采用DNS劫持,叫內(nèi)部Cache,這樣做的好處是可以節(jié)省大部分的帶寬,因?yàn)橐曨l的錢(qián)成本是很高的。為此我們判斷出來(lái),用戶(hù)只要走這個(gè)出口,公司是采用的白名單政策,只要是在非白名單之內(nèi)的都會(huì)走內(nèi)部的Cache。然后我當(dāng)時(shí)和他們的工程師去協(xié)調(diào),對(duì)方反饋并沒(méi)有去做這種cache。但是我們從模擬出用戶(hù)的請(qǐng)求各方面來(lái)講,已經(jīng)確認(rèn)了絕對(duì)是內(nèi)部Cache導(dǎo)致。后來(lái)讓他再去溝通,通過(guò)多次溝通發(fā)現(xiàn)是他們公司集團(tuán),某一個(gè)出口里面是有cache的,然后他去走了個(gè)申請(qǐng)開(kāi)放了一下我們這個(gè)運(yùn)營(yíng)的cache限制,就好了。
51CTO:挺有意思,看起來(lái)比較隨機(jī)的問(wèn)題。這個(gè)后來(lái)是算哪個(gè)層的問(wèn)題?
劉宇:后來(lái)定義為用戶(hù)自己的問(wèn)題。
51CTO:用戶(hù)層自己的問(wèn)題,當(dāng)時(shí)在你們這兒判斷是算緊急度是怎么樣的?
劉宇:嗯……優(yōu)先級(jí)挺高的。
51CTO:它不是只有一個(gè)公司出問(wèn)題?
劉宇:沒(méi)錯(cuò),但是那個(gè)公司是屬于付費(fèi)公司,我們公司跟他們公司是有一種合作的關(guān)系。有著大量的推廣與合作,在微博兒里面是有推廣的,然后如果微博上面看不了的話,其實(shí)影響面還是挺大的,但是恰恰只影響他們公司自己人看不了。我是領(lǐng)導(dǎo)我花了錢(qián)了結(jié)果發(fā)現(xiàn)我看不了,所以說(shuō)在我們這邊排優(yōu)先級(jí)其實(shí)算挺高的,因?yàn)樯婕暗竭@里面的***一點(diǎn),算是一場(chǎng)商務(wù)上的。
51CTO:這個(gè)層級(jí)這個(gè)也算一個(gè)評(píng)級(jí)標(biāo)準(zhǔn)?
劉宇:這個(gè)也算。公司里面對(duì)于這一方面其實(shí)也挺多的,因?yàn)樯虅?wù)合作,有可能涉及到是微博的,比如戰(zhàn)略發(fā)展方向什么的。
好了,今天的采訪就到這里了,感謝劉宇的分享!此次專(zhuān)訪到此也畫(huà)上了圓滿(mǎn)的句號(hào)。如果沒(méi)來(lái)得及看前兩篇專(zhuān)訪的朋友,在此回顧下。專(zhuān)訪***部分:《專(zhuān)訪劉宇:探秘新浪CDN系統(tǒng)的代碼發(fā)布機(jī)制》、專(zhuān)訪第二部分:《專(zhuān)訪劉宇:解密新浪CDN服務(wù)器監(jiān)控機(jī)制》。再次感謝您的持續(xù)關(guān)注,如有問(wèn)題,歡迎在評(píng)論欄中留言討論。