利用開源的 Apache Solr 搜尋引擎構建 RESTful 基礎儲存服務
前言
搜尋引擎已經成為我們生活的組成部分,對很多人來是已經是每天生活 的必須品。無論是 Internet 的搜尋引擎,例如 Google、Yahoo 們,還是服務於企業的 私人搜尋引擎,它們都已經成為我們獲得資訊的必要手段。搜尋引擎優秀的檢索效能無 疑曾經、且還在給我們留下越來越深刻的印象,而搜尋引擎整合各種各樣資源的能力同 樣令我們刮目相看——無論是私人的資料庫、還是晦澀的檔案伺服器,甚至 是您的案頭系統。搜尋引擎是如此的令人印象深刻,那麼作為最貼近我們人類思維方式 的一種服務形式,它在隨時隨地、快捷的為我們檢索資訊以外,搜尋引擎還可以為我們 做什嗎?
問題的提出
想象一下每天都在發生改變的 Internet:每過一天 ,就會有越來越多的容納人類智慧財富的網站、網頁連入 Internet 與人分享;每時每 刻都有大大小小、各種搜尋引擎的爬蟲們(Crawler)不知疲倦的訪問各個 Internet 站 點,它們讀取、下載網頁後,根據越來越複雜的索引技術對其進行分析,將分析結果緩 存下來,為各種各樣檢索需求提供高效能的服務。
Internet 中每個網頁除了自 身包含的內容以外,還有各種各樣指向外部資源的連結,這些外部連結資源所包含的內 容一般是連結源頁面的內容的補充、詳細說明或參考資源,這些外部資源頁面本身同樣 也會包含有指向其他資源的連結,外部連結的頁面內容和連結源頁面內容一起,描述某 一個主題。實際上,只要 Internet 上的每個網頁都有通向外部資源的連結,那麼隨便 從哪個頁面開始,遍曆所有的連結,就可以訪問到 Internet 的每個網頁。
互聯 網儲存了各種各樣的海量資源,而搜尋引擎給我們提供了訪問這些資源的介面,不過這 個介面現在只能提供檢索服務,那麼一個很簡單的問題是自然而然的:搜尋引擎是否還 可以為我們提供儲存服務?假如現在我們把 Internet 倒過來——想象一下 :如果搜尋引擎不僅僅提供檢索各個網頁資訊的服務,還提供將資訊儲存到 “Internet 的各個網頁”的服務,即將各個網站、網頁作為儲存資訊的容器 、來提供資訊儲存服務,那麼這是不是一個理想的分布式、近乎無限擴充的基礎儲存服 務系統?
靈感來源
讓我們先看看人類的大腦結構,雖然現階段人類對大 腦的結構和運作方式的瞭解還不是那麼全面,但是最基本的結構我們還是知道的:人類 的大腦中有數千億的神經元,各個神經元可能同數以萬計的神經元通過樹突、軸突串連 。當外界的刺激訊號傳遞到某一個神經元時,根據樹突和軸突的閥值,受刺激的神經元 可能會將刺激訊號傳遞到與之相關的其他神經元,以此類推,很顯然,這是一個類似鏈 式反應的系統。可能隨便一個簡單的外界刺激訊號,就會引起大腦中無數的神經元產生 各種各樣的訊號,這些訊號在傳遞和互動過程中互相作用和影響,這大概就是人類智慧 的來源吧。如果把 Internet 中的每一個網頁看作大腦中的一個神經元,而網頁中通向 外部的連結相當於神經元之間的聯絡(例如樹突和軸突),那麼 Internet 也就可以看 作是人類智慧的儲存系統。
本文的目的
本文對使用搜尋引擎作為儲存服 務的思路的實現方法做了簡單的分析,並基於開源的 Apache Solr 項目構建一個基礎存 儲服務系統,在此基礎上結合一個很簡單的 BLOG 網站的例子對儲存服務的結構和使用 進行了說明。希望本文所探討的思路能對那些迫切需要大規模、高擴充性儲存服務的應 用有所啟發。
基於搜尋引擎的基礎儲存服務
為了說明基於搜尋引擎的基礎儲存服務的構成 ,首先需要對搜尋引擎的角色變化有所瞭解:
圖 1. 傳統的網路服務中搜尋引擎 扮演的角色