天天看點

絕知此事要躬行-Omega特性環境

作者:閃念基因

背景:

業績流行的「測試泳道設計」目前在自如網中經由基礎架構中心自研的釋出系統「Omega」落地了,名為「特性環境」,但在推行業務線使用過程中實際效果并不理想。為深層次解決此問題,我們将進行調研與實踐。

01

問題分析

2022年8月底,梳理現狀。共分為三個問題部分:

1、穩定環境初始化難;

2、特性環境易用性差;

3、特性環境可靠性低。

1.1、穩定環境初始化難

1.1.1 骨幹鍊路配套缺乏

目前應用部署穩定環境依賴的上遊應用可能不存在穩定環境。

絕知此事要躬行-Omega特性環境

1.1.2 原有環境并存沖突

目前穩定環境與QA環境網絡條件一緻。複用MySQL的合理性需評估。為避免影響QA環境,一部分人會避免使用QA環境。

1.2、特性環境易用性差

1.2.1 建立環境過程繁瑣

曆經環境建立、資源申請、分支建立、合并部署四個過程。鍊路較長,前後銜接較差。

1.2.2 了解泳道概念複雜

教育研發人員泳道設計成本高,在實際操作時人員定義泳道辨別困難。

1.2.3 缺乏最佳實踐缺失

建立特性環境後部署成功,缺乏最佳實踐,以至于建立後不知如何使用。

1.3、特性環境可靠性低

1.3.1 中間件初始化條件嚴苛

目前僅支援RabbitMQ。(底層是利用AMQP代理及泳道建立時建立RoutingKey及Queue來實作泳道特性。)但消息隊列前置條件較為苛刻:需将Omega應用關聯的隊列關系儲存正确,否則即便建立了Omega應用的特性環境亦無法正确建立特性環境消息隊列。

且建立隊列服務本身可能存在不可用的情況。(發生過一件事,特性環境建立調用了建立隊列的開發API,但後續API由于添加了權限鑒定,導緻隊列建立失敗)。

1.3.2 中間件本身不支援泳道

Dubbo采用的ZooKeeper注入Tag方式實作。但在某些特性版本的ZooKeeper中可能會丢失Tag辨別。

1.3.3 複用中間件資料錯亂

缺乏對MySQL等持久化資料庫的使用規範。存在不同環境處理相同資料的情況。

02

解決方案分析

針對三個問題:

1、穩定環境初始化難;

2、特性環境易用性差;

3、特性環境可靠性低。

定制三大方面政策。

2.1、 穩定環境初始化難

2.1.1 忽略環境隔離問題

将日常(Daily)、QA(測試)、Stable(穩定)統一歸為Test環境。打通各個環境互相通路。可複用各個環境的中間件配置。

2.2、特性環境易用性差

2.2.1 優化特性環境建立流程

将原有步驟「特性環境建立」、「泳道辨別選擇」、「環境資源審批」、「建構參數配置」、「開啟平台賦能」、「特性分支內建」等濃縮成一個「加入特性環境」按鈕。僅通過一個表單即可快速的建立特性環境。

絕知此事要躬行-Omega特性環境

2.2.2 部署自有服務進行模拟實踐

基于Omega自身,采用特性環境進行新功能的測試。在新功能的測試過程中發現、收集、解決問題,并輸入自身的思考及最佳實踐方案。為後續疊代優化提供思路及方向。

2.3、特性環境可靠性低

2.3.1 編寫測試用例

驗證現有功能的可靠性。

2.3.2 修複現存異常

基于測試用例的結果,修複現存的異常問題。

2.3.3 編寫使用文檔

基于現狀編寫使用功能的前置條件(如RabbitMQ特性功能正确開啟需滿足Omega應用在ZMS平台正确關聯Queue,否則将無法正确建立隊列)

絕知此事要躬行-Omega特性環境

03

解決方案實踐

序号 事項 負責人 說明
1 編寫測試用例 熊超 驗證特性環境現有功能可靠性:HTTP、Dubbo、SpringCloud(Eureka、Nacos)、RabbitMQ。
2 修複泳道異常 熊超 修複RabbitMQ建立失敗問題。補充完善RabbitMQ正确建立的前置條件。
3 優化泳道建立 黃成 新增基于分支及關聯Jira建立特性環境按鈕。自動初始化特性環境相關配置,包括但不限于:開啟增量代碼覆寫率收集(SuperJacoco)、環境配置初始化(記憶體及CPU)、運作時變量繼承(LinuxEnv及Hosts)、Maven建構參數(MavenRepo)等。
4 驗證可行性 黃成 基于Omega本身前後端驗證特性環境建立及特性環境的應用。

04

實踐思考沉澱

在真實的實踐過程中,我遇到了以下四個問題:

1、Omega本身穩定環境部署究竟應該對接哪些中間件?

2、Omega特性環境部署需要哪些前置條件?

3、Omega特性環境建立後應該如何使用?

4、特性環境與原有環境比起來優勢有什麼?

