文/王玉平
云計算環(huán)境下的高校DevOps實踐之路
文/王玉平
隨著信息化的發(fā)展,高校各類業(yè)務(wù)系統(tǒng)數(shù)目繁多,而軟件交付的方式也在發(fā)生變化。傳統(tǒng)的軟件系統(tǒng)交付方式是由校方信息化管理部門提供硬件服務(wù)器,只負責(zé)服務(wù)器硬件資源的正常運轉(zhuǎn)和網(wǎng)絡(luò)訪問的暢通,而不參與到軟件開發(fā)生命周期。這種方式在高校信息化發(fā)展初期確實非常高效,也彌補了校方人員技術(shù)水平不高的缺陷。但是隨著信息化的發(fā)展,云計算技術(shù)的成熟,大數(shù)據(jù)對教育的變革,尤其是高校信息化需求的變化,各個應(yīng)用不再是獨立的個體,而是整個學(xué)校信息化的組件,多個應(yīng)用之間相輔相成,業(yè)務(wù)流程交叉,數(shù)據(jù)流混雜。軟件系統(tǒng)個體發(fā)展開始向平臺化、集成化、統(tǒng)一化發(fā)展。這種變化,對于軟件開發(fā)參與者發(fā)生了變化,對校方信息化人員的總體戰(zhàn)略和運維也提出了更高的要求。這些變化,要求校方信息化人員與第三方軟件供應(yīng)商協(xié)同工作,參與系統(tǒng)部署的環(huán)境準(zhǔn)備和后續(xù)運維。
DevOps(Development和Operations的組合詞)是一種重視“軟件開發(fā)人員(Dev)”和“IT運維技術(shù)人員(Ops)”之間溝通合作的文化、運動或慣例。透過自動化“軟件交付”和“架構(gòu)變更”的流程,來使得構(gòu)建、測試、發(fā)布軟件能夠更加地快捷、頻繁和可靠。它的出現(xiàn)是由于軟件行業(yè)日益清晰認識到:為了按時交付軟件產(chǎn)品和服務(wù),開發(fā)和運營必須緊密合作。
如圖1所示,我們可以把DevOps看作開發(fā)(軟件工程)、技術(shù)運營和質(zhì)量保障(QA)三者的交集傳統(tǒng)的軟件組織將開發(fā)、IT運營和質(zhì)量保障設(shè)為各自分離的部門,在這種環(huán)境下如何采用新的開發(fā)方法(例如敏捷軟件開發(fā)),是一個重要的課題。按照從前的工作方式,開發(fā)和部署,不需要IT支持或者QA深入的跨部門的支持;而現(xiàn)在卻需要極其緊密的多部門協(xié)作。而DevOps考慮的還不止是軟件部署,它是一套針對這幾個部門間溝通與協(xié)作問題的流程和方法。
DevOps的引入能對產(chǎn)品交付、測試、功能開發(fā)和維護起到意義深遠的影響。在缺乏DevOps能力的組織中,開發(fā)與運營之間存在著信息“鴻溝”──例如運營人員要求更好的可靠性和安全性,開發(fā)人員則希望基礎(chǔ)設(shè)施響應(yīng)更快,而業(yè)務(wù)用戶的需求則是更快地將更多的特性發(fā)布給最終用戶使用。這種信息鴻溝就是最常出問題的地方。
圖1 DevOps是三方的合作溝通
按照IDC的研究,2005年之前是虛擬化技術(shù)發(fā)展的第一階段,稱之為虛擬化1.0,從2005年到2010年時虛擬化發(fā)展的第二階段,稱之為虛擬化2.0,目前已經(jīng)進入虛擬化2.5階段,虛擬化3.0階段在不久也將會到來。根據(jù)Gartner的預(yù)測,目前中國70%的X86企業(yè)服務(wù)器將實現(xiàn)虛擬化。而高校核心機房的虛擬化發(fā)展更是如此,幾乎每個高校都在利用虛擬化部署應(yīng)用系統(tǒng),每個高校部署了私有云。
CPU的虛擬化技術(shù)將計算能力作為資源,VxLAN技術(shù)將網(wǎng)絡(luò)作為資源,而各種分布式文件系統(tǒng)則將存儲作為資源。以上幾種資源都可以通過私有云來進行自助申請、使用以及歸還。
目前IaaS在高校云計算中得到了實現(xiàn)和部署,信息化部門可以使用商業(yè)虛擬化軟件管理各類虛擬化資源,并允許用戶自助申請。但IaaS的可分配的資源粒度限定于虛擬機,還未能細化到服務(wù)。PaaS技術(shù)則更加側(cè)重于某個開發(fā)平臺所用組件為服務(wù),譬如數(shù)據(jù)庫作為服務(wù),或者一整套開發(fā)環(huán)境作為服務(wù),這種模式強調(diào)的是服務(wù)的可重用性,高校信息化的多樣性決定了這種模式在高校中的局限性。SaaS是更高端的服務(wù)模式,所以云計算的發(fā)展給高校帶來的最主要的服務(wù)模式的變更在于IaaS,這只是原先主機交付與虛擬機交付的差別,還未升級到對軟件交付模式進行改進的高層次變更。
為了改進高校軟件交付的模式,我們在近兩年的軟件系統(tǒng)建設(shè)中,優(yōu)先采用DevOps模式,校內(nèi)項目負責(zé)人員、運維人員和第三方軟件開發(fā)商人員進行了對接,組建新形式的項目組,共同參與項目建設(shè)。雙方職責(zé)因分工不同而側(cè)重點不同。在項目建設(shè)中引入了敏捷開發(fā)方法,并且要求產(chǎn)品多次交付,具體措施有:
使用敏捷或其他軟件開發(fā)過程與方法;
校方要求產(chǎn)品分階段多次交付,提高產(chǎn)品交付的速率;
完善虛擬化和云計算基礎(chǔ)設(shè)施,保障產(chǎn)品開發(fā)運行環(huán)境;
數(shù)據(jù)中心擁有自動化技術(shù)和配置管理工具。
有了這幾項措施,DevOps增進了開發(fā)團隊與運營團隊之間的協(xié)作性、高效性的關(guān)系。由于團隊間協(xié)作關(guān)系的改善,整個組織的效率因此得到提升,伴隨頻繁變化而來的生產(chǎn)環(huán)境的風(fēng)險也能得到降低,并且降低了軟件產(chǎn)品開發(fā)失敗的風(fēng)險。圖2 為 DevOps的生命周期路線。
圖2 DevOps的生命周期
圖3 云計算環(huán)境下的DevOps開發(fā)模式拓撲結(jié)構(gòu)
為了正確使用DevOps模式,在軟件架構(gòu)中,引入了微服務(wù),并根據(jù)基于業(yè)務(wù)進行拆分、采用自動化文化、去中心化、服務(wù)獨立部署、服務(wù)完全自治、隔離失敗、漸進式拆分、避免大規(guī)模改造原有代碼等原則對業(yè)務(wù)進行拆分。
結(jié)合我們具體的實踐,現(xiàn)總結(jié)一下在實踐DevOps模式時需要執(zhí)行的步驟。
1.操作系統(tǒng)的限定
目前常用的服務(wù)器操作系統(tǒng)有Windows Server和Linux,而軟件普遍采用B/S架構(gòu),因此對于操作系統(tǒng)的需求,主要是為了能夠運行Web服務(wù)器,考慮到目前常用Web服務(wù)器有微軟的IIS,Apache httpd,Nginx,我們只需要準(zhǔn)備Windows Server 2012和CentOS等Linux系統(tǒng)即可。由于我們限定了操作系統(tǒng),開發(fā)組也會提早獲知生產(chǎn)運行環(huán)境,改變以往軟件完成后,校方必須滿足軟件開發(fā)方的需求,造成了多種操作系統(tǒng)的存在。
2.數(shù)據(jù)庫的限定
現(xiàn)有編程語言,都有成熟的數(shù)據(jù)持久化工具,而數(shù)據(jù)持久化工具對于數(shù)據(jù)庫是透明的,它依賴于數(shù)據(jù)驅(qū)動程序,允許用戶比較容易的在多種數(shù)據(jù)庫軟件中遷移和部署,因此數(shù)據(jù)庫可由校方自主選擇決定。比較常見的數(shù)據(jù)庫有Oracle、Microsoft SQL Server和MySQL。其中Oracle基本是采取獨立于軟件部署服務(wù)器的方式提供,Microsoft SQL Server和MySQL因為是輕量級的數(shù)據(jù)庫服務(wù)系統(tǒng),可以視軟件系統(tǒng)的復(fù)雜性決定是否與軟件部署在相同的服務(wù)器中。
操作系統(tǒng)和數(shù)據(jù)庫的決定,為我們準(zhǔn)備虛擬機模板提供了依據(jù)。在DevOps實踐中,我們根據(jù)上面幾個選項,分別構(gòu)建了Windows Server+Microsoft SQL Server和CentOS+MySQL的模板,并讓開發(fā)方實現(xiàn)知情未來的生產(chǎn)環(huán)境,開發(fā)方在需求調(diào)研階段依然獲知未來的運行環(huán)境,有針對性的開發(fā),提高了后續(xù)產(chǎn)品的穩(wěn)定性。
3.Web服務(wù)器的選擇
對于Java類開發(fā)語言,對Web服務(wù)器的依賴性不強,反而是需要成熟的容器,如Tomcat、Glassfish、WebLogic Server等容器。這一方面的選擇根據(jù)操作系統(tǒng)以及Java平臺架構(gòu)限定。若是輕量級的應(yīng)用,可以選用Tomcat容器,也可以根據(jù)開發(fā)方的熟悉程度由開發(fā)方選擇,但基本可以限定在Linux操作系統(tǒng)。
對于.Net平臺下的Web應(yīng)用,其Web服務(wù)器必然選擇IIS,其對應(yīng)的操作系統(tǒng)亦為Windows Server。由于Web服務(wù)器都是以軟件包的形式存在,其均可以通過命令行方式安裝,因此該項沒有做進虛擬機模板,而是根據(jù)實際情況實時安裝。
4.建立統(tǒng)一的日志規(guī)范
規(guī)范整個系統(tǒng)而非微服務(wù)的日志體系,采用標(biāo)準(zhǔn)的日志格式非常便于后續(xù)的日志聚合檢索,便于整體的視角分析、監(jiān)控、查看系統(tǒng);一旦系統(tǒng)出現(xiàn)問題,運維可以提供詳實的日志給開發(fā)方,便于問題的查找和解決。鑒于不同的服務(wù)器操作系統(tǒng)有不同的日志系統(tǒng),因為對于虛擬機準(zhǔn)備中沒有特殊要求。但也可以單獨準(zhǔn)備rsyslog服務(wù)器,用于接收從Linux服務(wù)器發(fā)過來的日志。
5.選擇成熟框架
在DevOps中,重復(fù)使用某個模塊是該模式的基礎(chǔ)。必須避免自己重復(fù)發(fā)明輪子,盡量選擇市面上成熟的開源技術(shù)框架進行支撐,比如 Spring Boot、Spring Cloud、Netflix、WildFly Swarm、Docker、Kubernetes、Bootstrap、CAS等框架;只有如此,才能減少DevOps組的技術(shù)負責(zé)度,降低運維人員的技術(shù)要求。由于使用組件的重復(fù)性,運維和開發(fā)人員均可以充分熟悉所用組件框架,從而快速發(fā)現(xiàn)問題、解決問題。
有了以上的要求,我們還需要建設(shè)代碼共享庫,問題列表庫、文檔知識庫等DevOps所必須的支撐,而這些支撐是通過云計算的方式來提供。尤其是新的應(yīng)用系統(tǒng)建設(shè)時,DevOps中的運維人員,即校方運維人員,可以以同樣的架構(gòu)應(yīng)用于新的應(yīng)用系統(tǒng)建設(shè)。
由此我們可以總結(jié)出如圖3所示的云計算下的DevOps開發(fā)模式拓撲圖。
在該拓撲結(jié)構(gòu)下,原有私有云運維團隊中,需要提升部分工作人員向業(yè)務(wù)層發(fā)展,并控制代碼庫、知識庫和問題庫的部署和基本運維管理。在新建項目時,私有云運維團隊需要根據(jù)項目需要,分配生產(chǎn)環(huán)境、測試環(huán)境和開發(fā)環(huán)境給項目組,從而允許項目多次部署、多次交付。
在云計算環(huán)境下的DevOps要求云計算運維人員不僅是云基礎(chǔ)架構(gòu)管理員,還需要參與到項目組中,了解項目基本信息,因此對于云計算相關(guān)人員的定位提出了更明晰的要求。引入DevOps機制,可以保障軟件項目的有序推薦,保障軟件項目的質(zhì)量。
(作者單位為上海海事大學(xué))