有贊訂單搜索AKF架構(gòu)演進(jìn)之路

前情提要

時(shí)節(jié)如流裁良,兩年前的今天寫了有贊訂單管理的三生三世與十面埋伏凿将,轉(zhuǎn)眼兩年過去了,這套架構(gòu)發(fā)展的如何价脾,遇到了什么新的挑戰(zhàn)和收獲牧抵,今天主要來一起整理回顧下有贊訂單搜索AKF架構(gòu)演進(jìn)之路。

分久必合

之前將散落在db多個(gè)分片中的數(shù)據(jù)在ES做了一次聚合侨把,帶來了巨大的好處犀变,同步任務(wù)少,維護(hù)成本低秋柄。尤其是訂單遷移這一塊获枝,之前由于是分片設(shè)計(jì),所以當(dāng)訂單觸發(fā)遷移時(shí)候华匾,需要將數(shù)據(jù)插入新分片,確認(rèn)無誤后還需要?jiǎng)h除老分片數(shù)據(jù)机隙,流程繁瑣易錯(cuò)蜘拉,統(tǒng)一收攏后對于ES來說,各個(gè)端訂單遷移有鹿,都只是一次更新操作旭旭,無比簡單。補(bǔ)充介紹下訂單遷移:

  • 買家訂單遷移 針對新用戶轉(zhuǎn)變?yōu)殛P(guān)注用戶葱跋,從系統(tǒng)mock的buyerId到真正分配的buyerId訂單的遷移
  • 賣家訂單遷移 針對店鋪模型升級(jí)持寄,比如從微商城到零售連鎖,原門店獨(dú)立需要遷移訂單

新的挑戰(zhàn)

然而隨著業(yè)務(wù)的不斷發(fā)展娱俺,聚合后的索引也開始暴露各種問題

  • 數(shù)據(jù)量增長比預(yù)期要快很多稍味,億級(jí)別的索引,慢查也開始出現(xiàn)荠卷,像一個(gè)龐然大物蠢蠢欲動(dòng)
  • 為了滿足商家的一些個(gè)性搜索需求模庐,很多搜索需求都屬于極少數(shù)會(huì)查詢到的,但是都會(huì)被加到同一個(gè)主索引中油宜,使得主索引字段不斷增多掂碱。

應(yīng)對

合久必分

為了解決以上挑戰(zhàn)怜姿,踏上了可擴(kuò)展性架構(gòu)拆分之路。簡單介紹下有贊訂單搜索的幾個(gè)維度

  • B端商家單店搜索(商家管理單店訂單)
  • B端商家總店跨分店搜索(連鎖總店管理分店訂單)
  • C端買家跨店鋪搜索(買家管理跨店所有訂單)

由于既要ToB又要ToC疼燥,而B端零售連鎖商家的引入沧卢,增加了不少復(fù)雜度,因?yàn)橛锌偟闙U來管理多個(gè)BU單元醉者,需要跨多個(gè)店鋪查詢但狭。無論怎么分片,單一維度都必然存在跨分片搜索的場景湃交。而如何區(qū)分和定義這個(gè)冷熱數(shù)據(jù)熟空?最近一天,一月搞莺,一段時(shí)間的搜索息罗,都比較范,缺乏數(shù)據(jù)支撐才沧。

念念不忘迈喉,必有回響。

熱狀態(tài)索引

于是觀察了下我們的監(jiān)控温圆,發(fā)現(xiàn)了奇妙的規(guī)律挨摸。所有搜索場景中,常見的按支付方式岁歉,物流類型得运,商品名稱等搜索占比很少,而按訂單狀態(tài)搜索占比最多锅移,約53%熔掺,也就是一半多的流量全部來自于訂單狀態(tài)檢索。

訂單搜索監(jiān)控

而細(xì)化了下這53%的訂單狀態(tài)搜索中非剃,其中3%左右搜索終態(tài)訂單(已完成置逻,已關(guān)閉),其中50%所有流量全部都是搜熱狀態(tài)訂單(待付款,待發(fā)貨备绽,待成團(tuán)券坞,待接單,已發(fā)貨)肺素,-_-忽略比較亂的枚舉恨锚,歷史多個(gè)版本統(tǒng)計(jì)合一

冷熱狀態(tài)占比.png

不禁讓人興奮,為什么倍靡?因?yàn)闊o論訂單量如何激增眠冈,處于熱狀態(tài)的訂單數(shù)不會(huì)持續(xù)暴增,因?yàn)樗杏唵味紩?huì)流轉(zhuǎn)到終態(tài),比如超時(shí)30分鐘未付款蜗顽,訂單從待支付變成已關(guān)閉狀態(tài)布卡,比如訂單發(fā)貨7天后,從已發(fā)貨狀態(tài)變成已完成雇盖。統(tǒng)計(jì)了下忿等,熱狀態(tài)訂單總量在千萬級(jí)別,且比較平穩(wěn)的進(jìn)行流轉(zhuǎn)崔挖。

