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