全場景流量驗證系統

来源:https://www.cnblogs.com/Jcloud/archive/2023/10/09/17750759.html
-Advertisement-
Play Games

本文介紹了一種基於線上流量實現對重構系統進行功能和性能驗證的實踐方案。針對線上流量如何攔截、如何錄製、如何存儲、如何回放以及如何發壓均作了詳細說明,為具有類似需求的讀者提供了一種可供參考的思路。 ...


本文介紹了一種基於線上流量實現對重構系統進行功能和性能驗證的實踐方案。針對線上流量如何攔截、如何錄製、如何存儲、如何回放以及如何發壓均作了詳細說明,為具有類似需求的讀者提供了一種可供參考的思路。

1 業務背景

隨著百川項目的啟動,中台需要對訂單流量收口,將ECLP、各BP的接單入口全部切換至百川統一接單系統。且各個接單入口調用方式各異,有JOS請求(外部商家)、JSF請求(如TC),也有MQ非同步消息(如POP)。為了確保各系統平穩切量,最大程度降低切量風險,需要在切量前做充分的流量驗證(包括功能驗證和性能驗證)。為此,設計了一套全場景流量驗證系統,支持基於線上流量的AB驗證(功能驗證)、壓測(性能驗證),為各業務線接單切量工作提供了可靠的基礎支撐。

2 名詞解釋

  • 引流:把各個接單入口所在系統的線上流量引入到流量驗證系統。
  • 錄製:複製線上流量並做持久化存儲。
  • 回放:把錄製的流量打到待驗證系統。
  • 切量:把接單流量從ECLP等老的接單系統切換到新的百川統一接單系統中。
  • AB驗證:線上流量同時打到正式環境和AB環境,對兩個環境的結果做對比分析,驗證AB環境的正確性。

3 設計思路

如何引流?
可以在業務系統中引入流量代理的方式實現引流。

如何錄製?
考慮需要支持大數據量以及複合查詢,選擇使用ES作為持久化存儲方案。

如何回放?
為避免對各業務系統Jar包依賴,選擇使用JSF泛化調用實現流量回放。

是否有類似的系統可用?
月光寶盒(jcase):由京東零售開發的一款流量錄製回放系統。其支持流量錄製、回放功能,但是並不能滿足一些個性化的需求,比如按自定義業務規則錄製、切量控制等。

4 系統設計

4.1 總體設計

流量代理:通過攔截、過濾、上報將流量引流到驗證系統中。
錄製服務:接收流量代理引入的線上流量並做持久化存儲。
回放引擎:使用錄製的線上流量請求待驗證目標介面。
壓測引擎:使用錄製的線上流量向待驗證目標介面實現多線程發壓。

4.2 詳細設計

4.2.1 流量代理

1)通用流量代理

在業務系統中引入流量代理,通過流量代理攔截(JSF Filter或AOP)線上流量,並將流量通過非同步MQ方式上報給錄製服務做持久化存儲。

2)JOS流量代理

外部商家通過HTTP方式調用JOS平臺,JOS平臺內部轉JSF調用接單服務。為使外部商家無感,發佈一個和業務系統介面完全相同的JSF服務(虛服務),不同的是提供一個新的別名,通過JOS平臺配置切換到新的別名,這樣就把JOS流量引入到了錄製代理,然後再由錄製代理通過非同步MQ方式將流量上報給錄製服務做持久化存儲。

4.2.2 流量存儲

錄製的流量持久化存儲到ES,按照[介面:方法]維度創建錄製任務,同一個錄製任務下的記錄主鍵均以錄製任務編號為首碼,尾碼為數字遞增,最大尾碼(緩存到Redis中)即該錄製任務下錄製的記錄總數。

屬性名 示例值 示例值
id RT7625109167934456_1 主鍵標識
recordData {"args":[{"fakeNo":"fakeNo001"}],"argsType":["cn.jdl.baichuan.router.replay.contract.domain.fake.FlowFakeRequest"],"attachments":{"traceId":"8112206384546625","type":"1"},"clazzName":"cn.jdl.baichuan.router.replay.contract.service.RouterFlowFakeService","methodName":"match","resultObj":true} 錄製的body體
recordTaskNo RT7625109167934456 所屬錄製任務編號
timestamp 1636719778929 時間戳

4.2.3 流量回放

支持單條、批量、按錄製任務維度批量回放。回放調用採用JSF泛化調用方式,避免了對業務系統Jar包的依賴。

流量回放的同時,支持配置對比服務,對比服務接收入參以及新老介面的出參結果,可以對新老介面處理結果進行對比分析,以驗證新介面功能的正確性。

4.2.4 流量壓測

