檢索系統的下游管理

2021-09-30 07:57:12 字數 3449 閱讀 3509

檢索系統的下游管理 、

雷冬冬

搜尋引擎的檢索系統,是乙個複雜的分布式計算系統,往往需要成百上千臺機器通過網路連線協同工作,處理使用者的檢索請求。不僅如此,由於資料分布以及容災的問題,機器間往往還有上下游、分組、分映象的關係。本文講述如何管理這些機器間的拓撲關係。

一、檢索系統的整體拓撲

整個檢索系統的機器的拓撲關係,類似乙個樹狀的結構,如圖1所示。

我們把非葉子節點稱為broker,把葉子節點稱為su(search unit)。圖1對整個系統進行了簡化,實際情況要複雜一些。我們認為,對整個系統應該採取分層的管理模式,由上層節點管理下層節點。

二、檢索伺服器的下游關係

對於伺服器a,我們將所有主動連線a的機器集合,稱為上游;所有由a主動連線的機器集合,稱為下游。a只負責管理它的下游。a的所有下游,有型別、分組、分映象的關係,如圖2所示。

在圖2中,a是上游,它連線著多種型別的下游(b、c、等等)。b00、b01和b02表明,下游b的資料分布在3臺機器上,3臺機器的並集是資料的全集。同時,為了實現負載分擔和容錯,為b搭建了相同的另外兩套映象。我們用bxy表示b的一台機器。我們稱,當x相同時,bxy屬於同乙個映象;當y相同時,bxy屬於同乙個分組。

當檢索請求到達a後,a可能需要向b獲取資料。此時,a需要從b00、b10和b20這個分組中,選擇一台機器;從b10、b11和b21中選擇一台機器;再從剩餘的2號分組中選擇一台機器。之後,向這3臺機器傳送檢索請求並接收、合併回應。也許,a需要同時向b和c傳送請求,也許,a在向b傳送請求的時候,只需選擇某個特定分組,或者某個特定映象,或者某台特定機器。這些複雜的選擇邏輯,由應用層控制。

三、分層模型

正常情況下,a需要保持到下游的連線並進行資料收發,並從映象節點中,選擇服務能力最優的節點,提高響應速度。異常情況,a需要遮蔽無法服務的下游節點,並在合適的時候恢復它。另外,當a的下游關係發生變化(比如a的下游由b、c變成c、d),a需要釋放b的連線,需要保持c的連線,需要建立d的連線。這個過程必須能平滑進行,不影響服務。

由此可見,對於a來說,如何管理下游,是乙個重要的問題。整個檢索系統,從頂部到底部,每一層都由上游管理下游,總體的拓撲關係也就得到了維持,系統可以正常運轉。

解決檢索系統的下游管理問題,我們採用分層的思想。如圖3所示。

處於最底層的是長連線層。該層採用epoll進行網路io,處理資料收發、超時控制、任務組回應等問題,對上層提供長連線控制代碼、任務組等資料結構以及建立連線、傳送資料等介面。

中間層是下游管理層。下游管理層將長連線層提供的控制代碼,進行邏輯上的分類。形成b、c、d等下游概念。對於同一下游(比如b),形成b00、b01、b02的映象概念,形成b00、b10、b20的分組概念。同時,為上層提供多種映象選擇策略,自動處理服務異常的下游,在其可服務的時候自動恢復等功能。

最上層是應用層。應用層利用下游管理層提供的抽象,能很方便地與網路、下游隔離,專注於業務邏輯的處理。

四、下游管理層

下游管理層由控制代碼表、探測執行緒和更新執行緒組成。控制代碼表以某種資料結構儲存所有的下游連線,對外提供豐富的獲取控制代碼的介面。更新執行緒根據配置資訊,動態更新控制代碼表的內容,並重建到下游的連線。探測執行緒用於恢復服務異常的下游點。

在圖4中,我們用黑色表示服務正常,用藍色表示服務異常,用紅色表示機器故障。

對於機器故障的b01、b12和b22,下游管理層將其遮蔽,並在機器替換後恢復它們的連線。

對於服務異常的b10和b20,下游管理層採取兩種策略:第一,將其長連線控制代碼遮蔽掉,由探測執行緒傳送探測包進行檢視,在確定下游可以服務的時候,解除遮蔽;第二,降低b10和b20的qps到乙個足夠低的水平,當它們恢復正常服務的時候,再逐步提公升到乙個合理的水平。

對於同時存在的映象點b11和b21,下游管理層提供多種策略,比如輪詢、主備、負載均衡等,**用層選擇。各種具體的策略,將在下節介紹。

五、下游選擇策略

下游管理層提供了多種策略,用於在可用的映象點間選擇最優的乙個。我們以乙個簡化的下游關係圖作為討論。

b0、b1和b2裝載了一樣的資料,每次檢索,a需要選擇其中的一台。b0、b1和b2可能使用不同的機型,因此有不同的服務能力;a到它們的網路的效能,也不一定是相同的。

