京東購物車如何提升30%性能

来源:https://www.cnblogs.com/jingdongkeji/archive/2023/05/23/17422566.html
-Advertisement-
Play Games

本文主要介紹在業務複雜化背景下,京東零售購物車團隊努力踐行工匠精神,通過全非同步化改造提升系統性能、提升用戶體驗。通過本文,讀者可以瞭解購物車中台進行全非同步化改造的總體方案,以及方案落地過程中遇到的問題及解決方法,讀者可重點關註文中提到的多分頁並行後,分頁精細控制及底層RPC異常信息問題。 ...


1、背景

購物車面臨的挑戰:

1)新業務:隨著業務形態的豐富,購物車在不斷支持各種新業務,依賴的外部介面也隨之增加;

2)下沉:一些前端調用的介面下沉到購物車中台;

3)前置:結算流程很多業務前置到購物車中,如優惠券、京豆;

4)擴容:為改善用戶體驗購物車可容納的商品數量在不斷增長;

這些導致購物車依賴的RPC介面數量及分頁調用次數都在不斷增加。購物車作為交易流程開端,本身流量較大,在業務複雜化的背景下,如何提高性能保證用戶體驗,成為購物車面臨的較大挑戰。

2、全非同步化改造方案

通過增加伺服器資源雖然能在一定程度上解決問題,但會帶來較大的成本開銷,也與工匠精神相悖。能否通過技術手段提升性能呢?通過分析,非同步化改造成為解決這一問題的有效手段。

1)不同RPC並行

購物車依賴介面達幾十個,各介面間存在複雜依賴關係。必須先梳理各介面間依賴,識別哪些可以並行。然後將原有代碼拆分為兩部分:RPC非同步請求和結果處理,按照依賴關係,讓RPC最大限度並行執行,減少在結果處理階段非同步響應等待時間,從而達到提升性能的目的。

2)批量介面多分頁並行

購物車依賴介面多為批量介面,且單次調用有數據量限制,需將數據拆分為多個分頁調用。那麼多個分頁間也可以並行,改造中封裝了非同步分頁工具,使業務層對分頁邏輯無感知,非同步工具自動將超過介面上限的數據拆分為多個分頁並行調用,提升單介面響應速度。

3)底層採用JSF非同步調用

非同步調用基於京東RPC框架JSF,推薦使用1.7.5以後版本,支持CompletableFuture。

3、問題及解決

非同步化改造的總體方案並不複雜,但是在實際落地過程中,遇到了很多細節問題:

1)異常重試需精細化

同步調用時,如果超時會重新調用。改為非同步後重試會失效,因為在調用時一般不會報錯,需要在結果處理階段獲取非同步響應超時後,再進行重試。

另外,多分頁並行時,當某一頁請求超時後,應該只重試出錯的分頁。底層對分頁調用進行了封裝,上層業務代碼在獲取數據時無法感知是哪一頁超時,所以必須在非同步調用時將現場信息保存在包裝類中,一起返回給業務層,在Get數據超時後,單獨重試出錯的分頁。

發生異常時,並不是所有情況都需要重試,當遇到限流等異常時,不能進行重試。底層工具需要自動過濾限流異常,當然也支持自定義規則。

2)非同步RPC監控更複雜

底層RPC耗時監控需要拆分為兩部分,在分頁調用時記為開始時間,在非同步結果到達後,記為結束時間。如果調用異常或Get超時,需要標記本次調用失敗。對於重試同樣需要記錄調用耗時,且正常調用與重試調用需分開記錄。

除了需要監控RPC耗時外,還需要監控結果處理階段Get等待時長,這個時間才是真正對應用性能有影響的時間。由於底層是分頁調用,所以業務調用次數和底層RPC調用次數並不相同。

3)分頁非同步結果不能合併,否則無法獲取異常Provider信息

底層非同步調用結果,必須通過包裝類原樣返回給上層,除了上邊提到的需要單分頁重試外,另一個原因是必須保留非同步結果,在分頁超時後才能輸出超時的Provider信息。這是由於Provider信息依賴JSF框架的JSFCompletableFuture,如果在底層合併結果,會導致信息丟失。

4)每頁超時時間需單獨控制

分頁調用過程如上圖所示,在結果處理時,每頁Get超時時間需要單獨控制,因為獲取結果是順序進行,獲取後邊的分頁時,前邊分頁等待的時間也應計算在內,以保證整個獲取結果的時間不超過單個分頁的最大超時時間。計算公式如下:

超時=RPC超時時間 > (當前時間-非同步調用開始時間) ? RPC超時時間 – (當前時間-非同步調用開始時間) : 0

5)分頁均衡

為避免最後一頁數據過少造成數據傾斜,需要將請求數據均分到每一頁,以最大限度提高整個請求的性能。

4、收益

改造完成後購物車核心介面耗時減少30%,保證用戶體驗,節省大量伺服器資源。後續增加新的RPC介面時,只要處在調用拓撲的非關鍵路徑上,對購物車性能沒有太大影響。另外,容量增加時除少數不能分頁調用的介面外,對性能影響已經比較小。

作者:京東零售 王利輝 梁奉龍

內容來源:京東雲開發者社區


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

