自動(dòng)化持續(xù)部署的三種反模式及解決方案(1)
2016-02-20 19:33:43 來源: 老王 互聯(lián)網(wǎng)運(yùn)維雜談 評(píng)論:0 點(diǎn)擊:
自動(dòng)化持續(xù)部署是業(yè)界最佳實(shí)踐,以此為目標(biāo),能優(yōu)化IT模式。
在接觸的很多企業(yè)中,持續(xù)部署實(shí)踐依然還有很多不足,基本上部署靠人,更別談自動(dòng)化了。我一直強(qiáng)調(diào)持續(xù)部署是IT交付的核心能力,直接關(guān)聯(lián)到研發(fā)/測試和運(yùn)維多個(gè)團(tuán)隊(duì),可以成為一個(gè)運(yùn)維的核心平臺(tái)。自動(dòng)化部署能力的高與低,能映射出IT能力的諸多方面的問題,比如說流程上/環(huán)境管理上/服務(wù)耦合上/平臺(tái)能力上等等。
個(gè)人已經(jīng)做了三個(gè)持續(xù)部署系統(tǒng),每做一個(gè)持續(xù)部署系統(tǒng)都給整個(gè)IT團(tuán)隊(duì)帶來巨大的收益。當(dāng)帶著這些經(jīng)歷再回過頭去看《持續(xù)交付》這本書的時(shí)候,書中的很多觀點(diǎn)讓我感觸很多,基本上每個(gè)點(diǎn)都有自己的感受。
讓我們來看看《持續(xù)交付》中總結(jié)的很多錯(cuò)誤的模式,這些錯(cuò)誤的模式的確是現(xiàn)實(shí)存在的,且必須要避免的,稱之為反模式,具體如下:
一、反模式1:手工部署軟件
對(duì)于現(xiàn)在的大多數(shù)應(yīng)用程序來說,無論規(guī)模大小,其部署過程都比較復(fù)雜,而且包含很多非常靈活的部分。許多組織都使用手工方式發(fā)布軟件,也就是說部署應(yīng)用程序所需的步驟是獨(dú)立的原子性操作,由某個(gè)人或某個(gè)小組來分別執(zhí)行。每個(gè)步驟里都有一些需要人為判斷的事情,因此很容易發(fā)生人為錯(cuò)誤。即便不是這樣,這些步驟的執(zhí)行順序和時(shí)機(jī)的不同也會(huì)導(dǎo)致結(jié)果的差異性,而這種差異性很可能給我們帶來不良后果。這種反模式的特征如下:
◆有一份非常詳盡的文檔,該文檔描述了執(zhí)行步驟及每個(gè)步驟中易出錯(cuò)的地方。
◆以手工測試來確認(rèn)該應(yīng)用程序是否運(yùn)行正確。
◆在發(fā)布當(dāng)天開發(fā)團(tuán)隊(duì)頻繁地接到電話,客戶要求解釋部署為何會(huì)出錯(cuò)。
◆在發(fā)布時(shí),常常會(huì)修正一些在發(fā)布過程中發(fā)現(xiàn)的問題。
◆如果是集群環(huán)境部署,常常發(fā)現(xiàn)在集群中各環(huán)境的配置都不相同,比如應(yīng)用服務(wù)器的連接池設(shè)置不同或文件系統(tǒng)有不同的目錄結(jié)構(gòu)等。
◆發(fā)布過程需要較長的時(shí)間(超過幾分鐘)。
◆發(fā)布結(jié)果不可預(yù)測,常常不得不回滾或遇到不可預(yù)見的問題。
◆發(fā)布之后凌晨兩點(diǎn)還睡眼惺忪地坐在顯示器前,絞盡腦汁想著怎么讓剛剛部署的應(yīng)用程序能夠正常工作。
相反,隨著時(shí)間的推移,部署應(yīng)該走向完全自動(dòng)化,即對(duì)于那些負(fù)責(zé)將應(yīng)用程序部署到開發(fā)環(huán)境、測試環(huán)境或生產(chǎn)環(huán)境的人來說,應(yīng)該只需要做兩件事:(1)挑選版本及需要部署的環(huán)境;(2)按一下“部署”按鈕。對(duì)于套裝軟件的發(fā)布來說,還應(yīng)該有一個(gè)創(chuàng)建安裝程序的自動(dòng)化過程。
當(dāng)然,并不是所有的人都熱衷于這個(gè)想法。那么,我們先來解釋一下為什么把自動(dòng)化部署看做是一個(gè)必不可少的目標(biāo)。
◆如果部署過程沒有完全自動(dòng)化,每次部署時(shí)都會(huì)發(fā)生錯(cuò)誤。唯一的問題就是“該問題嚴(yán)重與否”而已。即便使用良好的部署測試,有些錯(cuò)誤也很難追查。
◆如果部署過程不是自動(dòng)化的,那么它就既不可重復(fù)也不可靠,就會(huì)在調(diào)試部署錯(cuò)誤的過程中浪費(fèi)很多時(shí)間。
◆手動(dòng)部署流程不得不被寫在文檔里。可是文檔維護(hù)是一項(xiàng)復(fù)雜而費(fèi)時(shí)的任務(wù),它涉及多人之間的協(xié)作,因此文檔通常要么是不完整的,要么就是未及時(shí)更新的,而把一套自動(dòng)化部署腳本作為文檔,它就永遠(yuǎn)是最新且完整的,否則就無法進(jìn)行部署工作了。
◆自動(dòng)部署本質(zhì)上也是鼓勵(lì)協(xié)作的,因?yàn)樗袃?nèi)容都在一個(gè)腳本里,一覽無遺。要讀懂文檔通常需要讀者具備一定的知識(shí)水平。然而在現(xiàn)實(shí)中,文檔通常只是為執(zhí)行部署者寫的備忘錄,是難以被他人理解的。
◆以上幾點(diǎn)引起的一個(gè)必然結(jié)果:手工部署過程依賴于部署專家。如果專家去度假或離職了,那你就有麻煩了。
◆盡管手工部署枯燥且極具重復(fù)性,但仍需要有相當(dāng)程度的專業(yè)知識(shí)。若要求專家做這些無聊、重復(fù),但有技術(shù)要求的任務(wù)則必定會(huì)出現(xiàn)各種我們可以預(yù)料到的人為失誤,同時(shí)失眠,酗酒這種問題也會(huì)接踵而至。然而自動(dòng)化部署可以把那些成本高昂的資深高技術(shù)人員從過度工作中解放出來,讓他們投身于更高價(jià)值的工作活動(dòng)當(dāng)中。
◆對(duì)手工部署過程進(jìn)行測試的唯一方法就是原封不動(dòng)地做一次(或者幾次)。這往往費(fèi)時(shí),還會(huì)造成高昂的金錢成本,而測試自動(dòng)化的部署過程卻是既便宜又容易。
◆另外,還有一種說法:自動(dòng)化過程不如手工過程的可審計(jì)性好。我們對(duì)這個(gè)觀點(diǎn)感到很疑惑。對(duì)于一個(gè)手工過程來說,沒人能確保其執(zhí)行者會(huì)非常嚴(yán)格地遵循文檔完成操作。只有自動(dòng)化過程是完全可審核的。有什么會(huì)比一個(gè)可工作的部署腳本更容易被審核的呢?
◆每個(gè)人都應(yīng)該使用自動(dòng)化部署過程,而且它應(yīng)該是軟件部署的唯一方式。這個(gè)準(zhǔn)則可以確保:在需要部署時(shí),部署腳本就能完成工作。我們會(huì)提到多個(gè)原則,而其中之一就是“使用相同的腳本將軟件部署到各種環(huán)境上”。如果使用相同的腳本將軟件部署到各類環(huán)境中,那么在發(fā)布當(dāng)天需要向生產(chǎn)環(huán)境進(jìn)行部署時(shí),這個(gè)腳本已經(jīng)被驗(yàn)證過成百上千次了。如果發(fā)布時(shí)出現(xiàn)任何問題的話,你可以百分百地確定是該環(huán)境的具體配置問題,而不是這個(gè)腳本的問題。
當(dāng)然,手工密集型的發(fā)布工作有時(shí)也會(huì)進(jìn)行得非常順利。有沒有可能是糟糕的情況剛巧都被我們撞見了呢?假如在整個(gè)軟件生產(chǎn)過程中它還算不上一個(gè)易出錯(cuò)的步驟,那么為什么還總要這么嚴(yán)陣以待呢?為什么需要這些流程和文檔呢?為什么團(tuán)隊(duì)在周末還要加班呢?為什么還要求大家原地待命,以防意外發(fā)生呢?
二、反模式2:開發(fā)完成之后才向類生產(chǎn)環(huán)境部署
在這一模式下,當(dāng)軟件被第一次部署到類生產(chǎn)環(huán)境(比如試運(yùn)行環(huán)境)時(shí),就是大部分開發(fā)工作完成時(shí),至少是開發(fā)團(tuán)隊(duì)認(rèn)為“該軟件開發(fā)完成了”。這種模式中,經(jīng)常出現(xiàn)下面這些情況:
◆如果測試人員一直參與了在此之前的過程,那么他們已在開發(fā)機(jī)器上對(duì)軟件進(jìn)行了測試。
◆只有在向試運(yùn)行環(huán)境部署時(shí),運(yùn)維人員才第一次接觸到這個(gè)新應(yīng)用程序。在某些組織中,通常是由獨(dú)立的運(yùn)維團(tuán)隊(duì)負(fù)責(zé)將應(yīng)用程序部署到試運(yùn)行環(huán)境和生產(chǎn)環(huán)境。在這種工作方式下,運(yùn)維人員只有在產(chǎn)品被發(fā)布到生產(chǎn)環(huán)境時(shí)才第一次見到這個(gè)軟件。
◆有可能由于類生產(chǎn)環(huán)境非常昂貴,所以權(quán)限控制嚴(yán)格,操作人員自己無權(quán)對(duì)該環(huán)境進(jìn)行操作,也有可能環(huán)境沒有按時(shí)準(zhǔn)備好,甚至也可能根本沒人去準(zhǔn)備環(huán)境。
◆開發(fā)團(tuán)隊(duì)將正確的安裝程序、配置文件、數(shù)據(jù)庫遷移腳本和部署文檔一同交給那些真正執(zhí)行部署任務(wù)的人員,而所有這些都沒有在類生產(chǎn)環(huán)境或試運(yùn)行環(huán)境中進(jìn)行過測試。
◆開發(fā)團(tuán)隊(duì)和真正執(zhí)行部署任務(wù)的人員之間的協(xié)作非常少。
每當(dāng)需要將軟件部署到試運(yùn)行環(huán)境時(shí),都要組建一個(gè)團(tuán)隊(duì)來完成這項(xiàng)任務(wù),有時(shí)候這個(gè)團(tuán)隊(duì)是一個(gè)全功能團(tuán)隊(duì),然而在大型組織中,這種部署責(zé)任通常落在多個(gè)分立的團(tuán)隊(duì)肩上。
相關(guān)熱詞搜索:反模式 持續(xù)部署 自動(dòng)化運(yùn)維
上一篇:WOT講師錢承君:大數(shù)據(jù)帶給百度測試團(tuán)隊(duì)的發(fā)展新探索
下一篇:運(yùn)維人不應(yīng)該忽略的理念和實(shí)踐(1)

