- 企業(yè)級云原生架構(gòu):技術(shù)、服務與實踐
- 劉景應(四牛)
- 2541字
- 2021-09-27 18:11:37
1.2.4 DevOps
DevOps是一套將軟件開發(fā)(Development,Dev)和系統(tǒng)運維(Operations,Ops)相結(jié)合的實踐,旨在縮短應用系統(tǒng)開發(fā)生命周期,提供高質(zhì)量的持續(xù)交付。
——維基百科“DevOps”
線上的任何操作及變更都可能產(chǎn)生不可預知的風險,因此一直以來,絕大部分企業(yè)對于IT系統(tǒng)執(zhí)行嚴格的線上管控。線上系統(tǒng)的運維管理,經(jīng)歷了“PE、AppOps、DevOps、AIOps、NoOps”的不同發(fā)展階段。從字面上來理解DevOps只是Dev(開發(fā)人員)+Ops(運維人員),實際上,它是一組用于促進開發(fā)人員和運維人員協(xié)作的過程、方法和系統(tǒng)的統(tǒng)稱,如圖1-5所示。

▲圖1-5 IT部門內(nèi)的DevOps協(xié)作
DevOps提倡通過一系列的技術(shù)和工具減少開發(fā)和運維之間的隔閡,實現(xiàn)從開發(fā)、構(gòu)建到最終部署的全流程自動化,從而達到開發(fā)運維一體化。DevOps是一套實踐方法,在保證高質(zhì)量的前提下縮短系統(tǒng)變更從提交到部署至生產(chǎn)環(huán)境的時間。DevOps概念從2009年首次提出發(fā)展到現(xiàn)在,內(nèi)容非常豐富,有理論,也有實踐,包括組織文化、自動化、精益、反饋和分享等方面。
(1)組織架構(gòu)、企業(yè)文化與理念等需要自上而下設計,用于促進開發(fā)部門、運維部門和質(zhì)量保障部門之間的溝通、協(xié)作與整合。簡單而言,組織形式類似于系統(tǒng)分層設計。
(2)自動化是指所有的操作都不需要人工參與,全部依賴系統(tǒng)自動完成,比如上述的持續(xù)交付過程必須自動化才有可能完成快速迭代。
(3)DevOps的出現(xiàn),得益于軟件行業(yè)日益清晰地認識到,為了按時交付軟件產(chǎn)品和服務,開發(fā)部門和運維部門必須緊密合作。
質(zhì)量很重要,而保障交付軟件質(zhì)量的辦法,一方面是各種測試,從最細粒度的單元測試一直到最接近用戶感受的集成測試;另一方面是遞進式的發(fā)布,逐漸擴大變更影響到的用戶范圍,及時發(fā)現(xiàn),及時止損。將DevOps的理念引入整個系統(tǒng)的開發(fā)過程中,能夠顯著提升軟件的開發(fā)效率,縮短軟件交付的周期,更加適應當今快速發(fā)展的云原生時代。DevOps強調(diào)的是高效組織團隊之間如何通過自動化的工具協(xié)作和溝通來完成軟件的生命周期管理,從而更快、更頻繁地交付更穩(wěn)定的軟件。圖1-6所展示的是和DevOps相關(guān)的一些技術(shù)和工具。

▲圖1-6 與DevOps相關(guān)的技術(shù)及工具(圖片來自網(wǎng)絡)
說到DevOps,就必然會提到持續(xù)集成。持續(xù)集成是指在軟件開發(fā)過程中,軟件開發(fā)人員持續(xù)不斷地將開發(fā)出來的代碼和其他開發(fā)人員的代碼進行合并,每次合并后自動進行編譯、構(gòu)建,并運行自動化測試進行驗證,而不是等到最后各自開發(fā)完成后才合并在一起。持續(xù)集成能從根本上提高一個團隊的軟件開發(fā)效率。在軟件開發(fā)過程中引入持續(xù)集成,可以幫助團隊及時發(fā)現(xiàn)系統(tǒng)中的問題,并快速做出修復。這樣不僅可以縮短軟件開發(fā)的時間,而且可以交付更高質(zhì)量的系統(tǒng)。
一個DevOps開發(fā)環(huán)境需要滿足以下8點要求。
(1)環(huán)境一致性:在本地開發(fā)出來的功能,無論在什么環(huán)境下進行部署,都應該能得到一致的結(jié)果。
(2)代碼自動檢查:每次代碼提交后,系統(tǒng)都應該自動對代碼進行檢查,以便及早發(fā)現(xiàn)潛在的問題,并運行自動化測試。
(3)持續(xù)集成:每次代碼提交后,系統(tǒng)可以自動進行代碼的編譯和打包,無須運維人員手動進行。
(4)持續(xù)部署:代碼集成完畢后,系統(tǒng)可以自動將運行環(huán)境中的舊版本應用更新成新版本應用,并且整個過程中不會讓系統(tǒng)不可用。
(5)持續(xù)反饋:在代碼自動檢查、持續(xù)集成、持續(xù)部署的過程中,一旦出現(xiàn)問題,要能及時將問題反饋給開發(fā)人員和運維人員。開發(fā)人員和運維人員收到反饋后對問題及時進行修復。
(6)快速回滾:當發(fā)現(xiàn)本次部署的版本出現(xiàn)問題時,系統(tǒng)應能快速回退到上一個可用版本。
(7)彈性伸縮:當某個服務訪問量增大時,系統(tǒng)應可以對這個服務快速進行擴容,保證用戶的訪問。當訪問量回歸正常時,系統(tǒng)能將擴容的資源釋放回去,從而實現(xiàn)根據(jù)訪問情況對系統(tǒng)進行彈性伸縮。
(8)可視化運維:提供可視化的頁面,可實時監(jiān)控應用、集群、硬件的各種狀態(tài)。
為了滿足以上8點要求,設計出的DevOps開發(fā)環(huán)境如圖1-7所示。

