搜索是一個(gè)古老的技術(shù),從互聯(lián)網(wǎng)發(fā)展的第一天開(kāi)始,搜索技術(shù)就綻放出了驚人的社會(huì)和經(jīng)濟(jì)價(jià)值。隨著信息社會(huì)快速發(fā)展,數(shù)據(jù)呈爆炸式增長(zhǎng),搜索技術(shù)通過(guò)數(shù)據(jù)收集與處理,滿足信息共享與快速檢索的需求。基于搜索技術(shù),更是締造了谷歌、百度、雅虎等一批知名企業(yè)。
搜索也是一個(gè)蓬勃發(fā)展技術(shù),它串聯(lián)起了問(wèn)答、地圖、小程序等各式各樣新的應(yīng)用形態(tài)。最近十幾年間,也應(yīng)用到了更早前并無(wú)直接關(guān)聯(lián)的IT運(yùn)維等領(lǐng)域。更是通過(guò)技術(shù)融合推動(dòng)了AI、NoSQL、OLAP等相關(guān)技術(shù)的發(fā)展。
日前,華為開(kāi)發(fā)者大會(huì)HDC.Cloud DevRunLive開(kāi)發(fā)者技術(shù)沙龍上,華為云專家做了關(guān)于“云搜索服務(wù)技術(shù)實(shí)踐”的技術(shù)演講。本文為大家介紹業(yè)界流行的搜索應(yīng)用場(chǎng)景,開(kāi)源Elasticsearch的應(yīng)用,以及華為云搜索服務(wù)在此基礎(chǔ)上的一些增強(qiáng)。
一、什么是搜索?
搜索行為的基本流程
從技術(shù)上來(lái)看,搜索指的是:依據(jù)不同類型數(shù)據(jù)的條件組合,篩選出符合條件的記錄(或稱文檔),并依照某種排序規(guī)則進(jìn)行TopN的選擇,最后進(jìn)行呈現(xiàn)。
具體的過(guò)程,如上圖所示。我們?cè)谏钪杏龅降母鞣N類型數(shù)據(jù),像新聞文檔、電話號(hào)碼、年齡、體重、地圖坐標(biāo)等,在搜索系統(tǒng)各種會(huì)映射成不同類型的索引,比如文本一類的數(shù)據(jù)被映射成倒排表索引,數(shù)字一類的數(shù)據(jù)被映射成KD-Tree索引。還有一類特殊的數(shù)據(jù),像圖片、視頻等多媒體信息,他們不能直接被表達(dá)為索引,而是通過(guò)機(jī)器學(xué)習(xí)表達(dá)為一個(gè)個(gè)向量數(shù)據(jù),然后存儲(chǔ)為搜索系統(tǒng)中的向量索引。
各種數(shù)據(jù)轉(zhuǎn)換為索引后,我們就可以通過(guò)不同的條件描述組合來(lái)進(jìn)行搜索了。通過(guò)索引來(lái)搜索相比一條條數(shù)據(jù)的過(guò)濾,通常速度會(huì)快好幾個(gè)數(shù)量級(jí),從而快速篩選出符合條件的數(shù)據(jù)條目。
最后,當(dāng)篩選出來(lái)的數(shù)據(jù)條目非常多的時(shí)候,人難以一次閱讀過(guò)來(lái),還有有一個(gè)排序的過(guò)程,比如按照是否最新、猜測(cè)是否最符合搜索目的等方法挑選出其中的Top N條,最后進(jìn)行呈現(xiàn)。
上述是從技術(shù)角度來(lái)闡述什么是搜索,從實(shí)際應(yīng)用來(lái)看,更加容易體會(huì)搜索的形態(tài)以及價(jià)值。
搜索的部分應(yīng)用
從業(yè)務(wù)上來(lái)講,搜索是一種靈活提取/組織企業(yè)知識(shí)的手段,面向客戶或企業(yè)自身都有很強(qiáng)的應(yīng)用價(jià)值。在泛互聯(lián)網(wǎng)/泛政府/大中小企業(yè)都有廣泛的應(yīng)用。
二、企業(yè)如何構(gòu)筑自己的搜索系統(tǒng)?
如果從頭開(kāi)始構(gòu)筑自己的搜索系統(tǒng),會(huì)是一個(gè)非常耗費(fèi)時(shí)間與資源的事情,因?yàn)樗阉骷夹g(shù)確實(shí)比較復(fù)雜。就比如前面說(shuō)過(guò)的表達(dá)文本索引的倒排表,就會(huì)有FST、PForDelta、Skip List等等很多底層數(shù)據(jù)結(jié)構(gòu)以及工程實(shí)踐要實(shí)現(xiàn)。再加上行列存儲(chǔ)、數(shù)值索引、向量索引、分布式等其他方面的內(nèi)容,投入的時(shí)間和資源會(huì)是一個(gè)驚人的數(shù)字。對(duì)于不是以提供搜索引擎為主業(yè)的企業(yè)來(lái)說(shuō),最好的選擇是從一個(gè)優(yōu)秀的開(kāi)源軟件開(kāi)始,比如Elasticsearch。
Elasticsearch,簡(jiǎn)稱ES
Elasticsearch擁有著強(qiáng)大的功能,從它開(kāi)始搭建搜索系統(tǒng)能夠節(jié)省大量的時(shí)間與資源。
當(dāng)然使用開(kāi)源軟件也不是一個(gè)一勞永逸的事情。如果是一個(gè)單機(jī)的Demo,很容易。但是一旦上到生產(chǎn)系統(tǒng),事情就變得不那么簡(jiǎn)單了。
生產(chǎn)環(huán)境下,事情變得復(fù)雜
在生產(chǎn)環(huán)境中,要考慮集群化以應(yīng)對(duì)大量的數(shù)據(jù)與請(qǐng)求,還要考慮業(yè)務(wù)連續(xù)性所要求的可靠性以及極端情況下可恢復(fù)性,防止惡意操作或者誤操作的安全準(zhǔn)備,以及業(yè)務(wù)的擴(kuò)張帶來(lái)的對(duì)應(yīng)資源添加等等。這些問(wèn)題都需要大量的經(jīng)驗(yàn)來(lái)支撐操作,這使得企業(yè)不得不投入額外的精力來(lái)操作這些不屬于主業(yè)務(wù)的事務(wù)。
為了幫助企業(yè)更好的完成上述任務(wù),華為云推出了云搜索業(yè)務(wù),能夠大幅簡(jiǎn)化生產(chǎn)環(huán)境下Elasticsearch的維護(hù)工作量,并且在部分ES原本處理較薄弱的地方,進(jìn)行了增強(qiáng)。
華為云搜索,為生產(chǎn)環(huán)境充分考慮
華為云為了讓企業(yè)在生產(chǎn)環(huán)境上的搜索系統(tǒng)更易于構(gòu)筑,做了如下幾個(gè)方面的工作:
兼容性:100% 兼容Elasticsearch APIs,支持5.x到7.x多個(gè)版本
易用性:分鐘級(jí)集群創(chuàng)建、擴(kuò)容,一鍵式備份與恢復(fù),7*24看護(hù)
安全性:支持優(yōu)秀的分權(quán)分域,底層磁盤(pán)加密
高可用:擴(kuò)容節(jié)點(diǎn)、磁盤(pán)業(yè)務(wù)不中斷,更新詞庫(kù)業(yè)務(wù)不中斷
可靠性:支持跨AZ冗余配置,自動(dòng)化的增量備份
高性能:慢報(bào)表自動(dòng)加速,費(fèi)時(shí)降低百倍,集成向量索引,多媒體檢索時(shí)延低至ms級(jí)
低成本:存算分離的架構(gòu),長(zhǎng)時(shí)間數(shù)據(jù)存留成本降至20%
前面的5條,可以籠統(tǒng)的歸結(jié)為生產(chǎn)環(huán)境上的必要條件。這里重點(diǎn)聊一下最后兩條中的內(nèi)容:向量索引、存算分離、報(bào)表加速。
一、向量索引
向量搜索主要是為了多媒體內(nèi)容檢索準(zhǔn)備的。一個(gè)搜索請(qǐng)求假設(shè)帶上一張圖片,這個(gè)圖片會(huì)被事先轉(zhuǎn)換為一個(gè)特征向量(比如人臉圖片典型特征就是一個(gè)256維的Float向量),這個(gè)向量會(huì)被送入搜索系統(tǒng)與其他存檔的向量進(jìn)行比對(duì),如果兩個(gè)向量的距離越近(歐式距離、余弦距離等),那么就意味著原始的圖片約相似,從而有可能被搜索出來(lái)。由于可以對(duì)多媒體進(jìn)行搜索,向量的搜索技術(shù)被大量用于拍照選商品、人臉匹配、高速路口車輛尋跡等場(chǎng)景。
Elasticsearch也有向量搜索的能力,叫做DenseVector,但是這個(gè)方式有一定的缺陷。
ES的向量處理方式
如上圖所示,進(jìn)行一個(gè)聯(lián)合條件檢索,比如“梅觀路口”AND <某汽車照片向量>這樣的條件來(lái)檢索出現(xiàn)在梅觀路口某車輛歷史經(jīng)過(guò)的記錄時(shí), 開(kāi)源ES的做法是先通過(guò)倒排索引快速找到符合“梅觀路口”的記錄,再一條條和查詢的小汽車向量進(jìn)行比較,找出TopN比如前20條向量距離最近的。這樣一來(lái),如果符合“梅觀路口”的記錄有一億條,就要比較一億次,效率很低。
華為云搜索采用向量索引來(lái)解決這個(gè)問(wèn)題。
華為云搜索的向量處理方式
如上圖所示,主要有兩個(gè)突破點(diǎn),第一個(gè)突破點(diǎn)是如何對(duì)向量采用一種合理的索引編碼方式,能夠帶來(lái)遠(yuǎn)小于O(N)的時(shí)間復(fù)雜度。我們的方式是采用HNSW的編碼方式,帶來(lái)近似O(Log)的時(shí)間復(fù)雜度。第二個(gè)突破點(diǎn),是如何與其他類型的索引協(xié)同工作,我們通過(guò)改寫(xiě)Lucene和ES的代碼,在底層新增了一種數(shù)據(jù)結(jié)構(gòu),支持與其他索引進(jìn)行互通,通過(guò)向量索引快速鎖定搜索范圍從而減小其他條件的索引范圍。最后的總體效果就是,哪怕是上億的數(shù)據(jù),得出結(jié)果也只要數(shù)十毫秒。
四、存算分離
如文章開(kāi)頭所講,近十幾年來(lái),搜索因?yàn)閮?yōu)良的靈活度,被逐步用于企業(yè)的日志定位,指標(biāo)運(yùn)營(yíng)運(yùn)維任務(wù)中,替換了原始的Log文件Ctrl+F和Excel表格運(yùn)維的操作方式。ES有很大一部分的實(shí)際應(yīng)用都是針對(duì)這個(gè)場(chǎng)景。對(duì)于重度依賴IT系統(tǒng)的企業(yè)來(lái)講,日志與指標(biāo)的產(chǎn)生是源源不斷的。但是這些數(shù)據(jù)的價(jià)值隨著時(shí)間的推移,會(huì)逐步降低,但價(jià)值卻不會(huì)完全消失。對(duì)于企業(yè)來(lái)講,這很兩難,如果長(zhǎng)時(shí)間保留這些數(shù)據(jù),使用開(kāi)源ES的成本相當(dāng)高昂,如果僅僅保留最近幾天的數(shù)據(jù),那么萬(wàn)一需要回溯一個(gè)疑難雜癥或者復(fù)盤(pán)一個(gè)運(yùn)營(yíng)事件,需要用到上周甚至是上月的數(shù)據(jù)怎么辦呢?
華為云給出的方案是存算分離。
通過(guò)四個(gè)方法解決了其中的四個(gè)關(guān)鍵點(diǎn):
1.依照時(shí)序數(shù)據(jù)不會(huì)修改的特征,數(shù)據(jù)分類為熱數(shù)據(jù)與冷數(shù)據(jù),熱數(shù)據(jù)可寫(xiě)可搜,冷數(shù)據(jù)可搜不可寫(xiě)。這樣解決了時(shí)序數(shù)據(jù)特征到數(shù)據(jù)處理模型的映射
2.熱轉(zhuǎn)冷時(shí),將數(shù)據(jù)轉(zhuǎn)移到對(duì)象存儲(chǔ),由于對(duì)象存儲(chǔ)使用的是糾刪碼存儲(chǔ),冗余與有效載荷的比值遠(yuǎn)小于1,大幅節(jié)約了原先由于多副本帶來(lái)的存儲(chǔ)成本
3.計(jì)算節(jié)點(diǎn)內(nèi)還是保留多副本概念,用于維護(hù)可靠性,但是都僅僅是指向同一份對(duì)象存儲(chǔ),不會(huì)重復(fù)存儲(chǔ)
4.對(duì)于冷數(shù)據(jù),不會(huì)長(zhǎng)時(shí)間維持全部的元數(shù)據(jù)以及Cache,而是自建內(nèi)存管理機(jī)制,盡可能的少用內(nèi)存,實(shí)現(xiàn)小馬拉大車,少量節(jié)點(diǎn)帶動(dòng)大量數(shù)據(jù)
通過(guò)上述方式,實(shí)現(xiàn)了日志數(shù)據(jù)保留成本下降至20%,同時(shí)數(shù)據(jù)容量相比優(yōu)化前提升12倍。
五、報(bào)表加速
為了統(tǒng)計(jì)PV/UV曲線或者請(qǐng)求的平均時(shí)延曲線等運(yùn)營(yíng)運(yùn)維的數(shù)據(jù)用于企業(yè)業(yè)務(wù)或者IT管理的決策參考,通常IT部門(mén)會(huì)引入ES來(lái)根據(jù)原始的指標(biāo)數(shù)據(jù)來(lái)制作報(bào)表。但是這個(gè)方式在統(tǒng)計(jì)跨度稍大的范圍時(shí),就很容易出現(xiàn)報(bào)表很慢或者OOM的情況。
華為云采用了報(bào)表加速技術(shù)解決。
華為云搜索報(bào)表加速方式
如上圖,這個(gè)方案分為兩個(gè)部分,上面一部分是Rollup。Rollup的原理并不復(fù)雜,把時(shí)間按照一定的粒度比如5分鐘進(jìn)行分割,將里面的數(shù)據(jù)按照配置好的聚合語(yǔ)句預(yù)先進(jìn)行一遍聚合計(jì)算。那么后續(xù)再來(lái)報(bào)表請(qǐng)求的時(shí)候,直接基于預(yù)先聚合好的粗粒度數(shù)據(jù)計(jì)算,可以大幅提升計(jì)算效能。這個(gè)方案ES的非開(kāi)源包XPack中有實(shí)現(xiàn),華為云搜索也采用了自己的實(shí)現(xiàn)。
更貼近客戶也是更獨(dú)特的部分是圖中的下半部分。由于ES中Rollup是一套獨(dú)立的API,用戶需要自己進(jìn)行預(yù)聚合的操作與任務(wù)維護(hù)。華為云搜索則是通過(guò)判斷用戶的慢日志,來(lái)自動(dòng)化的協(xié)助用戶決策,是否需要進(jìn)行加速,并生成中間數(shù)據(jù)輔助計(jì)算。優(yōu)化前后,用戶的業(yè)務(wù)不需要進(jìn)行任何修改,在已有的接口之上便可獲得加速能力。
最后得到的效果是,基本所有加速的報(bào)表提速都在100倍以上。
(免責(zé)聲明:本網(wǎng)站內(nèi)容主要來(lái)自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。
任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書(shū)面權(quán)利通知或不實(shí)情況說(shuō)明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開(kāi)相關(guān)鏈接。 )