博客 / 詳情

返回

vivo互聯網全鏈路多版本環境落地實踐

作者:互聯網效能平台團隊-Wu Qinghua
在軟件研發過程中,“環境問題”是制約研發效能的關鍵瓶頸之一。環境不穩定、測試環境混亂、環境搶佔嚴重等問題,顯著影響開發與測試效率。本文系統介紹vivo通過“全鏈路多版本環境管理”模式,實現開發測試環境的快速構建與高效管理,使多版本環境能夠像“平行宇宙”一般,實現安全、隔離、高效的並行測試與發佈。

本文為2025年 vivo 開發者大會互聯網技術專場分享內容之一,在公眾號“vivo互聯網技術”對話框回覆【2025VDC】獲取 2025VDC 互聯網技術會場議題相關資料。

1分鐘看圖掌握核心觀點👇

圖1 VS 圖2,您更傾向於哪張圖來輔助理解全文呢?歡迎在評論區留言

一、背景&問題

1.1 我們遇到的問題

在軟件研發過程中,環境問題常常成為關鍵路徑上的阻塞點。2020年vivo某核心業務數據顯示,因測試環境問題導致的轉測延期佔比高達67%,策劃驗收階段因環境問題導致的延期超過10次。

這些數據背後,反映的是研發過程中常見的典型場景:

  • 場景一:急需聯調時,依賴服務異常,導致研發阻塞;
  • 場景二:準備測試時,環境被其他版本佔用,需求排期被迫延後;
  • 場景三:環境配置差異導致線上Bug漏測,引發更多問題。

深入分析該業務場景後,我們發現環境問題主要集中在以下幾個方面:環境不穩定、測試環境混亂、環境搶佔嚴重、資源利用率低下。這些問題並非單一項目特有,在微服務架構和快速迭代模式下,已成為多個團隊共同面臨的挑戰。

1.2 問題的挑戰

隨着vivo互聯網業務的快速發展,為滿足更快發佈需求,我們全面轉向微服務架構。這一轉變在提升靈活性與敏捷性的同時,也帶來了新的管理挑戰。

挑戰主要來自兩個維度:

  • 架構層面:服務拆分導致服務數量激增,各服務需獨立部署維護,系統調用鏈路顯著延長,任一環節故障都可能導致整體功能不可用。
  • 流程層面:業務快速迭代需求推動多版本並行推進,如版本A測試、版本B功能開發、版本C線上熱修復等同步進行。

這些變化疊加,使得研發環境管理複雜度大幅提升,環境穩定性下降、資源浪費嚴重,最終導致整體研發效率受損。

傳統環境管理方式已難以滿足當前需求,亟需一種創新方法,實現多版本像“平行宇宙”一樣安全、隔離、高效地並行測試與發佈。

二、解決方案思路

2.1 什麼叫全鏈路多版本環境管理

為解決環境管理難題,我們提出了“全鏈路多版本環境管理”理念,其核心基於三大關鍵能力:

1.全鏈路能力

單一服務版本環境不足以保證整體功能驗證。必須確保版本依賴的所有組件——從前端、網關到微服務,再到數據庫、緩存和消息隊列——整條鏈路能夠一鍵拉起、快速就緒。以支付業務調試為例,無需手動啓動賬户、風控、結算等服務,通過一鍵操作即可分鐘級生成完整環境,數據流、配置流與生產環境保持一致。

2.多版本並行

支持同時創建多個“完整環境”,使各版本在獨立“沙箱”中運行,徹底解決資源搶佔問題。熱修復版本可分鐘級拉起獨立環境,新功能開發同步進行,實現“分鐘級響應,零等待協作”。

3.環境自動化管理

通過全生命週期自動化——從環境搭建、彈性伸縮到閒置回收,減少人工干預,降低錯誤率,提升資源利用效率,實現降本增效。

基於這三項核心能力,線上問題或緊急需求出現時,我們可在幾分鐘內創建獨立環境進行驗證,且不影響其他版本進程。

2.2 業務目標示意圖

理解全鏈路多版本環境管理理念後,我們的核心解決思路也從傳統的“環境隔離”轉向“流量隔離”模式。

傳統方式為每個版本構建完整獨立的測試環境,如同各自獨立的煙囱。此方式隔離性好,但資源浪費嚴重,環境數量有限,擴展性差。

全鏈路多版本環境管理方案則採用不同策略:首先維護穩定可靠的公用基線環境。當某版本需開發新功能時,無需從頭搭建整套環境,僅需為實際發生變更的服務創建獨立的“特性環境”。

關鍵問題在於如何實現流量的精準路由。答案在於流量統一網關平台,該系統在流量入口識別每個請求的環境標籤,根據標籤將請求路由至對應版本的服務實例。

