架構

波尔多葡萄酒:一個多業務、多狀態、多操作的交易鏈路?閑魚架構這樣演進

廣告
廣告

前言

雙十一剛剛結束,成交額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交易域、業務層。業務層包含業務解決方案、頁面渲染解析??突Ф松轄霰A翡秩靜?。

第三階段:云端一體

在前一階段,客戶端將端側業務邏輯完整上云,但同樣出現了瓶頸,在交易業務場景,后端需要更多的精力進行領域建設和沉淀,更少關心頁面渲染交互的邏輯,我們希望能有更高效的研發模式,減少各端研發之間的大量的協同, 提升整體研發效率。

此時我們選擇統一技術棧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 每周精要將以郵件的形式發放至您的郵箱


微信掃一掃

微信掃一掃
杭州什么生意最赚钱 黑客干什么赚钱 海天娱乐网址 富人让钱赚钱穷人为钱赚钱 大都会彩票群 网上的打字兼职能赚钱吗 一条棋牌哈尔滨麻将 2017在家做什么赚钱 全民欢乐捕鱼ol 明日之后肝就赚钱的职业 祥和之灵赚钱 开钢琴 电子琴培训班 赚钱吗 th大圣捕鱼 平台投资外汇怎么赚钱的 支付宝赚钱就推收钱码 手机上怎么打麻将赌钱