1、輪詢

輪詢是一種很常見,也很簡單的策略。下游管理層維護乙個變數,記錄上次選擇的下標,然後遞增並取模,以此選擇下游。該策略主要用於broker層。

2、主備

主備的意思是,優先選擇與a相同映象號的機器。假設a對於它的上游來說,屬於映象0。那麼,在b0可服務的情況下,選擇b0;否則,輪詢其它機器。該策略主要用於broker層,它可以將檢索系統按映象切分開。

3、動態負載均衡

動態負載選擇策略,指的是根據b0、b1和b2的歷史以及當前服務能力,選擇最優的機器。由於b0、b1和b2三個映象之間往往存在各種差異,比如與a之間的網路狀態,機器本身的異構性等,這些條件都會影響檢索速度。

動態負載均衡的大致思想是在不同的qps下,伺服器a能根據當前b0、b1、b2處理能力按照適當的比例對檢索請求進行分發,達到各個映象伺服器響應速度基本相同的目的。這樣做能有效防止系統短板,平滑系統檢索速度,在檢索伺服器出現問題時自動減少其請求量,能有效規避一些潛在的問題。

動態負載均衡的基本演算法如下:

假設乙個a下面有 n 個映象,分別為bi,第i個映象所佔的分發權重為pi;

我們規定在乙個範圍滑動,比如 1<=pi <=100,初始值為1。

對於第i個映象,統計其最近m個請求的平均響應時間,設為 ti 在a層每處理 u 個請求後對下游的負載進行一次更新,u>=m*n。

負載更新的基本思想如下:

a.  我們對n個映象su的平均響應時間  ti  按照快慢進行排序,設定其排序序列為:

b. 0映象b的響應速度最快,在理論上應該給它的負載增加,即:

c. 而映象1——n的響應時間慢一些,理論上應該減少他們的負載,盡量使得其響應時間 ti 接近  t0

對以上增加和減少的幅度我們按照以下公式來計算,對響應速度最快的b,其增量為:

其中當i為1--n時,其減量為:

為了防止負載能力調節過快而導致出現震動,對

首先,在不同的qps下,a能動態調整出乙個合適的qps比例分發到下游的映象點之間。使得各個映象點之間的處理速度大致相同,對異構性的映象點有比較好的用處。

其次,檢索伺服器剛啟動時由於io上的cache還沒有充滿,所以檢索伺服器啟動時不能處理大量請求,動態負載均衡策略考慮對其進行預熱,逐步增大其請求量,直至乙個相對穩定的qps。

最後,檢索伺服器出現問題時,比如程序僵死,速度變慢,網路出現問題等,**層a會自動調節其分發比例,減少其請求量。使檢索質量損失最小。

六、總結

檢索系統是乙個複雜的分布式系統,機器間按照一定的拓撲關係,協同為使用者服務。對於如何維持這種拓撲關係,我們有以下觀點:

1、將拓撲關係圖分層,由處於上層的上游,管理處於下層的下游。

2、將模組分離成長連線層、下游管理層和應用層。各層負責自己的邏輯並對上層提供介面。

3、下游管理層對下游的長連線控制代碼集合進行封裝,形成分型別、分映象、分組等概念;提供多種選擇介面,多種映象策略;自動處理所有異常情況(比如下游當機、效能異常、網路異常等)。

什麼是全文檢索與全文檢索系統

全文檢索是指計算機索引程式通過掃瞄文章中的每乙個詞,對每乙個詞建立乙個索引,指明該詞在文章中出現的次數和位置,當使用者查詢時,檢索程式就根據事先建立的索引進行查詢,並將查詢的結果反饋給使用者的檢索方式。這個過程類似於通過字典中的檢索字表查字的過程。全文檢索的方法主要分為按字檢索和按詞檢索兩種。按字檢...

面向機器翻譯的全文檢索系統

需要檢索的篇章,先分解成段落,並分別按段落精檢方法進行檢索。段落精檢允許一定 的模糊性。當兩個段落的結構特徵基本匹配後,進一步劃分句子,通過對句子進行相似 度的計算,最後判斷段落是否匹配。系統運用了動態規劃的方法計算句子的相似度。把待翻譯句子中的單詞列為i j平面的i軸上,例項句子中的單詞列為j軸上...

面向機器翻譯的全文檢索系統

摘 要 本文介紹了面向機器翻譯的全文檢索系統的設計和實現,該系統在實現倒排檔存 儲結構和布林邏輯檢索 位置檢索 檢索相關性排序等普通全文檢索系統功能的基礎上 提供面向機器翻譯的多層次檢索和跨語言檢索功能。針對機器翻譯中篇章 段落模糊 檢索的難題,本文提出了縮檢 精檢的方法,並通過對文件的特徵分析以及...