spring-data-elasticsearch_之_ElasticSearch_架構初探

来源:http://www.cnblogs.com/iyulang/archive/2017/06/08/6962850.html
-Advertisement-
Play Games

文檔(Document)、索引(Index)、類型(Type)文檔三要素 文檔(Document) 文檔,在面向對象觀念就是一個對象。在 ES 裡面,是一個大 JSON 對象,是指定了唯一 ID 的最底層或者根對象。文檔的位置由 _index、_type 和 _id 唯一標識。 索引(Index)... ...


原文鏈接

本文目錄
一、Elasticsearch 基本術語
1.1 文檔(Document)、索引(Index)、類型(Type)文檔三要素
1.2 集群(Cluster)、節點(Node)、分片(Shard)分散式三要素
二、Elasticsearch 工作原理
2.1 文檔存儲的路由
2.2 如何健康檢查
2.3 如何水平擴容
三、小結

 

推薦:Spring For All 社區 http://spring4all.com

 

一、Elasticsearch 基本術語

1.1 文檔(Document)、索引(Index)、類型(Type)文檔三要素
文檔(Document)
文檔,在面向對象觀念就是一個對象。在 ES 裡面,是一個大 JSON 對象,是指定了唯一 ID 的最底層或者根對象。文檔的位置由 _index、_type 和 _id 唯一標識。

索引(Index)
索引,用於區分文檔成組,即分到一組的文檔集合。索引,用於存儲文檔和使文檔可被搜索。比如項目存索引 project 裡面,交易存索引 sales 等。

類型(Type)
類型,用於區分索引中的文檔,即在索引中對數據邏輯分區。比如索引 project 的項目數據,根據項目類型 ui 項目、插畫項目等進行區分。

和關係型資料庫 MySQL 做個類比:
Document 類似於 Record
Type 類似於 Table
Index 類似於 Database

1.2 集群(Cluster)、節點(Node)、分片(Shard)分散式三要素
集群(Cluster)
伺服器集群大家都知道,這裡 ES 也是類似的。多個 ElasticSearch 運行實例(節點)組合的組合體是 ElasticSearch 集群。
ElasticSearch 是天然的分散式,通過水平擴容為集群添加更多節點。
集群是去中心化的,有一個主節點(Master)。主節點是動態選舉,因此不會出現單點故障。

那分片和節點的配置呢?
節點(Node)
一個 ElasticSearch 運行實例就是節點。順著集群來,任何節點都可以被選舉成為主節點。主節點負責集群內所以變更,比如索引的增加、刪除等。所以集群不會因為主節點流量的增大成為瓶頸。因為任何節點都會成為主節點。
下麵有 3 個節點,第 1 個節點有:2 個主分片和 1 個副分片。如圖:

elas_node.png



那麼,只有一個節點的 ElasticSearch 服務會存在瓶頸。如圖:

elas_0201.png



分片(Shard)
分片,是 ES 節點中最小的工作單元。分片僅僅保存全部數據的一部分,分片的集合是 ES 的索引。分片包括主分片和副分片,主分片是副分片的拷貝。主分片和副分片地工作基本沒有大的區別。
在索引中全文搜索,然後會查詢到每個分片,將每個分配的結果進行全局地收集處理,並返回。

二、Elasticsearch 工作原理

2.1 文檔存儲的路由
當索引到一個文檔(如:報價系統),具體的文檔數據(如:報價數據)會存儲到一個分片。具體文檔數據會被切分,並分別存儲在分片 1 或者 分片 2 … 
那麼如何確定存在哪個分片呢?
存儲路由過程由下麵地公式決定:

shard = hash(routing) % number_of_primary_shards


routing 是可變值,支持自定義,預設文檔 _id。
hash 函數生成數字,經過取餘演算法得到餘數,那麼這個餘數就是分片的位置。
這是不是有點負載均衡的類似。
 
2.2 如何健康檢查
集群名,集群的健康狀態

GET http://127.0.0.1:9200/_cluster/stats 
{
   "cluster_name":          "elasticsearch",
   "status":                "green", 
   "timed_out":             false,
   "number_of_nodes":       1,
   "number_of_data_nodes":  1,
   "active_primary_shards": 0,
   "active_shards":         0,
   "relocating_shards":     0,
   "initializing_shards":   0,
   "unassigned_shards":     0
}


status 欄位是需要我們關心的。狀態可能是下列三個值之一:

