自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

專訪劉宇:探秘新浪CDN系統(tǒng)的代碼發(fā)布機(jī)制

原創(chuàng)
運(yùn)維 系統(tǒng)運(yùn)維
今天,我們邀請(qǐng)到了新浪CDN運(yùn)維部的劉宇,來(lái)談?wù)勊麄兡抢锏拇a發(fā)布機(jī)制、監(jiān)控機(jī)制和故障響應(yīng)機(jī)制。本文是采訪的第一部分,介紹其代碼部署機(jī)制。新浪公司級(jí)別的代碼發(fā)布主要是SVN,而CDN這邊主要使用Git結(jié)合puppet來(lái)做發(fā)布。

【51CTO專訪】在之前的一次專訪中,淘寶仲明簡(jiǎn)單介紹了阿里運(yùn)維部的代碼發(fā)布機(jī)制、監(jiān)控機(jī)制和故障響應(yīng)機(jī)制。今天,我們邀請(qǐng)到了SinaEdge平臺(tái)運(yùn)維主管劉宇,來(lái)談?wù)勊麄兡抢锏南嚓P(guān)機(jī)制。本文是采訪的***部分,介紹其代碼部署機(jī)制。

[[105787]]

SinaEdge平臺(tái)運(yùn)維主管 劉宇(守住每一天)

劉宇網(wǎng)名是守住每一天,大家可以在微博上跟他交流。同時(shí),他也是LinuxTone.org的創(chuàng)造人之一,在自動(dòng)化運(yùn)維方向有一定的研究。另,他現(xiàn)在在招人,需要中高級(jí)運(yùn)維,感興趣的同學(xué)們可以去私信他。

以下為采訪實(shí)錄。

51CTO:劉宇你好,感謝您接受我們的采訪!那么,先請(qǐng)你聊聊新浪CDN的代碼發(fā)布機(jī)制是什么樣的,使用了哪些工具,走的哪些流程。

劉宇:公司級(jí)別的代碼發(fā)布的話,正常來(lái)講是有兩塊,但我們這邊主要用的是Git,然后Git去結(jié)合puppet這套來(lái)做發(fā)布。這是我們組專門做的,就相當(dāng)于自己的一套比較簡(jiǎn)單的代碼發(fā)布系統(tǒng)。

但是公司有一定的要求,就是代碼是要在公司里面去存檔的。公司那級(jí)別用的SVN。因?yàn)槲覀冏龃a的話呢,會(huì)先要在公司的SVN里面去走一遍。這一塊其實(shí)也沒(méi)什么,update上去就完了,就相當(dāng)于是一個(gè)存檔了。然后我們這塊主要就是通過(guò)Git去發(fā)布。

51CTO:相當(dāng)于一個(gè)代碼庫(kù)同時(shí)走Git和SVN。

劉宇:對(duì)。代碼庫(kù)是這樣去存的。但是我們每一次的代碼發(fā)布的話,會(huì)把它打成一個(gè)包。目前我們的倉(cāng)庫(kù)管理的話,主要是基于yum,因?yàn)槲覀兙€上大部分的設(shè)備都是CentOS,因此我們都通過(guò)yum去管理這個(gè)代碼的版本。然后每次打版本的時(shí)候,如果不是重大的那種變更的話,比方說(shuō)現(xiàn)在的版本是v1.1.1,那我們?cè)诎l(fā)布一個(gè)新版本的時(shí)候呢,會(huì)把它打成v1.1.2,然后同時(shí)會(huì)打一個(gè)v1.1.3。這相當(dāng)于一個(gè)回滾的機(jī)制。我打包是v1.1.1,然后我要升級(jí)的包是v1.1.2,我會(huì)把原來(lái)的v1.1.1的包,打成v1.1.3。

51CTO:相當(dāng)于單數(shù)的是一支,然后雙數(shù)的是另一支。

劉宇:對(duì),就是相當(dāng)于一種回滾機(jī)制。比方說(shuō),我要是說(shuō)小范圍的,因?yàn)檫@個(gè)時(shí)候發(fā)現(xiàn)v1.1.2有問(wèn)題,我在回滾的時(shí)候沒(méi)法去回滾到v1.1.1嘛。

51CTO:Git好像是可以回滾的吧?

劉宇:沒(méi)有,這個(gè)回滾指的是在線上發(fā)布的時(shí)候。如果只是代碼級(jí)別的回滾的話,那很容易去操作,我Git clone出來(lái)一個(gè)分支,check out這個(gè)分支,立馬就可以回滾回去。我們也可以采用開源的capistrano來(lái)實(shí)現(xiàn)代碼級(jí)別的發(fā)布。

