DevOps系統(tǒng)的變遷及其關(guān)鍵使能技術(shù)
編者按:從軟件工程初期發(fā)展的獨(dú)立主義到90年代開始強(qiáng)調(diào)了軟件工程化到今天完全進(jìn)化成為一個(gè)產(chǎn)業(yè)鏈,這就是我們現(xiàn)在談的DevOps。本文從DevOps的起源和發(fā)展歷程,到DevOps的變遷及其關(guān)鍵使能技術(shù),以及如何選擇適合自己的DevOps系統(tǒng)等三個(gè)方面詳解了系統(tǒng)的變遷過程。作者微博是:@fit2cloud,如果有對(duì)DevOps感興趣的朋友可以跟進(jìn)行討論。
一、DevOps的起源和發(fā)展歷程
在過去的幾十年里,為了按時(shí)交付軟件產(chǎn)品和服務(wù),大家越來越意識(shí)到,對(duì)于傳統(tǒng)把開發(fā)和運(yùn)營(yíng)割裂開的做法,不適合現(xiàn)代產(chǎn)品和服務(wù)開發(fā)的需求。于是,把開發(fā)和運(yùn)營(yíng)作為整體來看待的DevOps工程思想逐步深入人心,隨之也逐步有了對(duì)DevOps系統(tǒng)的需求,希望能有個(gè)平臺(tái)或工具來統(tǒng)一支持開發(fā)和運(yùn)營(yíng)的交付工作及之后的環(huán)境管理工作,即需要一系列的持續(xù)集成,持續(xù)交付,自動(dòng)化部署,自動(dòng)化測(cè)試監(jiān)控,自動(dòng)化伸縮,自動(dòng)化恢復(fù)系統(tǒng),以提升開發(fā)測(cè)試運(yùn)營(yíng)過程中的部署效率,簡(jiǎn)化開發(fā)測(cè)試運(yùn)維過程的管理,降低交付風(fēng)險(xiǎn),降低溝通成本及運(yùn)營(yíng)成本。

從廣義來講,不管是云管理平臺(tái)工具(比如RightScale),還是各種PaaS平臺(tái)(CloudFoundry,Heroku etc.),還是自動(dòng)化部署工具比如Chef、Puppet和Ansible等,其本質(zhì)上都是DevOps系統(tǒng)的一部分,都是為了解決在開發(fā)過程的交付環(huán)節(jié)問題和交付后的運(yùn)營(yíng)管理問題,即
- 在開發(fā)和測(cè)試過程中,幫助開發(fā)測(cè)試人員搭建和管理環(huán)境,以便在變更后部署變更以測(cè)試;
- 在運(yùn)營(yíng)和支持過程中,幫助運(yùn)營(yíng)支持人員升級(jí)系統(tǒng),擴(kuò)展重建恢復(fù)系統(tǒng),在升級(jí)后能夠持續(xù)地掌握系統(tǒng)整體和各個(gè)棧的狀態(tài),從各個(gè)層面監(jiān)控系統(tǒng),伸縮系統(tǒng),恢復(fù)系統(tǒng)。
這些年,隨著云計(jì)算和容器技術(shù)的進(jìn)步,以及產(chǎn)品業(yè)務(wù)對(duì)IT能力的需求推動(dòng),DevOps系統(tǒng)發(fā)展越來越快,其角色和概念也越來越清晰和獨(dú)立。回顧其發(fā)展的路徑和變遷的過程,我們認(rèn)為基本可以分為三代:基于物理機(jī)或獨(dú)立虛擬機(jī)的部署時(shí)代,基于IaaS可編程資源的部署時(shí)代和基于容器的部署時(shí)代。隨著這三代的改進(jìn),DevOps系統(tǒng)的整體能力越來越強(qiáng)。下面我們首先看一下各代DevOps系統(tǒng)的特點(diǎn)和能力,之后再對(duì)DevOps系統(tǒng)進(jìn)行更進(jìn)一步的分類,以幫助我們選擇合適的DevOps系統(tǒng)。
二、DevOps的變遷及其關(guān)鍵使能技術(shù)
1. 基于物理機(jī)/獨(dú)立虛機(jī)的部署時(shí)代
這是第一代DevOps系統(tǒng),特點(diǎn)是靜態(tài)配置 + 人工協(xié)調(diào) + 僅應(yīng)用部分自動(dòng)部署。
在搭建整個(gè)應(yīng)用系統(tǒng)的過程中,首先需要在DevOps系統(tǒng)外創(chuàng)建運(yùn)行應(yīng)用所需的資源環(huán)境(如主機(jī),網(wǎng)絡(luò),存儲(chǔ)等),DevOps系統(tǒng)對(duì)這部分沒有控制,只負(fù)責(zé)在資源環(huán)境搭建好后自動(dòng)化部署應(yīng)用,資源環(huán)境的搭建與之后的應(yīng)用部署過程是割裂開來的,需要人為的手工協(xié)調(diào)控制,即等資源環(huán)境搭建好后,由人控制時(shí)機(jī),等待資源環(huán)境準(zhǔn)備好后再手工修改配置(如各種主機(jī)IP地址,登陸密碼Key信息),然后手工運(yùn)行自動(dòng)化腳本工具,如Shell,Python,Ruby腳本,進(jìn)行應(yīng)用的安裝部署升級(jí),而且之后當(dāng)增加或減少節(jié)點(diǎn)后,也由人來手工運(yùn)行自動(dòng)化腳本來配置系統(tǒng),不能實(shí)現(xiàn)包括資源環(huán)境創(chuàng)建或節(jié)點(diǎn)變更到應(yīng)用部署的整個(gè)過程的一鍵部署,即集群感知 + 自動(dòng)協(xié)調(diào)控制 + 動(dòng)態(tài)配置 + 全棧自動(dòng)化。

