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