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