文/王玉平
云計(jì)算環(huán)境下的高校DevOps實(shí)踐之路
文/王玉平
隨著信息化的發(fā)展,高校各類業(yè)務(wù)系統(tǒng)數(shù)目繁多,而軟件交付的方式也在發(fā)生變化。傳統(tǒng)的軟件系統(tǒng)交付方式是由校方信息化管理部門提供硬件服務(wù)器,只負(fù)責(zé)服務(wù)器硬件資源的正常運(yùn)轉(zhuǎn)和網(wǎng)絡(luò)訪問的暢通,而不參與到軟件開發(fā)生命周期。這種方式在高校信息化發(fā)展初期確實(shí)非常高效,也彌補(bǔ)了校方人員技術(shù)水平不高的缺陷。但是隨著信息化的發(fā)展,云計(jì)算技術(shù)的成熟,大數(shù)據(jù)對(duì)教育的變革,尤其是高校信息化需求的變化,各個(gè)應(yīng)用不再是獨(dú)立的個(gè)體,而是整個(gè)學(xué)校信息化的組件,多個(gè)應(yīng)用之間相輔相成,業(yè)務(wù)流程交叉,數(shù)據(jù)流混雜。軟件系統(tǒng)個(gè)體發(fā)展開始向平臺(tái)化、集成化、統(tǒng)一化發(fā)展。這種變化,對(duì)于軟件開發(fā)參與者發(fā)生了變化,對(duì)校方信息化人員的總體戰(zhàn)略和運(yùn)維也提出了更高的要求。這些變化,要求校方信息化人員與第三方軟件供應(yīng)商協(xié)同工作,參與系統(tǒng)部署的環(huán)境準(zhǔn)備和后續(xù)運(yùn)維。
DevOps(Development和Operations的組合詞)是一種重視“軟件開發(fā)人員(Dev)”和“IT運(yùn)維技術(shù)人員(Ops)”之間溝通合作的文化、運(yùn)動(dòng)或慣例。透過自動(dòng)化“軟件交付”和“架構(gòu)變更”的流程,來(lái)使得構(gòu)建、測(cè)試、發(fā)布軟件能夠更加地快捷、頻繁和可靠。它的出現(xiàn)是由于軟件行業(yè)日益清晰認(rèn)識(shí)到:為了按時(shí)交付軟件產(chǎn)品和服務(wù),開發(fā)和運(yùn)營(yíng)必須緊密合作。
如圖1所示,我們可以把DevOps看作開發(fā)(軟件工程)、技術(shù)運(yùn)營(yíng)和質(zhì)量保障(QA)三者的交集傳統(tǒng)的軟件組織將開發(fā)、IT運(yùn)營(yíng)和質(zhì)量保障設(shè)為各自分離的部門,在這種環(huán)境下如何采用新的開發(fā)方法(例如敏捷軟件開發(fā)),是一個(gè)重要的課題。按照從前的工作方式,開發(fā)和部署,不需要IT支持或者QA深入的跨部門的支持;而現(xiàn)在卻需要極其緊密的多部門協(xié)作。而DevOps考慮的還不止是軟件部署,它是一套針對(duì)這幾個(gè)部門間溝通與協(xié)作問題的流程和方法。
DevOps的引入能對(duì)產(chǎn)品交付、測(cè)試、功能開發(fā)和維護(hù)起到意義深遠(yuǎn)的影響。在缺乏DevOps能力的組織中,開發(fā)與運(yùn)營(yíng)之間存在著信息“鴻溝”──例如運(yùn)營(yíng)人員要求更好的可靠性和安全性,開發(fā)人員則希望基礎(chǔ)設(shè)施響應(yīng)更快,而業(yè)務(wù)用戶的需求則是更快地將更多的特性發(fā)布給最終用戶使用。這種信息鴻溝就是最常出問題的地方。

