商品準(zhǔn)時(shí)達(dá),購(gòu)物不抓瞎,快來(lái)學(xué)習(xí)轉(zhuǎn)轉(zhuǎn)履約時(shí)效新姿勢(shì)
1 履約時(shí)效是什么?
履約時(shí)效,簡(jiǎn)稱Promise,對(duì)于消費(fèi)者來(lái)說(shuō),可以讓他們更好地規(guī)劃自己的時(shí)間和需求,知道自己購(gòu)買的商品能夠在特定時(shí)間內(nèi)到達(dá),有助于消費(fèi)者做出合理的決策,并減少等待的焦慮。現(xiàn)在各大電商平臺(tái)都有展示,形式如下:
圖片
2 轉(zhuǎn)轉(zhuǎn)履約時(shí)效的落地方案
如下圖,在轉(zhuǎn)轉(zhuǎn) APP 的商品列表頁(yè)、商品詳情頁(yè)、確認(rèn)下單頁(yè)、商品篩選項(xiàng)等等都會(huì)有履約時(shí)效的身影,由此可見,日常獲取商品的預(yù)計(jì)送達(dá)時(shí)間的QPS很高,大促時(shí)足以破萬(wàn)。
圖片
2.1 預(yù)計(jì)送達(dá)時(shí)間是怎么設(shè)計(jì)的 ?
為了方便大家理解,拿小王舉個(gè)例子,假設(shè)小王假期要從北京回趟老家鄭州,當(dāng)天從北京到鄭州的高鐵只有三趟,分別是以下三個(gè)車次。
圖片
如果小王想要趕上在家吃晚飯,那就必須要坐上13:10從北京西站出發(fā)16:20到鄭州東站的G521次列車,那小王怎樣才能坐上這趟車呢 ?如下圖:
圖片
小王只要在11:20之前開始做午飯,就可以趕上13:10的高鐵。
對(duì)于用戶在轉(zhuǎn)轉(zhuǎn)看到的“某一時(shí)間點(diǎn)前支付,某天送達(dá)”是一樣的道理,先看一張用戶在轉(zhuǎn)轉(zhuǎn)下單到簽收的全流程的簡(jiǎn)圖(如下):
圖片
分為訂單、OMS、WMS和TMS四個(gè)模塊:
- 訂單模塊:用戶支付后會(huì)產(chǎn)生訂單,訂單會(huì)下發(fā)給OMS創(chuàng)建出庫(kù)單。
- OMS模塊:產(chǎn)生出庫(kù)單后,OMS會(huì)根據(jù)策略下發(fā)不同的倉(cāng)儲(chǔ)系統(tǒng)(WMS),創(chuàng)建WMS發(fā)貨單。
- WMS模塊:產(chǎn)生發(fā)貨單后,倉(cāng)儲(chǔ)人員會(huì)操作商品出庫(kù),等待攬收。
- TMS模塊:轉(zhuǎn)轉(zhuǎn)跟其他物流公司合作,每天在倉(cāng)庫(kù)有幾個(gè)固定的時(shí)間點(diǎn)進(jìn)行攬收。
綜上所述,轉(zhuǎn)轉(zhuǎn)預(yù)計(jì)送達(dá)時(shí)間的計(jì)算邏輯為:
- 根據(jù)支付后每個(gè)系統(tǒng)節(jié)點(diǎn)的流轉(zhuǎn)時(shí)間,計(jì)算出用戶支付后多久被物流攬收。
- 根據(jù)攬收時(shí)間,調(diào)用物流公司獲取預(yù)計(jì)送達(dá)時(shí)間(這一步類比小王回家的故事中的高鐵)。
舉個(gè)例子:
圖片
得出:
- 今日7:30前下單,明天14:00送達(dá)。
- 今日12:00前下單,明天22:00送達(dá)。
- 今日 16:30前下單,后天11:00送達(dá)。
2.2 如何支撐萬(wàn)級(jí)QPS
首先看一次不做任何策略的獲取預(yù)計(jì)送達(dá)時(shí)間的接口的耗時(shí)情況,如下圖:
圖片
很明顯耗時(shí)最高的地方是根據(jù)攬收時(shí)間獲取預(yù)計(jì)送達(dá)時(shí)間,其邏輯如下:
圖片
如果用戶每次請(qǐng)求都這么處理,顯然是有很大問(wèn)題的,所以我們選擇了一個(gè)穩(wěn)妥的方案處理這個(gè)點(diǎn),那就是預(yù)熱,如下圖:
圖片
每天T+1根據(jù)每個(gè)倉(cāng)的每個(gè)攬收時(shí)間計(jì)算到全國(guó)任意一個(gè)區(qū)的預(yù)計(jì)送達(dá)時(shí)間,存入自己的Redis中,那么新的根據(jù)攬收時(shí)間獲取預(yù)計(jì)送達(dá)時(shí)間的邏輯如下:
圖片
然后我們將其他耗時(shí)的地方通過(guò)增加一二級(jí)緩存優(yōu)化,如下表格:
查詢描述 | 優(yōu)化方案 | 說(shuō)明 |
用戶地址轉(zhuǎn)換 | 本地緩存 | 城市名稱和code 的映射關(guān)系發(fā)放入本地緩存 |
商品尋倉(cāng) | Redis | 請(qǐng)求一次放入Redis |
倉(cāng)庫(kù)信息填充 | 本地緩存 | 倉(cāng)庫(kù)信息為低頻變化數(shù)據(jù),數(shù)據(jù)量少,可以放入本地緩存 |
匹配攬收時(shí)間 | Redis | 配置修改是次日生效,每天定時(shí)刷入Redis |
最終,一次獲取預(yù)計(jì)送達(dá)時(shí)間的接口耗時(shí)如下:
圖片
2.3 次日達(dá)、隔日達(dá)以及三日達(dá)的篩選底層邏輯以及技術(shù)實(shí)現(xiàn)
想要篩選有哪些商品支持次日達(dá)的含義就是篩選哪些倉(cāng)支持次日達(dá),所以我們要做兩件事如下圖:
- 在商品標(biāo)記上每個(gè)商品所在的倉(cāng)庫(kù)站點(diǎn)。
- 提供到全國(guó)任意地址支持次日達(dá)的倉(cāng)站點(diǎn)的能力。
圖片
如上圖,到北京能夠支持次日達(dá)的商品為SKUA、SKUE、SKUF。
難點(diǎn)
- 我們可以想像一下,對(duì)于用戶小王來(lái)篩選次日達(dá)的時(shí)候,系統(tǒng)不可能實(shí)時(shí)計(jì)算每個(gè)倉(cāng)到小王所在地址的送達(dá)時(shí)間,判斷是否次日達(dá),假設(shè)我們有3000個(gè)倉(cāng),每個(gè)倉(cāng)有三個(gè)攬收時(shí)間,那么每次篩選就要計(jì)算9000次預(yù)計(jì)送達(dá)時(shí)間,肯定不可行。
如何解決
結(jié)合上文預(yù)熱預(yù)計(jì)送達(dá)時(shí)間,在其預(yù)熱任務(wù)基礎(chǔ)上增加預(yù)熱時(shí)效類型,如下圖:
圖片
那存儲(chǔ)結(jié)構(gòu)怎么做?
如下圖,以全國(guó)所有的省市區(qū)作為每個(gè)key,value是list對(duì)象存到redis中。
圖片
當(dāng)前存儲(chǔ)結(jié)構(gòu)檢索效率有提升但非最優(yōu),從redis拿list后需內(nèi)存過(guò)濾次日達(dá)或隔日達(dá)??蓪r(shí)效類型抽取到key上為:省市區(qū) + 時(shí)效類型,雖key數(shù)量增加但value元素減少,能使用戶檢索時(shí)響應(yīng)更快,如下圖:
圖片
細(xì)心的同學(xué)應(yīng)該發(fā)現(xiàn)了,這樣仍需內(nèi)存過(guò)濾,因有時(shí)間條件。如當(dāng)前 11 點(diǎn),上圖首個(gè)次日達(dá)中僅青島中心倉(cāng)支持,此存儲(chǔ)結(jié)構(gòu)欠佳,需進(jìn)一步改進(jìn),如下圖。
圖片
變動(dòng)點(diǎn):
- 存儲(chǔ)結(jié)構(gòu)由原來(lái)的key-list轉(zhuǎn)變?yōu)閗ey-zset,把所有倉(cāng)的所有批次(最晚支付時(shí)間)聚合成一個(gè)zset,最晚支付時(shí)間作為score,倉(cāng)庫(kù)信息作為value生成倒排索引。
- 原本的存儲(chǔ)結(jié)構(gòu)是針對(duì)某個(gè)收件區(qū)的次日達(dá),每個(gè)倉(cāng)下有哪些最晚支付時(shí)間支持;現(xiàn)在的存儲(chǔ)結(jié)構(gòu)是針對(duì)某個(gè)區(qū)的次日達(dá),每個(gè)時(shí)間下有哪些倉(cāng)支持。
這樣做的好處:用戶來(lái)篩選的時(shí)候定位到key,通過(guò)當(dāng)前篩選時(shí)間,range一下當(dāng)前zset,取出所有比當(dāng)前篩選時(shí)間大的score,然后內(nèi)存里去重一下即可直接獲得當(dāng)前支持的倉(cāng),并且避免了大key的問(wèn)題,每次操作redis只是range一個(gè)范圍,不取全量。
3 結(jié)語(yǔ)
轉(zhuǎn)轉(zhuǎn)履約時(shí)效系統(tǒng)的構(gòu)建,是對(duì)用戶體驗(yàn)的高度重視與不懈追求的體現(xiàn)。從精準(zhǔn)的預(yù)計(jì)送達(dá)時(shí)間計(jì)算邏輯,到應(yīng)對(duì)高并發(fā)的巧妙技術(shù)方案,再到不斷優(yōu)化的次日達(dá)等篩選功能,轉(zhuǎn)轉(zhuǎn)始終致力于為用戶打造一個(gè)高效、可靠的購(gòu)物環(huán)境。
在電商行業(yè)飛速發(fā)展的當(dāng)下,履約時(shí)效已成為關(guān)鍵競(jìng)爭(zhēng)力之一。未來(lái),我們有理由相信,轉(zhuǎn)轉(zhuǎn)將持續(xù)完善履約時(shí)效系統(tǒng),以更優(yōu)質(zhì)的服務(wù)滿足用戶日益增長(zhǎng)的需求,在電商舞臺(tái)上綻放更加耀眼的光芒。



