未改動服務繼續共享穩定基線環境,發生變更的服務則擁有獨立環境——通過流量精準調度,既保證隔離性,又顯著節約資源與成本。

這一模式類似於單棟大樓內通過不同顏色手環區分訪問區域,整棟樓共享基礎設施,但各區域活動互不干擾。流量統一網關平台充當“智能前台”,負責識別“手環”、調度流量,使多版本並行開發井然有序。

“邏輯隔離”相較於“物理隔離”展現出顯著優勢:更彈性、更經濟、更高效。

2.3 全鏈路多版本業務架構圖

基於上述思路,我們構建了完整的技術架構,清晰展示系統核心組件及協同工作機制。

全鏈路多版本環境的核心能力可歸納為四個關鍵部分:環境編排、流量隔離、容器部署與分佈式鏈路系統。

環境編排:負責組織軟件從開發到部署各環節,確保每次代碼變更快速部署至指定環境。在多版本環境中,編排系統自動識別不同版本,觸發對應構建部署流程,保證各版本獨立高效就緒。

流量隔離:實現多版本並行的關鍵。通過靈活路由策略,精確控制各版本流量走向。無論是HTTP請求、Dubbo調用還是MQ消息,均能在各自服務實例間有序流轉、互不干擾,如同智能交通系統確保不同“車流”各行其道。

容器部署:為環境提供輕量、標準化封裝方式,各服務及其依賴打包為獨立鏡像。藉助容器技術,實現應用秒級啓動與彈性伸縮。多版本場景下,各版本可快速拉起自身實例組,極大提升資源利用率與發佈效率。

分佈式鏈路系統:架構的“可觀測性”基礎,實時追蹤記錄請求在微服務間的完整流動路徑並傳遞環境標籤。當請求進入系統,經多服務處理時,該系統完整記錄其“足跡”——包括經過服務、攜帶標籤、是否異常,為問題排查與性能優化提供關鍵支撐。

接下來,我們將深入解析全鏈路多版本環境背後的三大關鍵技術實現。

三、關鍵技術實現

從實現視角聚焦,核心技術主要包括:

  • 環境編排 - 負責指揮與創造
  • 資源彈性 - 負責支撐與供給
  • 流量隔離 - 負責識別與路由

三大技術形成有機整體,緊密協作,缺一不可。

3.1 環境編排

實現多版本並行的第一步是高效、標準化地“創建環境”。

這主要由CI/CD平台支撐,它不僅是自動化工具,更是強大的可視化環境編排器。開發人員在界面定義待部署服務,系統自動識別服務間依賴關係,判斷哪些可並行部署、哪些需串行執行,最終實現“一鍵完成”環境編排。

優勢顯而易見:無論是全新版本環境搭建,還是單一服務更新,均可通過單次點擊,在分鐘級別快速完成,使“秒級拉起獨立完整環境”成為研發流程常態。

具體而言,CI/CD平台在全鏈路多版本中提供兩方面關鍵支撐:

  • 全鏈路能力支持:實現代碼提交到自動化驗證的端到端集成,確保各環境配置一致,大幅減少環境差異問題。同時精細管理微服務間依賴,支持串並行混合執行,使複雜部署流程井然有序。
  • 多版本並行支持:平台根據代碼分支自動觸發獨立構建部署流程,為各版本創建隔離環境、添加環境標籤,實現環境高效複用與隔離。底層對接強大容器化平台,為環境快速啓動提供技術保障。

CI/CD平台作為多版本環境體系的“指揮中心”,高效調度四大核心組件——為容器部署提供調度依據,為流量隔離準備環境標籤,使分佈式鏈路系統充分發揮跟蹤與觀測能力。

3.2 彈性資源

指令發出後,需要強健的“執行體”高效落實。vivo容器化平台正是這一強大、可靠的實體。

彈性資源能力由容器化平台核心支撐。全鏈路多版本環境中,我們能夠輕鬆、快速創建大量隔離環境,背後依賴的正是容器技術。

容器化工作原理簡述:開發者將應用及其所有依賴打包為標準容器鏡像。該鏡像可在任何支持容器的環境中運行,確保開發、測試、預發和生產環境高度一致,真正實現“一次構建,隨處運行”,從根源解決環境差異問題。

資源利用率方面,容器技術優勢明顯。傳統虛擬機部署中,單節點通常僅運行單一應用,資源利用率低。容器化部署允許多個容器共享節點操作系統內核,輕量高效。對多版本環境管理而言,這意味着可低成本、高效率創建大量隔離環境。以往需10台服務器支撐的多版本測試,現僅需3-4台,成本顯著降低。