頻道總排行
- Cisco NetFlow v9為何無人問津?
- 技術(shù)專題:智能化運(yùn)維
- 開源代碼管理:如何安全地使用開源庫?
- Facebook架構(gòu)解讀
- IT運(yùn)維分析與海量日志搜索需要注意什么(1)
- 金山運(yùn)維肖力:如何將業(yè)務(wù)遷移到虛擬化環(huán)境并穩(wěn)定運(yùn)行(1)
- Apache Ignite(四):基于Ignite的分布式ID生成器
- CrazyEye,一款國人開源的堡壘機(jī)軟件(1)
- SDN時(shí)代的網(wǎng)絡(luò)管理系統(tǒng)會(huì)走向何方
- WOT2016吳兆松:Zabbix監(jiān)控自動(dòng)化的未來如何發(fā)展
頻道本月排行
- 8你消費(fèi)我買單——"漏洞"天使OneRASP...
- 7有了Jenkins,為什么還需要一個(gè)獨(dú)立...
- 6IT運(yùn)維分析與海量日志搜索需要注意什么(1)
- 5新浪微博王傳鵬:微博推薦架構(gòu)的演進(jìn)(1)
- 4史上最大機(jī)器學(xué)習(xí)數(shù)據(jù)集,雅虎對(duì)外開...
- 4雅虎開源可以提升流操作速度的DataSketches
- 4大眾點(diǎn)評(píng)高可用性系統(tǒng)運(yùn)維經(jīng)驗(yàn)分享
- 4云運(yùn)維如何選擇部署適合自身的IDC和...
- 4開源還是商用?十大云運(yùn)維監(jiān)控工具測...
- 4論開發(fā)與運(yùn)維沖突的根源、表現(xiàn)形式及...