▲圖1-7 DevOps開發(fā)環(huán)境
整個環(huán)境主要由以下6個部分組成。
(1)代碼倉庫 GitLab。
(2)容器技術(shù)Docker。
(3)持續(xù)集成工具Jenkins。
(4)代碼質(zhì)量檢測平臺SonarQube。
(5)鏡像倉庫Harbor。
(6)容器集群管理系統(tǒng)Kubernetes。
整個環(huán)境的運行流程主要分為以下6步。
(1)開發(fā)人員在本地開發(fā)并驗證完功能后,將代碼提交到代碼倉庫。
(2)通過事先配置好的Webhook通知方式,當開發(fā)人員提交完代碼后,部署在云端的持續(xù)集成工具Jenkins會實時感知,并從代碼倉庫中獲取最新的代碼。
(3)獲取到最新代碼后,Jenkins會啟動測試平臺SonarQube對最新的代碼進行檢查以及執(zhí)行單元測試,執(zhí)行完成后在SonarQube平臺上生成測試報告。如果測試未通過,則以發(fā)送電子郵件的方式通知研發(fā)人員進行修改,終止整個流程;如果測試通過,則將結(jié)果反饋給Jenkins并執(zhí)行下一步。
(4)代碼檢查以及單元測試通過后,Jenkins會將代碼發(fā)送到持續(xù)集成服務器中,在服務器上對代碼進行編譯、構(gòu)建,然后打包成能在容器環(huán)境中運行的鏡像文件。如果中間有步驟出現(xiàn)問題,則通過發(fā)送電子郵件的方式通知開發(fā)人員和運維人員進行處理,并終止整個流程。
(5)將鏡像文件上傳到私有鏡像倉庫Harbor中保存。
(6)鏡像上傳完成后,Jenkins會啟動持續(xù)交付服務器,對云環(huán)境中運行的應用進行版本更新,整個更新過程中會確保對服務的訪問不中斷。持續(xù)交付服務器會將最新的鏡像文件拉取到Kubernetes集群中,并采用逐步替換容器的方式對應用進行更新,在服務不中斷的前提下完成更新。
通過上述幾步,我們就可以簡單實現(xiàn)一個DevOps開發(fā)環(huán)境,實現(xiàn)代碼從提交到最終部署的全流程自動化。通過一系列工具和自動化的技術(shù)來降低運維的難度,促進研發(fā)運維一體化。一般來說,DevOps會要求研發(fā)人員負責更多的業(yè)務運維或應用運維的工作。在平臺類軟件維護的場景中,極端情況下會將傳統(tǒng)運維的工作拆分為兩部分——應用運維和平臺運維。應用運維是指包括應用本身的可用性、容量、業(yè)務正確性、監(jiān)控與告警在內(nèi)的所有與業(yè)務相關(guān)的應用本身的運維。平臺運維是指包括底層IaaS層以及支撐應用運維的系統(tǒng)本身的維護。研發(fā)人員負責應用運維,可以在不借助其他團隊的支持且資源充足的情況下,自行完成應用的全生命周期的管理。
DevOps的完整執(zhí)行需要企業(yè)內(nèi)部組織流程的配合和改造。圖1-8所示為某大型互聯(lián)網(wǎng)公司內(nèi)部研發(fā)體系與工作流程,不同崗位角色的人參與整個產(chǎn)品生命周期的不同階段:市場→需求→視覺交互→demo原型→開發(fā)測試→集成部署→上線發(fā)布→評測反饋的完整的持續(xù)交付過程。DevOps鼓勵小團隊協(xié)作,因為小團隊維護少量的服務,可以快速決策、快速發(fā)布,充分利用DevOps的能力。
- WebGIS之Element前端組件開發(fā)
- 網(wǎng)絡掃描技術(shù)揭秘:原理、實踐與掃描器的實現(xiàn)
- 混合云架構(gòu)
- Administrating Solr
- 云原生模式
- Kubernetes實戰(zhàn):構(gòu)建生產(chǎn)級應用平臺
- Kubeflow:云計算和機器學習的橋梁
- 對話大數(shù)據(jù) 政府/工業(yè)/金融/醫(yī)療/人才行業(yè)創(chuàng)新與應用案例分析
- 萬億級流量轉(zhuǎn)發(fā):BFE核心技術(shù)與實現(xiàn)
- Dreamweaver CS6實例教程(第3版)
- 網(wǎng)頁制作案例教程(第2版)
- JSP動態(tài)網(wǎng)站開發(fā)項目教程
- 下一代通信原理
- QEMU/KVM源碼解析與應用
- 網(wǎng)頁設計與制作:Dreamweaver+Flash+Photoshop+HTML5+CSS3(慕課版)