1. 程式人生 > >ES:Elasticsearch的架構(二)

ES:Elasticsearch的架構(二)

Gateway層

es用來儲存索引檔案的一個檔案系統且它支援很多型別,例如:本地磁碟、共享儲存(做snapshot的時候需要用到)、hadoop的hdfs分散式儲存、亞馬遜的S3。它的主要職責是用來對資料進行長持久化以及整個叢集重啟之後可以通過gateway重新恢復資料。

Distributed Lucene Directory

Gateway上層就是一個lucene的分散式框架,lucene是做檢索的,但是它是一個單機的搜尋引擎,像這種es分散式搜尋引擎系統,雖然底層用lucene,但是需要在每個節點上都執行lucene進行相應的索引、查詢以及更新,所以需要做成一個分散式的執行框架來滿足業務的需要。

四大模組元件

districted lucene directory之上就是一些es的模組,Index Module是索引模組,就是對資料建立索引也就是通常所說的建立一些倒排索引等;Search Module是搜尋模組,就是對資料進行查詢搜尋;Mapping模組是資料對映與解析模組,就是你的資料的每個欄位可以根據你建立的表結構通過mapping進行對映解析,如果你沒有建立表結構,es就會根據你的資料型別推測你的資料結構之後自己生成一個mapping,然後都是根據這個mapping進行解析你的資料;River模組在es2.0之後應該是被取消了,它的意思表示是第三方外掛,例如可以通過一些自定義的指令碼將傳統的資料庫(mysql)等資料來源通過格式化轉換後直接同步到es叢集裡,這個river大部分是自己寫的,寫出來的東西質量參差不齊,將這些東西整合到es中會引發很多內部bug,嚴重影響了es的正常應用,所以在es2.0之後考慮將其去掉。

Discovery、Script

es4大模組元件之上有 Discovery模組:es是一個叢集包含很多節點,很多節點需要互相發現對方,然後組成一個叢集包括選主的,這些es都是用的discovery模組,預設使用的是 Zen,也可是使用EC2;es查詢還可以支撐多種script即指令碼語言,包括mvel、js、python等等。

 Transport協議層
 
再上一層就是es的通訊介面Transport,支援的也比較多:Thrift、Memcached以及Http,預設的是http,JMX就是java的一個遠端監控管理框架,因為es是通過java實現的。

RESTful介面層

最上層就是es暴露給我們的訪問介面,官方推薦的方案就是這種Restful介面,直接傳送http請求,方便後續使用nginx做代理、分發包括可能後續會做許可權的管理,通過http很容易做這方面的管理。如果使用java客戶端它是直接呼叫api,在做負載均衡以及許可權管理還是不太好做。