百姓網(wǎng):DevOps編程模式 每天上線一次
原創(chuàng)作為互聯(lián)網(wǎng)分類信息領(lǐng)域的“輕量級(jí)”公司,百姓網(wǎng)的訪問(wèn)速度和開發(fā)交付速度一直為業(yè)內(nèi)人士所稱道。在4月份的北京QCon上,百姓網(wǎng)的技術(shù)總監(jiān)潘曉良為大家分享了百姓網(wǎng)在速度優(yōu)化方面的經(jīng)驗(yàn),半年后,在杭州QCon上,來(lái)自百姓網(wǎng)的幾名技術(shù)人員為大家?guī)?lái)了新的分享:百姓網(wǎng)是如何做到“每天上線一次”的快速交付的。
百姓網(wǎng)技術(shù)團(tuán)隊(duì)一共有12名技術(shù)人員,10月22日杭州QCon當(dāng)天到場(chǎng)了6位。其中負(fù)責(zé)開發(fā)的趙君和負(fù)責(zé)運(yùn)維的潘捷為大家?guī)?lái)了這次分享。趙君和潘捷,正好是一個(gè)dev+ops的組合。
半年前,潘曉良介紹稱百姓網(wǎng)的每月PV達(dá)到10億的流量,而趙君和潘捷稱,目前,這個(gè)數(shù)字已經(jīng)是半年前的兩倍:每月20億流量。而支持如此大規(guī)模流量的,正是百姓網(wǎng)的交付速度。
像百姓網(wǎng)這樣12人的輕量級(jí)團(tuán)隊(duì)非常適合DevOps的交付模式,每天上線給百姓網(wǎng)帶來(lái)的好處包括:開發(fā)效率的提高,PM不再追問(wèn)什么時(shí)候能上線;恐怖的大錯(cuò)誤變少(大項(xiàng)目切小);對(duì)互聯(lián)網(wǎng)的高速變化的完全適應(yīng)。
那么百姓網(wǎng)是如何做到每日上線,在此過(guò)程中又是如何保證網(wǎng)站穩(wěn)定的呢?
用戶測(cè)試驅(qū)動(dòng)開發(fā)
趙君介紹說(shuō),要做到以天為周期的交付,第一是提高開發(fā)效率。其中有幾個(gè)關(guān)鍵點(diǎn):統(tǒng)一開發(fā)和運(yùn)維環(huán)境;大項(xiàng)目拆解;保持良好的團(tuán)隊(duì)溝通;以及用戶測(cè)試驅(qū)動(dòng)開發(fā)。
百姓網(wǎng)統(tǒng)一開發(fā)運(yùn)維環(huán)境的方法是,配置與線上環(huán)境一模一樣的本地調(diào)試服務(wù)器,開發(fā)人員本地寫代碼自動(dòng)同步到本地服務(wù)器上。這樣做還有一個(gè)好處,在上線之前,整個(gè)公司相關(guān)人員就可以訪問(wèn)服務(wù)器,開發(fā)過(guò)程對(duì)PM是透明的,對(duì)公司所有人都是透明的,便于大家及時(shí)發(fā)現(xiàn)問(wèn)題并反饋。
其次,為了保證每天交付,就需要把大項(xiàng)目拆解成一個(gè)一個(gè)的小項(xiàng)目。百姓網(wǎng)采用SVN無(wú)分支的方面,大家都在主干里面做開發(fā),代碼提交之后,立刻見(jiàn)效,盡量在開發(fā)的過(guò)程中把問(wèn)題暴露出來(lái),而不是等到上線是才發(fā)現(xiàn)
第三點(diǎn)也是最重要的一點(diǎn):保持良好的團(tuán)隊(duì)溝通。針對(duì)這一點(diǎn),百姓網(wǎng)做了一個(gè)小小的物理上的改變:就是讓PM和開發(fā)人員坐在一起。“我們所有產(chǎn)品經(jīng)理和技術(shù)開發(fā)人員坐在一起。很多錯(cuò)誤自然的變少。”
最后,趙君總結(jié)道:“我們是用戶測(cè)試驅(qū)動(dòng)開發(fā)。我們沒(méi)有專門的測(cè)試。其中用戶的概念,包括了PM,公司其他人和所有網(wǎng)站用戶”。
性能與速度的平衡
大項(xiàng)目拆解,每天上線,這種工作方式不可避免的帶來(lái)一些關(guān)于穩(wěn)定性的隱患,包括:線上錯(cuò)誤;hotfix出錯(cuò);邏輯錯(cuò)誤;性能隱患等。
據(jù)潘捷介紹,百姓網(wǎng)針對(duì)這幾種隱患都找到了相應(yīng)的解決方法。
首先,關(guān)于線上錯(cuò)誤的解決。他們選擇在早晨用戶量比較少的時(shí)候上線新功能,這樣萬(wàn)一出錯(cuò)對(duì)用戶的影響會(huì)比較小,而且此時(shí)技術(shù)人員頭腦比較清醒,人員到位也比較齊,方便大家一起解決問(wèn)題。同時(shí),對(duì)于發(fā)現(xiàn)的錯(cuò)誤,他們采用郵件的方式通知所有人,不僅能做到互相提醒、盡快定位錯(cuò)誤,而且有助于其他人員防患于未然。
針對(duì)hotfix出錯(cuò),他們采用具避免這類低級(jí)錯(cuò)誤,將php -1 xxx.php語(yǔ)句嵌到線上文件里,幫助避免了線上修改的語(yǔ)法錯(cuò)誤。
邏輯錯(cuò)誤則采用二八法則應(yīng)對(duì):80%的用戶,依賴網(wǎng)站20%的核心功能。使用“Curl http://www.baixing.com ”檢測(cè)主要的功能頁(yè)面,如果返回的http200,就可以運(yùn)行。
開發(fā)速度快,代碼質(zhì)量肯定是下降的,對(duì)此造成的性能隱患,百姓網(wǎng)采用在線紀(jì)錄DB,search慢查詢的方法解決。潘捷介紹說(shuō),各種方法其實(shí)都不是絕對(duì)的,但是在速度和性能之間,你要找到一種平衡。重要的功能及時(shí)犧牲速度也要保證,但是一般性的功能,就可以快速交付。
用戶測(cè)試驅(qū)動(dòng)開發(fā)保證開發(fā)效率、自動(dòng)化的方式保證網(wǎng)站穩(wěn)定、盡可能用機(jī)器代替人的工作,這就是百姓網(wǎng)能做到“每天上線”的秘訣。當(dāng)天的主持人、百度網(wǎng)高級(jí)架構(gòu)師喬梁最后總結(jié)道,百度網(wǎng)的這種工作方式,正是某位國(guó)際技術(shù)專家所提到的“無(wú)政府主義編程,即所有人為所有事負(fù)責(zé)。”
互聯(lián)網(wǎng)世界高速發(fā)展,企業(yè)面臨的各種競(jìng)爭(zhēng)越來(lái)越激烈,快速應(yīng)變能力成為企業(yè)的一項(xiàng)基本要求,百姓網(wǎng)的快速交付案例,也許可以給從事開發(fā)運(yùn)維的團(tuán)隊(duì)一些啟示。

















