京東購物車如何提升30%效能
01
背景
購物車面臨的挑戰:
1)新業務:隨著業務形態的豐富,購物車在不斷支援各種新業務,依賴的外部介面也隨之增加;
2)下沉:一些前端呼叫的介面下沉到購物車中臺;
3)前置:結算流程很多業務前置到購物車中,如優惠券、京豆;
4)擴容:為改善使用者體驗購物車可容納的商品數量在不斷增長;
這些導致購物車依賴的RPC介面數量及分頁呼叫次數都在不斷增加。購物車作為交易流程開端,本身流量較大,在業務複雜化的背景下,如何提高效能保證使用者體驗,成為購物車面臨的較大挑戰。
02
全非同步化改造方案
通過增加伺服器資源雖然能在一定程度上解決問題,但會帶來較大的成本開銷,也與工匠精神相悖。能否通過技術手段提升效能呢?通過分析,非同步化改造成為解決這一問題的有效手段。
1)不同RPC並行
購物車依賴介面達幾十個,各介面間存在複雜依賴關係。必須先梳理各介面間依賴,識別哪些可以並行。然後將原有程式碼拆分為兩部分:RPC非同步請求和結果處理,按照依賴關係,讓RPC最大限度並行執行,減少在結果處理階段非同步響應等待時間,從而達到提升效能的目的。
2)批量介面多分頁並行
購物車依賴介面多為批量介面,且單次呼叫有資料量限制,需將資料拆分為多個分頁呼叫。那麼多個分頁間也可以並行,改造中封裝了非同步分頁工具,使業務層對分頁邏輯無感知,非同步工具自動將超過介面上限的資料拆分為多個分頁並行呼叫,提升單介面響應速度。
3)底層採用JSF非同步呼叫
非同步呼叫基於京東RPC框架JSF,推薦使用1.7.5以後版本,支援CompletableFuture。
03
問題及解決
非同步化改造的總體方案並不複雜,但是在實際落地過程中,遇到了很多細節問題:
1)異常重試需精細化
同步呼叫時,如果超時會重試呼叫。改為非同步後重試會失效,因為在呼叫時一般不會報錯,需要在結果處理階段獲取非同步響應超時後,再進行重試。
另外,多分頁並行時,當某一頁請求超時後,應該只重試出錯的分頁。底層對分頁呼叫進行了封裝,上層業務程式碼在獲取資料時無法感知是哪一頁超時,所以必須在非同步呼叫時將現場資訊儲存在包裝類中,一起返回給業務層,在Get資料超時後,單獨重試出錯的分頁。
發生異常時,並不是所有情況都需要重試,當遇到限流等異常時,不能進行重試。底層工具需要自動過濾限流異常,當然也支援自定義規則。
2)非同步RPC監控更復雜
底層RPC耗時監控需要拆分為兩部分,在分頁呼叫時記為開始時間,在非同步結果到達後,記為結束時間。如果呼叫異常或Get超時,需要標記本次呼叫失敗。對於重試同樣需要記錄呼叫耗時,且正常呼叫與重試呼叫需分開記錄。
除了需要監控RPC耗時外,還需要監控結果處理階段Get等待時長,這個時間才是真正對應用效能有影響的時間。由於底層是分頁呼叫,所以業務呼叫次數和底層RPC呼叫次數並不相同。
3)分頁非同步結果不能合併,否則無法獲取異常Provider資訊
底層非同步呼叫結果,必須通過包裝類原樣返回給上層,除了上邊提到的需要單分頁重試外,另一個原因是必須保留非同步結果,在分頁超時後才能輸出超時的Provider資訊。這是由於Provider資訊依賴JSF框架的JSFCompletableFuture,如果在底層合併結果,會導致資訊丟失。
4)每頁超時時間需單獨控制
分頁呼叫過程如上圖所示,在結果處理時,每頁Get超時時間需要單獨控制,因為獲取結果是順序進行,獲取後邊的分頁時,前邊分頁等待的時間也應計算在內,以保證整個獲取結果的時間不超過單個分頁的最大超時時間。計算公式如下:
超時=RPC超時時間 > (當前時間-非同步呼叫開始時間) ? RPC超時時間 – (當前時間-非同步呼叫開始時間) : 0
5)分頁均衡
為避免最後一頁資料過少造成資料傾斜,需要將請求資料均分到每一頁,以最大限度提高整個請求的效能。
0 4
收益
改造完成後購物車核心介面耗時減少30%,保證使用者體驗,節省大量伺服器資源。後續增加新的RPC介面時,只要處在呼叫拓撲的非關鍵路徑上,對購物車效能沒有太大影響。另外,容量增加時除少數不能分頁呼叫的介面外,對效能影響已經比較小。
- iOS 16.1(20B5045d)導航欄崩潰問題解決實錄
- 京東購物車如何提升30%效能
- 網際網路醫療領域首批!京東健康通過BSI ISO 27799個人健康資訊保安管理體系認證
- 京東主站黃金流程——統一支付能力升級
- 京東APP百億級的車與商品關係資料檢索實踐
- 多語言支援、事件驅動的全託管Serverless函式計算服務平臺 — iPaaS·EasyFunction
- 效能提升30%以上 JDHybrid h5載入優化實踐
- Iframe在Vue中的狀態保持技術
- 技數星訪談宋麗萍:客戶為先 擔當研發和業務協作樞紐
- 京東零售雲戰略升級,以“四通八達”連結全天下賣場、賦能全天下賣貨
- 京東618廣告精排百分位AUC提升技術方案
- 京東PLUS前端H5效能優化實踐
- 交易黃金鍊路阿波羅移動端異常監控系統
- 主站黃金流程ISV開放體系建設與實踐
- 基於SPI的增強式外掛框架設計
- 水滴低程式碼搭建——6倍提效,新品首發素材稽核系統實踐之路
- 練好內功 客戶為先創造更多價值——訪京東零售技術與資料中心李均強
- 商家店鋪多端融合技術實踐
- 從一個線上問題 重新認識R8編譯器
- 高質量打贏618技術備戰,高標準打造使用者購物體驗——京東國際產研618大促剪影