此外,容器平台具備自動擴縮容能力,這在多版本場景中尤為重要:特性環境壓力測試時,系統自動擴容保障穩定性;測試結束環境閒置時,資源自動縮容回收,真正實現按需使用、高效節能。

容器化帶來三大核心價值:環境標準化、資源高效化與伸縮自動化。這些能力組合使我們能夠輕鬆維護多版本並行研發,加速產品迭代,提高系統穩定性,同時顯著降低成本。

對業務團隊而言,這意味着更快功能交付、更穩定系統運行與更高資源利用率。這是全鏈路多版本環境支撐大量環境並行而無需擔憂資源成本激增的根本原因。

3.3 流量隔離&流量染色

環境與資源就緒後,確保流量“對號入座”是實現隔離性的關鍵。這引出兩個核心概念:“流量隔離”與“流量染色”。

3.3.1 流量隔離和流量染色的定義

流量隔離指由統一流量網關平台維護智能路由表,記錄“環境標籤”與“服務實例地址”間映射關係。

如圖示:Feature1環境流量僅路由至IP1、IP2實例;Feature2流量指向IP3、IP4實例,實現真正互不干擾。

流量染色如同為每批流量分配“顏色標識”。請求進入網關前,為其添加明確環境標識,聲明“屬於Feature1”或“屬於Feature2”。網關據此正確識別與路由。

理解流量隔離與染色後,需將其應用於真實網絡環境。微服務架構下,流量基本分為兩類:南北流量與東西流量。

圖示説明:

  • 南北流量:外部客户端與服務器間流量,即“進出數據中心流量”;
  • 東西流量:數據中心內部服務器間流量,即微服務間調用。

在vivo實踐中:

  • HTTP流量由vivo統一訪問平台處理;
  • Dubbo流量由Dubbo服務治理平台負責;
  • MQ消息通過MQ消息網關平台路由。

3.3.2 流量隔離實現

1.HTTP流量隔離

過程如圖綠色路徑所示。始於環境編排階段:通過流水線部署服務時,為各實例注入唯一環境標籤。同時,vivo統一訪問平台建立“環境標籤”與後端服務實例組(Upstream)的綁定關係,觸發創建相應CRD並實施監聽。

此後,無論是部署、實例擴容、縮容還是重啓,只要實例IP和端口變化,變更都會被實時監聽並動態更新至網關路由規則,形成高效自動化閉環,確保每個帶環境標籤的HTTP請求被網關精準路由至正確特性環境實例。

2.DUBBO協議隔離

藉助Dubbo官方原生標籤路由能力實現。原理直觀:將服務實例動態劃分至不同邏輯分組,約束帶特定標籤流量僅能訪問指定分組。vivo實踐中,打標動作發生於部署環節。容器啓動時,Init Container自動調用Dubbo服務治理平台,通過動態規則配置,無感地為當前服務實例添加環境標籤。整個過程無需重啓服務,配置實時生效,完美支持全鏈路多版本對靈活性與實時性要求。

3.消息隊列(MQ)隔離

與前兩者不同,MQ組件本身缺乏完善隔離機制。我們基於MQ消息網關平台mq-proxy組件實現。

實現方式巧妙:生產者與消費者啓動並與mq-proxy建立連接時,在連接屬性中攜帶自身環境標籤。消息生產時,mq-proxy攔截消息,將環境標籤寫入消息user-property中。消費時,mq-proxy根據消息中標籤與消費者自身環境標籤進行匹配過濾,確保消息不會被跨環境消費。整個過程對業務代碼完全透明,實現無侵入隔離。

3.3.3 流量染色實現

南北流量染色:客户端至服務器端流量染色實現方式如下。

  • HTTP請求:在請求頭中添加環境信息,推薦使用ModHeader等瀏覽器插件,便捷地在請求頭中添加env_tag=feature1等信息。
  • Dubbo調用:將環境標籤置於Attachment中,提供簡潔API,開發者只需在發起調用前,通過RpcContext.setAttachment("dubbo.tag","feature1")代碼即可設置環境標籤,對業務代碼侵入性極低。
  • MQ流量染色:對業務方完全透明,由前述mq-proxy組件自動完成,業務代碼無感知。

具體實現:生產者與消費者啓動時,與mq-proxy建立連接,使用連接屬性v-env-tag存放環境標籤,即圖示中間啓動部分。消息生產消費環節中,生產者生產消息時,mq-proxy攔截消息,將環境標籤寫入消息user-property中。

消息消費端,mq-proxy拉取消息時,獲取消息中環境標籤信息並進行過濾,推送至對應環境服務實例,確保僅消費屬於當前環境的消息。通過此機制,保證消息在整個生命週期攜帶環境標識,實現MQ流量染色。

