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

一、前情提要

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

1.1 分久必合

之前將散落在 DB 多個(gè)分片中的數(shù)據(jù)在 ES 做了一次聚合寻仗,帶來(lái)了巨大的好處,同步任務(wù)少凡壤,維護(hù)成本低署尤。尤其是訂單遷移這一塊耙替,之前由于是分片設(shè)計(jì),所以當(dāng)訂單觸發(fā)遷移時(shí)候曹体,需要將數(shù)據(jù)插入新分片俗扇,確認(rèn)無(wú)誤后還需要?jiǎng)h除老分片數(shù)據(jù),流程繁瑣易錯(cuò)箕别,統(tǒng)一收攏后對(duì)于 ES 來(lái)說(shuō)铜幽,各個(gè)端訂單遷移,都只是一次更新操作串稀,無(wú)比簡(jiǎn)單除抛。補(bǔ)充介紹下訂單遷移:

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

二绘趋、新的挑戰(zhàn)

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

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

三衩藤、應(yīng)對(duì)

3.1 合久必分

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

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

由于既要 ToB 又要 ToC 赏表,而 B 端零售連鎖商家的引入检诗,增加了不少?gòu)?fù)雜度,因?yàn)橛锌偟?MU 來(lái)管理多個(gè) BU 單元瓢剿,需要跨多個(gè)店鋪查詢逢慌。無(wú)論怎么分片,單一維度都必然存在跨分片搜索的場(chǎng)景间狂。計(jì)劃優(yōu)先按數(shù)據(jù)冷熱分離來(lái)拆分攻泼,而如何區(qū)分和定義這個(gè)冷熱數(shù)據(jù)?最近一天,一月坠韩,一段時(shí)間的搜索距潘,都比較范炼列,缺乏數(shù)據(jù)支撐只搁。

念念不忘,必有回響俭尖。

3.1.1 熱狀態(tài)索引

于是觀察了下我們的監(jiān)控氢惋,發(fā)現(xiàn)了奇妙的規(guī)律。所有搜索場(chǎng)景中稽犁,常見的按支付方式焰望,物流類型,商品名稱已亥,訂單類型等搜索占比很少熊赖,而按訂單狀態(tài)搜索占比最多,約 53% 虑椎,也就是一半多的搜索流量全部來(lái)自于訂單狀態(tài)檢索震鹉。

而細(xì)化了下這 53% 的訂單狀態(tài)搜索中,其中 3% 左右搜索終態(tài)訂單(已完成捆姜,已關(guān)閉),其中 50% 所有流量全部都是搜熱狀態(tài)訂單(待付款传趾,待發(fā)貨,待成團(tuán)泥技,待接單浆兰,已發(fā)貨),-_- 忽略比較亂的枚舉珊豹,歷史多個(gè)版本統(tǒng)計(jì)合一簸呈。

不禁讓人興奮,為什么店茶?因?yàn)闊o(wú)論訂單量如何激增蜕便,處于熱狀態(tài)的訂單數(shù)不會(huì)持續(xù)暴增,因?yàn)樗杏唵味紩?huì)陸續(xù)流轉(zhuǎn)到終態(tài)忽妒,比如超時(shí) 30 分鐘未付款玩裙,訂單從待支付變成已關(guān)閉狀態(tài),比如訂單發(fā)貨 7 天后段直,從已發(fā)貨狀態(tài)變成已完成吃溅。統(tǒng)計(jì)了下,熱狀態(tài)訂單總量在千萬(wàn)級(jí)別鸯檬,且一直比較平穩(wěn)的進(jìn)行流轉(zhuǎn)决侈。

也就是說(shuō)我們用這個(gè)千萬(wàn)級(jí)小索引,就承接了整個(gè)訂單搜索一半左右的流量。無(wú)論是統(tǒng)計(jì)赖歌,總店查詢枉圃,各種跨分片維度查詢,都可以支持庐冯。因?yàn)樗且粋€(gè)熱狀態(tài)訂單數(shù)據(jù)全集孽亲,包含所有分片場(chǎng)景,無(wú)比興奮展父。目前該索引已在線上平穩(wěn)運(yùn)行近一年返劲。

