如此簡單的乙個輸入框+搜尋按鈕,卻可以實現如此神奇的一站式搜尋服務,為使用者提供豐富、準確的資訊,這要歸功於乙個強勁的後台引擎。使用者可曾想過,這麼簡單的行為,後台引擎可能會有成千上萬臺機器在為你服務。搜尋引擎就像一台高效運轉的發動機,不停響應使用者的請求,輸出使用者想要的資訊。
高效的檢索系統需要提供億級次每日的檢索服務能力,在100ms左右從千億級的海量網頁中獲取相關的資料,同時提供穩定、7*24小時的服務和高可靠的容錯機制。這需要乙個高效能、穩健的引擎作為支援,是乙個充滿挑戰的技術領域。隨著網頁數量的急劇膨脹、新硬體技術的快速發展、web2.0等實時性網頁的出現,檢索技術必須不斷發展,以適應這些變化。檢索系統的一些關鍵技術如下文所述。
1.網頁分類/分層技術
2.檢索演算法
千億級的海量資料、億級的日服務能力、100ms搜尋延遲、成千上萬臺服務機器,如此大規模的檢索系統,必然要求有高效的檢索演算法支援,包括索引組織方法、召回演算法、壓縮解壓演算法、快取演算法、排程演算法等等。
3.新硬體應用
新硬體的發展總是超乎想象,在可展望的未來,單伺服器將迎來100核的時代,在多核時代,需要研究計算任務的分配和排程;gpu的出現,提供了數百倍於通用cpu的計算能力,研究適用於gpu架構的演算法和資料結構,為未來高效能的計算提供可能;ssd的出現,解決了磁碟定址和讀寫能力不足的硬傷,ssd提供數十倍於傳統硬碟的io能力,如何利用該裝置,設計適合的儲存方式和演算法,成為乙個新的研究方向。硬體發展日新月異,給我們帶來了機遇,同時也帶來挑戰,檢索系統必須從架構、資料儲存、演算法等各個方面,不斷去適應新硬體的發展。
4.專用作業系統
通用的作業系統為了滿足不同型別的應用,從而考慮一些固定、通用的策略,然而,並不是所有的應用都能很好的適應這種策略,因此,通用性往往會導致應用效能的降低。為了提供更高效的檢索服務,需要對通用作業系統的策略做調整,以滿足特殊應用的需求。這種調整包括執行緒排程、記憶體管理、快取、io、網路通訊等策略。
5.實時檢索技術
網際網路的發展,已經打破了傳統**批量累積、定時出版的模式,使用者對資訊獲取的實時性要求越來越高,甚至很苛刻。使用者不再滿足今天發生的事情,明天才能知道,而會要求知道1分鐘之前發生的事情。web2.0、微博、突發事件等因素使得網際網路時時刻刻存在實時性的網頁。使用者的主觀要求和資訊的客觀存在對搜尋引擎處理實時資料的要求越來越高,需要一種特殊的爬取、索引、檢索技術,以支援對實時資料的處理。
6.架構與分布式儲存和計算平台上的檢索系統
傳統的單機儲存和計算資源排程方式,在駕馭海量資料儲存和海量計算過程中,存在明顯的短板,越來越感覺到心有餘而力不足,主要體現在以下幾個方面:
(1)資料容災:磁碟故障是最頻繁發生的硬體故障之一,這導致存放在磁碟上的資料,永遠處於不安全的狀態;
(2)資源的排程和利用:直接面對使用者的網際網路服務,流量的分布是一條有波峰和波谷的曲線,而系統設計的容量要保證峰值時的服務質量,這就導致在系統閒時大量資源的浪費,據統計,網際網路業務的機器資源使用率在20%左右,甚至更低,搜尋引擎面對海量的資料和海量計算,需要大量的機器資源,這種浪費更加明顯;
(3)故障恢復:面對時刻存在的硬體故障,人工恢復的方式低效並且容易出錯,更大的問題是浪費了大量的人力。可以想象一下,有幾萬臺機器的檢索系統,如果所有故障都由工程師來人工處理,工程師一定會忙得焦頭爛額。
正是由於這些原因,分布式儲存和分布式計算平台成為一種必須的趨勢,這樣的乙個分布式平台一般包含以下幾個系統:
(1)分布式檔案系統;
(2)分布式海量資料管理系統;
(3)分布式計算系統;
(4)分布式資源排程系統;
(5)分布式傳輸系統。
架構於分布式平台上的檢索系統,可以實現高效計算、資源充分利用、可靠儲存、自適應容錯、高可擴充套件性、自動駕駛。
7.全方位監控技術
檢索系統需要提供7*24小時的不間斷服務,我們面臨了諸多的挑戰:
(1)複雜的網路環境:電信網、聯通網、移動網、校園網……,這就是中國特色的網路結構,也是我們必須面對的現實,如此複雜的網路結構,意味著網路故障發生的概率會很高;
(2)單點故障:機器故障是家常便飯,特別在乙個包含幾萬臺機器的系統,現實情況是:如果有一天不發生機器故障,工程師心裡肯定會不踏實;
(3)作業系統故障:雖然目前linux作業系統的穩定性有一定的保證,但在機器時刻滿負荷運轉的情況下,誰能保證作業系統一定不會打盹呢?
(4)應用層故障:檢索系統由幾十個服務共同組成,哪乙個工程師可以保證自己的**不會出問題呢!
從網路、硬體、作業系統到應用的各種故障,使得我們的系統可能時刻處於不健康的狀態中。必現的故障並不可怕,可怕的是故障只是概率性的發生,當你想去看看怎麼回事時,故障已經不出現,這個時候,你一定會無所適從,有大型系統開發經驗的工程師對這個應該深有體會。因此,對我們的開發和運營工程師來說,系統不應該是乙個「黑盒子」,而應該是乙個「水晶球」。為了做到這一點,我們必須對網路、硬體、作業系統、應用的各種狀態進行全方位的監控,採集各種監控資料,從而進行:
(1)故障的告警:我們不能保證故障不發生,但一定要保證故障發生時得到及時的處理,對於可以自動處理的故障,採用自動恢復機制,否則,必須告警,人工處理;
(2)系統診斷:監控資料就像系統的健康檔案,可以通過資料分析和挖掘,發現系統的問題,以及問題的原因;
(3)運營資料生成:通過對監控資料的統計,生成各種運營資料,從而體現系統服務的情況以及業務的發展情況;
(4)反向控制:通過對監控資料的分析和挖掘,自動發現系統存在的問題,從而自動對系統進行自動控制,當然,這個要非常小心謹慎,控制不當,會造成服務的不穩定。
總之,通過全方位的監控技術,我們希望做到系統是完全透明、可解釋的,從而保證服務的質量。
8.相關性實驗平台
(1)效率低:每一次小的實驗,可能需要經過**修改、編譯、發布、系統搭建、實驗、分析等步驟,這會耗費工程師很多的精力,效率低下,同時,如果多人進行實驗,實驗環境衝突的問題導致沒有辦法並行開展;
(2)資源占用多:每乙個新的實驗都需要搭建一套對比系統,如果實驗很多,機器的資源根本不可接受。
為了支援相關性的不斷調優,需要研發乙個新的實驗平台,支援a/b test的模式,以達到高效、廉價、多工、多使用者的目標。
上述主要對檢索系統的關鍵技術進行了概述,後續會有針對性的進行展開介紹。
搜尋引擎檢索技術
謝海勸 如此簡單的乙個輸入框 搜尋按鈕,卻可以實現如此神奇的一站式搜尋服務,為使用者提供豐富 準確的資訊,這要歸功於乙個強勁的後台引擎。使用者可曾想過,這麼簡單的行為,後台引擎可能會有成千上萬臺機器在為你服務。搜尋引擎就像一台高效運轉的發動機,不停響應使用者的請求,輸出使用者想要的資訊。高效的檢索系...
搜尋引擎檢索技術
如此簡單的乙個輸入框 搜尋按鈕,卻可以實現如此神奇的一站式搜尋服務,為使用者提供豐富 準確的資訊,這要歸功於乙個強勁的後台引擎。使用者可曾想過,這麼簡單的行為,後台引擎可能會有成千上萬臺機器在為你服務。搜尋引擎就像一台高效運轉的發動機,不停響應使用者的請求,輸出使用者想要的資訊。高效的檢索系統需要提...
搜尋引擎檢索技術
高效的檢索系統需要提供億級次每日的檢索服務能力,在100ms左右從千億級的海量網頁中獲取相關的資料,同時提供穩定 7 24小時的服務和高可靠的容錯機制。這需要乙個高效能 穩健的引擎作為支援,是乙個充滿挑戰的技術領域。隨著網頁數量的急劇膨脹 新硬體技術的快速發展 web2.0等實時性網頁的出現,檢索技...