Elasticsearch系列—Elasticsearch的基本概念及工作原理

基本概念

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

NRT

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

Cluster

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

Node

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

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廢棄后,索引的概念下降到等同於數據庫表的級別)。一個集群里可以定義多個索引,如客戶信息索引、商品分類索引、商品索引、訂單索引、評論索引等等,分別定義自己的數據結構。
索引命名要求全部使用小寫,建立索引、搜索、更新、刪除操作都需要用到索引名稱。

type

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

Document

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

工作原理

簡單地了解一下Elasticsearch的工作原理。

啟動過程

當Elasticsearch的node啟動時,默認使用廣播尋找集群中的其他node,並與之建立連接,如果集群已經存在,其中一個節點角色特殊一些,叫coordinate node(協調者,也叫master節點),負責管理集群node的狀態,有新的node加入時,會更新集群拓撲信息。如果當前集群不存在,那麼啟動的node就自己成為coordinate node。

應用程序與集群通信過程

雖然Elasticsearch設置了Coordinate Node用來管理集群,但這種設置對客戶端(應用程序)來說是透明的,客戶端可以請求任何一個它已知的node,如果該node是集群當前的Coordinate,那麼它會將請求轉發到相應的Node上進行處理,如果該node不是Coordinate,那麼該node會先將請求轉交給Coordinate Node,再由Coordinate進行轉發,搓着各node返回的數據全部交由Coordinate Node進行匯總,最後返回給客戶端。

集群內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架構社區

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

※評比南投搬家公司費用收費行情懶人包大公開

您可能也會喜歡…