摘 億級資料的高併發通用搜尋引擎架構設計

2021-06-17 18:12:03 字數 1755 閱讀 3724

]曾經在七月,寫過一篇文章──《基於sphinx+mysql的千萬級資料全文檢索(搜尋引擎)架構設計

圖示說明:

1、搜尋查詢介面:

①、web應用伺服器通過http post/get方式,將搜尋關鍵字等條件,傳遞給搜尋引擎伺服器的search.php介面;

②③、search.php通過sphinx的api(我根據最新的sphinx 0.9.9-rc1 api,改寫了乙個c語言的php擴充套件sphinx.so),查詢sphinx索引服務,取得滿足查詢條件的搜尋引擎唯一id(15位搜尋唯一id:前5位類別id+後10位原資料表主鍵id)列表;

④⑤、search.php將這些id號作為key,通過memcache協議一次性從tokyo tyrant中mget取回id號對應的文字資料。

⑥⑦、search.php將搜尋結果集,按查詢條件,進行摘要和關鍵字高亮顯示處理,以json格式或xml格式返回給web應用伺服器。

2、索引更新介面:

⑴、web應用伺服器通過http post/get方式,將要增加、刪除、更新的內容告知搜尋伺服器的update.php介面;

⑵、update.php將接收到的資訊處理後,寫入tt高速佇列(我基於tokyo tyrant做的乙個佇列系統);

注:這兩步的速度可達到1500次請求/秒以上,可應對6000萬pv的搜尋索引更新呼叫。

3、搜尋索引與資料儲存控制:

㈠、「佇列控制器」守護程序從tt高速佇列中迴圈讀取資訊(每次50條,直到末尾);

㈡、「佇列控制器」將讀取出的資訊寫入搜尋引擎資料儲存層tokyo tyrant;

㈢、「佇列控制器」將讀取出的資訊非同步寫入mysql主表(這張主表按500萬條記錄進行分割槽,僅作為資料永久性備份用);

㈣、「佇列控制器」將讀取出的資訊寫入mysql增量表;

㈤、「佇列控制器」在1分鐘內,觸發sphinx更新增量索引,sphinx的indexer會將mysql增量表作為資料來源,建立增量索引。sphinx的增量索引和作為資料來源的mysql增量表成對應關係;

㈥、「佇列控制器」每間隔3小時,短暫停止從tt高速佇列中讀取資訊,並觸發sphinx將增量索引合併入主索引(這個過程非常快),同時清空mysql增量表(保證了mysql增量表的記錄數始終只有幾千條至幾十萬條,大大加快sphinx增量索引更新速度),然後恢復從tt高速佇列中取出資料,寫入mysql增量表。

本架構使用的開源軟體:

1、sphinx 0.9.9-rc1

2、tokyo tyrant 1.1.9

3、mysql 5.1.30

4、nginx 0.7.22

5、php 5.2.6

本架構自主研發的程式:

1、搜尋查詢介面(search.php)

2、索引更新介面(update.php)

3、佇列控制器

4、sphinx 0.9.9-rc1 api的php擴充套件(sphinx.so)

5、基於tokyo tyrant的高速佇列系統

1、查詢速度:

mysql fulltext最慢,lucene、sphinx查詢速度不相上下,sphinx稍佔優勢。

2、建索引速度:

sphinx建索引速度是最快的,比lucene快9倍以上。因此,sphinx非常適合做準實時搜尋引擎。

億級資料的高併發通用搜尋引擎架構設計

圖示說明 1 搜尋查詢介面 web應用伺服器通過http post get方式,將搜尋關鍵字等條件,傳遞給搜尋引擎伺服器的search.php介面 search.php通過sphinx的api 我根據最新的sphinx 0.9.9 rc1 api,改寫了乙個c語言的php擴充套件sphinx.so ...

千萬級資料的全文檢索搜尋引擎(二)

全文檢索是一套比較複雜的系統,在介紹架構之前,需要介紹一些基本的模組。千萬級資料的全文檢索搜尋引擎 分詞 一 二元分詞 在我們的第乙個版本中,使用的是二元分詞,大概用了接近一年的時間,二元分詞就是每相鄰2個詞做一次切分,不包含英文,英文單獨切分。二元分詞乙個缺點是索引比較大,有大量的冗餘,帶來儲存和...

通用搜尋引擎的垂直化傾向

通用搜尋引擎的垂直化傾向 昨天,為了給我的程式加乙個管理介面,我在google搜尋框中輸入 swt 後,出現了下圖的顯示結果頁。很顯然這項服務超出了google onebox 提供的功能。搜尋引擎在猜測我輸入swt 的含義,google開始智慧型化了。而這正回應了前兩天google公司的首席執行官埃...