目前,可以說大多數(shù)的DevOps系統(tǒng)仍然停留在這個(gè)階段,由于DevOps系統(tǒng)沒有實(shí)現(xiàn)資源環(huán)境創(chuàng)建的自動(dòng)化與基于集群感知的協(xié)調(diào)自動(dòng)化,那么這個(gè)階段的DevOps系統(tǒng)的能力會(huì)造成以下幾個(gè)影響和后果:
- 創(chuàng)建系統(tǒng)資源環(huán)境效率低、耗時(shí)、風(fēng)險(xiǎn)高,特別是創(chuàng)建復(fù)雜的系統(tǒng)組件多結(jié)構(gòu)復(fù)雜時(shí);
- 創(chuàng)建系統(tǒng)資源環(huán)境過程需要專門的網(wǎng)絡(luò)工程師、系統(tǒng)工程師,不能夠?qū)崿F(xiàn)開發(fā)測(cè)試運(yùn)維人員自助服務(wù),系統(tǒng)越復(fù)雜,溝通成本越大,開發(fā)運(yùn)維過程管理也越復(fù)雜;
- 創(chuàng)建整個(gè)系統(tǒng)需要網(wǎng)絡(luò)工程師,系統(tǒng)工程師,開發(fā)人員的共同參與和合作,系統(tǒng)組件越多結(jié)構(gòu)越復(fù)雜,溝通成本越大,開發(fā)運(yùn)維過程管理也越復(fù)雜,費(fèi)時(shí)費(fèi)力,協(xié)調(diào)麻煩,風(fēng)險(xiǎn)高且易出錯(cuò);
- 當(dāng)系統(tǒng)資源環(huán)境變更時(shí),如在增加減少主機(jī)后,由人來手工協(xié)調(diào)控制,人為手工靜態(tài)配置部署升級(jí)所需IP,登陸密碼或Key等信息,造成變更過程風(fēng)險(xiǎn)高且效率低,特別是系統(tǒng)龐大和復(fù)雜時(shí);
- 交付過程風(fēng)險(xiǎn)高,開發(fā)測(cè)試產(chǎn)品各個(gè)環(huán)境不統(tǒng)一,經(jīng)常出現(xiàn)在一個(gè)環(huán)境里運(yùn)行正常,另外一個(gè)環(huán)境不正常的現(xiàn)象
這里需要提的一點(diǎn)就是,盡管很多組織已經(jīng)在使用IaaS(如阿里云)創(chuàng)建虛擬機(jī)搭建應(yīng)用系統(tǒng)所需資源環(huán)境,但是并沒有實(shí)現(xiàn)集群感知,系統(tǒng)整套環(huán)境創(chuàng)建的自動(dòng)化,仍然停留在半自動(dòng)化的階段(例如,先啟動(dòng)一組包年包月虛擬機(jī)后,然后手工配置部署腳本所需IP地址,登陸密碼,登陸密鑰等信息,然后手工運(yùn)行自動(dòng)化腳本部署),所以這種方式仍然屬于第一代的DevOps系統(tǒng)。同時(shí),這也是國(guó)內(nèi)大多數(shù)組織DevOps的現(xiàn)狀,其自動(dòng)化和效率的改進(jìn)空間巨大。
2. 基于IaaS的部署時(shí)代
這是第二代DevOps系統(tǒng),特點(diǎn)是集群感知 + 自動(dòng)協(xié)調(diào)控制 + 動(dòng)態(tài)配置 + 全棧自動(dòng)化。
借助于云計(jì)算IaaS資源的可編程特性,這一代的DevOps系統(tǒng)實(shí)現(xiàn)了集群感知,自動(dòng)協(xié)調(diào)控制,動(dòng)態(tài)配置,全棧自動(dòng)化,即實(shí)現(xiàn)了從創(chuàng)建環(huán)境到部署安裝應(yīng)用組件整個(gè)過程的一鍵創(chuàng)建和部署,并且在創(chuàng)建后的階段,能夠?qū)崿F(xiàn)集群感知(Cluster-Aware),即自動(dòng)根據(jù)環(huán)境的變更,自動(dòng)部署和配置系統(tǒng)。舉個(gè)例子,某網(wǎng)站業(yè)務(wù)量增長(zhǎng)需要擴(kuò)容時(shí),當(dāng)人為添加Web計(jì)算節(jié)點(diǎn)后,能夠自動(dòng)在新添加Web虛擬機(jī)啟動(dòng)后安裝Web組件,并將各個(gè)虛擬機(jī)Web服務(wù)注冊(cè)配置到負(fù)載均衡服務(wù)中,當(dāng)收縮時(shí),自動(dòng)移除,這個(gè)過程不需要人為的協(xié)調(diào)控制,DevOps系統(tǒng)能夠根據(jù)集群的變化自動(dòng)地配置集群。