但是如果你在生產(chǎn)環(huán)境中把它打包了,然后上線,要有一個(gè)逐步生效和配置的過(guò)程,因?yàn)橛锌赡苣愕囊粋€(gè)生產(chǎn)周期,不知道什么時(shí)候會(huì)有一個(gè)大的bug。這個(gè)時(shí)候回滾的時(shí)候,我們會(huì)有兩個(gè)包。

一般上線變更,公司會(huì)要求有三個(gè)梯度。

所謂梯度,是按照重要級(jí)別去做的。不同的梯度,一個(gè)是審核的長(zhǎng)度不一樣。然后,如果你的是非常非常重要的一個(gè)代碼發(fā)布,那么走的梯度,除了線上的一些流程之外,還會(huì)有些線下的流程,包括人工的審核,兩個(gè)人的互相配合,兩個(gè)人去做代碼review,然后兩個(gè)人去做上線的review等等。

51CTO:這個(gè)梯度是怎么決定的?

劉宇:根據(jù)影響范圍,和上線的范圍,包括我這個(gè)上線的代碼的核心度,會(huì)影響到哪些主要的功能,然后會(huì)開一個(gè)小圓桌會(huì)議去討論一下。通常它影響的范圍會(huì)包括開發(fā)和運(yùn)維,然后包括我們的boss會(huì)在一起去討論。

51CTO:就比如說(shuō),微博,它的聊天功能要做一個(gè)修改。你們?cè)趺礇Q定它是三級(jí)中的哪一級(jí)?

劉宇:打個(gè)比方,比方說(shuō)前端我們要做一些URL的合并,讓來(lái)自一個(gè)用戶訪問(wèn)10個(gè)的URL,如果是同一個(gè)App ID或者是同一個(gè)ID的內(nèi)容,我們就把這個(gè)URL做一些合并,這樣我們回源去取數(shù)據(jù)的時(shí)候可以只取一份。通常來(lái)說(shuō)很多軟件是不具備這種功能的,所以我們要自己要去開發(fā),這就是一種功能。

在我們來(lái)講,這是一個(gè)代碼模塊。那我們把這個(gè)模塊上線的話,至少是一個(gè)***級(jí)別的變更。

51CTO:***級(jí)別?為什么呢?

劉宇:因?yàn)槟悴恢肋@個(gè)URL是不是會(huì)回源成功,是不是會(huì)回源去取真正的數(shù)據(jù),有可能你會(huì)回源取不到數(shù)據(jù),或者說(shuō)這個(gè)URL會(huì)請(qǐng)求失敗,對(duì)用戶的影響,就是比方說(shuō)5:1的比例能夠出現(xiàn)一個(gè)故障。因?yàn)樗苯用鎸?duì)用戶。因?yàn)槭怯脩舻腢RL請(qǐng)求的時(shí)候在回源去回?cái)?shù)據(jù),那么有可能這個(gè)用戶,你合并的時(shí)候出現(xiàn)了問(wèn)題,或者說(shuō)你沒(méi)有合成功。沒(méi)有合成功也好,你就單獨(dú)回去取數(shù)據(jù),但是你不知道的原因,就是你有可能合了,但是你回源沒(méi)有取數(shù)據(jù),對(duì)吧?;蛘哒f(shuō)你在合的時(shí)候這個(gè)地方判斷失誤。

51CTO:這種就屬于級(jí)別***的了。

劉宇:嗯,可以把它列為級(jí)別***的。在判斷它是不是級(jí)別***的時(shí)候,其實(shí)沒(méi)有特別鑒定的標(biāo)準(zhǔn),最重要的是根據(jù)影響來(lái)的。根據(jù)它對(duì)用戶的影響。

51CTO:那如果是一個(gè)比較冷僻的產(chǎn)品,或者只是某些性能上的調(diào)整,可能級(jí)別就低一些?

劉宇:低級(jí)別的話,可能我只是上線一個(gè)測(cè)試的一個(gè)模塊,對(duì)線上影響是幾乎沒(méi)有的,我們可以把它定義為不是非常重要的變更。

51CTO:相當(dāng)于是由技術(shù)經(jīng)理來(lái)做一個(gè)初步的判斷。

劉宇:對(duì),我們做一個(gè)初步的判斷。

51CTO:那這個(gè)部署的時(shí)候也是先從一臺(tái)服務(wù)器開始,再部署十分之一,再推送這樣么?