為了實現發壓的效果,需要採用多機、多線程併發的方式請求目標介面。但是多機、多線程共用了同一份錄製數據作為壓力數據源。因此,在真正發壓之前,需要為每個執行線程分配好數據,各個線程只取自己的數據,互不幹擾。

發壓策略(主從架構,Master分配,Slave執行)

壓測引擎採用主從架構,壓力機分主從節點,主節點負責接收壓測請求並分配壓測任務;從節點負責執行壓測任務。

數據分配策略(按量平均,餘數輪詢,滑動視窗)

1)計算視窗

按錄製任務中錄製總量,平均分配到各個線程,餘數再按輪詢方式分配給每個線程,分完為止,這樣可以確定出每個線程分配的記錄條數(視窗大小);

2)按視窗滑動

將所有錄製任務從左到右水平平鋪,每個線程按照自己視窗大小從左到右依次占用錄製記錄。

5 業務實踐

5.1 切量驗證

以倉配POP接單介面切換為例,我們需要用新的訂單中心替換原來的ECLP-SO系統。在正式切換之前,仍然由ECLP-SO系統提供線上接單服務,但同時會通過流量驗證系統錄製線上流量並回放到新的訂單中心。通過對比新老系統對相同接單請求的處理結果,驗證新的訂單中心的接單功能。經過充分功能驗證後才會將接單流量切換到新的訂單中心,從而極大降低了切量的風險。

5.2 需求迭代

產品校驗服務是產品中心對外提供的一個核心介面,介面邏輯複雜,每一次需求迭代上線都面臨極大挑戰。即便是經過了測試環境、預發環境驗證,依然不能百分百保證上線後對線上業務沒有影響。畢竟測試環境、預發環境的驗證請求參數單一且有限,無法反映線上請求的多樣性和複雜性。因此,產品中心接入了流量驗證系統,每次有新的需求迭代上線前,首先錄製線上流量,使用線上真實流量在預發環境進行充分驗證後再做上線操作。這樣極大降低了由於驗證不充分,導致線上業務受損的幾率,為線上業務提供了一層安全保障,提高了線上系統穩定性。

作者:京東物流 朱永昌

來源:京東雲開發者社區 自猿其說Tech 轉載請註明來源


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近新項目要上線,考慮成本,放棄雲資料庫,選擇自行安裝,資料庫選擇SQL Server 2022,系統選擇Ubuntu 20.04。 //SQL Server 2022文檔地址 https://learn.microsoft.com/zh-cn/sql/sql-server/?view=sql-se ...
  • 背景 系統需要交付,客戶要求提供交維材料,包括系統的表結構,安排開發人員進行梳理,效率比較慢,遂自己花點時間搗鼓一下,發現有此插件,記錄一下方便與同事分享 前提條件 必須有 go語言環境,有的話直接看第二點 一、安裝 go語言環境 1、檢查本機是否安裝 go go version 2、如果沒有,安裝 ...
  • 一、環境介紹 本文環境,以及本文所採用資料庫為GreatSQL 8.0.32-24 $ cat /etc/system-release Red Hat Enterprise Linux Server release 7.9 (Maipo) $ uname -a Linux gip 3.10.0-11 ...
  • 目錄Vue模板應用{{}} 變數插值v-once 只會插值一次v-html 對HTML代碼插值v-bindHTML標簽屬性的插值在外部傳遞數值類型的數據到組件內部時, 必須使用v-bind指令的方式進行傳遞, 直接使用HTML屬性設置的方式傳遞會將傳遞的數據作為字元串傳遞v-on 監聽、綁定事件v- ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 前端換膚方案 - element+less無感換膚(無需頁面刷新) 前言 前不久在改造一個迭代了一年多的項目時,增加了一個換膚功能。通過自己的探索,總結出了一套比較合適的改造方案供大家參考,如有更好的方案歡迎評論區踴躍評論😄 先上效果: ...
  • three.js、webgl、3D煤礦隧道、三維井下人員定位、掘進面三維可視化、縱採面可視化、採集面可視化展示、設備檢測、數字孿生、物聯網3D、3d建築、3d庫房,bim管理系統 ...
  • 導讀 VTable: 不只是高性能的多維數據分析表格,更是行列間創作的方格藝術家! VTable是位元組跳動開源可視化解決方案 VisActor 的組件之一。 在現代應用程式中,表格組件是不可或缺的一部分,它們能夠快速展示大量數據,並提供良好的可視化效果和交互體驗。VTable是一款基於可視化渲染引擎 ...
  • 單例模式 一個類只有一個實例,並提供一個全局訪問此實例的點,哪怕多線程同時訪問。 單例模式主要解決了一個全局使用的類被頻繁的創建和消費的問題。 單例模式的案例場景 資料庫的連接池不會反覆創建 spring中一個單例模式bean的生成和使用 在我們平常的代碼中需要設置全局的一些屬性保存 七種單例模式的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...