-Advertisement-
Play Games
更多相關文章
  • > 本文首發於公眾號:Hunter後端 > 原文鏈接:[es筆記五之term-level的查詢操作](https://mp.weixin.qq.com/s/MiJx-uMTke3zAwVu6-36QA) 官方文檔上寫的是 term-level queries,表義為基於準確值的對文檔的查詢,可以理解 ...
  • 雖然之前弄到過《高中作文範例大全ACCESS資料庫》、《初中作文範例大全ACCESS資料庫》、《小學作文範例大全ACCESS資料庫》、《中考高考作文指導大全ACCESS資料庫》、《中小學生作文大全寶典ACCESS資料庫》等作文資料庫,但是都沒有點評的內容感覺缺少些什麼,而今天這份作文資料庫就較為全面 ...
  • 今天這份作文資料庫是採集自滿分作文網(https://www.zuowenwang.net/)的數據,一共有24萬5千多條,包含大小分類,且段落分明。具體查看截圖,截圖包含所有欄位。 MDB文件有400M,大類包含:小學作文(174075)、初中作文(7110)、高中作文(2267)、其他作文(60 ...
  • 按步驟走,不帶腦子式安裝(註意4.0版本mongodb官方已經不再支持,以下代碼中可以修改mongodb版本號安裝,目前最新版為6.0,如果懶得改直接用也可以,文章後邊第三章第一條代碼會直接升級為最新版本mongodb): **1.導入包管理系統使用的公鑰** ```powershell wget ...
  • 你是否在春節只能複製別人的祝福簡訊來發送?你是否在節日期間為給朋友送祝福無從下手?你是否在特殊日子和朋友打不開對話的開頭?其實,很多情況下我們都需要一堆不同與別的人祝福語,用在節日上、用在交際上等日常備用。今天這一份數據就是祝福語大全,有節日、祝福兩大類,子分類有50多個。 節日大類包含:除夕(22 ...
  • 雖然已經有很多詩詞類的資料庫,最近又再次找了一下古詩詞類的數據,又發現了一些,可是真的是各有各的優點,各有各的特色,之後不再重找詩詞類的數據了。 今天這個詩詞鑒賞數據也不錯,有分類TAG,也有譯文、註釋、品析、朝代,但是又有些不足,詳見下麵說明: 朝代記錄統計:金朝(15)、近代(8)、兩漢(143 ...
  • 這是從一個中藥大全查詢系統中破解提取出來的中藥驗方大全,整理出了數以萬計的各家經方、時方、驗方以及秘方的用藥方劑組成,用法用量以及每組方劑的功效性能、主治應用等。有了這樣一套完善的醫學資料你可以節省很多查閱資料的時間可以更方便快捷的查閱你需要的信息。 加味涼血退斑湯 組成:鮮生地30克,鮮蘆根30克 ...
  • 中國出海中東和北非地區的策略類手游《蘇丹的復仇》(Revenge of Sultans,ROS)和華為HMS生態深度合作,為本地用戶帶來創新游戲體驗,成為當地廣受歡迎的游戲之一,下載量居應用市場前列。2023年5月10日,在阿聯酋迪拜舉辦的HUAWEI P60系列及旗艦產品發佈會中,ONEMT中東G ...
一周排行
    -Advertisement-
    Play Games
  • 前言 插件化的需求主要源於對軟體架構靈活性的追求,特別是在開發大型、複雜或需要不斷更新的軟體系統時,插件化可以提高軟體系統的可擴展性、可定製性、隔離性、安全性、可維護性、模塊化、易於升級和更新以及支持第三方開發等方面的能力,從而滿足不斷變化的業務需求和技術挑戰。 一、插件化探索 在WPF中我們想要開 ...
  • 歡迎ReaLTaiizor是一個用戶友好的、以設計為中心的.NET WinForms項目控制項庫,包含廣泛的組件。您可以使用不同的主題選項對項目進行個性化設置,並自定義用戶控制項,以使您的應用程式更加專業。 項目地址:https://github.com/Taiizor/ReaLTaiizor 步驟1: ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • Channel 是乾什麼的 The System.Threading.Channels namespace provides a set of synchronization data structures for passing data between producers and consume ...
  • efcore如何優雅的實現按年分庫按月分表 介紹 本文ShardinfCore版本 本期主角: ShardingCore 一款ef-core下高性能、輕量級針對分表分庫讀寫分離的解決方案,具有零依賴、零學習成本、零業務代碼入侵適配 距離上次發文.net相關的已經有很久了,期間一直在從事java相關的 ...
  • 前言 Spacesniffer 是一個免費的文件掃描工具,通過使用樹狀圖可視化佈局,可以立即瞭解大文件夾的位置,幫助用戶處理找到這些文件夾 當前系統C盤空間 清理後系統C盤空間 下載 Spacesniffer 下載地址:https://spacesniffer.en.softonic.com/dow ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • 一、ReZero簡介 ReZero是一款.NET中間件 : 全網唯一開源界面操作就能生成API , 可以集成到任何.NET6+ API項目,無破壞性,也可讓非.NET用戶使用exe文件 免費開源:MIT最寬鬆協議 , 一直從事開源事業十年,一直堅持開源 1.1 純ReZero開發 適合.Net Co ...
  • 一:背景 1. 講故事 停了一個月沒有更新文章了,主要是忙於寫 C#內功修煉系列的PPT,現在基本上接近尾聲,可以回頭繼續更新這段時間分析dump的一些事故報告,有朋友微信上找到我,說他們的系統出現了大量的http超時,程式不響應處理了,讓我幫忙看下怎麼回事,dump也抓到了。 二:WinDbg分析 ...
  • 開始做項目管理了(本人3年java,來到這邊之後真沒想到...),天天開會溝通整理需求,他們講話的時候忙裡偷閑整理一下常用的方法,其實語言還是有共通性的,基本上看到方法名就大概能猜出來用法。出去打水的時候看到外面太陽好好,真想在外面坐著曬太陽,回來的時候好兄弟三年前送給我的鍵盤D鍵不靈了,在打"等待 ...