
揭秘:京東雙十一商品搜索系統(tǒng)架構(gòu)設(shè)計(jì)
每年的雙十一,都是電商促銷大戰(zhàn),我們只看到了各類商品的優(yōu)惠價(jià)格,而沒有看到默默付出的技術(shù)人員(數(shù)據(jù)分析師,前端,推廣人員)等等。他們?yōu)榱烁酶尤诵曰w現(xiàn)出自己商城的優(yōu)勢,讓客戶更快更加準(zhǔn)確便捷的選到理想的商品。是每個(gè)商家繼續(xù)努力的目標(biāo)。
一、 京東商品搜索簡介
京東商品搜索引擎是搜索推薦部自主研發(fā)的商品搜索引擎,主要功能是為海量京東用戶提供精準(zhǔn)、快速的購物體驗(yàn)。雖然只有短短幾年的時(shí)間,我們的搜索引 擎已經(jīng)經(jīng)過了多次618店慶和雙11的考驗(yàn),目前已經(jīng)能夠與人們?nèi)粘J褂玫娜绻雀?、百度等全文搜索引擎相比,我們的產(chǎn)品與其有相通之處,比如涵蓋億級別商 品的海量數(shù)據(jù)、支持短時(shí)超高并發(fā)查詢、又有自己的業(yè)務(wù)特點(diǎn):
海量的數(shù)據(jù),億級別的商品量;
高并發(fā)查詢,日PV過億;
請求需要快速響應(yīng)。
搜索已經(jīng)成為我們?nèi)粘2豢苫蛉钡膽?yīng)用,很難想象沒有了Google、百度等搜索引擎,互聯(lián)網(wǎng)會變成什么樣。京東站內(nèi)商品搜索對京東,就如同搜索引擎對互聯(lián)網(wǎng)的關(guān)系。他們的共同之處:
海量的數(shù)據(jù),億級別的商品量;
高并發(fā)查詢,日PV過億;
請求需要快速響應(yīng)。
這些共同點(diǎn)使商品搜索使用了與大搜索類似的技術(shù)架構(gòu),將系統(tǒng)分為:
離線信息處理系統(tǒng);
索引系統(tǒng);
搜索服務(wù)系;
反饋和排序系統(tǒng)。
同時(shí),商品搜索具有商業(yè)屬性,與大搜索有一些不同之處:
商品數(shù)據(jù)已經(jīng)結(jié)構(gòu)化,但散布在商品、庫存、價(jià)格、促銷、倉儲等多個(gè)系統(tǒng);
召回率要求高,保證每一個(gè)正常的商品均能夠被搜索到;
為保證用戶體驗(yàn),商品信息變更(比如價(jià)格、庫存的變化)實(shí)時(shí)性要求高,導(dǎo)致更新量大,每天的更新量為千萬級別;
較強(qiáng)的個(gè)性化需求,由于是一個(gè)相對垂直的搜索領(lǐng)域,需要滿足用戶的個(gè)性化搜索意圖,比如用戶搜索“小說”有的用戶希望找言情小說有的人需要 找武俠小說有的人希望找到勵(lì)志小說。另外不同的人消費(fèi)能力、性別、對配送時(shí)間的忍耐程度、對促銷的偏好程度以及對屬性比如“風(fēng)格”、“材質(zhì)”等偏好不同。 以上這些需要有比較完善的用戶畫像系統(tǒng)來提供支持。
二、總體架構(gòu)圖
搜索服務(wù)集群:由很多個(gè)merger節(jié)點(diǎn)組成的集群。接收到查詢query后,將請求通過qp觸發(fā)有策略地下發(fā)到在線檢索服務(wù)集群和其他服務(wù)集群,并對各個(gè)服務(wù)的返回結(jié)果進(jìn)行合并排序,然后調(diào)用detail server包裝結(jié)果,最終返回給用戶。
query processor server:搜索query意圖識別服務(wù)。
在線檢索服務(wù)集群:由很多個(gè)searcher節(jié)點(diǎn)組成,每個(gè)searcher列對應(yīng)一個(gè)小分片索引(包含全量數(shù)據(jù)和實(shí)時(shí)增量數(shù)據(jù))。
detail server:搜索結(jié)果展示服務(wù)。
索引生產(chǎn)端:包含全量和增量數(shù)據(jù)生產(chǎn),為在線檢索服務(wù)集群提供全量索引和實(shí)時(shí)索引數(shù)據(jù)。
三、 離線信息處理系統(tǒng)
由于商品數(shù)據(jù)分布在不同的異構(gòu)數(shù)據(jù)庫當(dāng)中有KV有關(guān)系型數(shù)據(jù)庫,需要將這些數(shù)據(jù)抽取到京東搜索數(shù)據(jù)平臺中,這分為全量抽取和實(shí)時(shí)抽取。
對于全量索引,由于商品數(shù)據(jù)散布于多個(gè)系統(tǒng)的庫表中,為了便于索引處理,對多個(gè)系統(tǒng)的數(shù)據(jù)在商品維度進(jìn)行合并,生成商品寬表。然后在數(shù)據(jù)平臺上,使用MapReduce對商品數(shù)據(jù)進(jìn)行清洗,之后進(jìn)行離線業(yè)務(wù)邏輯處理,最終生成一份全量待索引數(shù)據(jù)。
對于實(shí)時(shí)索引,為了保證數(shù)據(jù)的實(shí)時(shí)性,實(shí)時(shí)調(diào)用各商品信息接口獲取實(shí)時(shí)數(shù)據(jù),將數(shù)據(jù)合并后采用與全量索引類似的方法處理數(shù)據(jù),生成增量待索引數(shù)據(jù)。
四、 索引系統(tǒng)
此系統(tǒng)是搜索技術(shù)的核心,在進(jìn)入這個(gè)系統(tǒng)之前,搜索信息仍然是以商品維度進(jìn)行存儲的。索引系統(tǒng)負(fù)責(zé)生成一種以關(guān)鍵字維度進(jìn)行存儲的信息,一般稱之為倒排索引。
此系統(tǒng)對于全量和增量的處理是一致的,唯一的區(qū)別在于待處理數(shù)據(jù)量的差異。一般情況下,全量數(shù)據(jù)索引由于數(shù)據(jù)量龐大,采用hadoop進(jìn)行;實(shí)時(shí)數(shù)據(jù)量小,采用單機(jī)進(jìn)行索引生產(chǎn)。
五、 搜索服務(wù)系統(tǒng)
搜索服務(wù)系統(tǒng)是搜索真正接受用戶請求并響應(yīng)的系統(tǒng)。這個(gè)系統(tǒng)最初只有1列searcher組成在線檢索服務(wù)。由于用戶體驗(yàn)的需要,首先增加 QueryProcessor服務(wù),負(fù)責(zé)查詢意圖分析,提升搜索的準(zhǔn)確性。
隨著訪問量的增長,接著增加緩存模塊,提升請求處理性能。接著隨著數(shù)據(jù)量(商品量)的增長,將包裝服務(wù)從檢索服務(wù)中獨(dú)立出去,成為detailServer服務(wù)。數(shù)據(jù)量的進(jìn)一步增長,對數(shù)據(jù)進(jìn)行類似數(shù)據(jù)庫分庫分表的分片操作。
這時(shí)候,在線檢索服務(wù)由多個(gè)分片的searcher列組成。自然而然,需要一個(gè)merger服務(wù),將多個(gè)分片的結(jié)果進(jìn)行合并。至此,搜索基礎(chǔ)服務(wù)系統(tǒng)完備。
之后,無論是搜索量的增長或者數(shù)據(jù)量的增長,都可以通過擴(kuò)容來滿足。對于618、1111之類的搜索量增長,可通過增加每個(gè)searcher列服務(wù)器的數(shù)量來滿足。而對于商品數(shù)據(jù)的不斷增加,只需要對數(shù)據(jù)做更多的分片,相應(yīng)地增加searcher列來滿足。
搜索服務(wù)系統(tǒng)內(nèi)部的處理流程如下:
在這個(gè)流程中,緩存模塊和拉取結(jié)果模塊非常穩(wěn)定。而排序模塊和在線業(yè)務(wù)邏輯處理模塊經(jīng)常需要改動。架構(gòu)需要穩(wěn)定,高效和通用。排序業(yè)務(wù)特點(diǎn)是實(shí)驗(yàn)?zāi)P投?,開發(fā)迭代速度快,講求效果。
為了解決這一沖突,需要將排序業(yè)務(wù)與架構(gòu)分離,以動態(tài)鏈接庫的方式集成到搜索整體架構(gòu)中,具體包括文本策略和其他策略兩個(gè)維度的相關(guān)性,文本策略相 關(guān)性集成在searcher當(dāng)中;其他策略相關(guān)性(包括反饋,個(gè)性化和業(yè)務(wù)調(diào)權(quán)等等)集成在merger當(dāng)中。實(shí)現(xiàn)架構(gòu)與排序業(yè)務(wù)各司其職,互不影響干 擾。
排序與架構(gòu)分離
六、 反饋和排序系統(tǒng)
反饋系統(tǒng)主要包含用戶行為數(shù)據(jù)的實(shí)時(shí)收集、加工,并將數(shù)據(jù)存儲到數(shù)據(jù)集市當(dāng)中,并對這些數(shù)據(jù)進(jìn)行特征提取,排序最主要考核的線上指標(biāo)是UV價(jià)值和轉(zhuǎn)化率,所以還會利用這些數(shù)據(jù)根據(jù)優(yōu)化目標(biāo)構(gòu)建起標(biāo)注數(shù)據(jù)。
然后基于機(jī)器學(xué)習(xí)的排序系統(tǒng)會針對特征構(gòu)建出模型。京東排序模型是每天更新的訓(xùn)練之前大概半年的數(shù)據(jù)。京東搜索在基于模型的排序基礎(chǔ)之上,上層還會有一層規(guī)則引擎,比如保障店鋪和品牌的多樣性,以及京東戰(zhàn)略扶持的品牌等都通過業(yè)務(wù)引擎來實(shí)現(xiàn)。
一般基于機(jī)器學(xué)習(xí)的排序模型需要較長期的投入但是模型更加健壯不容易被作弊手段找到漏洞,并且可以讓轉(zhuǎn)化率和UV價(jià)可持續(xù)的提升。
規(guī)則引擎主要是為了快速反應(yīng)市場的變化,起到立竿見影的效果。二者一個(gè)像中藥一個(gè)像西藥,中西結(jié)合療效好。
七、針對今年雙11的搜索系統(tǒng)性能優(yōu)化
1.故障秒級切換
今年搜索集群做到了三機(jī)房部署,任何一個(gè)機(jī)房出現(xiàn)斷網(wǎng)、斷電等問題可以秒級將流量切換到其它機(jī)房。并且搜索的部分應(yīng)用部署到了彈性云上,可以進(jìn)行動態(tài)擴(kuò)容。
2.大促期間索引數(shù)據(jù)實(shí)時(shí)更新
每年大促由于商品內(nèi)容等信息更改頻繁,涉及千萬級的索引寫操作,今年針對索引結(jié)構(gòu)進(jìn)行了調(diào)整徹底消滅掉了索引更新存在的一切鎖機(jī)制,商品新增和修改操作變?yōu)殒準(zhǔn)礁?。使大促期間商品的索引更新達(dá)到了妙極。
3.大促期間的個(gè)性化搜索不降級
往年大促期間由于流量在平時(shí)5倍以上,高峰流量會在平時(shí)的7倍,為了保障系統(tǒng)穩(wěn)定,個(gè)性化搜索都進(jìn)行了降級處理。今年針對搜索的緩存進(jìn)行了針對性的 優(yōu)化,實(shí)現(xiàn)了三級緩存結(jié)構(gòu)。從底向上分別是針對term的緩存,相關(guān)性計(jì)算緩存和翻頁緩存。最上層的翻頁緩存很多時(shí)候會被用戶的個(gè)性化請求擊穿,但是底層 的相關(guān)性緩存和term緩存的結(jié)果可以起到作用,這樣不至于使CPU負(fù)載過高。
八、 京東在電商搜索方面產(chǎn)品和技術(shù)的創(chuàng)新
1. 個(gè)性化搜索
個(gè)性化之前的搜索對于同一個(gè)查詢,不同用戶看到的結(jié)果是完全相同的。這可能并不符合所有用戶的需求。在商品搜索中,這個(gè)問題尤為特出。因?yàn)樯唐匪阉鞯挠脩艨赡芴貏e青睞某些品牌、價(jià)格、店鋪的商品,為了減少用戶的篩選成本,需要對搜索結(jié)果按照用戶進(jìn)行個(gè)性化展示。
個(gè)性化的第一步是對用戶和商品分別建模,第二步是將模型服務(wù)化。
有了這兩步之后,在用戶進(jìn)行查詢時(shí),merger同時(shí)調(diào)用用戶模型服務(wù)和在線檢索服務(wù),用戶模型服務(wù)返回用戶維度特征,在線檢索服務(wù)返回商品信息,排序模塊運(yùn)用這兩部分?jǐn)?shù)據(jù)對結(jié)果進(jìn)行重排序,最后給用戶返回個(gè)性化結(jié)果。
2. 整合搜索
用戶在使用搜索時(shí),其目的不僅僅是查找商品,還可能查詢服務(wù)、活動等信息。為了滿足這一類需求,首先在QueryProcessor中增加對應(yīng)意圖 的識別。第二步是將服務(wù)、活動等一系列垂直搜索整合并服務(wù)化。一旦QP識別出這類查詢意圖,就條用整合服務(wù),將對應(yīng)的結(jié)果返回給用戶。
3、情感搜索
情感搜索在于盡可能滿足更多的搜索意圖,這需要在后臺構(gòu)建一個(gè)強(qiáng)大的知識庫體系。比如從海里評論中挖掘有意義的標(biāo)簽“成像效果好的相機(jī)”、“聚攏效 果好的胸罩”、“適合送丈母娘”等,將這些信息一同構(gòu)建到索引中去比如搜索“適合送基友的禮物”結(jié)合搜索意圖分析相關(guān)的結(jié)果可以搜索出來。另外也可以從外 部網(wǎng)站抓取有價(jià)值信息輔助構(gòu)建知識庫體系。
4、圖像檢索
很多時(shí)候用戶并不知道如何描述一個(gè)商品。通過搜索意圖分析、情感分析可以盡可能挖掘搜索意圖,很多時(shí)候用戶根本無法描述,比如在超市看到一個(gè)進(jìn)口食 品或者一件時(shí)尚的衣服,可以通過拍照檢索迅速在網(wǎng)上找到并比較價(jià)格,另外看到同事穿著一件比較喜歡的衣服也可以通過拍照檢索來找到。
目前京東正在開始展開這方面的開發(fā)。離線方面主要通過CNN算法,對圖片進(jìn)行主題提取、提取相似特征、相同特征提取。引擎端主要是和搜索引擎類似的技術(shù)。圖像搜索未來將可以開辟一個(gè)新的電商購物入口。京東目前正在研發(fā)新的圖像檢索引擎。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
訓(xùn)練與驗(yàn)證損失驟升:機(jī)器學(xué)習(xí)訓(xùn)練中的異常診斷與解決方案 在機(jī)器學(xué)習(xí)模型訓(xùn)練過程中,“損失曲線” 是反映模型學(xué)習(xí)狀態(tài)的核心指 ...
2025-09-19解析 DataHub 與 Kafka:數(shù)據(jù)生態(tài)中兩類核心工具的差異與協(xié)同 在數(shù)字化轉(zhuǎn)型加速的今天,企業(yè)對數(shù)據(jù)的需求已從 “存儲” 轉(zhuǎn)向 “ ...
2025-09-19CDA 數(shù)據(jù)分析師:讓統(tǒng)計(jì)基本概念成為業(yè)務(wù)決策的底層邏輯 統(tǒng)計(jì)基本概念是商業(yè)數(shù)據(jù)分析的 “基礎(chǔ)語言”—— 從描述數(shù)據(jù)分布的 “均 ...
2025-09-19CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-19SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價(jià)值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時(shí),“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請求開發(fā)時(shí)(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價(jià)值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點(diǎn)數(shù)據(jù)時(shí)的科學(xué)計(jì)數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價(jià)值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營問題、提升執(zhí)行效率的核心手段,其價(jià)值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營銷成為企業(yè)突圍的核心方 ...
2025-09-11