掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
作者:徐桂林 2015-08-24 10:31:09
云計算
自動化 更多時候,老板會是一種半信半疑的態(tài)度對待自動化部署。這時候,找到突破點,快速見效并能堅持下去可能就是你能說服老板的最好策略。

創(chuàng)新互聯(lián)建站是一家專業(yè)提供義安企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、網(wǎng)站制作、成都h5網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為義安眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。
引言
我在自動化部署,特別是公有云的自動化部署上工作多年,因此本文主要就這方面進(jìn)行展開。
注意:這里提到的云主要指基礎(chǔ)設(shè)施服務(wù)層,即IaaS,且泛指包括公有云、私有云或者混合云在內(nèi)的所有IaaS層形態(tài)。
基本背景
由于工作關(guān)系,我在上一家公司(Autodesk)時從2008年底開始使用某國外公有云。當(dāng)時參與項目中很重要的一部分工作就是幫助用戶在我們的平臺上(注:我們的平臺運行在該云上)完成自動化部署。
由于整個部署非常重,涉及到平臺自身部署、基礎(chǔ)軟件部署和用戶傳統(tǒng)軟件部署。每次部署需要數(shù)個小時的時間,非常影響整個團隊的工作效率。所以,我們花費了比較多的時間在構(gòu)建自己的云自動化部署系統(tǒng)。
進(jìn)入現(xiàn)在公司后,個人也推進(jìn)了所在項目的部分自動化部署流程。盡管這個項目并不直接運行在云上,但在原來項目中總結(jié)出的辦法還是有一定通用性。其中的部分經(jīng)驗也得以落實,最終效果也不錯(整個系統(tǒng)的部署時間有了數(shù)量級的縮短)。
經(jīng)歷上面兩個完全不同的項目,個人意識到,系統(tǒng)自身的可部署性,是能否落實自動化部署的關(guān)鍵所在(當(dāng)然,這個結(jié)論的前提是團隊已經(jīng)認(rèn)同自動化部署是團隊效率和質(zhì)量的基礎(chǔ)性制度保證)。
而系統(tǒng)的可部署性是從架構(gòu)設(shè)計到最終運維整個流程都需要考慮的因素。所以需要整個工程團隊(開發(fā)、測試和運維)在系統(tǒng)可部署性上要達(dá)成一致,制定相關(guān)準(zhǔn)則,整個自動化部署才能順利推進(jìn)。
所以,這里我從系統(tǒng)的“可部署實踐準(zhǔn)則”角度來分析如何保證自動化部署的成功實施:
盡管這里提到的很多準(zhǔn)則不僅僅是針對云上系統(tǒng),但是由于個人經(jīng)驗主要在云上系統(tǒng)的部署,同時個人相信未來絕大部分IT系統(tǒng)也都會運行在云上,所以會以云上系統(tǒng)的自動化部署為主來分享我的具體做法。
持續(xù)交付
在討論自動化部署時,一定會涉及到持續(xù)交付。從邏輯的角度上看,自動化部署是持續(xù)交付的一個階段。但是,自動化部署流程和系統(tǒng)仍然是可以獨立于整個持續(xù)交付流程而獨立運行。下圖描述常見的持續(xù)交付流程以及自動化部署在其中的位置。
如上圖所示,整個自動化部署流程會涉及到IT系統(tǒng)生命周期中的所有環(huán)境(開發(fā)、測試,預(yù)發(fā)和生產(chǎn))。在這其中,由于生產(chǎn)系統(tǒng)的敏感性以及發(fā)布流程上的一些要求(如發(fā)布窗口期),需要人工審批并觸發(fā)部署流程。其他環(huán)境更推薦持續(xù)部署來加快迭代周期,盡早發(fā)現(xiàn)問題。
可部署實踐準(zhǔn)則
系統(tǒng)的可部署性一定是一個產(chǎn)品技術(shù)團隊共同的職責(zé):
Rule 0 用版本管理系統(tǒng)(VCS)管理要發(fā)布的所有東西
這條規(guī)則比較容易理解,絕大部分團隊也應(yīng)該都在實際項目中很好得落實了這點。
需要注意的是,VCS系統(tǒng)不僅僅是用來管理你的代碼,所有要發(fā)布的東西(包括代碼、文檔、視頻等等)都可以(也應(yīng)該)由統(tǒng)一的VCS來管理。至于VCS系統(tǒng)的選擇,主流的軟件(SVN、Git或者Perforce等)都能夠很好支持整個持續(xù)交付和自動化部署流程。
Rule 1 統(tǒng)一管理構(gòu)建出來的Artifacts
這條規(guī)則是很多團隊容易忽視,但對自動化部署落實又非常重要的基礎(chǔ)性準(zhǔn)則。
什么是Artifacts?
Artifacts是指構(gòu)建系統(tǒng)產(chǎn)生的任何需要部署的輸出,如代碼包、文檔、靜態(tài)資源等。
參考上面的持續(xù)集成流程圖,可以看出Artifacts是所有自動部署流程的輸入,它的管理質(zhì)量直接會影響到部署流程的順利程度和效率。關(guān)于Artifacts管理,現(xiàn)實工程中經(jīng)常出現(xiàn)的幾種情況如下:
團隊完全無Artifacts管理。需要部署時直接從構(gòu)建系統(tǒng)拷貝出來,通過郵件或者其他文件分享工具在團隊內(nèi)部傳輸。這種情況會導(dǎo)致整個部署流程完全失控,并且無法跟蹤部署記錄。
團隊僅關(guān)注生產(chǎn)環(huán)境下的Artifacts管理。對于開發(fā)、測試或者預(yù)發(fā)環(huán)境的Artifacts管理沒有任何規(guī)劃和標(biāo)準(zhǔn)。這種情況會無法保證整個生命周期的部署一致性,極大影響團隊的迭代效率。
對于Artifacts的管理完全等同于對于文件的管理,沒有對Artifacts的metadata信息進(jìn)行任何有效管理。由于缺乏Artifacts的metadata信息,導(dǎo)致部署流程和系統(tǒng)不容易獲取當(dāng)前Artifacts的元數(shù)據(jù)并以此采取相關(guān)操作。會讓部署流程實現(xiàn)困難,部署質(zhì)量無法保證。
在實際工程中,團隊越早在Artifacts管理上達(dá)成統(tǒng)一標(biāo)準(zhǔn),團隊在推進(jìn)自動化部署落地的難度就越小。個人認(rèn)為,一個好的Artifacts管理方式需要有下面幾個原則:
目前,市面上已經(jīng)有很多Artifacts管理工具(如開源的Nexus),可以幫助大家快速搭建整個Artifacts管理系統(tǒng)。如果你的系統(tǒng)是在云上部署,云供應(yīng)商提供的對象存儲服務(wù)也是不錯的選擇。
Rule 2 讓部署系統(tǒng)管理你的云上基礎(chǔ)設(shè)施
之所以把這一點放在前面,是因為它太重要了,而且也是和傳統(tǒng)IT環(huán)境下自動化部署流程非常不同的地方。
在云上,一個非常重要的變化就是:所有的基礎(chǔ)設(shè)施都可編程。
今天,所有的云供應(yīng)商都必須提供基礎(chǔ)設(shè)施的編程接口(如虛機啟停API,存儲接口,網(wǎng)絡(luò)配置接口)。而有些更成熟的云供應(yīng)商已經(jīng)提供如CloudFormation服務(wù),讓你的IT系統(tǒng)基礎(chǔ)設(shè)施能夠完全可精確描述。
正因為如此,云上自動化部署系統(tǒng)可以完全管理起來自己的基礎(chǔ)設(shè)施,并且通過API或者如CloudFormation服務(wù)快速、精確構(gòu)建一致的IT運行基礎(chǔ)設(shè)施。
當(dāng)系統(tǒng)的自動化部署流程完全包括基礎(chǔ)設(shè)施管理后,有如下幾個明顯好處:
這里需要提到的一點就是,以Docker為代表的容器技術(shù)讓運行時標(biāo)準(zhǔn)化和可編程化變得極其容易和輕量級。
但是,整個IT系統(tǒng)基礎(chǔ)設(shè)施不僅僅包括系統(tǒng)的運行時環(huán)境,還包括網(wǎng)絡(luò)規(guī)劃、存儲管理、計算資源管理等等。
而這些基礎(chǔ)設(shè)施的程序化目前還只能通過云上IaaS層API或者類似CloudFormation來完成。所以,從這個角度看,Docker和IaaS并不是相互沖突,而是非常好的搭檔,一同把整個IT系統(tǒng)的運維、管理成本大幅降低。
Rule 3 使用相同的部署流程管理你的開發(fā)、測試、預(yù)發(fā)和生產(chǎn)環(huán)境
這是一條在傳統(tǒng)IT和云上都應(yīng)該遵循的原則。在現(xiàn)實中,很多團隊都喜歡把部署系統(tǒng)這個事情拖到上線前的***一刻才開始。而且,即使有自動化部署流程,也是和生產(chǎn)環(huán)境硬耦合,只能用于生產(chǎn)系統(tǒng)的部署。
這種做法雖然短時間來得快,但是在長期IT系統(tǒng)部署管理中會帶來不少麻煩,個人覺得至少會包括如下兩點:
所以,對于一個新項目,***在項目啟動之初就能夠把整個IT系統(tǒng)的自動化部署流程搭建成功,而且包括所有的環(huán)境。
而對于已經(jīng)運行的項目,也要積極推動部署流程和部署環(huán)境的解耦。具體來說,常見的解決思路包括下面幾個點:
***,可能很多團隊根本不可能有完整開發(fā)、測試和生產(chǎn)環(huán)境(或者這幾個環(huán)境的差異性太大),讓同一套部署流程很難適配不同的環(huán)境。但是,因為云的出現(xiàn),讓我們獲取不同環(huán)境的IT基礎(chǔ)設(shè)施變得容易很多。
正因為如此,落實這條準(zhǔn)則的難度在大幅下降(其實,開發(fā)測試已經(jīng)成為很多企業(yè)用戶開始嘗試云的***站),而這條規(guī)則帶來的開發(fā)效率提升會讓團隊收益匪淺。
#p#
Rule 4 使用相同的部署流程管理全球各地的同一個IT系統(tǒng)
這是一條看起來對很多團隊沒什么用的準(zhǔn)則。但是,云的出現(xiàn)讓全球化部署變得非常容易,很多非常小的團隊都可以做全球部署和運營。在云上,全球部署就是在云服務(wù)供應(yīng)商的全球不同Region部署你的IT系統(tǒng)。
當(dāng)然,即使在國內(nèi),為提供更好的系統(tǒng)訪問速度,云供應(yīng)商也會提供多個Region。由于云供應(yīng)商不同的Region提供的服務(wù)都已經(jīng)標(biāo)準(zhǔn)化,訪問接口也都統(tǒng)一,這讓使用相同部署流程管理全國(乃至全球)各地服務(wù)容易很多。為此,你的部署系統(tǒng)需要注意幾點:
現(xiàn)在,IT系統(tǒng)擴展性很多時候被局限在同一套系統(tǒng)在同一個地方能否快速伸縮,而忽略了IT系統(tǒng)在不同地點的快速復(fù)制能力。而這種快速復(fù)制能力不僅僅是業(yè)務(wù)全球化的需求,有時候也是解決系統(tǒng)自身容量擴展性的重要途徑。
Rule 5 部署流程要優(yōu)先滿足熱升級、熱切換需求
在傳統(tǒng)IT工程中,由于熱升級和熱切換實現(xiàn)起來可能比較困難,而系統(tǒng)升級、切換的頻率也不一定高,很多時候這種功能性需求就會被當(dāng)成“二等公民”看待。但這條準(zhǔn)則恰恰相反,著重在強調(diào)“優(yōu)先滿足”。究其原因,個人認(rèn)為有如下幾點:
正因為上面的原因,在整個架構(gòu)和部署流程的設(shè)計過程中就需要優(yōu)先考慮熱升級、熱切換,并堅持走下去。否則搭建的整個持續(xù)交付或者自動化部署流程都會事倍功半,最終走向失敗。
在云上,由于基礎(chǔ)設(shè)施資源的獲取非常容易,在升級過程中讓不同版本完全獨立運行并逐步切換流量已經(jīng)是一個成本不高的實踐方式。所以,云上系統(tǒng)的熱升級及熱切換實現(xiàn)難度也有一定程度上的降低。
Rule 6 自動化、自動化還是自動化
就如“自動化部署”的名字所表述,自動化是其核心訴求,也是能夠最終成功實踐的技術(shù)保障。關(guān)于自動化的好處,相信不用展開說大家也都明白。但在現(xiàn)實過程中,大家面臨的問題常常是如何實現(xiàn)平滑的實現(xiàn)自動化。個人推薦下面幾個實踐經(jīng)驗:
這里的“常量”指系統(tǒng)部署中不經(jīng)常變化的部分(如基礎(chǔ)操作系統(tǒng),基礎(chǔ)軟件等等)。對于這些部分,開始可以使用“預(yù)制模式”(如系統(tǒng)鏡像)加入部署系統(tǒng)。而部署過程中經(jīng)常變的“變量”部分,則需要在部署系統(tǒng)中重點考慮。當(dāng)然,“常量”和“變量”的劃分也不是絕對的。一般來說,部署系統(tǒng)都是從自動化最頻繁變化的“變量”部分開始,逐步覆蓋較少變化的“常量”部分。因為這樣可以盡早***化自動化流程帶來的價值。
Rule 7 讓模塊有自啟動、自發(fā)現(xiàn)和自部署能力
在實施自動化部署的過程中,估計最容易讓團隊沮喪的就是不同模塊之間的部署依賴關(guān)系。很多傳統(tǒng)部署軟件也試圖通過各種方式(如可視化依賴關(guān)系)來降低維護部署依賴的難度,但很多時候最終效果并不好。
究其原因,個人覺得在業(yè)務(wù)場景的頻繁變化中,讓模塊之間的緊耦合依賴關(guān)系很難長期保持穩(wěn)定,部署系統(tǒng)也就很難高效維護這種多變的部署依賴關(guān)系。隨著微服務(wù)概念的流行,更多人開始相信每個微服務(wù)模塊都應(yīng)該是獨立部署、運維并提供服務(wù)。
這點體現(xiàn)在部署上,就是讓每個模塊有自啟動、自發(fā)現(xiàn)和自部署的能力。具體來說,其包括下面幾個方面:
基于上面幾點要求,個人在實踐過程中采取的常見方法包括:
#p#
Rule 8 讓部署變成服務(wù)
當(dāng)團隊完成了整個自動化部署流程,記得在往前一步,把你的部署工具變成一個對內(nèi)的部署服務(wù),讓團隊每個人(包括非技術(shù)人員或者新來的同事)也能夠快速完成部署。
為讓部署成為服務(wù),你可能需要實現(xiàn)一個Portal,或者再添加一個郵件通知服務(wù)。當(dāng)然,你也可以把整個部署服務(wù)做得更好,甚至服務(wù)于其他團隊。無論如何,這都會給團隊帶來很大的好處,因為它降低了整個系統(tǒng)的使用門檻,讓更多的人從中獲益。
Rule 9 用戶全面監(jiān)控保障自動化部署
這是***一條準(zhǔn)則,但是可能也是很多開始嘗試自動化部署的團隊最擔(dān)心的問題:如果自動化部署出問題了咋辦?
人工部署時候還可以一步步觀察結(jié)果,由人來把關(guān)部署流程,避免不良后果快速擴大。其實,在回答這個問題之前,如果大家仔細(xì)回顧人肉部署帶來的各種故障,一定會發(fā)現(xiàn)人為失誤引起的故障比例會大得驚人。
而自動化部署的一個目標(biāo)恰恰就是為了減少人為失誤導(dǎo)致的故障。當(dāng)然,為了避免自動化部署的負(fù)面影響,你需要注意下面幾個方面:
***,如果你是團隊內(nèi)希望推動自動化部署的同學(xué),下面兩點經(jīng)驗或許在你推進(jìn)過程中能幫助到你:
當(dāng)然,你肯定會說搞定老板才是最核心的保障。如果你能夠有一個完全支持你的老板,那你是幸運的。
更多時候,老板會是一種半信半疑的態(tài)度對待自動化部署。這時候,找到突破點,快速見效并能堅持下去可能就是你能說服老板的***策略。
http://blog.xuguilin.me/2014/01/22/autodeploy-on-aws.html
作者介紹
徐桂林
阿里云日志服務(wù)技術(shù)專家,碩士畢業(yè),曾任職AutoDesk等公司,擅長云計算,DevOps等。
如何一起愉快地發(fā)展
“高效運維”公眾號(如下二維碼)值得您的關(guān)注,作為高效運維系列微信群的唯一官方公眾號,每周發(fā)表多篇干貨滿滿的原創(chuàng)好文:來自于系列群的討論精華、運維講壇線上精彩分享及群友原創(chuàng)。“高效運維”也是互聯(lián)網(wǎng)專欄《高效運維***實踐》及運維2.0官方公眾號。
提示:目前高效運維兩個微信主群僅有少量珍貴席位,如您愿意,可添加蕭田國個人微信號 xiaotianguo 為好友,進(jìn)行申請;或申請加入技術(shù)交流群(技術(shù)討論為主,沒主群那么多規(guī)矩,更熱鬧)。
重要提示:除非事先獲得授權(quán),請在本公眾號發(fā)布2天后,才能轉(zhuǎn)載本文。尊重知識,請必須全文轉(zhuǎn)載,并包括本行及如下二維碼。
| 本文轉(zhuǎn)自“高效運維”微信訂閱號,特此感謝。 |

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流