3.1.2 時(shí)間分片索引

那么對(duì)于那些終態(tài)訂單,數(shù)據(jù)量隨著訂單狀態(tài)流轉(zhuǎn)會(huì)變得越來(lái)越大栖茉,如何擴(kuò)展篮绿,時(shí)間分片是個(gè)不錯(cuò)的選擇,有贊訂單搜索早期最早做的切分就是按下單時(shí)間分片吕漂,之前業(yè)務(wù)數(shù)據(jù)量小亲配,每半年一個(gè),到后來(lái)發(fā)展改成了每 3 個(gè)月一個(gè)惶凝,到現(xiàn)在即使每一個(gè)月一個(gè)索引都顯得有些龐大吼虎。具體還是要結(jié)合搜索場(chǎng)景,理論上終態(tài)訂單檢索的量比較小梨睁,也可以換個(gè)思維從產(chǎn)品層面有個(gè)引導(dǎo)鲸睛,比如默認(rèn)只展示最近半年訂單,也是一種思路坡贺。

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

3.2.1 AKF 擴(kuò)展立方體

在《架構(gòu)即未來(lái)》與《架構(gòu)真經(jīng)》中都反復(fù)提到這個(gè)立方體官辈,結(jié)合我們的實(shí)際情況,確實(shí)受益匪淺遍坟,給了我們指引的方法論拳亿。

X 軸 : 關(guān)注水平的數(shù)據(jù)和服務(wù)克隆,比如主備集群愿伴,數(shù)據(jù)完全一樣復(fù)制肺魁。克隆多個(gè)系統(tǒng)(加機(jī)器)負(fù)載均衡分配請(qǐng)求隔节。

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

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

  • 優(yōu)點(diǎn):故障隔離强胰,提高響應(yīng)時(shí)間舱沧,更聚焦
  • 缺點(diǎn):成本相對(duì)較高
  • 場(chǎng)景:業(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)肾筐,影響范圍可控哆料,可以帶來(lái)更大的擴(kuò)展性
  • 缺點(diǎn):成本最高
  • 場(chǎng)景:用戶指數(shù)級(jí)快速增長(zhǎng)


上面介紹的熱狀態(tài)訂單拆分其實(shí)就是朝 Y 軸方向擴(kuò)展,當(dāng)然 AKF 可擴(kuò)展立方體的精髓就在于不要一直只在一個(gè)軸方向上擴(kuò)展吗铐,要根據(jù)不同的業(yè)務(wù)場(chǎng)景东亦,數(shù)據(jù)規(guī)模,做到有針對(duì)性的擴(kuò)展唬渗,理論上 XYZ 軸可以做到某種程度的無(wú)限擴(kuò)展典阵。目前有贊訂單搜索的總體索引架構(gòu)如下,涵蓋 3 個(gè)軸方向镊逝。

3.3 現(xiàn)狀

四壮啊、收獲

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

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

之前遷移到 ES 里就是看中 ES 的多索引檢索能力座菠,然而多變的產(chǎn)品需求通過(guò)不斷加字段的模式狸眼,也會(huì)使索引變得越來(lái)越大,不好維護(hù)浴滴,有沒(méi)有一種可擴(kuò)展性的方式拓萌,來(lái)以不變或者以小變應(yīng)對(duì)需求的萬(wàn)變呢。答案是肯定的升略,list< String > 字段設(shè)計(jì)微王,比如目前開放了搜索擴(kuò)展點(diǎn)給有贊云,商家可以自定義的建立自己的檢索字段品嚣,K 和 V 都有商家自己把控炕倘,如何做到代碼可配置化,業(yè)務(wù)代碼無(wú)感知呢腰根,按照我們的約定需要檢索的字段進(jìn)入 list< k_v > 格式激才,即可做到。關(guān)于細(xì)節(jié)訂單管理系列博文之可配置化訂單搜索博文中會(huì)詳細(xì)進(jìn)一步介紹。

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

