Elasticsearch 源碼解析與優化實戰

張超

下單後立即進貨 (約4週~6週)

買這商品的人也買了...

商品描述

本書介紹了Elasticsearch的系統原理,旨在幫助讀者瞭解其內部原理、設計思想,以及在生產環境中如何正確地部署、優化系統。系統原理分兩方面介紹,一方面詳細介紹主要流程,例如啟動流程、選主流程、恢復流程;另一方面介紹各重要模塊的實現,以及模塊之間的關系,例如gateway模塊、allocation模塊等。本書的最後一部分介紹如何優化寫入速度、搜索速度等大家關心的實際問題,並提供了一些診斷問題的方法和工具供讀者參考。

作者簡介

在奇虎360企業安全集團工作,基礎大數據團隊任Elasticsearch 開發工程師,對Elasticsearch有深入的研究經驗

目錄大綱

第1章走進Elasticsearch 
1.1基本概念和原理
1.1.1索引結構
1.1.2分片(shard)
1.1.3動態更新索引
1.1.4近實時搜索
1.1.5段合併
1.2集群內部原理
1.2.1集群節點角色
1.2.2集群健康狀態
1.2.3集群狀態
1.2.4集群擴容
1.3客戶端API 
1.4主要內部模塊簡介
1.4.1模塊結構
1.4.2模塊管理
第2章準備編譯和調試環境
2.1編譯源碼
2.1.1準備JDK和Gradle 
2.1.2下載源代碼
2.1.3編譯項目,打包
2.1.4將工程導入IntelliJ IDEA 
2.2調試Elasticsearch 
2.2.1本地運行、調試項目
2.2.2遠程調試
2.3代碼書籤和斷點組
第3章集群啟動流程
3.1選舉主節點
3.2選舉集群元信息
3.3 allocation過程
3.4 index recovery 
3.5集群啟動日誌
3.6小結
第4章節點的啟動和關閉
4.1啟動流程做了什麼
4.2啟動流程分析
4.2.1啟動腳本
4.2.2解析命令行參數和配置文件
4.2.3加載安全配置
4.2.4檢查內部環境
4.2.5檢測外部環境
4.2.6啟動內部模塊
4.2 .7啟動keepalive線程
4.3節點關閉流程
4.4關閉流程分析
4.5分片讀寫過程中執行關閉
4.6主節點被關閉
4.7小結
第5章選主流程
5.1設計思想
5.2為什麼使用主從模式
5.3選舉算法
5.4相關配置
5.5流程概述
5.6流程分析
5.6.1選舉臨時Master 
5.6.2投票與得票的實現
5.6.3確立Master或加入集群
5.7節點失效檢測
5.7.1 NodesFaultDetection事件處理
5.7.2 MasterFaultDetection事件處理
5.8小結
第6章數據模型
6.1 PacificA算法
6.1.1數據副本策略
6.1.2配置管理
6.1.3錯誤檢測
6.2 ES的數據副本模型
6.2.1基本寫入模型
6.2.2寫故障處理
6.2.3基本讀取模型
6.2.4讀故障處理
6.2.5引申的含義
6.2.6系統異常
6.3 Allocation IDs 
6.3.1安全地分配主分片
6.3.2將分配標記為陳舊
6.2.3一個例子
6.3.4不會丟失全部
6.4 Sequence IDs 
6.4.1 Primary Terms和Sequence Numbers 
6.4.2本地及全局檢查點
6.4.3用於快速恢復(Recovery)
6.5 _version 
第7章寫流程
7.1文檔操作的定義
7.2可選參數
7.3 Index/Bulk基本流程
7.4 Index/Bulk詳細流程
7.4.1協調節點流程
7.4.2主分片節點流程
7.4.3副分片節點流程
7.5 I/O異常處理
7.5.1 Engine關閉過程
7.5.2 Master的對應處理
7.5.3異常流程總結
7.6系統特性
7.7思考
第8章GET流程
8.1可選參數
8.2 GET基本流程
8.3 GET詳細分析
8.3.1協調節點
8.3.2數據節點
8.4 MGET流程分析
8.5思考
第9章Search流程
9.1索引和搜索
9.1.1建立索引
9.1.2執行搜索
9.2 search type 
9.3分佈式搜索過程
9.3.1協調節點流程
9.3.2執行搜索的數據節點流程
9.4小結
第10章索引恢復流程分析
10.1相關配置
10.2流程概述
10.3主分片恢復流程
10.4副分片恢復流程
10.4.1流程概述
10.4.2 synced flush機制
10.4.3副分片節點處理過程
10.4.4主分片節點處理過程
10.5 recovery速度優化
10.6如何保證副分片和主分片一致
10.7 recovery相關監控命令
10.8小結
第11章gateway模塊分析
11.1元數據
11.2元數據的持久化
11.3元數據的恢復
11.4元數據恢復流程分析
11.4.1選舉集群級和索引級別的元數據
11.4.2觸發allocation 
11.5思考
第12章allocation模塊分析
12.1什麼是allocation 
12.2觸發時機
12.3 allocation模塊結構概述
12.4 allocators 
12.5 deciders 
12.5.1負載均衡類
12.5.2並發控制類
12.5.3條件限制類
12.6核心reroute實現
12.6.1集群啟動時reroute的觸發時機
12.6.2流程分析
12.6.3 gatewayAllocator 
12.6.4 shardsAllocator 
12.7從gateway到allocation流程的轉換
12.8從allocation流程到recovery流程的轉換
12.9思考
第13章Snapshot模塊分析
13.1倉庫
13.2快照
13.2.1創建快照
13.2.2獲取快照信息
13.2.3快照status 
13.2.4取消、刪除快照和恢復操作
13.3從快照恢復
13.3.1部分恢復
13.3.2恢復過程中更改索引設置
13.3.3監控恢復進度
13.4創建快照的實現原理
13.4.1 Lucene文件格式簡介
13.4.2協調節點流程
13.4.3主節點流程
13.4.4數據節點流程
13.5刪除快照實現原理
13.5.1協調節點流程
13.5. 2主節點流程
13.6思考與總結
第14章Cluster模塊分析
14.1集群狀態
14.2內部封裝和實現
14.2.1 MasterService 
14.2.2 ClusterApplierService 
14.2.3線程池
14.3提交集群任務
14.3.1內部模塊如何提交任務
14.3.2任務提交過程實現
14.4集群任務的執行過程
14.5集群狀態的發布過程
14.5.1增量發布的實現原理
14.5.2二段提交總流程
14.5.3發布過程
14.5.4提交過程
14.5.5異常處理
14.6應用集群狀態
14.7查看等待執行的集群任務
14.8任務管理API 
14.8.1列出運行中的任務
14.8.2取消任務
14.9思考與總結
第15章Transport模塊分析
15.1配置信息
15.1.1傳輸模塊配置
15.1.2通用網絡配置
15.2 Transport總體架構
15.2.1網絡層
15.2.2服務層
15.3 REST解析和處理
15.4 RPC實現
15.4.1 RPC的註冊和映射
15.4.2根據Action獲取處理類
15.5思考與總結
第16章ThreadPool模塊分析
16.1線程池類型
16.1.1 fixed 
16.1.2 scaling 
16.1.3 direct 
16.1.4 fixed_auto_queue_size 
16.2處理器設置
16.3查看線程池
16.3.1 cat thread pool 
16.3.2 nodes info 
16.3.3 nodes stats 
16.3.4 nodes hot threads 
16.3.5 Java的線程池結構
16.4 ES的線程池實現
16.4.1 ThreadPool類結構與初始化
16.4.2 fixed類型線程池構建過程
16.4.3 scaling類型線程池構建過程
16.4.4 direct類型線程池構建過程
16.4.5 fixed_auto_queue_size類型線程池構建過程
16.5其他線程池
16.6思考與總結
第17章Shrink原理分析
17.1準備源索引
17.2縮小索引
17.3 Shrink的工作原理
17.3.1創建新索引
17.3.2創建硬鏈接
17.3.3硬鏈接過程源碼分析
第18章寫入速度優化
18.1 translog flush間隔調整
18.2索引刷新間隔refresh_interval 
18.3段合併優化
18.4 indexing buffer 
18.5使用bulk請求
18.5.1 bulk線程池和隊列
18.5.2並發執行bulk請求
18.6磁盤間的任務均衡
18.7節點間的任務均衡
18.8索引過程調整和優化
18.8.1自動生成doc ID 
18.8.2調整字段Mappings 
18.8.3調整_source字段
18.8.4禁用_ all字段
18.8.5對Analyzed的字段禁用Norms 
18.8.6 index_options設置
18.9參考配置
18.10思考與總結
第19章搜索速度的優化
19.1為文件系統cache預留足夠的內存
19.2使用更快的硬件
19.3文檔模型
19.4預索引數據
19.5字段映射
19.6避免使用腳本
19.7優化日期搜索
19.8為只讀索引執行force-merge 
19.9預熱全局序號(global ordinals)
19.10 execution hint 
19.11預熱文件系統cache 
19.12轉換查詢表達式
19.13調節搜索請求中的batched_reduce_size 
19.14使用近似聚合
19.15深度優先還是廣度優先
19.16限制搜索請求的分片數
19.17利用自適應副本選擇(ARS)提升ES響應速度
第20章磁盤使用量優化
20.1預備知識
20.1.1元數據字段
20.1.2索引映射參數
20.2優化措施
20.2.1禁用對你來說不需要的特性
20.2.2禁用doc values 
20.2.3不要使用默認的動態字符串映射
20.2.4觀察分片大小
20.2.5禁用_source
20.2.6使用best_compression 
20.2.7 Fource Merge 
20.2.8 Shrink Index 
20.2.9數值類型長度夠用就好
20.2.10使用索引排序來排列類似的文檔
20.2.11在文檔中以相同的順序放置字段
20.3測試數據
第21章綜合應用實踐
21.1集群層
21.1.1規劃集群規模
21.1.2單節點還是多節點部署
21.1.3移除節點
21.1.4獨立部署主節點
21.2節點層
21.2.1控制線程池的隊列大小
21.2.2為系統cache保留一半物理內存
21.3系統層
21.3.1關閉swap 
21.3.2配置Linux OOM Killer 
21.3.3優化內核參數
21.4索引層
21.4.1使用全局模板
21.4.2索引輪轉
21.4.3避免熱索引分片不均
21.4.4副本數選擇
21.4.5 Force Merge 
21.4.6 Shrink Index 
21.4.7 close索引
21.4.8延遲分配分片
21.4.9小心地使用fielddata
21.5客戶端
21.5.1使用REST API而非Java API 
21.5.2注意429狀態碼
21.5.3 curl的HEAD請求
21.5.4了解你的搜索計劃
21.5.5為讀寫請求設置比較長的超時時間
21.6讀寫
21.6.1避免搜索操作返回巨大的結果集
21.6.2避免索引巨大的文檔
21.6.3避免使用多個_type 
21.6.4避免使用_all字段
21.6.5避免將請求發送到同一個協調節點
21.7控制相關度
第22章故障診斷
22.1使用Profile API定位慢查詢
22.2使用Explain API分析未分配的分片(Unassigned Shards)
22.2.1診斷未分配的主分片
22.2.2診斷未分配的副分片
22.2 .3診斷已分配的分片
22.3節點CPU使用率高
22.4節點內存使用率高
22.5 Slow Logs 
22.6分析工具
22.6.1 I/O信息
22.6.2內存
22.6.3 CPU信息
22.6.4網絡連接和流量
22.7小結
附錄A重大版本變化