圖1 DevOps是三方的合作溝通
按照IDC的研究,2005年之前是虛擬化技術(shù)發(fā)展的第一階段,稱之為虛擬化1.0,從2005年到2010年時(shí)虛擬化發(fā)展的第二階段,稱之為虛擬化2.0,目前已經(jīng)進(jìn)入虛擬化2.5階段,虛擬化3.0階段在不久也將會(huì)到來(lái)。根據(jù)Gartner的預(yù)測(cè),目前中國(guó)70%的X86企業(yè)服務(wù)器將實(shí)現(xiàn)虛擬化。而高校核心機(jī)房的虛擬化發(fā)展更是如此,幾乎每個(gè)高校都在利用虛擬化部署應(yīng)用系統(tǒng),每個(gè)高校部署了私有云。
CPU的虛擬化技術(shù)將計(jì)算能力作為資源,VxLAN技術(shù)將網(wǎng)絡(luò)作為資源,而各種分布式文件系統(tǒng)則將存儲(chǔ)作為資源。以上幾種資源都可以通過私有云來(lái)進(jìn)行自助申請(qǐng)、使用以及歸還。
目前IaaS在高校云計(jì)算中得到了實(shí)現(xiàn)和部署,信息化部門可以使用商業(yè)虛擬化軟件管理各類虛擬化資源,并允許用戶自助申請(qǐng)。但I(xiàn)aaS的可分配的資源粒度限定于虛擬機(jī),還未能細(xì)化到服務(wù)。PaaS技術(shù)則更加側(cè)重于某個(gè)開發(fā)平臺(tái)所用組件為服務(wù),譬如數(shù)據(jù)庫(kù)作為服務(wù),或者一整套開發(fā)環(huán)境作為服務(wù),這種模式強(qiáng)調(diào)的是服務(wù)的可重用性,高校信息化的多樣性決定了這種模式在高校中的局限性。SaaS是更高端的服務(wù)模式,所以云計(jì)算的發(fā)展給高校帶來(lái)的最主要的服務(wù)模式的變更在于IaaS,這只是原先主機(jī)交付與虛擬機(jī)交付的差別,還未升級(jí)到對(duì)軟件交付模式進(jìn)行改進(jìn)的高層次變更。
為了改進(jìn)高校軟件交付的模式,我們?cè)诮鼉赡甑能浖到y(tǒng)建設(shè)中,優(yōu)先采用DevOps模式,校內(nèi)項(xiàng)目負(fù)責(zé)人員、運(yùn)維人員和第三方軟件開發(fā)商人員進(jìn)行了對(duì)接,組建新形式的項(xiàng)目組,共同參與項(xiàng)目建設(shè)。雙方職責(zé)因分工不同而側(cè)重點(diǎn)不同。在項(xiàng)目建設(shè)中引入了敏捷開發(fā)方法,并且要求產(chǎn)品多次交付,具體措施有:
使用敏捷或其他軟件開發(fā)過程與方法;
校方要求產(chǎn)品分階段多次交付,提高產(chǎn)品交付的速率;
完善虛擬化和云計(jì)算基礎(chǔ)設(shè)施,保障產(chǎn)品開發(fā)運(yùn)行環(huán)境;
數(shù)據(jù)中心擁有自動(dòng)化技術(shù)和配置管理工具。
有了這幾項(xiàng)措施,DevOps增進(jìn)了開發(fā)團(tuán)隊(duì)與運(yùn)營(yíng)團(tuán)隊(duì)之間的協(xié)作性、高效性的關(guān)系。由于團(tuán)隊(duì)間協(xié)作關(guān)系的改善,整個(gè)組織的效率因此得到提升,伴隨頻繁變化而來(lái)的生產(chǎn)環(huán)境的風(fēng)險(xiǎn)也能得到降低,并且降低了軟件產(chǎn)品開發(fā)失敗的風(fēng)險(xiǎn)。圖2 為 DevOps的生命周期路線。

