搜索引擎新架构:与SQL不得不说的故事
特邀嘉賓:羅濤--阿里巴巴集團(tuán)資深技術(shù)專家
視頻地址:https://yunqi.aliyun.com/2020/session54?liveId=44647
阿里巴巴搜索引擎HA3架構(gòu)
1.HA3架構(gòu)分為在線和離線兩部分
? 在線是一個(gè)傳統(tǒng)的2層服務(wù)架構(gòu),分別叫做QRS和search。QRS負(fù)責(zé)接受用戶請(qǐng)求,做一些簡(jiǎn)單處理之后把請(qǐng)求發(fā)給下面的search節(jié)點(diǎn),search節(jié)點(diǎn)負(fù)責(zé)加載索引并完成檢索,最終由QRS匯集各個(gè)search節(jié)點(diǎn)的結(jié)果并返回給用戶。
? 離線部分分為兩個(gè)環(huán)節(jié),一個(gè)環(huán)節(jié)是數(shù)據(jù)的預(yù)處理,其核心的工作是把業(yè)務(wù)和算法維度的數(shù)據(jù)加工成對(duì)索引友好的大寬表,另一個(gè)環(huán)節(jié)是索引的構(gòu)建,它的主要挑戰(zhàn)是既要支持大規(guī)模的索引更新,也要保障索引是實(shí)時(shí)性。
2.HA3的特點(diǎn)主要有三個(gè):
? 第一個(gè)是高性能的服務(wù)架構(gòu);
? 第二個(gè)是豐富的索引能力;
? 第三個(gè)是金字塔形的算法工作框架
這些特點(diǎn)是HA3在阿里巴巴集團(tuán)內(nèi)風(fēng)靡非常有利的武器,但隨著這幾年業(yè)務(wù)的發(fā)展,這一架構(gòu)逐漸成了我們?cè)偻斑M(jìn)一步的攔路虎。
搜索引擎HA3核心挑戰(zhàn)
具體體現(xiàn)在2個(gè)方面,一個(gè)是深度學(xué)習(xí)的滲透,另一個(gè)是數(shù)據(jù)維度的膨脹。
1. 深度學(xué)習(xí),
它的使用范圍,從早期的精排,逐步擴(kuò)散到了粗排、檢索,比如向量索引的召回。深度學(xué)習(xí)的引入本身也會(huì)帶來(lái)2個(gè)問(wèn)題:一個(gè)是深度模型的本身的網(wǎng)絡(luò)結(jié)構(gòu)通常比較復(fù)雜,對(duì)執(zhí)行流程和模型大小都有非常高的要求,傳統(tǒng)的pipeline工作模式是非常難以有效支持的;另外一個(gè)問(wèn)題是模型和特征數(shù)據(jù)的實(shí)時(shí)更新也對(duì)索引的能力提出了很大的挑戰(zhàn),在線上百億級(jí)別的更新是一個(gè)常態(tài)。
2. 數(shù)據(jù)維度的膨脹,以電商領(lǐng)域?yàn)槔?#xff0c;原來(lái)考慮的維度主要是買家、賣家這兩個(gè)維度,現(xiàn)在得考慮位置、配送、門(mén)店、履約等等,同樣是配送,有3公里5公里送的,有同城的,還有跨城的,像這樣的例子還有很多。而搜索引擎離線的工作流程會(huì)把各個(gè)維度的數(shù)據(jù)join成一張大寬表,這會(huì)導(dǎo)致數(shù)據(jù)更新的規(guī)模成笛卡爾積的形式展開(kāi),在新場(chǎng)景下,無(wú)論是更新的量級(jí)還是時(shí)效性上都很難滿足
搜索傳統(tǒng)解決方案
就是根據(jù)業(yè)務(wù)數(shù)據(jù)維度的特點(diǎn),把引擎分拆成過(guò)多個(gè)不同的實(shí)例,然后在業(yè)務(wù)層通過(guò)查詢不同的引擎實(shí)例來(lái)得到結(jié)果。比如說(shuō)餓了么的搜索引擎就有門(mén)店、商品等維度的數(shù)據(jù),為了解決門(mén)店?duì)顟B(tài)的實(shí)時(shí)變化對(duì)索引的沖擊,可以部署兩個(gè)搜索引擎實(shí)例,一個(gè)用來(lái)搜索合適的門(mén)店,另外一個(gè)用來(lái)搜索合適的商品,由業(yè)務(wù)方先查門(mén)店引擎再查商品引擎來(lái)完成。但這個(gè)方案有一個(gè)明顯的缺點(diǎn),那就是符合用戶意圖的門(mén)店非常多的時(shí)候,門(mén)店的數(shù)據(jù)需要從門(mén)店引擎序列化到業(yè)務(wù)方再發(fā)送給商品引擎,這里序列化的開(kāi)銷非常大,往往需要對(duì)返回的門(mén)店數(shù)目做一定截?cái)?#xff0c;而截?cái)嗟拈T(mén)店中很可能有更匹配用戶意圖的,這樣對(duì)業(yè)務(wù)效果也會(huì)有比較大的影響。特別熱門(mén)的商區(qū),不管是對(duì)用戶還是賣家,都是非常大的損失。
HA3 SQL新的解決方案
以數(shù)據(jù)庫(kù)SQL的執(zhí)行方式來(lái)重塑搜索,核心要點(diǎn)有3條。
**1.將原來(lái)大寬表的模式擴(kuò)展
成支持多表,每個(gè)表的索引加載、更新、切換做到相互獨(dú)立,把原來(lái)需要離線join的操作變成在線查詢時(shí)join。 **
2.徹底拋棄原有的pipeline的工作模式,以DAG圖化的方式來(lái)執(zhí)行,并將搜索的功能抽象成一個(gè)個(gè)獨(dú)立的算子,與深度學(xué)習(xí)的執(zhí)行引擎進(jìn)行統(tǒng)一。
3.以SQL的方式來(lái)表達(dá)圖化的查詢流程,這樣不光用戶使用起來(lái)簡(jiǎn)單,也可以復(fù)用SQL生態(tài)的一些基礎(chǔ)功能。舉個(gè)例子,電商個(gè)性化搜索技術(shù)里面,把商品、個(gè)性化推薦、深度模型等信息分別放到不同的表中,配合上靈活的索引格式,比如倒排索引、正排索引、KV索引等等,加上執(zhí)行引擎本身可以支持并行、異步、編譯優(yōu)化等技術(shù),不管是內(nèi)存還是CPU都能得到有效利用,很輕松地就能解決業(yè)務(wù)上的各種問(wèn)題。
搜索引擎HA3新的架構(gòu)
主要分為三層:
? 最底下一層是searchRuntime的Framework,其核心職責(zé)主要有索引管理和服務(wù)調(diào)度,其中索引部分主要是加載的策略和查詢接口,如計(jì)算存儲(chǔ)分離的支持、實(shí)時(shí)索引構(gòu)建的支持等等;服務(wù)調(diào)度主要處理的是進(jìn)程的failover和服務(wù)的更新,即通常意義的面向終態(tài)的二層調(diào)度,主要的特點(diǎn)是以統(tǒng)一的方式做進(jìn)程的重啟、程序的更新、灰度的發(fā)布等等。
? 中間這一層是DAG引擎層,其核心內(nèi)容有兩個(gè),一個(gè)是執(zhí)行引擎本身,另一個(gè)就是算子。這里的執(zhí)行引擎主要有三部分的能力,包括單機(jī)內(nèi)圖的執(zhí)行,分布式的通信和深度學(xué)習(xí),通過(guò)算子間的互聯(lián),我們能夠很方便的把搜索的查詢流程和深度學(xué)習(xí)進(jìn)行對(duì)接,實(shí)現(xiàn)深度學(xué)習(xí)在搜索的各個(gè)階段的滲透,如向量檢索、粗排和精排。算子部分的抽象是這輪架構(gòu)抽象最重要的一環(huán),把原來(lái)面向過(guò)程式的開(kāi)發(fā)變成了獨(dú)立功能的開(kāi)發(fā),一方面要求算子本身的功能要盡可能內(nèi)聚,另一方面算子級(jí)別的管理也更有利于功能的復(fù)用和發(fā)布。
? 最上面一層是SQL查詢層,核心的工作有兩部分,一個(gè)是SQL解析,另外一個(gè)是查詢優(yōu)化。由于DAG的流程可以任意定制,如何讓用戶更方便地構(gòu)建圖、更方便的進(jìn)行算子間的協(xié)作會(huì)是很關(guān)鍵的問(wèn)題,簡(jiǎn)單、通用是個(gè)必須考慮的,這也是我們首選SQL的原因;另外一個(gè)原因是業(yè)界SQL的執(zhí)行器,通常包含邏輯優(yōu)化和物理優(yōu)化兩個(gè)環(huán)節(jié),這個(gè)對(duì)一個(gè)復(fù)雜的DAG的執(zhí)行提供了非常好的抽象,我們也利用了這個(gè)機(jī)制來(lái)進(jìn)行了很多細(xì)致的優(yōu)化,包括圖的變換、算子合并、編譯優(yōu)化等等。
實(shí)踐案例
1. 餓了么
外賣搜索場(chǎng)景的例子,假設(shè)用戶在搜索框里面輸入了一個(gè)關(guān)鍵詞"牛肉面",搜索引擎后臺(tái)的流程大體如下:通過(guò)用戶的位置信息找到現(xiàn)在還在營(yíng)業(yè)的、并且能賣牛肉面的門(mén)店,每個(gè)門(mén)店給出最匹配的商品,最后返回最符合用戶需求的門(mén)店與商品。在這里,門(mén)店?duì)I業(yè)情況如何、配送能力是否足夠、對(duì)應(yīng)的商品有沒(méi)有賣完,這些數(shù)據(jù)都需要實(shí)時(shí)更新的,而在大規(guī)模的數(shù)據(jù)里面快速找到匹配的信息,也涉及到豐富的索引技術(shù),比如空間索引、倒排索引、向量索引等等,最后門(mén)店和商品的排序也要依賴深度模型的參與,用戶的偏好、優(yōu)惠信息、距離都是很重要的因素。原有的搜索流程是基于elasticsearch通過(guò)分別查詢門(mén)店和商品維度的表來(lái)實(shí)現(xiàn)的,但會(huì)有查詢結(jié)果截?cái)嗪蜕疃葘W(xué)習(xí)接入困難的問(wèn)題,而在HA3上這些問(wèn)題都非常容易解決,遷移到新架構(gòu)后,不光業(yè)務(wù)的長(zhǎng)尾問(wèn)題消失了,而且性能還提升1倍,給后續(xù)算法的迭代留下了非常大的空間,這里性能的提升主要來(lái)自于索引結(jié)構(gòu)和查詢優(yōu)化上的一些工作。
2.淘寶本地生活的服務(wù)
其核心的訴求也是希望在淘寶的搜索里面引入本地服務(wù)的概念,如天貓超市和盒馬的小時(shí)達(dá)的業(yè)務(wù),通過(guò)將門(mén)店和商品維度的數(shù)據(jù)單獨(dú)分拆,不光更新能力提升了兩個(gè)數(shù)量級(jí),還復(fù)用了餓了么搜索的很多功能。
3.釘釘?shù)尼敱P(pán)搜索
業(yè)務(wù)上需要在傳統(tǒng)的搜索上支持釘盤(pán)文件的權(quán)限控制,由于文件和權(quán)限這兩個(gè)維度數(shù)據(jù)的規(guī)模都非常大,而且更新比較頻繁,通過(guò)HA3SQL在線的實(shí)時(shí)本地join,非常低延遲的解決了這個(gè)問(wèn)題。
4.內(nèi)部監(jiān)控系統(tǒng)
原來(lái)是基于開(kāi)源技術(shù)druid構(gòu)建的,但業(yè)務(wù)規(guī)模上來(lái)逐步不能滿足需求了,經(jīng)常出現(xiàn)異常需要手動(dòng)處理的情況,我們?cè)贖A3的基礎(chǔ)上擴(kuò)展了時(shí)序數(shù)據(jù)索引,借助SQL并行執(zhí)行的能力,latency有了明顯下降,穩(wěn)定性也得到了質(zhì)的提升。
以上就是本次云棲大會(huì)--“搜索引擎新架構(gòu):與SQL不得不說(shuō)的故事”的內(nèi)容。如果您對(duì)搜索與推薦相關(guān)技術(shù)感興趣,歡迎加入釘釘群內(nèi)交流~
原文鏈接:https://developer.aliyun.com/article/775338?
版權(quán)聲明:本文內(nèi)容由阿里云實(shí)名注冊(cè)用戶自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,阿里云開(kāi)發(fā)者社區(qū)不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。具體規(guī)則請(qǐng)查看《阿里云開(kāi)發(fā)者社區(qū)用戶服務(wù)協(xié)議》和《阿里云開(kāi)發(fā)者社區(qū)知識(shí)產(chǎn)權(quán)保護(hù)指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,填寫(xiě)侵權(quán)投訴表單進(jìn)行舉報(bào),一經(jīng)查實(shí),本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。總結(jié)
以上是生活随笔為你收集整理的搜索引擎新架构:与SQL不得不说的故事的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 字节跳动 Flink 单点恢复功能实践
- 下一篇: Redis主从复制与优化