劉宇:目前我們的部署,我覺(jué)得不是很智能,還沒(méi)做到那種像Akamai他們那種級(jí)別,或者像Facebook他們那種BT的部署方式,我覺(jué)得是很牛叉的。我們目前部署的話,至少可以做到程序員他們那邊自己的代碼程序,在線上是經(jīng)過(guò)一輪測(cè)試的。他們自己的一輪測(cè)試是不需要我們運(yùn)維去干預(yù)的,因?yàn)檫@塊時(shí)間是可以省下來(lái)的。他們自己會(huì)有單獨(dú)測(cè)試的環(huán)境。

51CTO:從開發(fā)提交到運(yùn)維組,中間會(huì)有一輪測(cè)試么?

劉宇:這個(gè)地方目前是沒(méi)有人員介入的,會(huì)自動(dòng)完成。所以說(shuō),它的這個(gè)版本,開發(fā)在自己的環(huán)境里面測(cè)試穩(wěn)定了,才會(huì)去提交這個(gè)版本的發(fā)布。這個(gè)版本發(fā)布的時(shí)候,***個(gè)梯度上線的情況下,我們是不需要去干預(yù)的。它會(huì)先上線到我們提供的一臺(tái)不是很重要的一個(gè)服務(wù)器上去,只是一臺(tái),然后這臺(tái)監(jiān)控的話力度是跟其他的不一樣的,它的力度比較大。

一方面它的監(jiān)控力度會(huì)比較大,另外每次也會(huì)根據(jù)它的功能去調(diào)整。如果說(shuō)缺少某一項(xiàng)功能,那么在沒(méi)有舊功能的情況下,就會(huì)去增加,開發(fā)自己也會(huì)去做一些,因?yàn)殚_發(fā)對(duì)它這個(gè)功能的模塊是比我們運(yùn)維要熟悉的。因此,它會(huì)在這個(gè)層面上面去做一些二十四小時(shí)的監(jiān)控,以及一些人為的查看,以保證它的穩(wěn)定性。一般我們的這個(gè)時(shí)候的周期一般在一兩天。

然后,開發(fā)會(huì)提代碼上線的需求,這個(gè)時(shí)候會(huì)走一些流程,然后我們就會(huì)進(jìn)行一些判斷,比方說(shuō)它是重要級(jí)別是多少,比方是一二三,三級(jí)別就是重要級(jí)別,那我們就會(huì)讓他去說(shuō),你這個(gè)上線周期可能會(huì)要到一個(gè)月。

我們按灰度上線,***的灰度其實(shí)是有一個(gè)月,有時(shí)甚至是有三到五個(gè)月。因?yàn)槲覀兂霈F(xiàn)過(guò)那種變更,潛伏了個(gè)把月,然后再爆發(fā)出問(wèn)題的。

51CTO:這是有可能。

劉宇:所以說(shuō)公司對(duì)于這種灰度級(jí)別的重要變更,這些事情把握得比較嚴(yán);但一年來(lái)說(shuō),一個(gè)平臺(tái)也就那么一到兩回。

如果是特別重要的那種,架構(gòu)改變的情況下,那是另外一套單獨(dú)的審批流程。

51CTO:那個(gè)比級(jí)別三還要高?

劉宇:對(duì),那個(gè)都不在代碼發(fā)布系統(tǒng)里面了,公司會(huì)有專門的架構(gòu)評(píng)審,組織委員會(huì)對(duì)架構(gòu)進(jìn)行評(píng)審,各個(gè)細(xì)節(jié)的,更加復(fù)雜了。因?yàn)楣?,反正從微博弄一直到現(xiàn)在,出了N多故障,其實(shí)是很正常的對(duì)不對(duì)。這其中可能有百分之九十幾,都是變更造成的。要不就是我變更的時(shí)候你沒(méi)有確認(rèn),然后完了,我就不管了。行,今兒沒(méi)問(wèn)題,明兒沒(méi)問(wèn)題,后天啪——全掛了。

51CTO:意思是開發(fā)變更的時(shí)候,運(yùn)維沒(méi)確認(rèn)?

劉宇:對(duì),要不就是運(yùn)維A變更了,運(yùn)維B沒(méi)有跟進(jìn),會(huì)出現(xiàn)類似于這樣的事情;要不就是運(yùn)維變更完了,開發(fā)沒(méi)有確認(rèn)。因此公司為了杜絕這個(gè)事情,會(huì)要求每次變更的時(shí)候,灰度一級(jí)別的情況下,你不需要干預(yù),做就行了;到達(dá)高一層級(jí)別的,就必須要有兩個(gè)人做這個(gè)變更,一個(gè)做一個(gè)review。到達(dá)***級(jí)別的情況就更不用提了,更多人會(huì)參與進(jìn)來(lái)。