green
所有的主分片和副本分片都已分配。你的集群是 100% 可用的。
yellow
所有的主分片已經分片了,但至少還有一個副本是缺失的。不會有數據丟失,所以搜索結果依然是完整的。高可用會弱化把 yellow 想象成一個需要及時調查的警告。
red
至少一個主分片(以及它的全部副本)都在缺失中。這意味著你在缺少數據:搜索只能返回部分數據,而分配到這個分片上的寫入請求會返回一個異常。



active_primary_shards 集群中的主分片數量
active_shards 所有分片的彙總值
relocating_shards 顯示當前正在從一個節點遷往其他節點的分片的數量。通常來說應該是 0,不過在 Elasticsearch 發現集群不太均衡時,該值會上漲。比如說:添加了一個新節點,或者下線了一個節點。
initializing_shards 剛剛創建的分片的個數。
unassigned_shards 已經在集群狀態中存在的分片。
 
2.3 如何水平擴容
主分片在索引創建已經確定。讀操作可以同時被主分片和副分片處理。因此,更多的分片,會擁有更高的吞吐量。自然,需要增加更多的硬體資源支持吞吐量。
說明,這裡無法提高性能,因為每個分片獲得的資源會變少。
動態調整副本分片數,按需伸縮集群,比如把副本數預設值為 1 增加到 2:

PUT /blogs/_settings
{
   "number_of_replicas" : 2
}



三、小結
簡單初探了下 ElasticSearch 的相關內容。後面會主要落地到實戰,關於  spring-data-elasticsearch 這塊的實戰。

最後,《 深入淺出 spring-data-elasticsearch 》小連載目錄如下:
深入淺出 spring-data-elasticsearch - ElasticSearch 架構初探(一)
深入淺出 spring-data-elasticsearch - 概述(二)
深入淺出 spring-data-elasticsearch - 基本案例詳解(三)
深入淺出 spring-data-elasticsearch - 複雜案例詳解(四)
深入淺出 spring-data-elasticsearch - 架構原理以及源碼淺析(五)
 

資料:
官方《Elasticsearch: 權威指南》
https://www.elastic.co/guide/c ... .html
 


本文作者: 泥瓦匠
原文鏈接: http://www.bysocket.com
版權歸作者所有,轉載請註明出處

原文鏈接


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、ext4文件系統在SSD硬碟是最快的 2、IO的演算法修改成noop,操作系統本身不做處理,讓SSD本身處理 echo noop > /sys/block/sdb/queue/scheduler 3、echo 4096 > read_ahead_kb 表示事先預讀數據的Kb數,預設是128 4、e ...
  • 一、NFS服務簡介 NFS是Network File System的縮寫,即網路文件系統。一種使用於分散式文件系統的協定,由sun公司開發,於1984年向外公佈。功能:通過網路讓不同的機器、不同的操作系統能夠彼此分享個別數據,讓應用程式在客戶端通過網路訪問位於服務端磁碟中的數據,是在類Unix系統間 ...
  • 有些文件不喜歡被修改,可以用chattr命令把他鎖定。如lnmp中現在目錄的文件.user.ini,虛擬主機中不喜歡客戶刪除某個目錄等等。 ...
  • 現代操作系統普遍採用虛擬記憶體管理(Virtual Memory Management)機制,這需要處理器中的MMU(Memory Management Unit,記憶體管理單元)提供支持。首先引入 PA 和 VA 兩個概念。 1.PA(Physical Address) 物理地址 如果處理器沒有MMU ...
  • HMODULE getCurrModuleHandle(){ MEMORY_BASIC_INFORMATION info; ::VirtualQuery((LPCVOID)(&getCurrModuleHandle), &info, sizeof(info)); return (HMODULE)in ...
  • 自動安裝wdcp腳本,支持Centos 很多會員在購買伺服器後不會掛載和安裝環境,抽空測試了個腳本,提供給像我一樣的小白使用,希望你會喜歡! ...
  • Linux磁碟管理 I/O Ports: I/O設備地址; 一切皆文件: open(), read(), write(), close() 塊設備:block,存取單位“塊”,磁碟 字元設備:char,存取單位“字元”,鍵盤 設備文件:關聯至一個設備驅動程式,進而能夠跟與之對應硬體設備進行通信; 設 ...
  • 終端: 用戶與主機交互,必然用到的設備; 物理終端:直接接入本機的顯示器和鍵盤設備;/dev/console 虛擬終端:附加在物理終端之上的以軟體方式虛擬實現的終端,CentOS 6預設啟動6個虛擬終端 Ctrl+Alt+F#: [1,6] 圖形終端:附加在物理終端之上的以軟體方式虛擬實現的終端,但 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...