Elasticsearch系列---Elasticsearch的基本概念及工做原理

基本概念

Elasticsearch有幾個核心的概念,花幾分鐘時間瞭解一下,有助於後面章節的學習。node

NRT

Near Realtime,近實時,有兩個層面的含義,一是從寫入一條數據到這條數據能夠被搜索,有一段很是小的延遲(大約1秒左右),二是基於Elasticsearch的搜索和分析操做,耗時能夠達到秒級。數據庫

Cluster

集羣,對外提供索引和搜索的服務,包含一個或多個節點,每一個節點屬於哪一個集羣是經過集羣名稱來決定的(默認名稱是elasticsearch),集羣名稱搞錯了後果很嚴重。命名建議是研發、測試環境、準生產、生產環境用不一樣的名稱增長區分度,例如研發使用es-dev,測試使用es-test,準生產使用es-stg,生產環境使用es-pro這樣的名字來區分。若是是中小型應用,集羣能夠只有一個節點。服務器

Elasticsearch集羣結構

Node

單獨一個Elasticsearch服務器實例稱爲一個node,node是集羣的一部分,每一個node有獨立的名稱,默認是啓動時獲取一個UUID做爲名稱,也能夠自行配置,node名稱特別重要,Elasticsearch集羣是經過node名稱進行管理和通訊的,一個node只能加入一個Elasticsearch集羣當中,集羣提供完整的數據存儲,索引和搜索的功能,它下面的每一個node分攤上述功能(每條數據都會索引到node上)。markdown

shard

分片,是單個Lucene索引,因爲單臺機器的存儲容量是有限的(如1TB),而Elasticsearch索引的數據可能特別大(PB級別,而且30GB/天的寫入量),單臺機器沒法存儲所有數據,就須要將索引中的數據切分爲多個shard,分佈在多臺服務器上存儲。利用shard能夠很好地進行橫向擴展,存儲更多數據,讓搜索和分析等操做分佈到多臺服務器上去執行,提高集羣總體的吞吐量和性能。shard在使用時比較簡單,只須要在建立索引時指定shard的數量便可,剩下的都交給Elasticsearch來完成,只是建立索引時一旦指定shard數量,後期就不能再更改了。數據結構

replica

索引副本,徹底拷貝shard的內容,shard與replica的關係能夠是一對多,同一個shard能夠有一個或多個replica,而且同一個shard下的replica數據徹底同樣,replica做爲shard的數據拷貝,承擔如下三個任務:架構

  1. shard故障或宕機時,其中一個replica能夠升級成shard。
  2. replica保證數據不丟失(冗餘機制),保證高可用。
  3. replica能夠分擔搜索請求,提高整個集羣的吞吐量和性能。

shard的全稱叫primary shard,replica全稱叫replica shard,primary shard數量在建立索引時指定,後期不能修改,replica shard後期能夠修改。默認每一個索引的primary shard值爲5,replica shard值爲1,含義是5個primary shard,5個replica shard,共10個shard。所以Elasticsearch最小的高可用配置是2臺服務器。併發

Index

索引,具備相同結構的文檔集合,相似於關係型數據庫的數據庫實例(6.0.0版本type廢棄後,索引的概念降低到等同於數據庫表的級別)。一個集羣裏能夠定義多個索引,如客戶信息索引、商品分類索引、商品索引、訂單索引、評論索引等等,分別定義本身的數據結構。索引命名要求所有使用小寫,創建索引、搜索、更新、刪除操做都須要用到索引名稱。elasticsearch

type

類型,本來是在索引(Index)內進行的邏輯細分,但後來發現企業研發爲了加強可閱讀性和可維護性,制訂的規範約束,同一個索引下不多還會再使用type進行邏輯拆分(如同一個索引下既有訂單數據,又有評論數據),於是在6.0.0版本以後,此定義廢棄。分佈式

Document

文檔,Elasticsearch最小的數據存儲單元,JSON數據格式,相似於關係型數據庫的表記錄(一行數據),結構定義多樣化,同一個索引下的document,結構儘量相同。高併發

工做原理

簡單地瞭解一下Elasticsearch的工做原理。

啓動過程

當Elasticsearch的node啓動時,默認使用廣播尋找集羣中的其餘node,並與之創建鏈接,若是集羣已經存在,其中一個節點角色特殊一些,叫coordinate node(協調者,也叫master節點),負責管理集羣node的狀態,有新的node加入時,會更新集羣拓撲信息。若是當前集羣不存在,那麼啓動的node就本身成爲coordinate node。node加入集羣過程

應用程序與集羣通訊過程

雖然Elasticsearch設置了Coordinate Node用來管理集羣,但這種設置對客戶端(應用程序)來講是透明的,客戶端能夠請求任何一個它已知的node,若是該node是集羣當前的Coordinate,那麼它會將請求轉發到相應的Node上進行處理,若是該node不是Coordinate,那麼該node會先將請求轉交給Coordinate Node,再由Coordinate進行轉發,搓着各node返回的數據所有交由Coordinate Node進行彙總,最後返回給客戶端。應用程序與Elasticsearch集羣通訊過程

集羣內node有效性檢測

正常工做時,Coordinate Node會按期與拓撲結構中的Node進行通訊,檢測實例是否正常工做,若是在指定的時間週期內,Node無響應,那麼集羣會認爲該Node已經宕機。集羣會從新進行均衡:

  1. 從新分配宕機的Node,其餘Node中有該Node的replica shard,選出一個replica shard,升級成爲primary shard。
  2. 從新安置新的shard。
  3. 拓撲更新,分發給該Node的請求從新映射到目前正常的Node上。

小結

本篇章簡單的向你們介紹了一下Elasticsearch的基本概念和工做原理,讓你們有個比較淺顯的認識,後續會結合實際的例子,來了解一下Elasticsearch基本的用法。

專一Java高併發、分佈式架構,更多技術乾貨分享與心得,請關注公衆號:Java架構社區Java架構社區

相關文章
相關標籤/搜索