天貓11.11:搜索引擎實時秒級更新
作者 郭蕾
搜索是很多用戶在天貓購物時的第一入口,搜索結果會根據銷量、庫存、人氣對商品進行排序,而商品的顯示順序往往會決定用戶的選擇,所以保證搜索 結果的實時性和準確性非常重要。在電商系統中,特別是在“雙十一”這樣的高并發場景下,如何準確展示搜索結果顯得尤為重要。在今年的“雙十一”活動 中,InfoQ 有幸采訪到了阿里巴巴集團搜索引擎的三位負責人仁基、桂南和悾傅,與他們共同探討了搜索引擎背后的細節。以下內容根據本次采訪整理而成。
阿里巴巴的搜索引擎承擔著全集團的搜索業務,包括淘寶、天貓、1688 等系統,對比傳統的搜索引擎,阿里集團的搜索引擎有一些比較大的突破性、創造性的工作。傳統的搜索引擎,只可以做到離線全量、增量構建索引,而阿里的搜索 引擎已經是演變成為一個能夠做到離線、增量、實時三個等級的搜索引擎。電商平臺最大的一個特點就是短時高并發,像雙十一這樣的活動中,搜索引擎需要考慮如 何讓流量發揮更大的價值。傳統的搜索引擎解決短時高并發的思路是添加緩存層以減少搜索引擎的訪問量,而這樣的解決方案,天貓之前也有使用,但是緩存會有延 遲,實時搜索的需求根本無法滿足。所以為了解決實時的問題,阿里的搜索引擎去掉了應用層和業務層的緩存,重點優化和提升引擎層的服務能力。為了兼顧實時性 和吞吐量,搜索引擎實現了全量、增量、實時三種更新通路。通過三種方式的靈活組合,在保證了海量數據定期全量更新的同時提供了秒級實時更新能力,避免了數 據延遲,提升了用戶體驗。
系統架構
從整體上來看,阿里搜索引擎的架構圖如下。從上到下,分別是應用層、業務層、搜索引擎層、離線處理層和 DB 層,應用層其實就是調用方,大的來看可以分為 Web、App、Wap。業務層會針對相應的業務對搜索結果進行整理,如 Android 和 iOS 的搜索結果顯示是不一樣的。搜索引擎層有點類似傳統系統的搜索引擎,阿里巴巴的搜索引擎會在搜索的基礎上根據用戶習慣提供個性化的搜索結果。索引層主要包 括全量索引和流式計算,全量索引其實就是一個基于 Hadoop/HBase 的離線集群,而流式計算是阿里自己研發的一套系統。之所以沒有選用 Storm,是因為在這一層中,光有計算是不夠的,還需要有數據的存儲(開源解決方案 HBase)。如果使用 Storm,接下來會面臨一個問題,Storm 是一個集群,HBase 又會是一個集群,這樣,Storm 的 Disk 以及 HBase 的 CPU 其實都沒有充分利用到,所以阿里的方案是 Hadoop Yarn 與 HBase 混合部署,把兩個集群合并在一起,既可以做大規模的數據處理,也可以做流式計算,通過這樣的方式,可以將離線和實時計算更好地融合。最底層的數據源層會把 用戶、商品、交易信息同步到上層的 HBase 集群中。
流式計算
Storm 是一個無狀態的流式計算框架,而無狀態的流式計算體系,更適合做簡單的統計分析,比如針對成交維度或者點擊維度做計數。而阿里自研的流式計算框架 iStream,已經不再是簡單的、無狀態的流式計算概念。iStream 借助 HBase 集群存儲用戶狀態,以完成一些相對復雜的模型的計算。同時模型的計算結果可以通過相應的接口直接推送到上層的搜索引擎中,以服務每一條流量的排序變化。
排序鏈
在搜索引擎層,不僅包括商品的搜索引擎,還會包括其它層面的服務(如架構圖所示)。商品搜索引擎中包含商品、店鋪、活動等維度的信息,而圖中的 個性化服務旨在為用戶提供個性化的搜索體驗,個性化服務會根據用戶的實時行為反饋搜索結果。而 QP(Query Planner)會對用戶的搜索請求進行分析(搜索詞、搜索場景、頁面)進一步個性化搜索服務。在搜索引擎層,通過這三個系統的互相配合為上層的業務層提 供個性化的搜索數據。
不同的業務對應的搜索排序結果不同,阿里搜索引擎中排序部分是通過類似鏈式處理的方式實現的,內部稱為排序鏈。排序鏈是由不同的用戶特征對應的 算法插件組合而成,算法插件是單獨存在的,可以根據具體情況組合到不同業務的排序鏈中。目前在線上運行的排序鏈有幾十條,系統會根據不同的業務、用戶、場 景、Query 選擇不同的排序邏輯
雙十一優化
而在雙十一這樣的高并發活動中,搜索引擎需要保證流量的合理分配,比如搜索結果中不能顯示售罄的商品。但是對于一些熱門商品,從庫存充足到售罄 可能是幾分鐘的時間。為了保證搜索結果的實時性,阿里搜索引擎架構針對這樣的場景做了優化,去掉了不能感知業務變化的緩存(業務層),重點優化搜索引擎層 的緩存。以商品售罄的場景為例,當商品售罄時,業務系統會發送異步消息通知離線集群,離線集群通過流式計算將更新同步到引擎,而當引擎返回搜索結果時,會 在緩存的基礎上對結果進行二次過濾,從而保證搜索結果的實時性和準確性。
另外,在今年雙十一中,天貓搜索底層第一次使用精確到更新粒度的 SKU(Stock Keeping Unit)引擎代替之前的寶貝引擎,底層引擎索引量較之前翻了幾番。天貓從召回邏輯、前端的屬性展示、篩選以及搜索結果頁到詳情頁的聯動,向用戶提供了精 確度更高、更細致的搜索購物體驗。對于標類產品,基于 SKU 引擎的搜索導購縮短了用戶的搜索購物路徑,比如搜索 iPhone 5s 后,SKU 引擎會顯示對應的銷售屬性,方便用戶選擇。此外在 SKU 引擎的基礎上,天貓還實現了用戶的尺碼個性化,在包含確定尺碼信息的類目中,如鞋、文胸,天貓可以匹配用戶的尺碼個性化信息,將適合的商品優先展示給用 戶。InfoQ 會在后續文章中與相關技術專家剖析 sku 引擎的設計思路與實現,敬請期待。
<span id="shareA4" class="fl">
</span>