嘉賓 | 陳思淼、金思宇
得物 App 專注打造新一代潮流網(wǎng)購社區(qū)。截止到目前,得物 App 平臺用戶中,90 后占比超過八成。品牌升級和業(yè)務(wù)增長的同時,對應(yīng)的業(yè)務(wù)架構(gòu)和技術(shù)體系也需要更新迭代。
2020 年 3 月 16 日,得物技術(shù)團(tuán)隊在三個月的時間內(nèi)完成了整個交易體系的重構(gòu),交付了交易平臺化項目——五彩石項目。整個項目重新設(shè)計了 6 個核心交易應(yīng)用,完成 180 項操作,21 個系統(tǒng)重新發(fā)布,相應(yīng)的優(yōu)化迭代還涵蓋了社區(qū)、交易、供應(yīng)鏈的解耦,交易平臺化的演進(jìn)、底層交互協(xié)議的更新、全鏈路壓測落地等等。為了了解五彩石項目的整個構(gòu)建過程,InfoQ 采訪了得物 App CTO 陳思淼、交易平臺和穩(wěn)定性平臺負(fù)責(zé)人金思宇。
1 電商平臺業(yè)務(wù)架構(gòu)的發(fā)展
電商起源于 1990 年,經(jīng)歷了 30 年的發(fā)展,現(xiàn)在電商平臺已經(jīng)成為了主流購物方式之一。如果從業(yè)務(wù)架構(gòu)的角度來看,中國電商平臺經(jīng)歷了幾個發(fā)展階段呢?陳思淼和金思宇從各自的工作經(jīng)歷出發(fā),表示中國電商平臺的業(yè)務(wù)架構(gòu)都經(jīng)歷了相似的四個階段。
第一階段:通常這時的電商平臺都是從零開始搭建的,全家桶系統(tǒng),包含最基礎(chǔ)的交易元素:用戶、商品、庫存、訂單、支付。這些功能可能只是一個系統(tǒng)中的多個子模塊,甚至只是一個簡單的類,可以滿足最基礎(chǔ)的交易需求。
第二階段:隨著業(yè)務(wù)規(guī)模逐漸增大,團(tuán)隊人數(shù)也越來越多,整個平臺維護(hù)難度增加,耦合嚴(yán)重,性能瓶頸也逐漸出現(xiàn)。這時就會開始做系統(tǒng)拆分,從業(yè)務(wù)域、基礎(chǔ)服務(wù)、前后端分離的角度慢慢分割,拆分后的系統(tǒng)之間進(jìn)行通信 (同步 / 異步)。
第三階段:分布式服務(wù),系統(tǒng)拆分之后,雖然各個服務(wù)會有多個團(tuán)隊分別負(fù)責(zé),職責(zé)清晰。不過服務(wù)之間的通信增多、依賴關(guān)系逐漸復(fù)雜,甚至需要支撐業(yè)務(wù)量會更大,這時就會對服務(wù)治理、監(jiān)控、緩存、數(shù)據(jù)分片、分布式事務(wù)等基礎(chǔ)建設(shè)有更高的要求。
第四階段:隨著業(yè)務(wù)發(fā)展,在分布式服務(wù)的基礎(chǔ)上,對服務(wù)穩(wěn)定性、高可用等方面需要有更高的要求。淘系做了單元化、異地多活之后,這基本上變成了多個電商甚至外賣平臺追求的統(tǒng)一思路;而在容器化逐漸流行起來后,基于容器化做彈性資源管理以及混合云 (異地多活) 就變成了另一種趨勢。
與其它平臺相比,電商平臺在數(shù)據(jù)準(zhǔn)確性、一致性、安全性,以及服務(wù)性能、服務(wù)穩(wěn)定性方面都有比較高的要求,而且一旦出問題很容易被放大
所以,在做電商平臺的系統(tǒng)設(shè)計和落地時,應(yīng)當(dāng)著重考慮以下幾個方面:
是否在核心鏈路上,對于電商平臺,交易瀏覽鏈路及下單 & 支付鏈路 (包含優(yōu)惠活動 & 券) 屬于核心鏈路,需要評估應(yīng)用是否會對核心鏈路造成影響,以及屬于強(qiáng)依賴還是弱依賴;
容量評估,包括峰值 QPS、每日產(chǎn)生的數(shù)據(jù)量,進(jìn)而確認(rèn)是否需要引入緩存、DB 選型(MySQL/TiDB)、數(shù)據(jù)是否需要 sharding、是否需要配置限流等;
性能評估,包括上下游依賴、對業(yè)務(wù)流程的影響、交互采用同步還是異步、對整體 RT 的影響等;對于核心鏈路上的服務(wù),會在上線前做壓測評估;
對數(shù)據(jù)穩(wěn)定性的影響,包括對原有庫表 & 索引的影響、對原有數(shù)據(jù)字段的影響、上下游數(shù)據(jù)一致性影響等。
2 得物交易平臺的差異與發(fā)展
得物 App 技術(shù)平臺構(gòu)建可以追溯到 2015 年。當(dāng)時,得物 App 初版以潮流社區(qū) App 上線,打造國內(nèi)主流 Sneaker 互動社區(qū)(2015 年 9 月 -2017 年初)。后來,基于對潮流文化的了解和年輕消費(fèi)的洞察,慢慢發(fā)現(xiàn)社區(qū)內(nèi)很多用戶有鑒別的強(qiáng)需求,才衍生出了交易業(yè)務(wù) (2017 年下半年)。
得物與其它電商最大的區(qū)別是什么呢?得物 CTO 陳思淼表示最大的區(qū)別就是交易流程中包含鑒別環(huán)節(jié),一次交易存在強(qiáng)參與三個角色:買家、平臺、賣家,而不像傳統(tǒng)電商,平臺很多時候只是提供流量入口。當(dāng)然相應(yīng)的,因為平臺的“強(qiáng)中心化”深度介入,一筆訂單對于賣家視角和買家視角,其生命周期并不相同,以現(xiàn)貨交易為例,對于賣家而言,平臺收到商品并且鑒別通過,就會收到貨款,這筆訂單對他而言也就達(dá)到了終態(tài);而對于買家,只有在收到貨之后才可能是終態(tài)。
除此之外,由于得物定位是潮流電商,因此對于平臺內(nèi)銷售的商品,其潮流屬性以及能否被鑒別有一定標(biāo)準(zhǔn),所有商品都是平臺統(tǒng)一維護(hù)(上下架、商品資料更新等等),也沒有店鋪的概念;
最初,得物平臺內(nèi)的交易與社區(qū)、鑒別“環(huán)環(huán)相扣”,所以當(dāng)時的交易平臺是寫在同一個 PHP 項目內(nèi),集群部署、共享緩存、數(shù)據(jù)庫。雖然,是很簡單的設(shè)計,但對于當(dāng)時的得物卻是最合適的:能運(yùn)行,迭代速度快,可以快速響應(yīng)需求,很好的支撐了那個階段的業(yè)務(wù)發(fā)展。
隨著得物的業(yè)務(wù)發(fā)展,交易平臺必須能夠支持更大規(guī)模的業(yè)務(wù)、支撐其差異化的交易。因此,交易平臺的迭代優(yōu)化勢在必行。
2019 年下半年,由于業(yè)務(wù)發(fā)展太快,原有的交易平臺開始暴露出問題。一方面是無法承載更大的流量,經(jīng)常出現(xiàn)性能瓶頸,比如大促期間百倍流量突然到訪,壓力倍增,穩(wěn)定性也受影響;另一方面,原有系統(tǒng)架構(gòu)也難以支撐日漸復(fù)雜的業(yè)務(wù)需求,重復(fù)輪子越造越多。
在這種情況下,得物 CTO 陳思淼決定啟動交易平臺化項目,統(tǒng)一規(guī)劃 & 重構(gòu)整個交易體系,也就是“五彩石”項目。
其實在此之前,得物交易平臺也一直在做優(yōu)化,包括服務(wù)拆分、引入新開發(fā)語言等等,但是底層數(shù)據(jù)模型并沒有發(fā)生變化。因此,五彩石項目首先重新設(shè)計了原本的商品、多個訂單系統(tǒng)、出價,形成了新的商品中心、訂單中心、出價中心、銷售庫存中心、寄存中心以及超時中心。而支付和營銷、商家,只是配合做了一部分調(diào)整,沒有納入項目范圍。
3 交易平臺化項目的業(yè)務(wù)架構(gòu)及技術(shù)選型
受限于早期的團(tuán)隊技術(shù)基礎(chǔ)和業(yè)務(wù)模式,最初得物交易平臺技術(shù)選型和業(yè)務(wù)架構(gòu)設(shè)計做了很多妥協(xié)。因此,在交易平臺化項目中著重對此前痛點(diǎn)進(jìn)行了針對性設(shè)計,當(dāng)然在此過程中經(jīng)歷了太多挑戰(zhàn),在技術(shù)選型和模型設(shè)計時也有很多思考與決策。
首先是比較復(fù)雜的業(yè)務(wù)模型設(shè)計,當(dāng)時團(tuán)隊幾位骨干討論了將近兩周,梳理出原有 9 個系統(tǒng)中的數(shù)十個對象,然后合并類似的對象及行為,抽取出 6 個核心業(yè)務(wù)域,按照領(lǐng)域驅(qū)動設(shè)計的思路逐步設(shè)計整個系統(tǒng)。
以訂單系統(tǒng)為例,當(dāng)時得物存在多個訂單系統(tǒng),分別面向不同類型賣家,在每個訂單系統(tǒng)中都包含了整個下單與支付邏輯,并維護(hù)了各自的庫存,而其他業(yè)務(wù)擁有各自的模型設(shè)計,生命周期有太多差異。如果從更高的視角看,這些都是圍繞訂單這一模型的分場景行為。所以最終合并成統(tǒng)一的訂單中心,并引入狀態(tài)機(jī)引擎 Spring Statemachine 來解耦各個不同的交易流程,并在公用節(jié)點(diǎn)引入擴(kuò)展點(diǎn)來實現(xiàn)差異化細(xì)節(jié),而不應(yīng)該屬于訂單領(lǐng)域的庫存、物流、支付等信息,則分別劃歸到各自領(lǐng)域。
設(shè)計商品模型時遇到了更多細(xì)節(jié)挑戰(zhàn)。商品其實是整個交易體系中最基礎(chǔ)也最復(fù)雜的模塊之一,原設(shè)計在平臺不斷擴(kuò)充品類的需求下難以為繼,經(jīng)過多次討論,得物最終參考業(yè)界內(nèi)多個主流電商平臺的設(shè)計,引入 SPU-Item-SKU 模型,同時針對搜索 & 推薦場景引入 CSPU(區(qū)別于天貓達(dá)爾文商品體系的 CSPU)、前后端數(shù)據(jù)解耦 (前后端類目)、屬性分類 (銷售屬性、基本屬性、供應(yīng)鏈屬性、擴(kuò)展屬性) 等等,完成了最終的商品域模型及行為設(shè)計。
目前很多人在談領(lǐng)域驅(qū)動設(shè)計(DDD),DDD 確實有很多可取之處,但在應(yīng)用時也很容易陷入爭論,例如領(lǐng)域、實體、值對象、聚合、聚合根、限界上下文、CQRS、事件溯源、分層架構(gòu)、六邊形架構(gòu)等等。實際上,DDD 的核心還是領(lǐng)域模型本身,通過領(lǐng)域?qū)嶓w、領(lǐng)域服務(wù)完成對應(yīng)的業(yè)務(wù)邏輯落地才是 DDD 的核心目標(biāo),至于其它,選擇最合適自己、合適團(tuán)隊的方式就足夠了。
再聊聊技術(shù)選型,按照當(dāng)時的項目周期,可選空間相對有限,只能盡量滿足“夠用”的需求:
采用了基礎(chǔ)架構(gòu)團(tuán)隊基于 SpringCloud 全家桶封裝了一套腳手架 Fusion,同時加入了 prometheus 監(jiān)控埋點(diǎn),而內(nèi)嵌的 Web 容器選擇了相較于 Tomcat 性能更好的 undertow。
同步內(nèi)部通訊選擇了 Feign;注冊中心采用 Consul,配置中心選擇了相對友好的 Apollo;
異步通訊統(tǒng)一選擇了 RocketMQ,結(jié)束了原有多個 MQ 中間件混用的局面。
存儲方面,Redis+ 阿里云 RDS,在部分大數(shù)據(jù)量場景做了數(shù)據(jù) sharding(sharding-jdbc)。
交易平臺化項目上線后,經(jīng)過后期的不斷迭代優(yōu)化,目前交易平臺主要架構(gòu)圖如下:
4 交易平臺化項目遇到的挑戰(zhàn)
技術(shù)選型只是完成了第一步,在得物交易平臺的整個落地過程中還有很多難題需要解決,在金思宇看來主要的挑戰(zhàn)有三個:
首先是協(xié)調(diào)問題,因為只重構(gòu)了部分核心項目(6 個),而整個交易流程涉及到的上下游很多,所有的上下游系統(tǒng)都需要協(xié)調(diào)來配合改造升級。據(jù)了解,當(dāng)時涉及到的上下游系統(tǒng)共有 87 個,整個項目的上線及流量切換流程被拆解成了 180+ 個操作步驟,最終才完成上線。
其次是數(shù)據(jù)異構(gòu)遷移,由于底層數(shù)據(jù)模型做了重新設(shè)計,原本分散在各個系統(tǒng)內(nèi)的訂單、庫存、超時信息等都需要統(tǒng)一轉(zhuǎn)換為新的數(shù)據(jù)結(jié)構(gòu),并清洗到新的系統(tǒng)中,同時保證時效,盡可能的降低對線上的影響。當(dāng)時有 27 億 + 條數(shù)據(jù)在此過程中被遷移,采用全量鋪底 + 增量追加的方式,在低流量時段停機(jī) 40 分鐘內(nèi)完成。
最后是項目周期,整個交易平臺的項目周期是 2019 年 12 月 16 日到 2020 年 3 月 16 日。在項目后期,受疫情影響,全體項目成員遠(yuǎn)程辦公,團(tuán)隊溝通,項目效率,提測質(zhì)量,上下游配合等有較大影響。
整個項目落地之后帶來的變化還是很明顯的,經(jīng)統(tǒng)計,得物 App 線上問題數(shù)目及客訴數(shù)減少了 80% 以上。同時,該項目還在不斷迭代優(yōu)化,目前需求迭代可以保持 1 到 2 周迭代一次,落地成本也明顯縮小。
5 經(jīng)驗總結(jié)與分享
歷經(jīng)三個月,得物交易平臺五彩石項目成功交付,陳思淼和金思宇全程參與了整個項目的迭代優(yōu)化過程,并分享了一些經(jīng)驗,與大家共勉。
在項目迭代優(yōu)化過程中,對原有業(yè)務(wù)的深入理解很關(guān)鍵,不要否定原有的設(shè)計、系統(tǒng),也不要急于落地新的東西,耐心吃透原有的業(yè)務(wù)邏輯,會讓之后的路順暢很多。
架構(gòu)設(shè)計是非常重要的,尤其對于一個龐大的重構(gòu)項目,不但自己要想清楚,還需要明確輸出,同步給團(tuán)隊自己的設(shè)計思路,同時充分吸收大家的反饋,有選擇的進(jìn)行修正。
越是龐大的項目,越是需要精細(xì)化的管理和推進(jìn),得物當(dāng)時選擇了小團(tuán)隊日會、全體項目同學(xué)雙日報、各 TL 周會的方式,及時發(fā)現(xiàn)問題并快速推進(jìn)解決。
相信團(tuán)隊的力量,基本每個項目都不是一個人可以單獨(dú)完成的,肯定需要團(tuán)隊內(nèi)、外部的鼎力配合與相互協(xié)作,所以相信團(tuán)隊的力量。
采訪嘉賓
陳思淼,得物 App CTO & 國際事業(yè)部 (POIZON Global) 總經(jīng)理,負(fù)責(zé)得物 App 技術(shù)搭建、技術(shù)架構(gòu)及團(tuán)隊管理工作。陳思淼具備多年頂級互聯(lián)網(wǎng)平臺和電商平臺技術(shù)工作經(jīng)驗。此前在阿里工作十一年,先后擔(dān)任淘寶資深技術(shù)專家,商家事業(yè)部技術(shù)負(fù)責(zé)人,Lazada CTO,阿里國際中臺技術(shù)負(fù)責(zé)人等職務(wù)。
金思宇,得物 App 交易平臺 & 穩(wěn)定性平臺 Leader,畢業(yè)于東北大學(xué),先后在中興通訊、阿里巴巴、唯品會任職;對電商及上下游有比較豐富的開發(fā)及業(yè)務(wù)架構(gòu)經(jīng)驗。目前帶領(lǐng)團(tuán)隊支撐得物 App 交易平臺的需求迭代,完善業(yè)務(wù)基礎(chǔ)能力,同時負(fù)責(zé)技術(shù)部穩(wěn)定性體系搭建及持續(xù)建設(shè)。
活動推薦
陳思淼和金思宇將在 2020 年 12 月 20-21 日 QCon 全球軟件開發(fā)大會(上海站)上分享,介紹得物 App 的業(yè)務(wù)架構(gòu)演進(jìn)過程和技術(shù)細(xì)節(jié)。
(免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進(jìn)一步核實,并對任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負(fù)任何法律責(zé)任。
任何單位或個人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實,溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。 )