我說(shuō)沒(méi)有做到像Facebook那種級(jí)別,就是因?yàn)槿思腋拇a上線是在全球的,那種BT發(fā)布系統(tǒng),并且采用了一個(gè)算法,把變更推送給體驗(yàn)用戶,只有體驗(yàn)的用戶才會(huì)看到這個(gè)變更;有可能你不是體驗(yàn)用戶,那我給你看到的不是新版。我看到的是新版,我有問(wèn)題,我會(huì)根據(jù)后臺(tái)的一個(gè)界面,然后反饋所有的bug,然后提交上去。所以說(shuō),我們現(xiàn)在還不是這種牛逼的級(jí)別,因?yàn)檫@種東西一般會(huì)針對(duì)客戶端,而在于CDN廠商來(lái)講的話,一般來(lái)講要做得這么細(xì)致的情況下,可能會(huì)是發(fā)散到全國(guó)各個(gè)機(jī)房,每個(gè)機(jī)房里面去做一臺(tái)服務(wù)器的變更,然后這個(gè)沒(méi)有變更,這個(gè)沒(méi)有問(wèn)題了,然后再擴(kuò)充。我們現(xiàn)在只是到一臺(tái)服務(wù)器,然后再到一個(gè)節(jié)點(diǎn),一個(gè)節(jié)點(diǎn)確定沒(méi)問(wèn)題之后,然后再做灰度的慢慢逐步上線。這個(gè)變更的周期也是根據(jù)梯度來(lái)的。

51CTO:你們這邊做測(cè)試時(shí)用什么工具?

劉宇:我們代碼review都是叫開發(fā)自己做,我們不需要再做代碼的review。開發(fā)那邊會(huì)有開發(fā)的一套代碼review的流程,除了開發(fā)人員之外,還有開發(fā)經(jīng)理在做。

我們更多的是關(guān)注于它的穩(wěn)定性,它是不是有一些重大的bug,或者安全漏洞,然后會(huì)不會(huì)有一些很低級(jí)的那種錯(cuò)誤,比方說(shuō)它不規(guī)范,我們都會(huì)打回去。類似于這樣的情況。

51CTO:比如注釋做的不全之類的?

劉宇:對(duì),這種都會(huì)。

51CTO:能不能具體說(shuō)說(shuō),每個(gè)梯度需要多少人,或者是什么級(jí)別的人來(lái)審核?

劉宇:***級(jí)別的灰度比較低,通常兩個(gè)人審核就夠了,一個(gè)是開發(fā)主管,一個(gè)是運(yùn)維主管,兩個(gè)人作為審核,交叉審核,交叉審核之后依然沒(méi)什么問(wèn)題情況下,就會(huì)有一個(gè)人去實(shí)施,這樣的一個(gè)流程就夠了。所以實(shí)施就是運(yùn)維一個(gè)開發(fā)一個(gè),也就是說(shuō)干活的人有兩個(gè),審核的人有兩個(gè),這個(gè)級(jí)別相對(duì)還是比較容易的,不會(huì)有太大問(wèn)題。

往上一個(gè)級(jí)別后,會(huì)多一個(gè)經(jīng)理進(jìn)來(lái),也就是開發(fā)主管和運(yùn)維主管的上級(jí)。

第二級(jí)別的變更,其實(shí)是根據(jù)它上線的這個(gè)代碼的功能情況去做判斷,一般來(lái)講會(huì)根據(jù)它的影響范圍,判斷它是灰度幾,就是看它上線的這個(gè)東西會(huì)對(duì)用戶有多大的影響。

未知的更不用說(shuō)了,如果都不知道會(huì)有什么樣的影響,那么就對(duì)不起了。每次上線的時(shí)候開發(fā)都必須跟我們?nèi)ブv,講明白這個(gè)東西是做什么用的,然后運(yùn)維根據(jù)它這個(gè)需求去查一些相關(guān)的資料,去看一下可能會(huì)對(duì)線上造成什么影響。因?yàn)椴⒉皇撬械念I(lǐng)域每個(gè)人都很精通嘛,我們只要把握在我們的關(guān)注點(diǎn)就行了,對(duì)我們而言,穩(wěn)定***。