目前,做到這個(gè)層面DevOps系統(tǒng)還是比較少的,由于這個(gè)階段的DevOps系統(tǒng)自動(dòng)化管理覆蓋了環(huán)境的創(chuàng)建變更,應(yīng)用組件部署自動(dòng)化,以及環(huán)境創(chuàng)建,集群感知和應(yīng)用組件部署的各個(gè)過程自動(dòng)化協(xié)調(diào)控制,那么這個(gè)階段的DevOps系統(tǒng)相比第一代會(huì)給開發(fā)和運(yùn)維工作帶來以下非常巨大的改進(jìn):
- 開發(fā)測(cè)試運(yùn)維人員能夠自助創(chuàng)建環(huán)境和部署系統(tǒng),系統(tǒng)越復(fù)雜,溝通成本減少越多,開發(fā)運(yùn)維過程管理復(fù)雜性風(fēng)險(xiǎn)減少越多,比如只能由有專門知識(shí)的工程師做,如果工程師在需要的時(shí)候不可用,就很麻煩;
- 創(chuàng)建環(huán)境和部署效率高,自動(dòng)化,快速,所需時(shí)間少,風(fēng)險(xiǎn)低;
- 當(dāng)系統(tǒng)資源環(huán)境變更時(shí),如伸縮時(shí),在增加減少主機(jī)后,能夠?qū)崿F(xiàn)集群感知,動(dòng)態(tài)配置集群,提高變更過程效率且降低風(fēng)險(xiǎn),特別是系統(tǒng)組件多龐大和復(fù)雜時(shí);
- 能夠按需快速創(chuàng)建環(huán)境滿足各種測(cè)試,演示,上線擴(kuò)容需要
- 能夠按需創(chuàng)建啟動(dòng)關(guān)閉開發(fā)測(cè)試環(huán)境,節(jié)約成本
- 能夠提高開發(fā)測(cè)試和交付的效率
3. 基于容器的部署時(shí)代
這是第三代DevOps系統(tǒng),特點(diǎn)是在第二代基礎(chǔ)上,又增加了應(yīng)用跨云可遷移性。(基于容器技術(shù))。
借助于云計(jì)算IaaS資源的可編程特性以及Linux容器技術(shù),不僅實(shí)現(xiàn)了集群感知,自動(dòng)化協(xié)調(diào),動(dòng)態(tài)配置和全棧自動(dòng)化,而且實(shí)現(xiàn)了應(yīng)用跨云可遷移性和彈性伸縮,消除了開發(fā),測(cè)試,生產(chǎn)環(huán)境的不一致,使應(yīng)用不會(huì)被鎖定在某個(gè)IaaS上,讓所有的基礎(chǔ)設(shè)施服務(wù)IaaS及物理機(jī)都變成通用的資源池,還可以提高資源利用率,這給IT的開發(fā)建設(shè)和運(yùn)營(yíng)帶來了更多更大的想象空間,這也是Docker,Kubernetes現(xiàn)在很火的原因。
舉個(gè)例子: 如果我們想把一套服務(wù)從AWS遷移到Azure上,那么,我們將不得不從頭開始創(chuàng)建一組虛擬機(jī)鏡像及虛擬機(jī),并配置安裝系統(tǒng)或應(yīng)用的組件,如果系統(tǒng)復(fù)雜龐大的話,這個(gè)過程仍然會(huì)耗費(fèi)很多的時(shí)間和人工,并且依賴于某些具備這個(gè)知識(shí)的工程師,但是如果有容器技術(shù)及相關(guān)容器工具的支持,那么這個(gè)過程會(huì)變成一個(gè)非常快速簡(jiǎn)單的過程,變成在目標(biāo)云如Azure上自動(dòng)啟動(dòng)需要的標(biāo)準(zhǔn)虛擬機(jī),然后下載容器鏡像,配置啟動(dòng)容器,配置相關(guān)DNS等,真正實(shí)現(xiàn)方便的跨云遷移,和彈性動(dòng)態(tài)的伸縮服務(wù)。
再舉個(gè)例子,目前Google開源的容器管理系統(tǒng)Kubernetes可以說得到了工業(yè)界的廣泛認(rèn)同和支持,當(dāng)我們已經(jīng)做好應(yīng)用系統(tǒng)的Docker images后,那么只要在各個(gè)不同的IaaS上有支持Docker的環(huán)境,如Kubernetes集群,那么我們就能在不同的IaaS上快速方便的遷移應(yīng)用系統(tǒng),或者擴(kuò)容,下圖展示了基于FIT2CLOUD的跨云部署和管理解決方案,我們希望未來用戶可以使用FIT2CLOUD在多個(gè)不同的IaaS上創(chuàng)建Kubernetes集群,通過Kubernetes管理和部署應(yīng)用系統(tǒng)。之后,我們會(huì)有新文章來分享FIT2CLOUD是如何創(chuàng)建和運(yùn)維Kunerbetes集群的。