訂單狀態(tài)流轉(zhuǎn).png

也就是說我們用這個(gè)小索引贸街,就承接了整個(gè)訂單搜索一半左右的流量,無論是統(tǒng)計(jì)狸相,總店查詢薛匪,各種維度查詢,因?yàn)樗€是一個(gè)全集脓鹃,包含所有分片場景逸尖,無比興奮。目前該索引已在線上平穩(wěn)運(yùn)行近一年瘸右。

時(shí)間分片索引

那么對于那些終態(tài)訂單隨著訂單狀態(tài)流轉(zhuǎn)會(huì)變得越來越大娇跟,如何擴(kuò)展,時(shí)間分片是個(gè)不錯(cuò)的選擇太颤,有贊訂單搜索早期最早做的切分就是按下單時(shí)間分片苞俘,之前業(yè)務(wù)數(shù)據(jù)量小,每半年一個(gè)龄章,到后來發(fā)展改成了每3個(gè)月一個(gè)吃谣,到現(xiàn)在即使每一個(gè)月一個(gè)索引都顯得有些龐大,具體還是要結(jié)合搜索場景做裙,理論上終態(tài)訂單檢索的量比較小岗憋,也可以換個(gè)思維從產(chǎn)品層面有個(gè)引導(dǎo),比如默認(rèn)只展示最近半年訂單菇用,也是一種思路澜驮。

擴(kuò)展依據(jù)

AKF 擴(kuò)展立方體

在《架構(gòu)即未來》與《架構(gòu)真經(jīng)》中都反復(fù)提到這個(gè)立方體陷揪,結(jié)合我們的實(shí)際情況惋鸥,確實(shí)受益匪淺,給了我們指引的方法論悍缠。

X軸: 關(guān)注水平的數(shù)據(jù)和服務(wù)克隆卦绣,比如主備集群,數(shù)據(jù)完全一樣復(fù)制飞蚓÷烁郏克隆多個(gè)系統(tǒng)(加機(jī)器)負(fù)載均衡分配請求

  • 優(yōu)點(diǎn):成本最低,實(shí)施簡單
  • 缺點(diǎn):當(dāng)個(gè)產(chǎn)品過大時(shí),服務(wù)響應(yīng)變慢
  • 場景:發(fā)展初期溅漾,業(yè)務(wù)復(fù)雜度低山叮,需要增加系統(tǒng)容量

Y軸: 關(guān)注應(yīng)用中職責(zé)的劃分,比如數(shù)據(jù)業(yè)務(wù)維度拆分添履。比如交易庫屁倔,商品庫,會(huì)員庫拆分暮胧。

  • 優(yōu)點(diǎn):故障隔離锐借,提高響應(yīng)時(shí)間,更聚焦
  • 缺點(diǎn):成本相對較高
  • 場景:業(yè)務(wù)復(fù)雜往衷,數(shù)據(jù)量大钞翔,代碼耦合度高,團(tuán)隊(duì)規(guī)模大

Z軸: 關(guān)注服務(wù)和數(shù)據(jù)的優(yōu)先級(jí)劃分席舍,數(shù)據(jù)用戶維度拆分布轿。比如常見的按用戶維度買賣家切分?jǐn)?shù)據(jù)分片

  • 優(yōu)點(diǎn):降低故障風(fēng)險(xiǎn),影響范圍可控俺亮,可以帶來更大的擴(kuò)展性
  • 缺點(diǎn):成本最高
  • 場景:用戶指數(shù)級(jí)快速增長


    AKF擴(kuò)展立方體.png

上面介紹的熱狀態(tài)其實(shí)就是朝Y軸方向擴(kuò)展驮捍,當(dāng)然AKF可擴(kuò)展立方體的精髓就在于不要一直只在一個(gè)軸方向上擴(kuò)展,要根據(jù)不同的業(yè)務(wù)場景脚曾,規(guī)模东且,做到有針對性的擴(kuò)展,理論上XYZ軸可以做到無限擴(kuò)展本讥。目前有贊訂單搜索的總體索引架構(gòu)如下珊泳,涵蓋3個(gè)軸方向。

現(xiàn)狀

訂單搜索索引現(xiàn)狀.png

收獲

上面簡單介紹了下有贊訂單搜索AKF擴(kuò)展之路拷沸,下面再簡單聊下過程中的幾個(gè)意外收獲色查,受益良多,可以給類似業(yè)務(wù)同學(xué)一個(gè)可以嘗試的參考撞芍。

可擴(kuò)展性索引字段設(shè)計(jì)

