一個多業務、多狀態、多操作的交易鏈路?閒魚架構這樣演進
前言
雙十一剛剛結束,成交額2684億震驚全世界,每秒訂單峰值達54.4W筆。在閒魚2000萬DAU,交易數額同樣增長迅速的今天,我們如何保障交易鏈路的穩定與快速支撐業務?這篇文章從客戶端開發的角度,介紹閒魚交易鏈路業務的架構演進過程,在保證效能的前提下,不斷提升研發效率,與大家一起交流過程中的思考。
業務特徵
我們今天定義閒魚交易鏈路,從閒魚特有的交易模式“邊聊邊買”,由交易聊天為入口,下單、訂單詳情、訂單列表及相關二級頁面,包含契約簽訂、履行、違約服務。履約區分為正向交易流程(付款、發貨、收貨、評價等)、逆向交易流程(退款、退貨等)。
圖1-交易鏈路關鍵場景(聊天-購買-訂單)
交易鏈路所承接的業務有:普通交易、見一見交易、擔保交易、閒魚幣交易、玩家交易、回收交易、寄賣交易等。不同業務在不同狀態下提供不同的交易操作。以普通C2C交易正向交易流程為例:
圖2-普通C2C交易正向交易流程
交易鏈路具有多業務、多狀態、多操作的特徵。作為應用的關鍵鏈路中的一環,業務相對固化,需要保證效能與體驗,同時也需要一定的動態性,能夠快速地承接新增業務型別、新增業務狀態、新增交易操作,視覺不常改變,對頁面元件動態性無強訴求。
圖3-交易鏈路業務特徵
演進過程
手淘的方案
類似的交易場景,手淘提出來不錯的解決方案——新奧創。新奧創透過頁面區塊化與行為通訊協議,提供基於業務的頁面、元件、規則,前端實現動態模板,後端根據業務將頁面進行編排,實現跨端、元件動態化。
圖4-手淘新奧創
閒魚的問題
在閒魚業務場景中,特有的C2C交易模式,與手淘B2C交易模式下差別較大,沒有購物車、沒有多商品聚合訂單。手淘的交易流程可以在天貓、飛豬、盒馬等通用。但閒魚的交易模式,出於業務特徵,不適合在手淘完成閒魚交易流程。
閒魚C2C交易鏈路業務相對固化,沒有強頁面動態化的需求。在這樣的背景下,前後端向新奧創遷移,成本較高且收益較少。並且,新奧創的後端開發仍然需要關心頁面編排,並不是更終態的研發模式。因此,閒魚沒有將新奧創作為技術選型。閒魚交易鏈路的側重點是:
穩定:保證雙端一致,減少雙端邏輯不一致的場景;
支援一定的動態化能力:端側僅處理頁面渲染,業務邏輯上雲;
新研發模式:前端深入業務,實現服務端頁面渲染相關邏輯,後端領域下沉,專注領域建設,雲端一體;
為達到這個目標,交易鏈路架構演進經過3個階段:
圖5-閒魚交易鏈路演進方向
我們來簡單看一下閒魚交易鏈路的架構演進過程:
圖6-閒魚交易鏈路架構演進
第一階段:業務解耦
在2017年-2018年,交易鏈路由原有業務快速迭代時期的簡單程式碼結構,進行了頁面區塊化改造。此時,服務端大致分為3層:底層資料模型、閒魚C2X交易域、業務解決方案。後端基於底層資料模型,根據閒魚不同業務特性與業務邏輯,搭建閒魚C2X交易域,再以業務解決方案提供不同場景業務資料。
而端側分為兩層,業務資料解析將後端的業務資料,根據不同業務型別、不同交易狀態進行解析、整合,轉換為頁面渲染協議ViewModel,同時將頁面區塊化,抽離出不同業務通用元件,根據ViewModel直接渲染。
頁面區塊化
操作Action化
第二階段:兩端一體,逐步上雲
2019年,在第一階段的基礎上,我們首先解決雙端邏輯不一致的問題,選擇了Flutter作為跨平臺解決方案,同時透過FishRedux進行頁面區塊化改造。交易操作也透過CommonAction完成邏輯一致,實現端上的交易操作中臺,提供給交易鏈路多業務場景進行呼叫。
Flutter&Fish Redux
交易操作中心
業務上雲
此時,服務端仍分為3層:底層資料模型、閒魚C2X交易域、業務層。業務層包含業務解決方案、頁面渲染解析。客戶端上僅保留渲染層。
第三階段:雲端一體
在前一階段,客戶端將端側業務邏輯完整上雲,但同樣出現了瓶頸,在交易業務場景,後端需要更多的精力進行領域建設和沉澱,更少關心頁面渲染互動的邏輯,我們希望能有更高效的研發模式,減少各端研發之間的大量的協同, 提升整體研發效率。
此時我們選擇統一技術棧Dart,透過FaaS無伺服器能力建設,採用Flutter+FaaS(Dart Runtime)雲端一體的研發模式,讓客戶端同學來寫服務端膠水層程式碼,同時還無需關心傳統服務端運維、擴容等工作。原有的業務聚合、渲染協議解析,由客戶端同學在Server完成,實現邏輯歸一,完成端到端的研發閉環,實現資源配置的最佳化。
圖7-雲端一體化工程體系
在雲端一體的研發模式中,Server進行了重新的分層,後端能夠專注領域建設,客戶端開發完成原有的業務解決方案以及到渲染協議的解析,即下圖示紅部分。當然,在實際開發過程中,FaaS與領域的邊界因實際業務有一定交集。
服務端開發:完成領域建設;
客戶端開發:聚合多域資訊,實現渲染協議,端側直接進行UI渲染;
圖8-雲端一體階段詳細架構
同時,在交易鏈路,我們將後端介面劃分為渲染介面與互動介面:
渲染介面提供頁面渲染資料,下圖為FaaS部分的程式碼結構,完成介面校驗後,定義頁面協議,同時根據業務需求,將多領域資料進行聚合填充。
圖9-渲染介面設計
前文中,我們介紹過,交易包含有多操作,在不同業務中,時常有新增操作的需求。不同訂單型別不同訂單狀態包含哪些操作,由渲染介面實現操作動態可配置,例如”已下單未付款“C2C普通交易訂單,包含“付款”、”關閉交易“操作。操作觸發後的實現,需要業務校驗、觸發領域服務的互動行為,由端側完全遷移至FaaS,透過閒魚的Nexus框架使用Logic Engine的Action通訊協議,例如,使用者觸發建立訂單行為,即觸發CREATE_ORDER的Action,FaaS部分呼叫下單的領域服務後,透過NativeApi,觸發端上相應的操作喚起收銀臺、跳轉連結。
圖10-互動接口設計
效果
當前閒魚交易鏈路在雲端一體的階段不斷深耕,目前已經落地了下單頁面,由原有的前後端3人開發變為1人開發,減少協同顯著提升研發效率,其他場景也已經在規劃落地中。下單頁雲端一體版本閒魚11月版本開始灰度,有興趣的同學可以親身體驗。
後續計劃
本文介紹了閒魚交易鏈路的架構演進的過程與思考,不同業務場景適用不同的業務架構,在業務發展過程中,會遇到各式各樣的問題或瓶頸,針對業務當前問題與發展方向,選用合理的、收益與成本得宜的技術方案,是順勢而為。閒魚雲端一體化應用架構的落地場景不僅是交易鏈路,後續會以交易鏈路為範例不斷演進與擴充套件。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900359/viewspace-2664209/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一個多業務、多狀態、多操作的交易鏈路,閒魚架構如何演進?架構
- 微服務的架構演進過程和多個解決方案微服務架構
- 閒魚基於Flutter技術的架構演進和創新Flutter架構
- 大型分散式架構的演進歷史(前方多圖告警)分散式架構
- PHP多個多維陣列操作(一)PHP陣列
- 愛奇藝一鍵釋出工具,批次釋出多個賬號是這樣操作的
- 想了解一個異地多校平臺的架構演進過程嗎? 讓我來告訴你!架構
- GMTC2019演講實錄|閒魚基於Flutter的架構演進與創新Flutter架構
- MVC、MVCS、MVVM、MVP、VIPER等這麼多架構模式哪一個好呢?MVCMVVMMVP架構模式
- 多級稽核狀態的變更
- java實現用一個變數表示多個屬性的狀態Java變數
- 處理物件的多種狀態及其相互轉換——狀態模式(一)物件模式
- Vuex 單狀態庫 與 多模組狀態庫Vue
- 多執行緒的執行緒狀態及相關操作執行緒
- ndk-build 編譯多個CPU架構的動態連結庫UI編譯架構
- Java使用位域進行多標記(狀態)管理Java
- 多對多的操作問題
- 架構學習-多工架構
- 多模態LLM進展✊
- 閒魚Flutter&FaaS雲端一體化架構Flutter架構
- 架構的演進架構
- 利用python完成多個url狀態碼的檢測Python
- 閒魚Flutter圖片框架架構演進(超詳細)底部有實戰書籍贈送Flutter框架架構
- 用多層架構構建一個簡易留言本 (轉)架構
- jquery css()一次性為多個元素設定多個樣式jQueryCSS
- ORACLE 動態註冊,靜態註冊,多個監聽,一個監聽多個埠配置Oracle
- 如何看待 Dapr、Layotto 這種多執行時架構?架構
- 關於多層架構一些思考架構
- 滴滴 Redis 異地多活的演進歷程Redis
- 【思路】混合雲與多雲管理進入架構時代!架構
- 如何理解多租戶架構?架構
- 多級快取架構(六)快取架構
- 瀏覽器多程式架構瀏覽器架構
- 統一接入層架構的演進架構
- 餓了麼交易系統應用架構演進應用架構
- Airbnb的架構演進AI架構
- Serverless 架構的演進Server架構
- vue狀態管理演進Vue