摘要:當前企業搜索引擎多采用基于全文檢索技術設計,隨著索引的膨脹和客戶端并發查詢的增加,有限的物理存儲、CPU周期、內存容量和網絡帶寬帶來了巨大瓶頸。隨著云計算概念的提出和發展,為企業搜索引擎提供了更加優化的解決方案。本文將簡要介紹現階段基于分布式存儲和分布式計算的云計算研究成果,以及其在企業搜索引擎中的應用。
關鍵詞:云計算;分布式存儲;分布式文件系統;分布式計算;企業搜索引擎;全文檢索
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2009)33-9429-02
The Research of Distributed Search Engine Base on Cloud Computing
LIN Le-ran,CHEN De-long
(Fujian Fujitsu Communication Software Co., Ltd. Fuzhou 350013, China)
Abstract: At present, most of the Enterprise Search Engine is based on information retrieval technology. However, with the expansion of index and the increase of client concurrent queries, the limited physical storage, CPU cycles, memory capacity and network bandwidth have become a huge bottleneck. With the proposal of the concept of Cloud Computing and development, it provides a more optimized solution for Enterprise Search Engine. It will introduce the research result of Cloud Computing based on Distributed Storage and Distributed Computing, as well as how to apply it in the Enterprise Search Engine in this article.
Key words: cloud computing; distributed storage; distributed file system; distributed computing; enterprise search engine; information retrieval
1 云計算概述
1.1 什么是云計算
云計算是一種動態的易擴展的且通常是通過互聯網提供虛擬化的資源計算方式,用戶不需要了解云內部的細節,也不必具有云內部的專業知識,或直接控制基礎設施。云計算包括架構即服務(IaaS),平臺即服務(PaaS)和軟件即服務(SaaS)以及其他依賴于互聯網滿足客戶計算需求的技術趨勢。云計算服務通常提供通用的通過瀏覽器訪問的在線商業應用,軟件和數據存儲在服務器上。
1.1.1 現有云計算服務
現有云計算服務可分為兩類:
虛擬化技術。通過對硬件的虛擬化,最大程度上利用CPU資源和內存,通過出售虛擬機和計算能力獲得商業利益。例如Amazon EC2提供的彈性計算云服務和Amazon S3提供的存儲服務。
打包的計算方案。通過提供分布式存儲和分布式計算服務,最大程度上利用集群中的計算節點,提供分布式并行計算能力。例如Google App Engine。
1.1.2 現有云計算分類
從產業類型對云計算進行分類,主要有這三類:
SaaS:Software as a Service 軟件即服務,通過Internet提供軟件的模式,用戶向提供商租用基于Web的軟件來管理企業經營活動,且無需對軟件進行維護,服務提供商會全權管理和維護軟件。例如Google Docs,Salesforce.com。
PaaS:Platform as a Service平臺即服務,提供分布式存儲和分布式計算平臺給系統管理員和開發人員,以為其構建、測試及部署定制應用程序。例如Google App Engine,AWS S3(Amazon Web Services Simple Storage Service) Amazon存儲服務,Microsoft Azure。
IaaS:Infrastructure as a Service架構即服務,提供了核心計算資源和網絡架構等基礎設施的服務。例如,AWS EC2(Amazon Web Service Elastic Compute Cloud) Amazon彈性計算云。
1.2 從分布式基礎架構理解云
分布式基礎架構起源于Google,基于Google的分布式基礎架構的理論,可以將云計算理解為提供了分布式文件系統和分布式計算的運行環境,用戶可以通過編程,設計可分布式并行計算的程序,其計算數據來源和結果都存儲于分布式文件系統中。
1.2.1 分布式文件系統
分布式文件系統Distributed File System(DFS)采用主從架構,一個分布式文件系統由唯一一個目錄節點NameNode(主節點),和多個數據節點DataNode(子節點)組成。分布式文件系統對外表現為一個普通的文件系統,用戶可以用文件名去存取文件,而實際上這個文件是被分成不同的數據塊,這些數據塊就是存儲在數據節點上面。
一個典型的分布式文件系統集群部署,是由一臺性能較好的機器運行目錄節點,而集群里的其他機器每臺上運行一個數據節點。唯一的目錄節點的設計大大簡化了整個體系結果,目錄節點負責分布式文件系統里面所有元數據的仲裁和存儲,這樣的設計是數據不會脫離目錄節點的控制。
1.2.2 分布式計算
MapReduce源于函數式編程模型中的兩項核心操作:Map和Reduce。Map是把一組數據一對一的映射為另外的一組數據,其映射的規則由一個Map函數來指定。Reduce是對一組數據進行歸約,這個歸約的規則由一個Reduce函數指定。Map是一個把數據分開的過程,Reduce則是把分開的數據合并的過程。
面對復雜計算,采用分而治之的策略,即Divide/Conquer,通過把復雜計算切分,使這些切分后的映射(Map)運算高度平行,再將Map后的結果根據Key進行規約(Reduce)運算,得到最終結果。
2 分布式企業搜索引擎
2.1 企業搜索引擎
2.1.1 企業搜索引擎簡介
企業搜索引擎是基于全文搜索技術設計的軟件系統。全文搜索是指計算機索引程序基于用戶字典解析并文本數據流,對每一個被切分出來的詞組建立索引,標示該詞在文本中出現的次數和位置。當用戶查詢時,檢索程序就根據事先建立的索引進行查詢,并將查詢的結果根據相關度排序后反饋給用戶的檢索技術。
企業搜索引擎包含了兩個核心模塊,即索引引擎和搜索引擎。索引引擎負責生成索引文件,在開始工作前,需要對輸入的結構化或非結構化數據進行文本提取轉換為文本數據流,當文本數據流送入索引引擎時,通過調用文本分析工具對其實現切分詞組,并生成索引文件。搜索引擎是作為客戶端進行搜索的接口,當客戶端提交查詢關鍵詞后,搜索引擎調用文本分析工具對查詢關鍵詞實現切分詞組,并生成數個或關系的查詢請求,通過訪問索引文件進行查詢,返回滿足查詢條件的經過相關度排序的命中結果集。
2.1.2 企業搜索引擎現狀
目前企業使用的全文搜索引擎基本采用的是B/S架構,一般部署于一臺web應用服務器上,對企業內網的office文檔、pdf文檔、domino數據庫、結構化數據庫進行索引,甚至使用了網頁采集對外網網頁進行采集索引。隨著索引數據的膨脹,單臺服務器的存儲已無法滿足存儲需求。同時隨著客戶端的增加,單位時間內并發用戶會不斷增加,這會給服務器帶來巨大壓力,響應給客戶端的時間會大大增加。雖然以上瓶頸可以通過增加硬盤的方式擴大存儲,甚至采用磁盤陣列存儲,負載均衡等方式解決,但依然存在I/O讀寫瓶頸,硬件設備過于集中,硬件成本過高,網絡帶寬消耗過大等問題。
2.2 采用分布式基礎架構設計企業搜索引擎
分布式企業搜索引擎運行于一個集群環境,集群環境包含一個主節點Master和多臺子節點Slaver。主節點作為控制節點,負責維護DFS分布式文件系統的目錄結構以及MapReduce分布式計算的分發。由于主節點的重要性,可以使用性能較好的機架服務器,且為避免其失效,可以用另一臺機器Secondary Master作為備份。子節點作為分布式文件系統的存儲節點和分布式計算的子節點,其性能不做要求,任意一臺可運行的機器都可作為Slave,因此保證了子節點可無限擴充,即分布式文件系統的存儲可擴充性和分布式計算可并行性。
采用分布式基礎架構設計的企業搜索引擎,通過將原始數據和索引數據存儲于DFS中,有效的降低了I/O瓶頸和網絡帶寬瓶頸;將索引生成和搜索服務移動到數據節點,有效降低了網絡帶寬瓶頸,提高了并發性能。
2.2.1 索引文件的分布式存儲
根據分布式文件系統和分布式計算的思想,索引文件的生成和存儲可以采用這樣的設計思想來實現。
Master作為集群的主節點,包含負責任務分發的JobTracker和目錄節點NameNode。Slave作為集群的子節點,包含作業運行的TaskTracker和數據節點DataNode。
首先將待索引的文本數據存儲到分布式文件系統DFS中,并設計生成索引的索引Map函數。主節點Master的JobTracker負責將IndexMap函數分發到各子節點Slave上,每一臺Slave的TaskTracker負責運行IndexMap函數,將自己維護的文本數據生成索引文件,并存儲到分布式文件系統DFS中。
2.2.2 搜索的分布式計算
在索引文件被分布式存儲的基礎上,設計合理的Map/Reduce函數,可以實現高效的并行搜索。設計SearchMap函數在所有的Slave上并行搜索各自維護的索引文件,設計SearchReduce函數,將所有SearchMap函數產生的結果進行排序,得到最終結果。
當客戶端發起搜索請求時,主節點Master的JobTracker將SearchMap函數分發到所有Slave上,各Slave的TaskTracker對自己維護的索引數據運行SearchMap函數,并將未排序的搜索結果傳給負責Reduce的Slave運行SearchReduce函數,并行的對未排序的搜索結果排序,最后由一個Slave運行SearchReduce合并搜索結果,輸出最終搜索結果。
3 結束語
基于云計算的分布式文件系統和分布式計算以較低的硬件投入解決了全文搜索系統索引文件膨脹,網絡帶寬瓶頸以及磁盤I/O瓶頸等問題。為其提供了高效的數據存儲和并行計算服務。
參考文獻:
[1] Jeffrey Dean and Sanjay Ghemawat. MapReduce: Simplifed Data Processing on Large Clusters. Google, Inc.
[2] Sanjay Ghemawat, Howard Gobioff, and Shun-Tak Leung. The Google File System. Google, Inc.
[3] Tom White. Hadoop The Definitive Guide.
[4] 云計算七問七答 http://www.infoq.com/cn/articles/questions-about-cloud-computing.
[5] Linux上的云計算 http://www.ibm.com/developerworks/cn/linux/l-cloud-computing/index.html.