之前遷移到ES里就是看中ES的多索引檢索能力秧了,然而多變的產(chǎn)品需求通過不斷加字段的模式,也會(huì)使索引變得越來越大序无,不好維護(hù)验毡,有沒有一種可擴(kuò)展性的方式,來以不變或者以小變應(yīng)對需求的萬變呢帝嗡。答案是肯定的晶通,list<string> 字段設(shè)計(jì),比如目前開放了擴(kuò)展點(diǎn)給有贊云哟玷,商家可以自定義的建立自己的檢索字段狮辽,K和V都有商家自己把控,如何做到代碼可配置化,業(yè)務(wù)代碼無感知呢喉脖,按照我們的約定需要檢索的字段進(jìn)入list<k_v>格式椰苟,即可做到。關(guān)于細(xì)節(jié)訂單管理系列博文之可配置化訂單搜索博文中會(huì)詳細(xì)進(jìn)一步介紹树叽。

輕量級(jí)統(tǒng)計(jì)

統(tǒng)計(jì)一直是各大公司比較重要的一塊尊剔,有贊也是,幾乎有訂單的地方都會(huì)看到各種訂單數(shù)統(tǒng)計(jì)菱皆,早期統(tǒng)計(jì)場景比較簡單须误,比如統(tǒng)計(jì)待發(fā)貨,已發(fā)貨仇轻,退款訂單等都可以通過一個(gè)sql或者一個(gè)腳本任務(wù)就可以統(tǒng)計(jì)出來京痢,但是隨著有贊業(yè)務(wù)發(fā)展的越來越快,比如統(tǒng)計(jì)一個(gè)加入擔(dān)保交易+已經(jīng)完成7天內(nèi)+發(fā)生退款的訂單數(shù)篷店,普通的統(tǒng)計(jì)模式通過更改統(tǒng)計(jì)sql,再刷個(gè)離線數(shù)據(jù)也是能做到的祭椰,但是周期往往較長,而且不夠靈活疲陕,一旦有部分失敗報(bào)錯(cuò)的方淤,查問題很困難,只能再全量重新統(tǒng)計(jì)蹄殃。而這里我們采用了另一種視角携茂,用搜索來做統(tǒng)計(jì),依賴于ES搜索默認(rèn)返回的total作為統(tǒng)計(jì)值诅岩,可以無縫利用現(xiàn)有數(shù)據(jù)做任意維度任意組合的任意統(tǒng)計(jì)讳苦,隨時(shí)提需求,即用即拿吩谦,非常輕量鸳谜。關(guān)于細(xì)節(jié)也會(huì)在訂單管理系列博文之配置化訂單統(tǒng)計(jì)博文中會(huì)做詳細(xì)進(jìn)一步介紹。

展望

回望有贊訂單管理4年的心路歷程式廷,收獲良多咐扭,配置化訂單搜索,配置化訂單統(tǒng)計(jì)系列博文也會(huì)陸續(xù)發(fā)出(配置化訂單同步滑废,配置化訂單導(dǎo)出博文已發(fā))独郎,誠邀有大數(shù)據(jù)思維和業(yè)務(wù)敏感度的同學(xué)加入祥国,共建有贊訂單管理大業(yè)衰粹,簡歷直郵wangye@youzan.com

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末杀餐,一起剝皮案震驚了整個(gè)濱河市勺良,隨后出現(xiàn)的幾起案子逝变,更是在濱河造成了極大的恐慌嗤瞎,老刑警劉巖欧引,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異倔韭,居然都是意外死亡术浪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門寿酌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胰苏,“玉大人,你說我怎么就攤上這事醇疼∷恫ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵秧荆,是天一觀的道長倔毙。 經(jīng)常有香客問我,道長乙濒,這世上最難降的妖魔是什么陕赃? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮颁股,結(jié)果婚禮上么库,老公的妹妹穿的比我還像新娘。我一直安慰自己甘有,他們只是感情好诉儒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著亏掀,像睡著了一般允睹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上幌氮,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天缭受,我揣著相機(jī)與錄音,去河邊找鬼该互。 笑死米者,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的宇智。 我是一名探鬼主播蔓搞,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼随橘!你這毒婦竟也來了喂分?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬榮一對情侶失蹤机蔗,失蹤者是張志新(化名)和其女友劉穎蒲祈,沒想到半個(gè)月后甘萧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡梆掸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年扬卷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酸钦。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡怪得,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出卑硫,到底是詐尸還是另有隱情徒恋,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布欢伏,位于F島的核電站因谎,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏颜懊。R本人自食惡果不足惜财岔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望河爹。 院中可真熱鬧匠璧,春花似錦、人聲如沸咸这。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽媳维。三九已至酿雪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間侄刽,已是汗流浹背指黎。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留州丹,地道東北人醋安。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像墓毒,于是被迫代替她去往敵國和親吓揪。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容