摘要:當(dāng)前企業(yè)搜索引擎多采用基于全文檢索技術(shù)設(shè)計(jì),隨著索引的膨脹和客戶(hù)端并發(fā)查詢(xún)的增加,有限的物理存儲(chǔ)、CPU周期、內(nèi)存容量和網(wǎng)絡(luò)帶寬帶來(lái)了巨大瓶頸。隨著云計(jì)算概念的提出和發(fā)展,為企業(yè)搜索引擎提供了更加優(yōu)化的解決方案。本文將簡(jiǎn)要介紹現(xiàn)階段基于分布式存儲(chǔ)和分布式計(jì)算的云計(jì)算研究成果,以及其在企業(yè)搜索引擎中的應(yīng)用。
關(guān)鍵詞:云計(jì)算;分布式存儲(chǔ);分布式文件系統(tǒng);分布式計(jì)算;企業(yè)搜索引擎;全文檢索
中圖分類(lèi)號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):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 云計(jì)算概述
1.1 什么是云計(jì)算
云計(jì)算是一種動(dòng)態(tài)的易擴(kuò)展的且通常是通過(guò)互聯(lián)網(wǎng)提供虛擬化的資源計(jì)算方式,用戶(hù)不需要了解云內(nèi)部的細(xì)節(jié),也不必具有云內(nèi)部的專(zhuān)業(yè)知識(shí),或直接控制基礎(chǔ)設(shè)施。云計(jì)算包括架構(gòu)即服務(wù)(IaaS),平臺(tái)即服務(wù)(PaaS)和軟件即服務(wù)(SaaS)以及其他依賴(lài)于互聯(lián)網(wǎng)滿(mǎn)足客戶(hù)計(jì)算需求的技術(shù)趨勢(shì)。云計(jì)算服務(wù)通常提供通用的通過(guò)瀏覽器訪問(wèn)的在線商業(yè)應(yīng)用,軟件和數(shù)據(jù)存儲(chǔ)在服務(wù)器上。
1.1.1 現(xiàn)有云計(jì)算服務(wù)
現(xiàn)有云計(jì)算服務(wù)可分為兩類(lèi):
虛擬化技術(shù)。通過(guò)對(duì)硬件的虛擬化,最大程度上利用CPU資源和內(nèi)存,通過(guò)出售虛擬機(jī)和計(jì)算能力獲得商業(yè)利益。例如Amazon EC2提供的彈性計(jì)算云服務(wù)和Amazon S3提供的存儲(chǔ)服務(wù)。
打包的計(jì)算方案。通過(guò)提供分布式存儲(chǔ)和分布式計(jì)算服務(wù),最大程度上利用集群中的計(jì)算節(jié)點(diǎn),提供分布式并行計(jì)算能力。例如Google App Engine。
1.1.2 現(xiàn)有云計(jì)算分類(lèi)
從產(chǎn)業(yè)類(lèi)型對(duì)云計(jì)算進(jìn)行分類(lèi),主要有這三類(lèi):
SaaS:Software as a Service 軟件即服務(wù),通過(guò)Internet提供軟件的模式,用戶(hù)向提供商租用基于Web的軟件來(lái)管理企業(yè)經(jīng)營(yíng)活動(dòng),且無(wú)需對(duì)軟件進(jìn)行維護(hù),服務(wù)提供商會(huì)全權(quán)管理和維護(hù)軟件。例如Google Docs,Salesforce.com。
PaaS:Platform as a Service平臺(tái)即服務(wù),提供分布式存儲(chǔ)和分布式計(jì)算平臺(tái)給系統(tǒng)管理員和開(kāi)發(fā)人員,以為其構(gòu)建、測(cè)試及部署定制應(yīng)用程序。例如Google App Engine,AWS S3(Amazon Web Services Simple Storage Service) Amazon存儲(chǔ)服務(wù),Microsoft Azure。
IaaS:Infrastructure as a Service架構(gòu)即服務(wù),提供了核心計(jì)算資源和網(wǎng)絡(luò)架構(gòu)等基礎(chǔ)設(shè)施的服務(wù)。例如,AWS EC2(Amazon Web Service Elastic Compute Cloud) Amazon彈性計(jì)算云。
1.2 從分布式基礎(chǔ)架構(gòu)理解云
分布式基礎(chǔ)架構(gòu)起源于Google,基于Google的分布式基礎(chǔ)架構(gòu)的理論,可以將云計(jì)算理解為提供了分布式文件系統(tǒng)和分布式計(jì)算的運(yùn)行環(huán)境,用戶(hù)可以通過(guò)編程,設(shè)計(jì)可分布式并行計(jì)算的程序,其計(jì)算數(shù)據(jù)來(lái)源和結(jié)果都存儲(chǔ)于分布式文件系統(tǒng)中。
1.2.1 分布式文件系統(tǒng)
分布式文件系統(tǒng)Distributed File System(DFS)采用主從架構(gòu),一個(gè)分布式文件系統(tǒng)由唯一一個(gè)目錄節(jié)點(diǎn)NameNode(主節(jié)點(diǎn)),和多個(gè)數(shù)據(jù)節(jié)點(diǎn)DataNode(子節(jié)點(diǎn))組成。分布式文件系統(tǒng)對(duì)外表現(xiàn)為一個(gè)普通的文件系統(tǒng),用戶(hù)可以用文件名去存取文件,而實(shí)際上這個(gè)文件是被分成不同的數(shù)據(jù)塊,這些數(shù)據(jù)塊就是存儲(chǔ)在數(shù)據(jù)節(jié)點(diǎn)上面。
一個(gè)典型的分布式文件系統(tǒng)集群部署,是由一臺(tái)性能較好的機(jī)器運(yùn)行目錄節(jié)點(diǎn),而集群里的其他機(jī)器每臺(tái)上運(yùn)行一個(gè)數(shù)據(jù)節(jié)點(diǎn)。唯一的目錄節(jié)點(diǎn)的設(shè)計(jì)大大簡(jiǎn)化了整個(gè)體系結(jié)果,目錄節(jié)點(diǎn)負(fù)責(zé)分布式文件系統(tǒng)里面所有元數(shù)據(jù)的仲裁和存儲(chǔ),這樣的設(shè)計(jì)是數(shù)據(jù)不會(huì)脫離目錄節(jié)點(diǎn)的控制。
1.2.2 分布式計(jì)算
MapReduce源于函數(shù)式編程模型中的兩項(xiàng)核心操作:Map和Reduce。Map是把一組數(shù)據(jù)一對(duì)一的映射為另外的一組數(shù)據(jù),其映射的規(guī)則由一個(gè)Map函數(shù)來(lái)指定。Reduce是對(duì)一組數(shù)據(jù)進(jìn)行歸約,這個(gè)歸約的規(guī)則由一個(gè)Reduce函數(shù)指定。Map是一個(gè)把數(shù)據(jù)分開(kāi)的過(guò)程,Reduce則是把分開(kāi)的數(shù)據(jù)合并的過(guò)程。
面對(duì)復(fù)雜計(jì)算,采用分而治之的策略,即Divide/Conquer,通過(guò)把復(fù)雜計(jì)算切分,使這些切分后的映射(Map)運(yùn)算高度平行,再將Map后的結(jié)果根據(jù)Key進(jìn)行規(guī)約(Reduce)運(yùn)算,得到最終結(jié)果。
2 分布式企業(yè)搜索引擎
2.1 企業(yè)搜索引擎
2.1.1 企業(yè)搜索引擎簡(jiǎn)介
企業(yè)搜索引擎是基于全文搜索技術(shù)設(shè)計(jì)的軟件系統(tǒng)。全文搜索是指計(jì)算機(jī)索引程序基于用戶(hù)字典解析并文本數(shù)據(jù)流,對(duì)每一個(gè)被切分出來(lái)的詞組建立索引,標(biāo)示該詞在文本中出現(xiàn)的次數(shù)和位置。當(dāng)用戶(hù)查詢(xún)時(shí),檢索程序就根據(jù)事先建立的索引進(jìn)行查詢(xún),并將查詢(xún)的結(jié)果根據(jù)相關(guān)度排序后反饋給用戶(hù)的檢索技術(shù)。
企業(yè)搜索引擎包含了兩個(gè)核心模塊,即索引引擎和搜索引擎。索引引擎負(fù)責(zé)生成索引文件,在開(kāi)始工作前,需要對(duì)輸入的結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)進(jìn)行文本提取轉(zhuǎn)換為文本數(shù)據(jù)流,當(dāng)文本數(shù)據(jù)流送入索引引擎時(shí),通過(guò)調(diào)用文本分析工具對(duì)其實(shí)現(xiàn)切分詞組,并生成索引文件。搜索引擎是作為客戶(hù)端進(jìn)行搜索的接口,當(dāng)客戶(hù)端提交查詢(xún)關(guān)鍵詞后,搜索引擎調(diào)用文本分析工具對(duì)查詢(xún)關(guān)鍵詞實(shí)現(xiàn)切分詞組,并生成數(shù)個(gè)或關(guān)系的查詢(xún)請(qǐng)求,通過(guò)訪問(wèn)索引文件進(jìn)行查詢(xún),返回滿(mǎn)足查詢(xún)條件的經(jīng)過(guò)相關(guān)度排序的命中結(jié)果集。
2.1.2 企業(yè)搜索引擎現(xiàn)狀
目前企業(yè)使用的全文搜索引擎基本采用的是B/S架構(gòu),一般部署于一臺(tái)web應(yīng)用服務(wù)器上,對(duì)企業(yè)內(nèi)網(wǎng)的office文檔、pdf文檔、domino數(shù)據(jù)庫(kù)、結(jié)構(gòu)化數(shù)據(jù)庫(kù)進(jìn)行索引,甚至使用了網(wǎng)頁(yè)采集對(duì)外網(wǎng)網(wǎng)頁(yè)進(jìn)行采集索引。隨著索引數(shù)據(jù)的膨脹,單臺(tái)服務(wù)器的存儲(chǔ)已無(wú)法滿(mǎn)足存儲(chǔ)需求。同時(shí)隨著客戶(hù)端的增加,單位時(shí)間內(nèi)并發(fā)用戶(hù)會(huì)不斷增加,這會(huì)給服務(wù)器帶來(lái)巨大壓力,響應(yīng)給客戶(hù)端的時(shí)間會(huì)大大增加。雖然以上瓶頸可以通過(guò)增加硬盤(pán)的方式擴(kuò)大存儲(chǔ),甚至采用磁盤(pán)陣列存儲(chǔ),負(fù)載均衡等方式解決,但依然存在I/O讀寫(xiě)瓶頸,硬件設(shè)備過(guò)于集中,硬件成本過(guò)高,網(wǎng)絡(luò)帶寬消耗過(guò)大等問(wèn)題。
2.2 采用分布式基礎(chǔ)架構(gòu)設(shè)計(jì)企業(yè)搜索引擎
分布式企業(yè)搜索引擎運(yùn)行于一個(gè)集群環(huán)境,集群環(huán)境包含一個(gè)主節(jié)點(diǎn)Master和多臺(tái)子節(jié)點(diǎn)Slaver。主節(jié)點(diǎn)作為控制節(jié)點(diǎn),負(fù)責(zé)維護(hù)DFS分布式文件系統(tǒng)的目錄結(jié)構(gòu)以及MapReduce分布式計(jì)算的分發(fā)。由于主節(jié)點(diǎn)的重要性,可以使用性能較好的機(jī)架服務(wù)器,且為避免其失效,可以用另一臺(tái)機(jī)器Secondary Master作為備份。子節(jié)點(diǎn)作為分布式文件系統(tǒng)的存儲(chǔ)節(jié)點(diǎn)和分布式計(jì)算的子節(jié)點(diǎn),其性能不做要求,任意一臺(tái)可運(yùn)行的機(jī)器都可作為Slave,因此保證了子節(jié)點(diǎn)可無(wú)限擴(kuò)充,即分布式文件系統(tǒng)的存儲(chǔ)可擴(kuò)充性和分布式計(jì)算可并行性。
采用分布式基礎(chǔ)架構(gòu)設(shè)計(jì)的企業(yè)搜索引擎,通過(guò)將原始數(shù)據(jù)和索引數(shù)據(jù)存儲(chǔ)于DFS中,有效的降低了I/O瓶頸和網(wǎng)絡(luò)帶寬瓶頸;將索引生成和搜索服務(wù)移動(dòng)到數(shù)據(jù)節(jié)點(diǎn),有效降低了網(wǎng)絡(luò)帶寬瓶頸,提高了并發(fā)性能。
2.2.1 索引文件的分布式存儲(chǔ)
根據(jù)分布式文件系統(tǒng)和分布式計(jì)算的思想,索引文件的生成和存儲(chǔ)可以采用這樣的設(shè)計(jì)思想來(lái)實(shí)現(xiàn)。
Master作為集群的主節(jié)點(diǎn),包含負(fù)責(zé)任務(wù)分發(fā)的JobTracker和目錄節(jié)點(diǎn)NameNode。Slave作為集群的子節(jié)點(diǎn),包含作業(yè)運(yùn)行的TaskTracker和數(shù)據(jù)節(jié)點(diǎn)DataNode。
首先將待索引的文本數(shù)據(jù)存儲(chǔ)到分布式文件系統(tǒng)DFS中,并設(shè)計(jì)生成索引的索引Map函數(shù)。主節(jié)點(diǎn)Master的JobTracker負(fù)責(zé)將IndexMap函數(shù)分發(fā)到各子節(jié)點(diǎn)Slave上,每一臺(tái)Slave的TaskTracker負(fù)責(zé)運(yùn)行IndexMap函數(shù),將自己維護(hù)的文本數(shù)據(jù)生成索引文件,并存儲(chǔ)到分布式文件系統(tǒng)DFS中。
2.2.2 搜索的分布式計(jì)算
在索引文件被分布式存儲(chǔ)的基礎(chǔ)上,設(shè)計(jì)合理的Map/Reduce函數(shù),可以實(shí)現(xiàn)高效的并行搜索。設(shè)計(jì)SearchMap函數(shù)在所有的Slave上并行搜索各自維護(hù)的索引文件,設(shè)計(jì)SearchReduce函數(shù),將所有SearchMap函數(shù)產(chǎn)生的結(jié)果進(jìn)行排序,得到最終結(jié)果。
當(dāng)客戶(hù)端發(fā)起搜索請(qǐng)求時(shí),主節(jié)點(diǎn)Master的JobTracker將SearchMap函數(shù)分發(fā)到所有Slave上,各Slave的TaskTracker對(duì)自己維護(hù)的索引數(shù)據(jù)運(yùn)行SearchMap函數(shù),并將未排序的搜索結(jié)果傳給負(fù)責(zé)Reduce的Slave運(yùn)行SearchReduce函數(shù),并行的對(duì)未排序的搜索結(jié)果排序,最后由一個(gè)Slave運(yùn)行SearchReduce合并搜索結(jié)果,輸出最終搜索結(jié)果。
3 結(jié)束語(yǔ)
基于云計(jì)算的分布式文件系統(tǒng)和分布式計(jì)算以較低的硬件投入解決了全文搜索系統(tǒng)索引文件膨脹,網(wǎng)絡(luò)帶寬瓶頸以及磁盤(pán)I/O瓶頸等問(wèn)題。為其提供了高效的數(shù)據(jù)存儲(chǔ)和并行計(jì)算服務(wù)。
參考文獻(xiàn):
[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] 云計(jì)算七問(wèn)七答 http://www.infoq.com/cn/articles/questions-about-cloud-computing.
[5] Linux上的云計(jì)算 http://www.ibm.com/developerworks/cn/linux/l-cloud-computing/index.html.