統(tǒng)計(jì)一直是各大公司比較重要的一塊瘸恼,有贊也是劣挫,幾乎有訂單的地方都會(huì)看到各種訂單數(shù)統(tǒng)計(jì),早期統(tǒng)計(jì)場(chǎng)景比較簡(jiǎn)單东帅,比如統(tǒng)計(jì)待發(fā)貨压固,已發(fā)貨,退款訂單等都可以通過(guò)一個(gè) sql 或者一個(gè)腳本任務(wù)就可以統(tǒng)計(jì)出來(lái)靠闭,但是隨著有贊業(yè)務(wù)發(fā)展的越來(lái)越快帐我,比如統(tǒng)計(jì)一個(gè)加入擔(dān)保交易+已經(jīng)完成7天內(nèi)+發(fā)生退款的訂單數(shù),普通的統(tǒng)計(jì)模式通過(guò)更改統(tǒng)計(jì) sql ,再刷個(gè)離線數(shù)據(jù)也是能做到的愧膀,但是周期往往較長(zhǎng)拦键,而且不夠靈活,一旦有部分統(tǒng)計(jì)失敗報(bào)錯(cuò)的檩淋,排查問(wèn)題很困難芬为,只能再全量重新統(tǒng)計(jì)。而這里我們采用了另一種視角蟀悦,用搜索來(lái)做統(tǒng)計(jì)媚朦,依賴于ES搜索默認(rèn)返回的 total 作為統(tǒng)計(jì)值,可以無(wú)縫利用現(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ā))钮糖,目前已從訂單管理順利畢業(yè),后續(xù)主要負(fù)責(zé)有贊搜索中臺(tái)業(yè)務(wù)線酌住,誠(chéng)邀有成長(zhǎng)型思維店归,大數(shù)據(jù)思維和業(yè)務(wù)敏感度的同學(xué)加入,共建有贊搜索中臺(tái)大業(yè)酪我,簡(jiǎn)歷直郵 wangye@youzan.com

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末消痛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子都哭,更是在濱河造成了極大的恐慌秩伞,老刑警劉巖逞带,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異纱新,居然都是意外死亡展氓,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門脸爱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)遇汞,“玉大人,你說(shuō)我怎么就攤上這事簿废】杖耄” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵族檬,是天一觀的道長(zhǎng)歪赢。 經(jīng)常有香客問(wèn)我,道長(zhǎng)导梆,這世上最難降的妖魔是什么轨淌? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮看尼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盟步。我一直安慰自己藏斩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布却盘。 她就那樣靜靜地躺著狰域,像睡著了一般。 火紅的嫁衣襯著肌膚如雪黄橘。 梳的紋絲不亂的頭發(fā)上兆览,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音塞关,去河邊找鬼抬探。 笑死,一個(gè)胖子當(dāng)著我的面吹牛帆赢,可吹牛的內(nèi)容都是我干的小压。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼椰于,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼怠益!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起瘾婿,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蜻牢,失蹤者是張志新(化名)和其女友劉穎烤咧,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抢呆,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡髓削,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了镀娶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片立膛。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖梯码,靈堂內(nèi)的尸體忽然破棺而出宝泵,到底是詐尸還是另有隱情,我是刑警寧澤轩娶,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布儿奶,位于F島的核電站,受9級(jí)特大地震影響鳄抒,放射性物質(zhì)發(fā)生泄漏闯捎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一许溅、第九天 我趴在偏房一處隱蔽的房頂上張望瓤鼻。 院中可真熱鬧,春花似錦贤重、人聲如沸茬祷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)祭犯。三九已至,卻和暖如春滚停,著一層夾襖步出監(jiān)牢的瞬間沃粗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工键畴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留最盅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓镰吵,卻偏偏與公主長(zhǎng)得像檩禾,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子疤祭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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