官术网_书友最值得收藏!

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的能力。

主站蜘蛛池模板: 固安县| 陵川县| 樟树市| 离岛区| 黑山县| 武山县| 福清市| 绩溪县| 孝昌县| 股票| 石狮市| 杨浦区| 麟游县| 八宿县| 会泽县| 彭州市| 通江县| 通河县| 仁怀市| 开江县| 乌拉特前旗| 红河县| 泸定县| 江西省| 陆丰市| 施甸县| 重庆市| 邢台市| 上高县| 鹤岗市| 二连浩特市| 延川县| 白沙| 贵溪市| 桐乡市| 冀州市| 钟山县| 开封县| 黄浦区| 清水县| 泗洪县|