圖2 DevOps的生命周期

圖3 云計(jì)算環(huán)境下的DevOps開發(fā)模式拓?fù)浣Y(jié)構(gòu)
為了正確使用DevOps模式,在軟件架構(gòu)中,引入了微服務(wù),并根據(jù)基于業(yè)務(wù)進(jìn)行拆分、采用自動(dòng)化文化、去中心化、服務(wù)獨(dú)立部署、服務(wù)完全自治、隔離失敗、漸進(jìn)式拆分、避免大規(guī)模改造原有代碼等原則對(duì)業(yè)務(wù)進(jìn)行拆分。
結(jié)合我們具體的實(shí)踐,現(xiàn)總結(jié)一下在實(shí)踐DevOps模式時(shí)需要執(zhí)行的步驟。
1.操作系統(tǒng)的限定
目前常用的服務(wù)器操作系統(tǒng)有Windows Server和Linux,而軟件普遍采用B/S架構(gòu),因此對(duì)于操作系統(tǒng)的需求,主要是為了能夠運(yùn)行Web服務(wù)器,考慮到目前常用Web服務(wù)器有微軟的IIS,Apache httpd,Nginx,我們只需要準(zhǔn)備Windows Server 2012和CentOS等Linux系統(tǒng)即可。由于我們限定了操作系統(tǒng),開發(fā)組也會(huì)提早獲知生產(chǎn)運(yùn)行環(huán)境,改變以往軟件完成后,校方必須滿足軟件開發(fā)方的需求,造成了多種操作系統(tǒng)的存在。
2.數(shù)據(jù)庫(kù)的限定
現(xiàn)有編程語(yǔ)言,都有成熟的數(shù)據(jù)持久化工具,而數(shù)據(jù)持久化工具對(duì)于數(shù)據(jù)庫(kù)是透明的,它依賴于數(shù)據(jù)驅(qū)動(dòng)程序,允許用戶比較容易的在多種數(shù)據(jù)庫(kù)軟件中遷移和部署,因此數(shù)據(jù)庫(kù)可由校方自主選擇決定。比較常見的數(shù)據(jù)庫(kù)有Oracle、Microsoft SQL Server和MySQL。其中Oracle基本是采取獨(dú)立于軟件部署服務(wù)器的方式提供,Microsoft SQL Server和MySQL因?yàn)槭禽p量級(jí)的數(shù)據(jù)庫(kù)服務(wù)系統(tǒng),可以視軟件系統(tǒng)的復(fù)雜性決定是否與軟件部署在相同的服務(wù)器中。
操作系統(tǒng)和數(shù)據(jù)庫(kù)的決定,為我們準(zhǔn)備虛擬機(jī)模板提供了依據(jù)。在DevOps實(shí)踐中,我們根據(jù)上面幾個(gè)選項(xiàng),分別構(gòu)建了Windows Server+Microsoft SQL Server和CentOS+MySQL的模板,并讓開發(fā)方實(shí)現(xiàn)知情未來(lái)的生產(chǎn)環(huán)境,開發(fā)方在需求調(diào)研階段依然獲知未來(lái)的運(yùn)行環(huán)境,有針對(duì)性的開發(fā),提高了后續(xù)產(chǎn)品的穩(wěn)定性。
3.Web服務(wù)器的選擇
對(duì)于Java類開發(fā)語(yǔ)言,對(duì)Web服務(wù)器的依賴性不強(qiáng),反而是需要成熟的容器,如Tomcat、Glassfish、WebLogic Server等容器。這一方面的選擇根據(jù)操作系統(tǒng)以及Java平臺(tái)架構(gòu)限定。若是輕量級(jí)的應(yīng)用,可以選用Tomcat容器,也可以根據(jù)開發(fā)方的熟悉程度由開發(fā)方選擇,但基本可以限定在Linux操作系統(tǒng)。
對(duì)于.Net平臺(tái)下的Web應(yīng)用,其Web服務(wù)器必然選擇IIS,其對(duì)應(yīng)的操作系統(tǒng)亦為Windows Server。由于Web服務(wù)器都是以軟件包的形式存在,其均可以通過命令行方式安裝,因此該項(xiàng)沒有做進(jìn)虛擬機(jī)模板,而是根據(jù)實(shí)際情況實(shí)時(shí)安裝。
4.建立統(tǒng)一的日志規(guī)范
規(guī)范整個(gè)系統(tǒng)而非微服務(wù)的日志體系,采用標(biāo)準(zhǔn)的日志格式非常便于后續(xù)的日志聚合檢索,便于整體的視角分析、監(jiān)控、查看系統(tǒng);一旦系統(tǒng)出現(xiàn)問題,運(yùn)維可以提供詳實(shí)的日志給開發(fā)方,便于問題的查找和解決。鑒于不同的服務(wù)器操作系統(tǒng)有不同的日志系統(tǒng),因?yàn)閷?duì)于虛擬機(jī)準(zhǔn)備中沒有特殊要求。但也可以單獨(dú)準(zhǔn)備rsyslog服務(wù)器,用于接收從Linux服務(wù)器發(fā)過來(lái)的日志。
5.選擇成熟框架
在DevOps中,重復(fù)使用某個(gè)模塊是該模式的基礎(chǔ)。必須避免自己重復(fù)發(fā)明輪子,盡量選擇市面上成熟的開源技術(shù)框架進(jìn)行支撐,比如 Spring Boot、Spring Cloud、Netflix、WildFly Swarm、Docker、Kubernetes、Bootstrap、CAS等框架;只有如此,才能減少DevOps組的技術(shù)負(fù)責(zé)度,降低運(yùn)維人員的技術(shù)要求。由于使用組件的重復(fù)性,運(yùn)維和開發(fā)人員均可以充分熟悉所用組件框架,從而快速發(fā)現(xiàn)問題、解決問題。
有了以上的要求,我們還需要建設(shè)代碼共享庫(kù),問題列表庫(kù)、文檔知識(shí)庫(kù)等DevOps所必須的支撐,而這些支撐是通過云計(jì)算的方式來(lái)提供。尤其是新的應(yīng)用系統(tǒng)建設(shè)時(shí),DevOps中的運(yùn)維人員,即校方運(yùn)維人員,可以以同樣的架構(gòu)應(yīng)用于新的應(yīng)用系統(tǒng)建設(shè)。
由此我們可以總結(jié)出如圖3所示的云計(jì)算下的DevOps開發(fā)模式拓?fù)鋱D。
在該拓?fù)浣Y(jié)構(gòu)下,原有私有云運(yùn)維團(tuán)隊(duì)中,需要提升部分工作人員向業(yè)務(wù)層發(fā)展,并控制代碼庫(kù)、知識(shí)庫(kù)和問題庫(kù)的部署和基本運(yùn)維管理。在新建項(xiàng)目時(shí),私有云運(yùn)維團(tuán)隊(duì)需要根據(jù)項(xiàng)目需要,分配生產(chǎn)環(huán)境、測(cè)試環(huán)境和開發(fā)環(huán)境給項(xiàng)目組,從而允許項(xiàng)目多次部署、多次交付。
在云計(jì)算環(huán)境下的DevOps要求云計(jì)算運(yùn)維人員不僅是云基礎(chǔ)架構(gòu)管理員,還需要參與到項(xiàng)目組中,了解項(xiàng)目基本信息,因此對(duì)于云計(jì)算相關(guān)人員的定位提出了更明晰的要求。引入DevOps機(jī)制,可以保障軟件項(xiàng)目的有序推薦,保障軟件項(xiàng)目的質(zhì)量。
(作者單位為上海海事大學(xué))
中國(guó)教育網(wǎng)絡(luò)2016年10期