第三級(jí)別的話就是說(shuō),如果它上線的這個(gè)模塊,對(duì)用戶的影響是我們可以評(píng)估出來(lái)的,我們就會(huì)直接走到我們的部門總監(jiān)那里,在部門總監(jiān)那邊走審批。部門總監(jiān)那把握度就會(huì)不一樣了,它那個(gè)級(jí)別的話,除了走線上的流程,還會(huì)走一些線下的流程。線下的流程可能就是一個(gè)指示單,然后會(huì)有一些協(xié)議,然后這個(gè)時(shí)候參與人員會(huì)變成運(yùn)維兩個(gè),開發(fā)兩個(gè),就是在真正實(shí)施的時(shí)候,除了剛才我們說(shuō)的局部到全局慢慢上線的之外,然后實(shí)施人員會(huì)變成四個(gè),實(shí)施周期會(huì)變成至少一個(gè)月。

51CTO:這個(gè)周期是指上線之后還有監(jiān)控觀察的周期?

劉宇:對(duì),比方說(shuō)我上線了一臺(tái)服務(wù)器,這個(gè)一臺(tái)服務(wù)器你至少要觀察七天,相當(dāng)于一周。然后,你在上線到一個(gè)節(jié)點(diǎn)的時(shí)候,必須要觀察兩周,就類似于這樣的情況。然后觀察完成之后,你再逐步再上線,直至上線完成。一般情況下,至少是一個(gè)月,很少說(shuō)在一個(gè)月能全部都上線完成的??偙O(jiān)一般會(huì)跟進(jìn)一下這個(gè)事情。

51CTO:那比如說(shuō)我部署到一個(gè)節(jié)點(diǎn),然后出了問(wèn)題,會(huì)怎么處理?

劉宇:因?yàn)樵诿恳粋€(gè)環(huán)節(jié),我們每更新一個(gè),然后會(huì)通告,然后在一周之后匯報(bào)一下這個(gè)情況,如果ok,沒(méi)有問(wèn)題,然后再說(shuō)明我在繼續(xù)下一步,會(huì)做什么事情。然后到下一步之后,如果說(shuō)出現(xiàn)問(wèn)題了,在出現(xiàn)問(wèn)題的情況下,就會(huì)走最開始我們說(shuō)的那個(gè)版本回滾的機(jī)制。也就是說(shuō),現(xiàn)在它的版本已經(jīng)更新到***版本了,我們?cè)趐uppet只需要在后臺(tái)去改一下,然后可以立馬實(shí)施生效的,回滾非常的快,直接就完成回滾了。

51CTO:這相當(dāng)于v1.0.2變成v1.0.3。

劉宇:沒(méi)錯(cuò),這相當(dāng)于我們小版本往前走了兩個(gè)版本,實(shí)際上v1.0.3和v1.0.1是一樣的,實(shí)際上做變更是沒(méi)有做,但是至少我們通過(guò)這樣的方式就已經(jīng)保證它的運(yùn)行,并且回滾的非???。

51CTO:對(duì),而且這樣你就能知道中間做了什么。

劉宇:沒(méi)錯(cuò),畢竟我知道這個(gè)v1.0.2里面有什么問(wèn)題,它有哪些bug,等等。如果這個(gè)時(shí)候再想要變更,那這個(gè)時(shí)候就要等到v1.0.4和v1.0.5了。我覺(jué)得在我們大平臺(tái)來(lái)講,這是個(gè)比較新穎的方式。

 

責(zé)任編輯:yangsai 來(lái)源: 51CTO.com
相關(guān)推薦

2013-07-24 15:21:32

CDN故障響應(yīng)

2013-07-22 13:51:24

監(jiān)控CDN服務(wù)器劉宇

2015-08-03 17:29:11

個(gè)推

2014-08-25 09:03:44

HuluSpark On Y

2023-06-07 15:25:19

Kafka版本日志

2012-08-28 17:04:27

2021-01-06 09:01:05

javaclass

2009-08-25 15:30:55

DataGrid We

2014-10-21 09:52:35

智能硬件智能家居

2012-12-25 16:26:40

Linux運(yùn)維趨勢(shì)

2013-08-28 17:35:35

監(jiān)控故障告警雅虎

2009-03-11 10:29:23

代碼契約.NETCLR

2010-03-29 16:48:18

Nginx內(nèi)核優(yōu)化

2010-02-07 14:54:13

Android

2015-04-24 11:32:40

騰訊手游運(yùn)維

2015-09-02 15:26:13

環(huán)信

2015-01-22 09:23:20

智能硬件智能家居

2011-12-23 15:56:02

2012-05-30 17:34:01

2009-07-09 18:15:42

JDBC事務(wù)處理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)