3.3.4 標籤的傳遞

最複雜部分在於環境標籤在整條調用鏈中自動傳遞。通過vivo分佈式鏈路系統實現,核心技術為javaagent,通過調用鏈Agent透明完成此項“接力”工作。

示例如下:來自客户端的HTTP請求攜帶env_tag=feature1,網關將其路由至feature1環境的用户中心。用户中心需調用積分中心時,調用鏈Agent攔截此次Dubbo調用,從HTTP請求頭中獲取env_tag,並注入Dubbo調用的Attachment中,積分中心因此收到該標籤。積分中心處理完畢,需發送MQ消息通知活動中心。此時Agent再次攔截,從Dubbo Attachment中獲取標籤,寫入MQ消息屬性。最終,僅標註feature1的活動中心實例消費此消息。整條鏈路中,如有環節未匹配環境標籤,流量則回退至基線環境。

如此,環境標籤在HTTP→Dubbo→MQ完整鏈路中自動傳遞,確保全鏈路環境隔離,真正實現“一次染色,全程生效”。

回顧關鍵技術部分:環境編排是指揮中心,負責調度與創造;彈性資源是執行實體,負責支撐與運行;流量隔離與染色是傳導系統,負責精準識別與路由。三者有機結合,構成全鏈路多版本環境管理的穩固架構,缺一不可。

四、業務實踐與效果

全鏈路多版本環境落地實踐後,成效顯著:

  • 環境搭建效率提升:從過去多團隊溝通、手動配置、平均耗時2人天,轉變為開發者一鍵觸發、分鐘級自動完成。
  • 版本併發能力增強:以往受資源限制,僅支持2-3個版本串行測試;現可輕鬆支持9個以上特性環境並行開發測試。

這不僅帶來效率提升,更實現研發節奏全面加速與業務響應能力質的飛躍。

五、未來規劃

展望未來,我們對全鏈路多版本環境管理有清晰規劃。這不僅是技術升級,更是研發管理理念的演進。

未來規劃採用雙軌並行策略,從研發效能環境標準化與資源成本高效化兩個維度同步推進。兩方向相互促進、協同支撐。

5.1 研發效能環境標準化

在已實現的環境編排、資源彈性與流量隔離基礎上,重點推進三項關鍵措施:

1. 構建環境即服務平台

平台提供標準化環境模板,包括不同規模測試環境及各類專用環境(如性能測試、安全測試等)。通過模板化方式,確保環境一致性與標準化,同時大幅提升環境創建效率。

平台集成環境全生命週期管理功能,從環境申請、審批、創建、使用、監控到回收,形成完整閉環管理。這不僅提升管理效率,更建立完善的環境治理體系。

2. 建立全鏈路環境監控與可觀測體系

監控體系涵蓋多層:基礎設施層監控CPU、內存、存儲等資源使用;中間件層監控數據庫、消息隊列、緩存等組件性能;應用層監控服務響應時間、錯誤率、吞吐量等關鍵指標。

通過分層監控,快速識別環境中異常情況,及時發覺性能瓶頸,為環境優化提供數據支撐。監控數據同時為資源調度與成本優化提供重要決策依據。

3. 建立環境治理與合規自動化機制

治理機制包括環境命名規範、資源配置標準、安全配置要求、數據保護規則等多方面。通過自動化合規檢查工具,實時監控環境合規狀態,自動發現與修復不合規配置。

機制還包括環境定期審計功能,自動生成合規報告,為管理決策提供支撐。通過此方式,既確保環境安全合規,又減少人工審計工作量。

5.2 資源成本高效化

資源成本高效化方面,推進以下兩項關鍵措施:

1. 非活躍環境自動回收

針對非活躍環境,建立智能自動回收機制。系統自動識別長期未使用環境,在確保數據安全前提下,自動進行資源回收。

機制包含多層管理:

  • 測試環境非工作時間自動休眠;
  • 開發環境連續7天未使用發出提醒;
  • 連續14天未使用自動回收。

通過分層管理,既保證開發效率,又有效控制成本。

2. 成本可視化與歸因分析

成本分析從多維度展開:

  • 項目維度分析各項目資源使用成本;
  • 團隊維度分析各團隊成本構成;
  • 環境類型維度分析不同環境成本效益;
  • 時間維度分析成本變化趨勢等。

通過精確成本統計與分析,為成本優化提供數據支撐。

通過雙軌並行策略,我們實現研發效能提升與資源利用最大化的良性循環。

全鏈路多版本環境管理的未來規劃不僅是技術升級,更是研發管理理念的轉變。通過雙軌並行策略,我們將建立更高效、經濟、可靠的研發環境體系,同時打造更先進的研發環境管理體系。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.