摘要:傳統(tǒng)軟件開發(fā)和運(yùn)維過程中存在效率低下、擴(kuò)展性差、維護(hù)復(fù)雜等問題?;谌萜骷夹g(shù)與微服務(wù)架構(gòu)的DevOps平臺通過集成容器化、微服務(wù)、持續(xù)集成/持續(xù)部署(CI/CD) 等關(guān)鍵技術(shù),能夠提升軟件開發(fā)和運(yùn)維的敏捷性、可靠性和可伸縮性,可以很好地解決上述問題。文中首先概述了容器化技術(shù)、微服務(wù)和DevOps的基本概念,隨后詳細(xì)闡述了平臺的設(shè)計思路、架構(gòu)組成以及關(guān)鍵技術(shù)實現(xiàn),最后分析了平臺的優(yōu)勢和對未來的展望。
關(guān)鍵詞:容器化;微服務(wù);DevOps;云原生;CI/CD
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2024)27-0052-04
0 引言
隨著云計算技術(shù)的飛速發(fā)展,軟件開發(fā)和運(yùn)維領(lǐng)域正經(jīng)歷著深刻的變革。其中,容器化技術(shù)作為一種新興技術(shù),旨在充分挖掘和利用云計算的潛力,為應(yīng)用程序的構(gòu)建和運(yùn)維提供新的思路。通過容器化技術(shù),可以加速應(yīng)用程序的迭代周期,促進(jìn)高效無縫的部署流程,并賦予系統(tǒng)卓越的靈活擴(kuò)展能力。與此同時,隨著微服務(wù)架構(gòu)這種新型軟件設(shè)計范式的興起,可以對龐大復(fù)雜的軟件應(yīng)用進(jìn)行解構(gòu),拆分出一系列高內(nèi)聚的微型服務(wù),顯著增強(qiáng)了系統(tǒng)的可用性、可擴(kuò)展性以及后續(xù)維護(hù)的便捷性,從而推動了軟件架構(gòu)的現(xiàn)代化轉(zhuǎn)型。DevOps作為一種文化與技術(shù)的結(jié)合,旨在打破開發(fā)與運(yùn)維之間的壁壘,實現(xiàn)軟件交付的高速迭代和高質(zhì)量保障。而基于容器與微服務(wù)的DevOps 平臺正是順應(yīng)這一趨勢的產(chǎn)物。
1 背景與相關(guān)技術(shù)介紹
1.1 容器化技術(shù)概述
隨著計算機(jī)技術(shù)的發(fā)展,計算機(jī)軟件的架構(gòu)也在不斷演進(jìn),從最初的單體架構(gòu),到近年興起的分布式架構(gòu),再到現(xiàn)在最前沿的云原生架構(gòu)。云原生代表了一種創(chuàng)新的應(yīng)用構(gòu)建與運(yùn)行的新范式,它深度整合并利用了云計算平臺的核心資源與能力,諸如容器化技術(shù)、容器編排技術(shù)、自動化運(yùn)維等,旨在充分發(fā)揮云計算的潛能與效益。云原生技術(shù)棧中核心的就是容器化技術(shù),其中最具代表性和應(yīng)用最為廣泛的是Docker 和Kubernetes。
1.1.1 Docker
容器技術(shù)作為一種輕量級的操作系統(tǒng)層面的虛擬化技術(shù),能夠為軟件應(yīng)用提供一個資源獨(dú)立的運(yùn)行環(huán)境[1]。目前應(yīng)用最為廣泛的一種容器技術(shù)當(dāng)屬Docker。Docker這個體系涵蓋了Docker容器引擎與Docker Hub注冊服務(wù)器兩大核心組件。Docker容器引擎賦予開發(fā)者將軟件應(yīng)用封裝成獨(dú)立鏡像的能力,提供了簡單高效的部署方式。而Docker Hub注冊服務(wù)器則作為一個全面的鏡像管理平臺,允許用戶輕松創(chuàng)建專屬的鏡像倉庫,用于安全地存儲、高效地管理及靈活地分發(fā)Docker鏡像。通過合理利用Docker的這些功能,軟件應(yīng)用能夠輕松實現(xiàn)跨平臺運(yùn)行。
1.1.2 Kubernetes
Kubernetes是一種容器編排與管理系統(tǒng),專注于跨節(jié)點的集群資源優(yōu)化、服務(wù)自動發(fā)現(xiàn)、彈性擴(kuò)展等功能。它構(gòu)建了一個強(qiáng)健的調(diào)度框架,能夠智能地在集群內(nèi)分配并管理容器化應(yīng)用的部署,實現(xiàn)了從創(chuàng)建到運(yùn)維的全自動化流程。Kubernetes的核心能力涵蓋容器的智能調(diào)度、集群范圍內(nèi)資源的精細(xì)管理以及容器狀態(tài)的實時監(jiān)控與數(shù)據(jù)收集,確保系統(tǒng)的高效運(yùn)行與穩(wěn)定性。Kubernetes集群由控制節(jié)點(Master) 、計算節(jié)點(Node) 、Etcd集群組成。Master節(jié)點負(fù)責(zé)集群運(yùn)行和資源管理,Node節(jié)點為容器應(yīng)用提供各類資源,Etcd存儲記錄集群狀態(tài)信息[2]。
1.2 微服務(wù)架構(gòu)
微服務(wù)架構(gòu)是一種新型的軟件設(shè)計范式,基于此范式可以對復(fù)雜龐大的軟件應(yīng)用進(jìn)行解構(gòu),拆分出一系列自治且獨(dú)立的微型服務(wù)。每個服務(wù)均負(fù)責(zé)一項業(yè)務(wù)能力,實現(xiàn)了高內(nèi)聚低耦合的設(shè)計原則。微服務(wù)架構(gòu)能夠提高系統(tǒng)的可擴(kuò)展性、可維護(hù)性和容錯能力。微服務(wù)應(yīng)用設(shè)計需要合理進(jìn)行服務(wù)拆分,遵循單一職責(zé)原則,避免過度拆分導(dǎo)致“服務(wù)爆炸”問題[3]。
1.3 DevOps 理念
DevOps 是Development 和Operations 的組合詞,DevOps的要點在于打破以往傳統(tǒng)流程中開發(fā)與運(yùn)維之間的割裂狀態(tài),促進(jìn)二者之間的協(xié)作,以此實現(xiàn)全流程的自動化,旨在通過集成先進(jìn)的工具來加速軟件產(chǎn)品的迭代周期。其中,持續(xù)集成(CI) 與持續(xù)部署(CD) 占據(jù)了舉足輕重的地位。持續(xù)集成是指當(dāng)將新提交的代碼上傳到代碼倉庫中時,會自動或者手動地觸發(fā)一系列編譯、打包、構(gòu)建、測試流程,確保新舊代碼的無縫集成,并快速反饋測試結(jié)果,這一過程往往頻繁進(jìn)行,以縮短問題發(fā)現(xiàn)與解決的時間。持續(xù)部署是指通過自動化部署工具將軟件功能頻繁地持續(xù)進(jìn)行交付[4]。此外,DevOps還涵蓋了自動化測試、監(jiān)控與日志等關(guān)鍵環(huán)節(jié),共同構(gòu)建了一個高效、可靠且響應(yīng)迅速的軟件交付體系。
2 平臺設(shè)計
2.1 設(shè)計目標(biāo)
平臺的設(shè)計目標(biāo)主要聚焦于構(gòu)建一個高效、靈活、可擴(kuò)展且易于管理的DevOps平臺,該平臺深度融合容器化技術(shù)與微服務(wù)架構(gòu),旨在提升軟件開發(fā)、測試、部署及運(yùn)維的自動化水平,加速產(chǎn)品迭代速度,同時保障軟件質(zhì)量與穩(wěn)定性。具體而言,設(shè)計目標(biāo)包括但不限于以下幾個方面:
1) 通過容器化技術(shù)的運(yùn)用,實現(xiàn)資源的彈性伸縮與高效利用,提升資源利用率,降低運(yùn)維成本,提高系統(tǒng)的可靠性與可用性。
2) 采用微服務(wù)架構(gòu),對復(fù)雜龐大的軟件應(yīng)用進(jìn)行解構(gòu),拆分出一系列自治且獨(dú)立的微型服務(wù)。每個服務(wù)均只負(fù)責(zé)一項業(yè)務(wù)能力,實現(xiàn)高內(nèi)聚低耦合的設(shè)計原則,從而提高系統(tǒng)的可維護(hù)性與可擴(kuò)展性。
3) 構(gòu)建自動化的CI/CD流程,實現(xiàn)代碼提交到生產(chǎn)環(huán)境的無縫集成與快速部署,減少人為錯誤,提高交付效率。
2.2 功能設(shè)計
2.2.1 整體流程
平臺在功能層面主要基于軟件開發(fā)部署流程來設(shè)計,分為兩大模塊,分別是開發(fā)過程和部署過程,其中:
1) 開發(fā)過程主要對應(yīng)持續(xù)集成(CI) 流程。開發(fā)人員針對軟件應(yīng)用的具體需求進(jìn)行開發(fā),開發(fā)完成后將對應(yīng)代碼提交到代碼倉庫。代碼倉庫負(fù)責(zé)保存所有軟件應(yīng)用的代碼,同時軟件應(yīng)用按實際需求和場景可以分為多個版本,每個版本有對應(yīng)的代碼分支。當(dāng)某個版本的代碼被開發(fā)人員提交到代碼倉庫后,會觸發(fā)CI流水線的執(zhí)行。CI流水線從代碼倉庫拉取對應(yīng)的代碼,檢查無誤后編譯打包、構(gòu)建鏡像。CI流水線執(zhí)行完成后會生成軟件應(yīng)用的新版本代碼包和Docker鏡像。
2) 部署過程主要對應(yīng)持續(xù)部署(CD) 流程。在CI 流水線執(zhí)行完成后,負(fù)責(zé)部署的人員(可以是開發(fā)人員,也可以是測試人員或者運(yùn)維人員)觸發(fā)CD流水線執(zhí)行,將CI流水線生成的Docker鏡像部署到指定的環(huán)境(該環(huán)境按實際需求可以分為開發(fā)環(huán)境、測試環(huán)境、正式環(huán)境等)的Kubernetes集群中。以上整體流程如圖1所示。
2.2.2 功能模塊設(shè)計
平臺的功能模塊設(shè)計主要從業(yè)務(wù)領(lǐng)域的角度進(jìn)行劃分,主要包含以下幾個核心功能模塊:
1) DevOps模塊:主要包含持續(xù)集成(CI) 和持續(xù)部署(CD) 相關(guān)功能,另外還有應(yīng)用管理、代碼管理、制品管理、流水線管理等功能。
2) 容器云模塊:主要包含容器管理、部署策略、擴(kuò)縮容、監(jiān)控指標(biāo)、日志管理等功能。
3) 鏡像管理模塊:鏡像相關(guān)的模塊,主要包含鏡像的管理以及自定義鏡像維護(hù)等功能。
4) 后臺管理模塊:主要為平臺管理員提供服務(wù),包含一系列平臺管理相關(guān)的功能,如:用戶管理、集群管理、資源管理、權(quán)限管理等。
2.3 架構(gòu)設(shè)計
2.3.1 邏輯架構(gòu)
平臺采用云原生技術(shù)棧,主要包括Kubernetes和Docker(其中Kubernetes 作為容器編排與管理系統(tǒng),Docker作為容器運(yùn)行時)以及一系列微服務(wù)應(yīng)用和自動化工具和平臺(如Jenkins、GitLab、Prometheus等),以此來支持CI/CD流程、監(jiān)控與日志管理等。平臺的整體邏輯架構(gòu)設(shè)計如圖2所示。
對每一層的具體設(shè)計及描述如下:
1) 基礎(chǔ)設(shè)施層:提供云資源(如虛擬機(jī)、容器實例等)和基礎(chǔ)服務(wù)(如網(wǎng)絡(luò)、存儲、安全等)。
2) 資源調(diào)度層:包括容器編排與管理(Kuber?netes) 等核心服務(wù),主要作用在于通過合適的調(diào)度策略和機(jī)制,分配并調(diào)度滿足應(yīng)用程序需要的計算資源、網(wǎng)絡(luò)資源、存儲資源等。同時通過彈性伸縮能力為應(yīng)用提供橫向擴(kuò)展的能力,保障應(yīng)用的高可用性。
3) 微服務(wù)層:主要由一系列基于微服務(wù)架構(gòu)的應(yīng)用程序組成,包含DevOps平臺、容器云平臺、鏡像平臺、日志管理、權(quán)限管理等微服務(wù)應(yīng)用。
其中:
DevOps 平臺主要提供持續(xù)集成(CI) 、持續(xù)部署(CD) 相關(guān)功能,同時還提供應(yīng)用管理、代碼管理、制品管理等功能。
鏡像平臺主要提供對鏡像的管理與構(gòu)建等功能。
日志平臺主要提供對日志的收集和日志查詢相關(guān)功能。
權(quán)限管理模塊主要對用戶的權(quán)限和角色進(jìn)行管理。
容器云平臺主要提供資源的分配與容器的調(diào)度和管理能力,收斂Kubernetes相關(guān)操作與權(quán)限,向下屏蔽Kubernetes細(xì)節(jié),向上封裝Kubernetes相關(guān)原子能力,承載調(diào)度策略與發(fā)布策略具體實現(xiàn)。
4) 應(yīng)用層:提供Web界面或API接口,供開發(fā)人員和運(yùn)維人員訪問和使用平臺功能,同時也可以在平臺提供的基礎(chǔ)能力之上,構(gòu)建其他業(yè)務(wù)場景下的應(yīng)用,如業(yè)務(wù)看板、數(shù)據(jù)可視化報表等。
2.3.2 組件關(guān)系拓?fù)?/p>
平臺基于Spring Cloud微服務(wù)框架構(gòu)建,利用其豐富的組件能力實現(xiàn)微服務(wù)應(yīng)用實例之間的靈活調(diào)用。
平臺主要包含以下微服務(wù)應(yīng)用(組件):
1) DevOps平臺。主要提供持續(xù)集成(CI) 和持續(xù)部署(CD) 功能,另外還有應(yīng)用管理、代碼管理、制品管理、流水線管理等功能。
2) 容器云平臺。主要提供對資源的分配和對容器調(diào)度、編排與管理的能力,收斂Kubernetes相關(guān)操作與權(quán)限,向下屏蔽Kubernetes 細(xì)節(jié),向上封裝Kubernetes 相關(guān)原子能力,承載調(diào)度策略與發(fā)布策略具體實現(xiàn)。
3) 鏡像平臺。主要提供對鏡像的構(gòu)建、維護(hù),用戶按需自定義鏡像等功能。
另外還有以下幾個第三方組件:
4) 代碼倉庫。主要用于對軟件應(yīng)用的代碼進(jìn)行存儲和托管。
5) Jenkins。用來實現(xiàn)持續(xù)集成(CI) 流程中的自動化代碼編譯、打包、構(gòu)建鏡像,并將構(gòu)建成功后的鏡像推送到鏡像倉庫。
6) Docker 服務(wù)。主要用于提供Docker運(yùn)行環(huán)境和執(zhí)行Docker相關(guān)命令的CLI。
7) 鏡像倉庫。主要用于對Docker鏡像進(jìn)行存儲和托管。
8) Kubernetes集群。Kubernetes專注于跨節(jié)點的集群資源優(yōu)化、服務(wù)自動發(fā)現(xiàn)、彈性擴(kuò)展等高級功能。它構(gòu)建了一個強(qiáng)健的調(diào)度框架,能夠智能地在集群內(nèi)分配并管理容器化應(yīng)用的部署,實現(xiàn)了從創(chuàng)建到運(yùn)維的全自動化流程。Kubernetes集群可以根據(jù)實際場景搭建多個。
以上這些組件之間互相協(xié)作,共同為平臺的各個模塊和功能服務(wù)。這些組件之間的拓?fù)潢P(guān)系如圖3 所示。
2.4 關(guān)鍵技術(shù)實現(xiàn)
該平臺通過集成一系列關(guān)鍵技術(shù)和工具,實現(xiàn)了軟件開發(fā)、測試、部署、運(yùn)維的全流程自動化,主要包括以下幾個方面。
2.4.1 容器化技術(shù)
利用Docker這一先進(jìn)的容器化技術(shù),將軟件應(yīng)用封裝進(jìn)容器中。此舉不僅保障了應(yīng)用程序在不同運(yùn)行環(huán)境間的一致性與可靠性,還憑借容器迅速啟動與便捷遷移的能力,極大地加速了應(yīng)用的部署流程,并有效提升了資源利用效率。
2.4.2 微服務(wù)架構(gòu)
將復(fù)雜龐大的軟件進(jìn)行應(yīng)用解構(gòu),拆分出一系列自治且獨(dú)立運(yùn)行的微型服務(wù)。每個服務(wù)均只負(fù)責(zé)一項業(yè)務(wù)能力,服務(wù)之間高內(nèi)聚低耦合,使得開發(fā)團(tuán)隊能夠更快速地響應(yīng)需求變化。
2.4.3 持續(xù)集成/持續(xù)部署(CI/CD)
通過Jenkins等工具,構(gòu)建完整的全流程自動化CI/CD流水線,涵蓋了從提交代碼到部署到各個環(huán)境的全部周期,極大地縮短了軟件交付周期,提高了軟件質(zhì)量和穩(wěn)定性。
2.4.4 自動化運(yùn)維
Kubernetes作為硬件資源抽象和調(diào)度層,很好地解決了硬件資源的按需擴(kuò)展和高可用等問題[5]。利用Kubernetes的自動化運(yùn)維功能,實現(xiàn)應(yīng)用的自動擴(kuò)縮容、故障恢復(fù)和滾動更新,極大地提升了系統(tǒng)的高可用性和穩(wěn)定性。
通過上述關(guān)鍵技術(shù)的實現(xiàn),文中設(shè)計的DevOps 平臺不僅提升了軟件開發(fā)的效率和靈活性,還增強(qiáng)了系統(tǒng)的穩(wěn)定性、可靠性和安全性,為企業(yè)在數(shù)字化轉(zhuǎn)型過程中提供了強(qiáng)有力的支持。
3 結(jié)論與展望
本文深入探討了基于容器化技術(shù)與微服務(wù)架構(gòu)的DevOps平臺。通過詳細(xì)分析容器化技術(shù)、微服務(wù)架構(gòu)、持續(xù)集成/持續(xù)部署流程以及自動化運(yùn)維等關(guān)鍵技術(shù),構(gòu)建了一個高效、可靠且可擴(kuò)展的軟件交付平臺。該平臺不僅可以顯著提升軟件開發(fā)和運(yùn)維的效率,還可以通過自動化和標(biāo)準(zhǔn)化的流程降低人為錯誤的風(fēng)險,確保軟件質(zhì)量的穩(wěn)定提升。
同時,隨著技術(shù)的不斷發(fā)展和業(yè)務(wù)需求的持續(xù)變化,平臺的優(yōu)化與升級將是確保其長期競爭力的關(guān)鍵。
展望未來,通過繼續(xù)關(guān)注容器化、微服務(wù)及Dev?Ops領(lǐng)域的最新進(jìn)展,積極探索人工智能新技術(shù)在平臺中的應(yīng)用,通過不斷的技術(shù)創(chuàng)新與實踐積累,推動AIOX+p4FRtc4+L6FaT4C66VfA==ps在平臺中的落地,基于容器和微服務(wù)的DevOps 平臺將能夠更好地服務(wù)于企業(yè)的數(shù)字化轉(zhuǎn)型戰(zhàn)略,推動軟件行業(yè)向更高水平邁進(jìn)。
本文設(shè)計的基于容器與微服務(wù)的DevOps平臺為現(xiàn)代軟件開發(fā)提供了一種高效、靈活且可信賴的解決方案,有望為相關(guān)領(lǐng)域的研究人員和從業(yè)者提供有益的參考。
參考文獻(xiàn):
[1] 黃俊,陳曦,吳濤.基于Docker的網(wǎng)絡(luò)仿真平臺設(shè)計與實現(xiàn)[J].現(xiàn)代信息科技,2023,7(4):1-5,9.
[2] 朱小亮.基于Kubernetes高校數(shù)據(jù)中心云平臺設(shè)計[J].電腦知識與技術(shù),2023,19(22):81-84.
[3] 陳鵬,何憲英.基于云原生的應(yīng)用平臺研究與設(shè)計[J].信息系統(tǒng)工程,2022(1):48-51.
[4] 陳博,周亦敏.基于Kubernetes的CI/CD平臺[J].計算機(jī)系統(tǒng)應(yīng)用,2020,29(12):268-271.
[5] 許瑜超,李桂炎,周治,等.基于開源的Prometheus開發(fā)廣電網(wǎng)絡(luò)綜合運(yùn)維網(wǎng)管平臺[J].廣播與電視技術(shù),2022,49(8):134-139.
【通聯(lián)編輯:謝媛媛】
基金項目:湖南省自然科學(xué)基金項目:面向三維脈圖的預(yù)處理框架構(gòu)建及深度學(xué)習(xí)特征工程方法研究(項目編號:2024JJ8025)