我相信大家在使用Omega特性環境時也會遇到相同的問題,故撰寫于此,已飨視聽。

4.1、穩定環境究竟應該對接哪些中間件?

由于曆史原因(無QA介入),與業務線不同的是,基礎架構中心絕大部份應用無KQ環境。故Omega在部署穩定環境時遭遇了第一個問題:對接上遊系統是否需通知上遊系統部署穩定環境?對接中間件是否需對接穩定環境中間件?

在經過短暫思考過後,我發現對接全部的穩定環境應用及中間件既無可能、亦無必要。

原因如下:

1、應用開發者在需要特性環境時,無法即刻推進全部的上遊應用接入穩定環境;且即便不依賴于上遊的穩定環境應用及中間件,亦可對接原有環境的應用及中間件進行特性環境開發。

2、後續需将多個應用串聯至特性環境時,再做改造,也來得及。因為若多個應用歸屬于内部自不用說,若跨業務線,亦可基于相同的目标及技術基礎進行協作部署。

故基于此判定:

我将Omega的前後端(omega-ui及omega-api)部署至穩定環境僅對接原有環境的應用及中間件。

omega-api對接的大多數為Daily(KT日常)環境的應用及中間件,如Message(消息推送)、Opst(工單)、SIA(定時任務);

而omega-ui亦為Daily(KT日常)環境的服務,如私有雲登入。

4.2、特性環境部署成功,需要哪些條件?

在實踐過程中,我所遭遇的問題共分為兩部分:後端及前端。

後端部署遭遇問題:

1、 跨環境通路

a) 需在穩定環境、特性環境通路日常環境服務。通過hosts配置進行跨環境通路。此功能僅在基礎平台内部可執行。業務線絕大多數均部署KQ環境且穩定環境一部分均已部署。

前端部署遭遇問題:

1、 前端編譯問題

a) 編譯穩定環境需新增npm run build:stable。需在index.js中添加stable.env.js建構配置檔案。

4.3、特性環境部署成功後,如何使用?

1、分析:共計三種情況:1、僅前端開發;2、僅後端開發;3、前後端均需開發。由于Omega僅涉及到Web端開發,,故抛磚引玉,僅闡述Web端開發的最佳實作,移動端複刻同理。

2、前提條件:前端與後端均已部署穩定環境。且采用穩定環境域名通路。Omega前端通過omega.ks.ziroom.com通路,且對接了omega-api.ks.ziroom.com後端。

3、特性環境部署邏輯:開發即部署,不開發即無需部署。 如僅開發前端則僅部署前端至某個特性環境,後端同理。

4、使用方式:依賴于Chrome插件ModHeader,該插件作用:在Header中添加KeyValue。在自如中實踐即添加ziroom-env-tag及JiraID用于泳道辨別。

詳細闡述說明:

原則上來說,大家僅需遵循2、3、4即可。之是以這樣做的詳細解釋如下:

還是基于1分為三類場景:1、僅前端開發;2、僅後端開發;3、前後端開發。

1、 僅前端開發:部署至特性環境後。由于前端已部署,故通過omega.ks.ziroom.com帶标簽通路會自動FullBack至特性環境的前端應用,而由于并無特性環境後端,故會請求會由穩定環境後端提供。

2、 僅後端開發:同理可得,僅部署特性環境後端。由于前端并未部署,即便omega.ks.ziroom.com帶标簽,依舊會通過穩定環境的前端傳回頁面,同時通路特性環境後端服務。

3、 前後端開發:均使用特性環境應用提供服務。

4.4、特性環境與原有環境比起來,優勢有什麼?

如果僅是為了用而用,難免存在自嗨的嫌疑,拿着錘子找釘子的事情無疑是對成本的極大浪費。那麼在我個人的實踐過程中,存在哪些對我而言更有價值的收益,以供大家參考呢?

1、 排查異常更獨立。

a) 由于接入了代碼覆寫率掃描工具,可以将增量代碼掃描出來。在遭遇異常中斷時,可以快速定位到究竟是在哪行代碼中斷的,以便在測試環境快速定位問題。

2、 環境隔離互不幹擾。

a) 若存在多條并行測試時,不會因為并行測試造成互相間的邏輯影響。如功能A依賴于某開關「開啟」但功能B依賴于某開關「關閉」。在不同環境中即可通過Mock的方式進行調試測試。

3、 泳道鍊路調試

a) 若存在跨多應用的需求,無需啟動全量應用覆寫測試鍊路了,有益于降低業務線測試的測試鍊路部署的成本。

05

後記

之是以采用「絕知此事要躬行」作為标題,實際上也對應了軟體開發中的一句話「吃自己的狗糧」。雖然特性環境主要閱聽人是業務線研發,但若不親身實踐,我們亦無法得知在真實使用過程中到底會遭遇哪些問題。唯有親身實踐後,才能在實踐中發現問題,最終切實的解決掉其存在的困難。

作者:網際網路平台-黃成

來源-微信公衆号:自如技術

出處:https://mp.weixin.qq.com/s/oG7jqA3px8wqb2epPUraUw