上面這一節(jié)中我們介紹了不同時(shí)代的DevOps系統(tǒng)的特點(diǎn)和能力,那么是不是我們直接選擇能力最強(qiáng)的第三代DevOps系統(tǒng)就可以了嗎? 是不是選一種DevOps系統(tǒng)就通殺了呢? 答案是否定的,每種DevOps系統(tǒng)都不是銀彈,都需要我們根據(jù)要管理的系統(tǒng)的需求來選擇合適的DevOps系統(tǒng)或工具,在接下來的一節(jié),我們來回答這個(gè)問題。
三、如何選擇適合自己的DevOps系統(tǒng)?
目前DevOps系統(tǒng)可以說五花八門非常多,功能上差別大,適用場(chǎng)景也不同,那么我們究竟該如何選擇合適的DevOps系統(tǒng)呢? 這里我們建議一種基于目標(biāo)系統(tǒng)分類的選擇方法。我們根據(jù)要管理的目標(biāo)應(yīng)用或系統(tǒng)類型來分類,對(duì)于目標(biāo)系統(tǒng),我們可以將其首先分為三大類,即IaaS服務(wù)系統(tǒng),PaaS服務(wù)系統(tǒng),應(yīng)用系統(tǒng),應(yīng)用系統(tǒng)又可以分為簡(jiǎn)單的Web應(yīng)用系統(tǒng),復(fù)雜的分布式系統(tǒng),那么有了這個(gè)分類,我們選擇DevOps系統(tǒng)和工具就會(huì)相對(duì)容易和明確一些。
1. IaaS服務(wù)系統(tǒng)
由于IaaS系統(tǒng)的創(chuàng)建,本身就是基于物理機(jī)創(chuàng)建的,所以對(duì)于這類的系統(tǒng),其適用的DevOps系統(tǒng)或工具就是Shell,Chef, Puppet及IaaS服務(wù)提供商自身開發(fā)的自動(dòng)化運(yùn)維管理系統(tǒng),只能選用第一代的基于物理機(jī)的DevOps系統(tǒng)。
2. PaaS服務(wù)系統(tǒng)
如果一個(gè)PaaS不是部署在IaaS之上,從本質(zhì)上說這不是一個(gè)PaaS,因?yàn)槠洳痪邆鋸椥院妥詣?dòng)伸縮。真正的PaaS系統(tǒng)是部署在IaaS上,為開發(fā)測(cè)試運(yùn)維人員來提供服務(wù),那么其適用的DevOps工具就可以選用RightScale,Scalr,Cloudformation,Opsworks和FIT2CLOUD這類第二代基于IaaS可編程資源的DevOps系統(tǒng),當(dāng)然也可以選擇第三代基于容器的DevOps系統(tǒng),只是第三代的目前還在發(fā)展中,還不如第二代成熟。
3. 簡(jiǎn)單的Web應(yīng)用系統(tǒng)
對(duì)于簡(jiǎn)單的Web應(yīng)用系統(tǒng),突出的特點(diǎn)就是應(yīng)用的結(jié)構(gòu)簡(jiǎn)單,比如只包含一個(gè)Web組件及數(shù)據(jù)庫(kù),緩存,或一些常見的中間件服務(wù)等,沒有包含非常多的分布式組件,那么對(duì)于這類的系統(tǒng)可以選擇容器類的傳統(tǒng)PaaS,即CloudFoundry,Heroku,OpenShift等。
4. 復(fù)雜的分布式應(yīng)用系統(tǒng)
對(duì)于復(fù)雜的分布式應(yīng)用系統(tǒng),無法使用容器類PaaS來管理,只能通過自定義的DevOps工具或系統(tǒng),或者使用云管理RightScale,Scalr,Cloudformation,Opsworks,F(xiàn)IT2CLOUD這類工具的某種或某種組合,即第二代基于IaaS可編程資源的DevOps系統(tǒng),也可以選擇第三代基于容器的DevOps系統(tǒng)。因?yàn)檫@類工具給用戶提供了對(duì)IaaS主機(jī)更大的控制權(quán),且提供了各個(gè)部署過程中的回調(diào)接口,實(shí)現(xiàn)了集群感知及各個(gè)部署過程的自動(dòng)協(xié)調(diào)控制,即全棧自動(dòng)化。
本文出自:http://blog.fit2cloud.com/2014/12/14/devops-system-evolution.html






















