Lily是什么
Lily是一個可擴展的數據倉庫。用于數據的存儲和搜索。Lily是一個分布式系統,她并不是白手起家的,她依賴于兩個已有的OpenSource軟件,一個是HBase, 另一個是SOLR. 同時Lily對于使用者提供自己的操作接口,稱作Lily API.
Lily的優勢在于她強大的搜索能力,無論是文本匹配還是全文索引,通通都能搞定。 但我覺得Lily在獲取這些優勢的同時付出了相當大的代價,最主要的代價就是系統的復雜性。想想看,為了能夠使用Lily,你需要安裝并維護以下系 統:HDFS, HBase, Zookeeper, SOLR, Lily. 這些系統任何一個都可能讓Operation Team抓狂,更不用說他們混在一起了。
Lily的架構
1.總體架構
Lily使用分布式的架構,這包括兩方面:1) Lily擁有多個Node,不同的Node完成不同的工作,相互合作共同完成任務。2) Lily擁有多個Node,每個Node都完成一樣的工作,這樣可以保證可擴展性和容錯性。
Lily的大致架構可用這張圖來表示:
先將這張圖分成左右兩邊,左邊是Lily的系統,右邊是Lily依賴的系統,從上至下是HBase, HDFS, SOLR, Zookeeper. 后面我們會分析每個Lily Node的內部結構,現在我們先來分析一下Lily的每個依賴:
Zookeeper, 每個Lily Node用Zookeeper來發布自己的存在,就好像HBase RegionServer一樣。Client可以從Zookeeper獲取當前有多少個Lily Node在提供服務。
SOLR,為全文索引提供服務,具體的使用方法是Lily Node將插入的內容同步輸出到SOLR Node,SOLR自己生成全文索引,Client直接call SOLR(不經過Lily Node)獲取搜索結果。
HDFS,它和Lily Node其實沒有直接聯系,換句話說Lily可以忽視他的存在。HDFS的作用就是存儲HBase的數據,或者直接供Client使用,但這和Lily沒什么關聯。
HBase,和Lily Node的聯系最為緊密,Lily Node作為中間層,接到Client的寫入請求以后將數據寫入HBase,并加上自己的數據以實現Secondary Index. 這個實現可以說和GMS很相似,但Lily的設計更為復雜。
2. Lily Node的內部結構
多個Lily Node組成了Lily的系統,我們通過觀察每個Node內部的結構來了解Lily的工作原理。這張圖描述了每個Lily Node的內部結構:
這張圖稍微有點復雜,我們略過依賴的module,看看Lily Node內部有哪些module: Repository, WAL, MQ(Message Queue), Indexer, LinkIndex.
Repository:
這個是Client操作的入口,Client使用基于Avro的協議(類似于PB)操作Repository,而Repository使用 HBase標準的java API操作HBase. 除了基本的HBase操作,Repository還有添加Secondary Index信息的任務。為了保證Index信息和原始信息的最終一致性,需要用到WAL. Repository在每次操作的最開始寫WAL log, 然后原始操作,寫WAL, 再Index操作,寫WAL. 一步一標記,失敗了就把沒做的事情重做一遍. 都做完了寫入MQ, 將任務轉交個后續處理模塊.
WAL:
前面已經介紹過了,這個模塊是保證最終一致性用的. 它和HBase的WAL沒什么聯系,實現方式也不同。不過我覺得如果想讓WAL有保證的化應該將log寫入分布式文件系統中,比如HDFS. 但Lily的做法貌似更絕,使用HBase的一個Table來存儲WAL,簡單,但是加大了依賴性,而且可能會產生更多相互依賴的問題。
Message Queue:
為什么要有Message Queue?因為有些操作不需要當時完成,丟到MQ里面由后續模塊異步慢慢完成好了, 比如說將新的內容同步到SOLR. 因此MQ產生了,如何實現?還是老辦法,用HBase里面的一個Table來實現。
Indexer:
Indexer的主要功能是同步SOLR,進而實現全文索引。因為操作SOLR使用的是公開的API,且Lily不管查詢工作,所以Indexer也不會很復雜。
LinkIndex:
根據Index來查找具體類容的模塊,Repository和Indexer都會用到,具體實現細節還需要研究源碼才能得知.
總結
說到這里大家對于Lily因該已經有大概的認識了. 我這里總結一下Lily的優缺點.
優點:支持多種搜索,設計上沒有大的缺陷.
缺點:復雜,管理困難,client必須使用Lily的API才能享受其功能,對于HBase相當依賴卻又不能融入其中。
對于我們來說也許做一個輕量級的Secondary Index真的有些意義。
?
轉自:http://www.spnguru.com/?p=548
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
