本發(fā)明屬于云原生,具體涉及基于istio與鏈路追蹤的微服務(wù)混沌測(cè)試方法及裝置。
背景技術(shù):
1、微服務(wù)架構(gòu)隨著云計(jì)算和容器技術(shù)的發(fā)展,逐漸成為現(xiàn)代分布式系統(tǒng)設(shè)計(jì)的主流,其將單一應(yīng)用拆分成多個(gè)獨(dú)立的服務(wù),每個(gè)服務(wù)負(fù)責(zé)特定的業(yè)務(wù)功能,可以獨(dú)立開發(fā)、部署和擴(kuò)展。相比于傳統(tǒng)單體架構(gòu),微服務(wù)架構(gòu)在可伸縮性、開發(fā)部署效率、維護(hù)性和可管理性等方面具有優(yōu)勢(shì)。但基于微服務(wù)架構(gòu)的系統(tǒng)通常較復(fù)雜,一個(gè)故障的出現(xiàn)可能會(huì)影響系統(tǒng)的多個(gè)方面。因此,對(duì)于測(cè)試人員來(lái)說(shuō),識(shí)別和解決這些復(fù)雜的故障對(duì)于提升微服務(wù)架構(gòu)系統(tǒng)的韌性至關(guān)重要。
2、kubernetes(簡(jiǎn)稱k8s)是一個(gè)開源的容器編排平臺(tái),旨在自動(dòng)化應(yīng)用程序的部署、擴(kuò)展和管理。它通過(guò)提供強(qiáng)大的功能,如自動(dòng)化部署、彈性伸縮、服務(wù)發(fā)現(xiàn)、負(fù)載均衡和自愈能力,使得在大規(guī)模集群環(huán)境中運(yùn)行容器化應(yīng)用變得更加高效和可靠。kubernetes?廣泛應(yīng)用于現(xiàn)代云計(jì)算和微服務(wù)架構(gòu),成為管理容器化應(yīng)用的標(biāo)準(zhǔn)解決方案。
3、istio是一種開源服務(wù)網(wǎng)格解決方案,專為微服務(wù)架構(gòu)設(shè)計(jì),提供流量管理、安全、可觀測(cè)性和策略控制等功能。通過(guò)在每個(gè)服務(wù)實(shí)例旁部署一個(gè)代理(envoy),istio即可實(shí)現(xiàn)服務(wù)間的通信、負(fù)載均衡、認(rèn)證授權(quán)、監(jiān)控和故障注入,從而增強(qiáng)了系統(tǒng)的彈性、可靠性和安全性,使得管理和運(yùn)行分布式微服務(wù)變得更加高效和可控。
4、鏈路追蹤是一種用于監(jiān)控和調(diào)試分布式系統(tǒng)的方法,通過(guò)記錄和追蹤每個(gè)請(qǐng)求在系統(tǒng)中經(jīng)過(guò)的各個(gè)服務(wù)和組件,生成完整的請(qǐng)求路徑。它幫助開發(fā)人員和運(yùn)維人員了解系統(tǒng)的內(nèi)部運(yùn)行狀況、識(shí)別性能瓶頸和定位問(wèn)題,從而提高系統(tǒng)的可觀測(cè)性和可靠性。
5、混沌工程用于在系統(tǒng)中模擬實(shí)際生產(chǎn)環(huán)境中可能出現(xiàn)的各種故障場(chǎng)景,以觸發(fā)系統(tǒng)在面對(duì)這些故障時(shí)可能會(huì)出現(xiàn)的問(wèn)題。相關(guān)人員根據(jù)所觸發(fā)的問(wèn)題提出解決方案,從而提升系統(tǒng)整體應(yīng)對(duì)風(fēng)險(xiǎn)的能力。然而,手動(dòng)進(jìn)行混沌工程實(shí)驗(yàn)效率低下,需耗費(fèi)大量人力成本;隨機(jī)注入故障存在重復(fù)和遺漏,執(zhí)行效率不高,不能充分覆蓋測(cè)試空間。在隔離環(huán)境中進(jìn)行測(cè)試需要大量資源配合,且對(duì)于一些信息安全要求高的組織和企業(yè)(如金融、軍事、科技、電力等行業(yè)),在其他環(huán)境中部署一套系統(tǒng)專門用于測(cè)試幾乎是不可能的?,F(xiàn)有的微服務(wù)混沌測(cè)試工具有:
6、混沌工程平臺(tái):chaos?mesh?是一種典型的混沌工程平臺(tái),適用于?kubernetes?環(huán)境中的故障注入。然而,每次進(jìn)行故障注入時(shí),都需要人工手動(dòng)指定注入目標(biāo)和配置故障參數(shù)。注入完成后,必須人工發(fā)出測(cè)試請(qǐng)求,并手動(dòng)檢查故障注入的效果是否符合預(yù)期。
7、http層故障注入工具:filibuster?作為?http?層故障注入工具的代表,能夠在發(fā)出測(cè)試請(qǐng)求后,對(duì)下游請(qǐng)求和響應(yīng)在網(wǎng)絡(luò)層注入預(yù)先配置的故障。通過(guò)請(qǐng)求追蹤自動(dòng)探測(cè)微服務(wù)之間的依賴關(guān)系,并生成所需的故障組合,避免不必要的故障注入,自動(dòng)檢查測(cè)試結(jié)果是否符合預(yù)期。然而,這種方法需要對(duì)被測(cè)微服務(wù)的源代碼進(jìn)行修改,以實(shí)現(xiàn)請(qǐng)求追蹤和故障注入。
8、隨機(jī)故障注入工具:chaos?monkey?是隨機(jī)故障注入工具的典型代表,支持在生產(chǎn)環(huán)境中定期隨機(jī)注入崩潰故障。雖然能夠有效發(fā)現(xiàn)系統(tǒng)問(wèn)題,但同時(shí)也會(huì)對(duì)真實(shí)用戶產(chǎn)生影響,且難以量化測(cè)試進(jìn)度。
9、基于自動(dòng)依賴發(fā)現(xiàn)和代理的微服務(wù)混沌測(cè)試工具:這種工具對(duì)資源依賴度較高,不適合在生產(chǎn)環(huán)境中進(jìn)行實(shí)驗(yàn),難以實(shí)際應(yīng)用和推廣。
10、因此,基于istio與鏈路追蹤的微服務(wù)混沌測(cè)試方法的研究具有重要意義。
技術(shù)實(shí)現(xiàn)思路
1、為了解決上述技術(shù)問(wèn)題,本發(fā)明提供了基于istio與鏈路追蹤的微服務(wù)混沌測(cè)試方法與裝置。通過(guò)利用?envoy?攔截請(qǐng)求來(lái)獲取請(qǐng)求定義并返回預(yù)設(shè)響應(yīng),依賴服務(wù)無(wú)需實(shí)際處理這些請(qǐng)求,通過(guò)直接返回預(yù)設(shè)響應(yīng),可以快速模擬各種服務(wù)響應(yīng)情況,加快測(cè)試進(jìn)程;通過(guò)鏈路追蹤獲取涉及的微服務(wù)粒度鏈路,并結(jié)合?envoy?攔截的請(qǐng)求定義生成一個(gè)微服務(wù)與請(qǐng)求對(duì)應(yīng)的請(qǐng)求追蹤樹。隨后,實(shí)施自底向上的測(cè)試策略,以全面覆蓋測(cè)試空間。
2、為實(shí)現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案如下:
3、一方面,本發(fā)明提供一種基于istio與鏈路追蹤的微服務(wù)混沌測(cè)試方法,所述方法包括:
4、步驟s1、提交測(cè)試任務(wù):所述測(cè)試任務(wù)內(nèi)容包括當(dāng)前被測(cè)系統(tǒng)所在的命名空間、選擇觸發(fā)被測(cè)鏈路的請(qǐng)求定義以及各個(gè)微服務(wù)的故障候選列表;
5、步驟s2、初始化測(cè)試環(huán)境:確保?istio?已安裝并在被測(cè)系統(tǒng)中啟用了?sidecar模式以及已經(jīng)集成了鏈路追蹤功能;
6、步驟s3、生成請(qǐng)求追蹤樹:通過(guò)處理后的觸發(fā)被測(cè)鏈路的請(qǐng)求定義發(fā)起請(qǐng)求,利用envoy?過(guò)濾出經(jīng)過(guò)每個(gè)微服務(wù)的請(qǐng)求定義,并通過(guò)鏈路追蹤功能追蹤此次請(qǐng)求的微服務(wù)級(jí)調(diào)用鏈路,結(jié)合請(qǐng)求定義與微服務(wù)級(jí)調(diào)用鏈路生成請(qǐng)求追蹤樹;
7、步驟s4、實(shí)施自底向上的測(cè)試策略:從請(qǐng)求追蹤樹的葉子結(jié)點(diǎn)開始自底向上實(shí)施測(cè)試用例,單個(gè)測(cè)試用例的執(zhí)行包括注入候選故障、發(fā)起指定請(qǐng)求、觸發(fā)envoy過(guò)濾器獲取預(yù)設(shè)響應(yīng);
8、步驟s5、生成最終測(cè)試結(jié)果:通過(guò)收集請(qǐng)求、預(yù)設(shè)響應(yīng)、微服務(wù)的調(diào)用、注入的故障類型相關(guān)信息,生成指定格式的測(cè)試結(jié)果。
9、另一方面,本發(fā)明提供一種基于istio與鏈路追蹤的微服務(wù)混沌測(cè)試裝置,所述裝置包括:
10、trace處理器,用于標(biāo)記并發(fā)起對(duì)被測(cè)鏈路的請(qǐng)求,根據(jù)此次請(qǐng)求的鏈路追蹤數(shù)據(jù)和envoy過(guò)濾器過(guò)濾出的各個(gè)請(qǐng)求的請(qǐng)求定義生成請(qǐng)求追蹤樹,觸發(fā)測(cè)試用例生成器;
11、測(cè)試用例生成器,用于根據(jù)trace處理器生成的請(qǐng)求追蹤樹的各個(gè)葉子節(jié)點(diǎn)以及前端提交的各個(gè)服務(wù)所對(duì)應(yīng)的故障候選列表生成測(cè)試用例;
12、envoy過(guò)濾器,用于將trace處理器所標(biāo)記的請(qǐng)求所觸發(fā)的對(duì)下游各個(gè)服務(wù)的請(qǐng)求處理為指定格式的請(qǐng)求定義,以及對(duì)由測(cè)試用例執(zhí)行器發(fā)起的指定請(qǐng)求觸發(fā)生成響應(yīng)過(guò)濾器或依據(jù)已有響應(yīng)過(guò)濾器返回預(yù)設(shè)響應(yīng);
13、測(cè)試用例執(zhí)行器,用于注入測(cè)試用例指定的故障、發(fā)起指定請(qǐng)求,并觸發(fā)envoy過(guò)濾器,如果此指定請(qǐng)求具有對(duì)應(yīng)的響應(yīng)則會(huì)得到預(yù)設(shè)響應(yīng),如果沒(méi)有則提交被測(cè)服務(wù)返回的結(jié)果與此次測(cè)試用例的信息至envoy過(guò)濾器生成響應(yīng)過(guò)濾器;
14、測(cè)試結(jié)果處理器,用于根據(jù)測(cè)試用例執(zhí)行器生成的測(cè)試過(guò)程數(shù)據(jù)生成指定格式的測(cè)試結(jié)果。
15、本發(fā)明與現(xiàn)有技術(shù)相比,具有以下優(yōu)點(diǎn):
16、1、人工成本低:本發(fā)明通過(guò)自動(dòng)化的測(cè)試流程,顯著減少了人工干預(yù)的需求。利用istio?的自動(dòng)?sidecar?注入和鏈路追蹤工具,實(shí)現(xiàn)了對(duì)測(cè)試鏈路的自動(dòng)識(shí)別和追蹤,測(cè)試用例的生成和執(zhí)行均由系統(tǒng)自動(dòng)完成,極大地降低了人工操作的復(fù)雜性和勞動(dòng)強(qiáng)度。
17、2、執(zhí)行效率高:采用自底向上的測(cè)試策略,通過(guò)并行執(zhí)行測(cè)試用例,提高了測(cè)試的執(zhí)行效率。envoy?過(guò)濾器能夠有效攔截和處理請(qǐng)求和響應(yīng),減少了不必要的網(wǎng)絡(luò)開銷。通過(guò)動(dòng)態(tài)注入?opentelemetry?agent?和配置?opentelemetry?collector,實(shí)現(xiàn)了高效的追蹤數(shù)據(jù)采集和處理。
18、3、應(yīng)用場(chǎng)景廣:本發(fā)明支持在生產(chǎn)環(huán)境中進(jìn)行測(cè)試,適用于各種規(guī)模的微服務(wù)系統(tǒng)。無(wú)論是簡(jiǎn)單的小規(guī)模微服務(wù)架構(gòu),還是復(fù)雜的大規(guī)模分布式系統(tǒng),都能夠有效應(yīng)用本發(fā)明的方法和裝置。
19、4、資源占用低:使用?envoy?進(jìn)行請(qǐng)求和響應(yīng)的攔截和處理,減少了對(duì)系統(tǒng)性能的影響,采樣策略和預(yù)設(shè)響應(yīng)機(jī)制的應(yīng)用,進(jìn)一步降低了測(cè)試過(guò)程中對(duì)計(jì)算和存儲(chǔ)資源的需求。