本文分享自華為雲社群《基於Sermant的全鏈路灰度釋出在汽車行業DMS系統的應用》,作者:聶子雄 華為雲高階軟體工程師
摘要
隨著汽車產業的智慧升級,DMS系統作為汽車行業的經銷管理系統也面臨著更加多種多樣的業務場景的挑戰。藉助Sermant,華為雲能夠為DMS系統提供一整套端到端全鏈路灰度釋出方案,這套方案可以適應DMS系統應用中更多靈活多變的場景。
一、背景
汽車行業是一個龐大的產業,涵蓋了設計、製造、銷售、維修等多個方面。目前,全球汽車行業已經成為了重要的經濟支柱之一,每年產生數萬億美元的產值。汽車行業的發展也推動了相關產業的發展,如石油、鋼鐵、橡膠、玻璃等原材料行業,以及銀行、保險、物流等服務行業。隨著環保意識的提高和新能源技術的不斷髮展,汽車行業也面臨著轉型升級的挑戰。目前汽車行業正在向智慧化、電動化和共享化方向發展,面對更加多種多樣的需求,行業相關的IT系統也需要不斷進步以適應這些場景。
在汽車行業IT系統中,經常會提到DMS系統,那什麼是DMS系統呢?DMS系統是指汽車經銷商管理系統(Dealer Management System),它是一種專門為汽車經銷商和售後服務提供商設計的軟體系統,用於管理和最佳化他們的業務流程。DMS系統可以幫助汽車經銷商實現業務數字化、自動化和智慧化,提高業務效率、降低成本、提升服務質量,是現代化汽車經銷商必備的管理工具。目前很多經銷商的DMS系統基本上都是做過微服務化改造,裡面不同微服務模組之間會相互呼叫,因此如何高效地使用和管理這些微服務模組是DMS系統的重要挑戰之一。
二、痛點場景
目前DMS系統已經廣泛應用在汽車經銷商的業務當中,其中有一類是DMS系統在實際使用中的痛點場景,具體有:
- 客戶想在某一個門店A上線自己的新業務,作為業務試點門店,比如新品汽車銷售,或者打折促銷活動等。和新業務相關的流量只會流入試點門店B。
- 為了節約成本以及降低部署服務工作量,希望能夠實現邏輯上的環境隔離。例如,測試環境有部分服務複用生產環境上的模組,開發測試人員只需要聚焦於需要測試的服務模組。
- 客戶的交易、商品服務有新的業務要上線,新上線的功能間有依賴和互動,要在上線前做一些測試工作:使用者計劃讓測試人員專門賬號來進行現網測試(類似於遊戲等白名單控制的開服前驗證);使用者引入少量比例的生產流量進行驗證。
三、解決方案
3.1 單點灰度釋出方案是否可行?
針對上述問題,一般的思路是透過灰度釋出去解決,透過灰度釋出,可以引入部分的測試流量到新業務模組,也能控制帶有具體特徵的流量只流入到對應的測試模組,其餘流量保持原有方式不動。
但是經過仔細考慮,就會發現如果只做單點灰度釋出,其實是無法完善地解決以上場景的痛點問題,主要體現在:
業務特徵時常只在第一跳,也就是特徵只在入口,傳遞過程中會丟失。除了第一跳入口,後續微服務之間進行呼叫的時候也會把特徵給丟失。
3.2 全鏈路灰度方案是怎樣的?
因此,僅僅依靠單點灰度釋出的能力是不夠的,還需要能夠做到整條微服務呼叫鏈的可灰度,也就是全鏈路灰度能力,這樣就可以靈活解決DMS系統在這一類業務中遇到的問題。目前要實現全鏈路灰度,一般要考慮這些問題的處理:
1)在第一跳的地方(一般是閘道器),我們需要能選中各種型別的流量,把這部分流量染色,再路由到正確的目標。
2)除了第一跳,剩下呼叫鏈路中的各個微服務能夠識別染色標,透傳染色標,並路由到正確的目標。
3)能對異常情況進行妥善處理。
目前,華為雲針對以上難點,設計出一套相對完善的全鏈路灰度釋出方案,整體方案如下:
1)在前端部分,請求會統一攜帶流量標籤引數發到華為雲CSE應用閘道器上面。
2)CSE應用閘道器會選中各種型別的流量,將這些流量根據需求分別染色,比如透過請求header進行標記染色。
3)CSE應用閘道器會將染色後的流量轉發到帶有不同tag的後端微服務例項,tag可以由應用釋出流水線注入到相應釋出的微服務例項當中。
4)藉助微服務例項上掛載的Sermant Agent,接收到應用閘道器流量的微服務例項會透過Sermant Agent提供的流量染色以及標籤透傳能力(適配Dubbo,SpringCloud)將流量特徵保留並轉發到合適的下一跳微服務例項。對於後續鏈路上的微服務例項,都可以透過微服務例項上面的Sermant Agent進行特徵的傳遞。
3.3 為什麼要選擇Sermant Agent?
考慮到目前Dubbo和SpringCloud是國內使用量較多的微服務開發框架,為了不產生過多框架適配工作量,因此選用了基於Java Agent技術的Sermant Agent,利用這種無侵入式的特點,使用者只需要在微服務例項啟動時將Sermant Agent掛載到例項程序當中即可。Sermant Agent針對Dubbo和SpringCloud兩種主流微服務框架適配了流量染色以及標籤透傳的能力。透過流量染色和標籤透傳,Sermant Agent就可以實現流量特徵的保留以及傳遞到下一跳。Sermant Agent進行流量染色以及標籤透傳的全流程如下:
透過配置中心,使用者可以在控制檯介面下發服務粒度的染色規則,用於判斷入方向的流量特徵是否符合特定條件,若匹配則對該流量進行染色,在同一呼叫鏈的出方向流量中攜帶該染色標籤然後透過請求透傳給下一跳,因此使用者可以透過下發自定義的染色規則到對應微服務,允許目的特徵流量進入微服務例項併為出流量賦予新的特徵。
在全鏈路灰度釋出的場景下,Sermant Agent染色規則相對簡單,sermant Agent會允許目的特徵的流量進入微服務例項然後染色時帶上相同的特徵,染色後的流量再流入到對應tag的微服務例項。
四、總結
基於Sermant的全鏈路灰度釋出方案可以解決DMS系統目前在一些如新業務在試點門店測試上線等業務場景遇到的困難,並且這一套方案能適應各類敏捷迭代的業務場景。
在開發測試過程中,客戶可以根據需求在邏輯上劃分出一套屬於自己的服務鏈路,只需要關注自己設定的特徵流量即可,這種模式可以為客戶省去搭建DMS系統中一些共用的模組時間以及節約環境資源,並且還可以很方便地將帶有試點特徵的流量引入到含有自己試點應用的鏈路環境當中。
在釋出過程中,客戶還可以根據需要把一部分生產流量引入到自己的新版本業務鏈路環境當中,完成新版本的驗證。
----------------------------------------------------------------------------------
Sermant作為專注於服務治理領域的位元組碼增強框架,致力於提供高效能、可擴充套件、易接入、功能豐富的服務治理體驗,並會在每個版本中做好效能、功能、體驗的看護,廣泛歡迎大家的加入。
- Sermant 官網:https://sermant.io
- GitHub 倉庫地址:https://github.com/huaweicloud/Sermant
點選關注,第一時間瞭解華為雲新鮮技術~