会员测试环境治理之路
01
? ?背景
會員業(yè)務(wù)是公司的重要業(yè)務(wù)之一,為廣大會員用戶承載最基礎(chǔ)的服務(wù)保障,隨著會員數(shù)的破億,業(yè)務(wù)復(fù)雜度也是呈現(xiàn)幾何倍的增加,如何高效的支持會員業(yè)務(wù)的測試,也成為了會員測試團(tuán)隊(duì)不得不面對客觀挑戰(zhàn),這其中最核心也是最基礎(chǔ)的莫過于測試環(huán)境的治理,現(xiàn)將測試環(huán)境特點(diǎn)總結(jié)如下:
特點(diǎn)1:基礎(chǔ)應(yīng)用服務(wù)數(shù)量多達(dá)數(shù)百個(gè),分布在幾十個(gè)域名下,維護(hù)成本高。
特點(diǎn)2:調(diào)用關(guān)系復(fù)雜,應(yīng)用之間互相調(diào)用,并且相互依賴,聯(lián)調(diào)成本高。
特點(diǎn)3:服務(wù)之間調(diào)用依靠路由轉(zhuǎn)發(fā)、服務(wù)發(fā)現(xiàn),定位成本高。
基于如上特點(diǎn),測試過程中環(huán)境會有如下問題:
問題1:應(yīng)用數(shù)量眾多,每個(gè)應(yīng)用基礎(chǔ)配置隨意,且存在個(gè)性化配置,不好管
理。
問題2:測試環(huán)境公用情況嚴(yán)重,依賴于各個(gè)研發(fā)或測試私服,穩(wěn)定性比較差。
問題3:路由功能無法統(tǒng)一管理,調(diào)用關(guān)系混亂,環(huán)境出現(xiàn)問題時(shí),排查問題時(shí)間成本高,需按調(diào)用關(guān)系逐一排查。
問題4:測試改進(jìn)基建不穩(wěn)定,一些基礎(chǔ)測試工作穩(wěn)定性較差,收效甚微。
02
? ?會員測試環(huán)境發(fā)展史
? 階段一:手動(dòng)階段??
經(jīng)過一段時(shí)間對項(xiàng)目測試時(shí)間的積累,經(jīng)過細(xì)致系統(tǒng)的分析后,測試環(huán)境是項(xiàng)目測試中耗時(shí)較多、最為不可控的環(huán)節(jié),本著質(zhì)量可控的原則,測試團(tuán)隊(duì)決定重點(diǎn)建設(shè)測試環(huán)境,從根本上對測試質(zhì)量和效率進(jìn)行把控。申請到若干臺固定虛機(jī)作為測試機(jī),結(jié)合業(yè)務(wù)打包方式和部署流程,手動(dòng)在虛機(jī)上進(jìn)行搭建,我們稱之為“手動(dòng)階段”,具體流程如圖所示:
由于機(jī)器有限,單臺需求需要部署多個(gè)應(yīng)用,為防止端口號沖突,使用wiki進(jìn)行機(jī)器、應(yīng)用、端口號的維護(hù)工作。
解決問題:
測試團(tuán)隊(duì)接手測試環(huán)境打包-部署-維護(hù)流程,質(zhì)量和效率可控。
存在問題:
每次在新機(jī)器部署應(yīng)用時(shí)需要安裝依賴,此依賴無固定版本、使相同的應(yīng)用在不同機(jī)器部署時(shí)配置、啟動(dòng)命令等不一致。
一個(gè)機(jī)器部署多個(gè)應(yīng)用,未避免沖突及后續(xù)nginx配置,人為規(guī)定相同機(jī)器不能部署相同應(yīng)用,且端口號依靠wiki維護(hù),維護(hù)成本高且時(shí)效性差,準(zhǔn)確率不高。
個(gè)人習(xí)慣不同導(dǎo)致應(yīng)用配置、啟動(dòng)腳本不一致,難于統(tǒng)一進(jìn)行集中管理。
無代碼編譯過程,部署代碼包完全依賴研發(fā),時(shí)效性低。
配置類工作較多,操作繁瑣、效率低。
對環(huán)境部署人員能力要求高。
? 階段二:腳本階段??
隨著會員業(yè)務(wù)的不斷壯大,服務(wù)的邏輯愈加復(fù)雜,原手工方式的部署不堪重負(fù),出現(xiàn)了很多的特殊處理,已經(jīng)不能滿足業(yè)務(wù)測試需求,決定使用Jenkins能力進(jìn)行規(guī)范化部署,將應(yīng)用配置信息統(tǒng)一在mysql數(shù)據(jù)庫中進(jìn)行維護(hù),該階段我們稱之為“腳本階段”,整體流程圖如下:
在數(shù)據(jù)庫中對每個(gè)應(yīng)用基礎(chǔ)信息進(jìn)行維護(hù),包括代碼路徑,基礎(chǔ)依賴,編譯命令,啟動(dòng)腳本,具體如下圖:
前端頁面支持單應(yīng)用部署,在Jenkins構(gòu)建選擇對應(yīng)應(yīng)用、填寫分支、選擇機(jī)器后可進(jìn)行部署:
Jenkins構(gòu)建的過程如下圖展示:
代碼部署到服務(wù)器詳解:
解決問題:
每個(gè)應(yīng)用在數(shù)據(jù)庫有基礎(chǔ)配置,可進(jìn)行統(tǒng)一管理及維護(hù)。
依賴、服務(wù)器初始化、應(yīng)用啟動(dòng)等工作通過腳本統(tǒng)一完成,規(guī)范化且版本統(tǒng)一好維護(hù)。
代碼進(jìn)行統(tǒng)一管理,接手代碼編譯打包過程,服務(wù)質(zhì)量可把控。
部署環(huán)境實(shí)現(xiàn)自動(dòng)化,提高部署效率。
對部署環(huán)境人員要求降低。
存在問題:
配置內(nèi)容沒有頁面操作,只能在數(shù)據(jù)庫操作,操作不方便。
機(jī)器固定且無法動(dòng)態(tài)擴(kuò)容,出現(xiàn)問題后無人維護(hù),無法支持個(gè)性化部署。
路由配置文件無法統(tǒng)一維護(hù)。
環(huán)境未按使用方式、場景進(jìn)行區(qū)分。
擴(kuò)展性差,遇到服務(wù)器遷移時(shí)成本過高。
? 階段三:平臺化??
隨著業(yè)務(wù)上代碼架構(gòu)的升級,微服務(wù)化,容器化,云原生化的不斷升級,單獨(dú)腳本化的配置已經(jīng)無法適配業(yè)務(wù)的迭代,測試環(huán)境的部署仿佛一夜之間又回到的最初始手動(dòng)階段。同時(shí)業(yè)務(wù)上又出現(xiàn)了新的訴求:
動(dòng)態(tài)申請機(jī)器部署測試環(huán)境,即用即拋。
單應(yīng)用部署拓展到模板化部署,支持多應(yīng)用的部署,配置,滿足場景級測試訴求。
多角色多用途使用,支持開發(fā)聯(lián)調(diào)/測試驗(yàn)證,支持聯(lián)調(diào)環(huán)境,測試環(huán)境,自動(dòng)化環(huán)境等等。
復(fù)雜的路由配置和參數(shù)替換,支持不同測試能力的對接等等。
在此背景下,公司測試部基于公司資源搭建環(huán)境平臺,完成測試環(huán)境資源的統(tǒng)一分配、基準(zhǔn)環(huán)境的統(tǒng)一部署、應(yīng)用統(tǒng)一管理和部署、環(huán)境一鍵使用等功能,完成測試基礎(chǔ)工程能力建設(shè)的關(guān)鍵一環(huán),為整體測試效能的提升打下基礎(chǔ),環(huán)境平臺能力介紹如下圖:
依托于測試部提供的測試環(huán)境平臺進(jìn)行業(yè)務(wù)適配,截止到目前,會員業(yè)務(wù)的測試環(huán)境已全面對接平臺,支持超過數(shù)百應(yīng)用,日均部署次數(shù)百余次,服務(wù)人次超百人,使用平臺搭建測試環(huán)境測試項(xiàng)目覆蓋率為 90%+,穩(wěn)定環(huán)境部署成功率為 99%+,項(xiàng)目手動(dòng)部署成功率為 90%+。該階段我們稱之為“平臺階段”,具體整體流程圖如下:
解決問題:
每個(gè)應(yīng)用的基礎(chǔ)配置在平臺維護(hù),頁面可操作,集中管理、靈活配置(配置個(gè)性化、nginx、依賴host、注冊中心)。
會員測試只需要維護(hù)自定義腳本,服務(wù)器基本依賴托管平臺處理。
代碼編譯等操作托管公司內(nèi)部CI/CD,流程規(guī)范,提高效率,版本可控。
環(huán)境按使用方式進(jìn)行區(qū)分,減少因使用混亂導(dǎo)致的環(huán)境問題,避免分支與環(huán)境沖突。
通過權(quán)限控制人員可見系統(tǒng)及可操作范圍。
聯(lián)調(diào)環(huán)境方便管理,可集中度量。
03
? ?解決業(yè)務(wù)痛點(diǎn)
在結(jié)合會員業(yè)務(wù)特點(diǎn)不斷迭代測試環(huán)境,我們將重點(diǎn)解決如下幾個(gè)業(yè)務(wù)痛點(diǎn):?
? 1. 測試環(huán)境整合??
基于用途整合測試環(huán)境,按域名區(qū)分進(jìn)行管理,每個(gè)域名下按使用功能不同,搭建不同測試環(huán)境:
穩(wěn)定環(huán)境:各應(yīng)用每天定時(shí)部署master分支,與線上服務(wù)代碼保持一致,對內(nèi),對外提供聯(lián)調(diào)穩(wěn)定聯(lián)調(diào)環(huán)境、自動(dòng)化執(zhí)行環(huán)境。
CI環(huán)境:當(dāng)git變更時(shí)觸發(fā)CI模板,進(jìn)行環(huán)境部署后啟動(dòng)個(gè)性化腳本,執(zhí)行自動(dòng)化和安全測試,確保問題提前暴露。
業(yè)務(wù)測試:基于穩(wěn)定分支進(jìn)行配置和分支信息的修改,部署環(huán)境后進(jìn)行項(xiàng)目測試,測試完成后環(huán)境釋放,服務(wù)器可循環(huán)使用。
理想的環(huán)境搭建是只部署修改或新增的應(yīng)用,其他應(yīng)用使用穩(wěn)定的,在降低測試環(huán)境搭建成本的同時(shí)減少因配置因素導(dǎo)致的其他環(huán)境問題。
例如圖中需要完成項(xiàng)目:測試項(xiàng)目一,此功能需要用到應(yīng)用A、應(yīng)用B、應(yīng)用C、應(yīng)用D完成整體流程測試,本次只修改應(yīng)用C、應(yīng)用D,只部署這2個(gè)應(yīng)用,剩余應(yīng)用使用穩(wěn)定環(huán)境的即可,環(huán)境搭建如下圖展示:
? 2. 路由管理??
2.1 nginx 管理
會員應(yīng)用之間路由強(qiáng)依賴 nginx,會員測試環(huán)境是否可用,路由服務(wù)是否正確全部依賴于 nginx 配置是否正確,此種配置重要且個(gè)性化,經(jīng)過協(xié)商會員測試與環(huán)境平臺公共管理配置文件,業(yè)務(wù)負(fù)責(zé)配置文件管理及研發(fā)自定義腳本,環(huán)境平臺提供配置、替換的能力,按照如下分工進(jìn)行配合,保障 nginx 穩(wěn)定運(yùn)行,流程圖如下:
就圖中的項(xiàng)目測試而言,如何保證穩(wěn)定環(huán)境中的應(yīng)用可以回調(diào)到項(xiàng)目環(huán)境中對應(yīng)應(yīng)用,而不是穩(wěn)定環(huán)境中的對應(yīng)應(yīng)用,一旦修改了如圖應(yīng)用B的調(diào)用地址,就無法保證2套環(huán)境可并行使用,此問題可歸結(jié)為路由問題,如下圖展示:
服務(wù)之間調(diào)用強(qiáng)依賴 nginx,如果 nginx 可動(dòng)態(tài)的獲取變更的應(yīng)用 ip+端口號,未變更的應(yīng)用則使用穩(wěn)定環(huán)境的應(yīng)用來提供服務(wù)問題就會變得簡單,這也就解決了臨時(shí)環(huán)境與穩(wěn)定環(huán)境的相互調(diào)用問題,效果如下圖:
想實(shí)現(xiàn)如上圖的效果,需要通過路由來處理,具體流程如下:
路由是轉(zhuǎn)發(fā)功能,具體邏輯還在應(yīng)用中,啟動(dòng)具體應(yīng)用時(shí)除了應(yīng)用的必要參數(shù)外,會員測試團(tuán)隊(duì)還添加個(gè)性化內(nèi)容,用于測試及相關(guān)質(zhì)量改進(jìn),具體流程如下:
2.2.nginx集成guardro
QAE 是公司內(nèi)部的基于 Docker 的應(yīng)用引擎,可實(shí)現(xiàn)高效、可靠的自動(dòng)化運(yùn)維。guardro 即 Guardro-template,通過訂閱 QAE Controller(Guardro)的事件消息,可以實(shí)時(shí)更新 nginx 的 upstream 文件,并且觸發(fā)nginx重新載入配置。通過引入 guardro 來解決容器動(dòng)態(tài)申請服務(wù)導(dǎo)致 ip 不固定替換 nginx 失敗的問題,它實(shí)現(xiàn)的過程如下:
訂閱 QAE 應(yīng)用的實(shí)踐消息
在本地開啟一個(gè)小的 web 服務(wù)器,用于接收消息
當(dāng)有消息到來時(shí),根據(jù)消息內(nèi)容,將 template 文件內(nèi)特定的部分替換,生成相應(yīng) nginx 的 upstream 文件
觸發(fā) nginx 重新載入配置
引入guardro后,具體流程如下展示:
2.3.注冊中心
服務(wù)之間調(diào)用逐漸從nginx改為微服務(wù)調(diào)用,為適配線下測試,對應(yīng)用配置、部署方式、個(gè)性化腳本優(yōu)化、Eureka自身進(jìn)行升級,支持同步穩(wěn)定注冊中心的其他應(yīng)用及替換能力,實(shí)現(xiàn)模板中應(yīng)用按順序部署自動(dòng)注冊功能,實(shí)現(xiàn)環(huán)境一個(gè)注冊中心的能力,同時(shí)支持穩(wěn)定與項(xiàng)目注冊中心分離,流程如下:
核心能力依賴于eureka-plus進(jìn)行二次開發(fā),部署的時(shí)候除了部署注冊中心外會額外部署一個(gè)同步工具,該工具實(shí)現(xiàn)了同步+過濾的功能,實(shí)現(xiàn)能力如下:
? 3.環(huán)境問題智能定位??
業(yè)務(wù)鏈路復(fù)雜帶來的最顯著的問題就是排查問題困難,很多因素都有導(dǎo)致這樣的問題出現(xiàn),如依賴服務(wù)部署失敗,路由跳轉(zhuǎn)錯(cuò)誤,服務(wù)配置錯(cuò)誤等等問題,我們協(xié)同公司已有全鏈路平臺rover和圖譜平臺atlas對接到測試環(huán)境上,提供了一鍵問題定位能力,解決方案如下:
3.1整體交互圖
3.1.1 qae對接skywalking
skywalking可提供jar包形式,qae容器在啟動(dòng)時(shí)引入即可
3.1.2 nginx對接全鏈路
nginx升級為openresty、需要預(yù)裝lua、同時(shí)需要業(yè)務(wù)線自己對接日志收集系統(tǒng),動(dòng)態(tài)變更監(jiān)聽的IP地址,進(jìn)行信息投遞完成調(diào)用鏈路展示。
3.2 最終鏈路呈現(xiàn)
應(yīng)用與路由對接后,可清晰展現(xiàn)調(diào)用鏈路信息,便于測試快速確定項(xiàng)目測試過程中環(huán)境阻塞問題,迅速解決環(huán)境問題,提高測試效率。
04
? ?展望
會員測試環(huán)境經(jīng)過幾年的積累和治理已經(jīng)取得階段性成果,在支持測試業(yè)務(wù)和質(zhì)量改進(jìn)上起著至關(guān)重要的作用,也是隨著降本增效的整體浪潮下,測試環(huán)境的建設(shè)也會從虛擬化->容器化->云原生化持續(xù)不斷發(fā)展,下一步繼續(xù)協(xié)同測試環(huán)境平臺嘗試云原生化遷移,進(jìn)一步賦能業(yè)務(wù),進(jìn)一步保持先進(jìn),進(jìn)一步降本增效。
也許你還想看
會員接口治理的探索與實(shí)踐
視頻生產(chǎn)大鏡像優(yōu)化實(shí)踐
愛奇藝數(shù)據(jù)湖實(shí)戰(zhàn)
?關(guān)注我們,更多精彩內(nèi)容陪伴你!
總結(jié)
以上是生活随笔為你收集整理的会员测试环境治理之路的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ZBrush - 动物毛发制作及渲染
- 下一篇: 关于销售提成的问题