國內大部分互聯(lián)網(wǎng)公司都是沒(méi)有太多技術(shù)積累的,因為大部分產(chǎn)品的開(kāi)發(fā)都只追求開(kāi)發(fā)速度,并不會(huì )特別追求技術(shù)上的極致,就更不要提文檔這種東西了。也正因為如此,從中國雅虎出來(lái)看到其它公司的知識庫的時(shí)候總有不過(guò)癮的感覺(jué),可能也只有像 Google, 微軟和 Facebook 這樣的公司才會(huì )有像 Yahoo! 那樣的知識庫吧。在和之前一些同事吃飯聊天的時(shí)候,大家也總是會(huì )懷念那個(gè)無(wú)所不包完全開(kāi)放的 Twiki ,好像少了一個(gè)忠實(shí)的朋友一樣。我們由衷地尊敬那些在完成工作之余還愿意總結項目經(jīng)驗并花時(shí)間寫(xiě) Twiki 的工程師們。
四、完善的流程
第一次參與項目開(kāi)發(fā)的時(shí)候,我的 Leader 領(lǐng)了一個(gè) MM 過(guò)來(lái)說(shuō):“這位是項目的 QA 負責人”,我當時(shí)愣了一下:“呃…… QA 是做什么的?” 盡管在大學(xué)里我也在實(shí)驗室做過(guò)一些項目,但那些項目基本上都是我自己負責所有的事情,完全沒(méi)有分工和流程的概念,所以也不知道 QA 是負責產(chǎn)品測試工作的。進(jìn)入中國雅虎之后,我才第一次接觸到商業(yè)產(chǎn)品的開(kāi)發(fā)流程,不過(guò)由于那個(gè)時(shí)候中國雅虎已經(jīng)半死不活,我也沒(méi)有受到有關(guān)流程的入職培訓,以至于在做了好幾個(gè)項目之后才真正熟悉了完整的流程。
中國雅虎的開(kāi)發(fā)流程沿襲了 Yahoo! 的開(kāi)發(fā)流程,乍看之下很平常,對于已經(jīng)熟悉的工程師來(lái)說(shuō)還顯得枯燥,但后來(lái)我特別留心了這套流程之后,非常驚奇于它的嚴謹和高效,所以這里要詳細說(shuō)明一下。Yahoo! 的內部生產(chǎn)線(xiàn)分為三個(gè)相互獨立的環(huán)境:開(kāi)發(fā)環(huán)境、測試環(huán)境和生產(chǎn)環(huán)境(即線(xiàn)上環(huán)境)。這三個(gè)環(huán)境雖然獨立,但它們的配置都會(huì )盡量保持一致,這樣就可以保證開(kāi)發(fā)完成的產(chǎn)品不會(huì )因為環(huán)境不同而出現問(wèn)題。在開(kāi)發(fā)的時(shí)候,我們會(huì )在開(kāi)發(fā)環(huán)境中搭建虛擬環(huán)境,開(kāi)發(fā)完畢之后開(kāi)發(fā)工程師會(huì )自己在虛擬環(huán)境里面測試,保證沒(méi)有大的問(wèn)題,然后就會(huì )把所有相關(guān)文件打包上傳到雅虎全球統一放置產(chǎn)品包的地方。上傳完畢之后,就會(huì )發(fā)郵件通知 QA 部門(mén)相關(guān)人員,郵件內容里面要寫(xiě)明產(chǎn)品在測試環(huán)境的部署步驟:需要安裝哪些包、是否需要修改數據庫等等。然后 QA 就會(huì )開(kāi)始測試,如果發(fā)現 BUG 就會(huì )寫(xiě)到 bugzilla/' target='_blank'>Bugzilla 中,指派給相應的開(kāi)發(fā)工程師,開(kāi)發(fā)工程師就會(huì )在開(kāi)發(fā)環(huán)境中定位BUG并修正,修正一些BUG之后就會(huì )再次打包升級產(chǎn)品的版本,然后QA 會(huì )將新的軟件包部署到測試環(huán)境驗證之前的 BUG 并報告新的 BUG 。整個(gè)測試過(guò)程中可能要發(fā)布好多個(gè)版本,直到所有 BUG 被修正為止。修正完畢所有的 BUG 之后,開(kāi)發(fā)工程師就會(huì )填寫(xiě)上線(xiàn)申請,Ops 看到申請之后就會(huì )安排一個(gè)時(shí)間把產(chǎn)品部署到生產(chǎn)環(huán)境。一般來(lái)說(shuō),生產(chǎn)環(huán)境不止會(huì )有一臺機器,所以 Ops 會(huì )先從生產(chǎn)環(huán)境摘下一臺機器部署,部署完畢之后會(huì )告知 QA 和開(kāi)發(fā)工程師,然后 QA 和開(kāi)發(fā)工程師就會(huì )修改 Hosts 文件,配置域名指向那臺機器進(jìn)行線(xiàn)上的測試,如果測試沒(méi)有問(wèn)題,那么就會(huì )把軟件包部署到生產(chǎn)環(huán)境中所有的機器上,完成上線(xiàn);否則就進(jìn)行回滾,取消這次上線(xiàn),也不會(huì )影響到線(xiàn)上的用戶(hù)。
整個(gè)流程大概就是這樣,但是要特別注意的是以下幾點(diǎn):1. 開(kāi)發(fā)工程師只能接觸開(kāi)發(fā)環(huán)境。他所能做的就是在開(kāi)發(fā)環(huán)境中開(kāi)發(fā)、改 BUG 和打包上傳。如果他去測試環(huán)境中修改 BUG,就很有可能忘記修改開(kāi)發(fā)環(huán)境中的相應代碼,這可能會(huì )導致產(chǎn)品測試通過(guò)但是上線(xiàn)之后卻發(fā)現大的問(wèn)題。 2. 產(chǎn)品“封版”之后就不可以做任何改動(dòng),如果有改動(dòng),即使只改動(dòng)了一點(diǎn)所有功能也要重新測試一遍。所有的 BUG 都修改完畢之后的那個(gè)版本就會(huì )進(jìn)行“封版”,那就標志著(zhù)這個(gè)產(chǎn)品隨時(shí)可以準備上線(xiàn)了。如果真的發(fā)現了新的 BUG 要修改的話(huà),那么修改之后就需要重新打包重新走一遍完整的測試流程,只有這樣才能夠保證就算修改代碼過(guò)程中引入了新的 BUG 也不會(huì )被遺漏。 3. 上線(xiàn)手冊要詳細。開(kāi)發(fā)工程師要詳細寫(xiě)明每一個(gè)步驟,不只是說(shuō)明性的文字,還要把具體的安裝和修改命令完整地放上去,如果寫(xiě)得好的話(huà),那么 Ops 的同事只需要把上線(xiàn)手冊里面的命令逐行復制到服務(wù)器上運行就可以完成上線(xiàn)。
這樣的流程有什么好處呢? 首先,它最大地降低了上線(xiàn)風(fēng)險。因為開(kāi)發(fā)工程師不能接觸到測試環(huán)境,只能打包讓QA測試,所以完整經(jīng)過(guò)測試的產(chǎn)品上線(xiàn)之后基本不會(huì )有什么問(wèn)題,況且上線(xiàn)的時(shí)候我們也要先部署到一臺機器上進(jìn)行測試之后才會(huì )決定是否上線(xiàn),即使上線(xiàn)不成功也可以在不影響用戶(hù)的情況下回滾。中國雅虎的上線(xiàn)極少會(huì )出現問(wèn)題,很多時(shí)候我們上線(xiàn)到半夜只是因為那個(gè)時(shí)間段用戶(hù)訪(fǎng)問(wèn)量最小,而不是說(shuō)焦頭爛額地忙活幾個(gè)小時(shí)一直到半夜才上線(xiàn)成功。其次,它使得各個(gè)部門(mén)職責分明。開(kāi)發(fā)工程師和 QA 通過(guò) Bugzilla 溝通,和 Ops 通過(guò)上線(xiàn)手冊溝通,因為溝通渠道唯一而且清晰,所以就可以完全責任到人,出了問(wèn)題也很容易定位到具體環(huán)節。比如說(shuō),如果產(chǎn)品測試通過(guò)之后在上線(xiàn)的時(shí)候出現了問(wèn)題,那么基本就可以確定是 Ops 操作失誤或者上線(xiàn)手冊沒(méi)有寫(xiě)好。職責分明之后很多事情也變得有條理,大家就可以各司其職、專(zhuān)注本職工作并且合作愉快,開(kāi)會(huì )的時(shí)候也可以明確知道需要哪些人參加。
完善、清晰的流程從根本上解決了一些問(wèn)題,創(chuàng )建了一個(gè)非常好的環(huán)境,這樣我們就可以把心思都放在如何開(kāi)發(fā)和測試上面,而不用擔心諸如“如何上線(xiàn)才能不出錯”等瑣碎的事情。所以盡管中國雅虎的高層那么不靠譜,我工作得還是很開(kāi)心,因為這個(gè)流程保證了管理層再怎么亂開(kāi)發(fā)也不會(huì )亂。記得那時(shí)候很喜歡改 BUG ,有時(shí)候改得興起會(huì )把之前版本遺留的 miss BUG 一并改掉,加班也是頗有興致,不是很能明白為什么網(wǎng)上大部分程序員討厭加班討厭得要死?,F在我明白了。
五、自動(dòng)化工具
工欲善其事,必先利其器。如果沒(méi)有那么多好用的自動(dòng)化工具,那么 Yahoo! 的流程就不可能如此完善。Yahoo! 內部有很多非常好用的工具,而且這些工具都有非常齊全的文檔,也可以在 Twiki 上找到不少相關(guān)資料。這些工具之所以在 Yahoo! 會(huì )起到那么大的作用,是因為 Yahoo! 全球所有的技術(shù)團隊都在使用它們,Yahoo! 所有的服務(wù)器上也是默認安裝了這些工具。這些工具就形成了一套全球 Yahoo! 工程師通用的話(huà)語(yǔ)體系,可以想象它們幫助 Yahoo! 節省了多少溝通成本。
由于考慮到服務(wù)器的安全問(wèn)題,Yahoo! 的這些工具的使用方法是對外保密的,這里我只簡(jiǎn)單說(shuō)一下 Yinst 這款工具的強大。假如要把軟件包 example_1_1_0.tar.gz 部署到 a1.yahoo.com ~ a10.yahoo.com ,那么只需要下面這樣一行命令:
原文轉自:http://blogread.cn/it/article/2703?f=wb