您好,欢迎来到聚文网。 登录 免费注册
Elasticsearch源码解析与优化实战

Elasticsearch源码解析与优化实战

  • 字数: 432千字
  • 装帧: 平装
  • 出版社: 电子工业出版社
  • 作者: 张超
  • 出版日期: 2018-11-01
  • 商品条码: 9787121352164
  • 版次: 1
  • 开本: 16开
  • 页数: 343
  • 出版年份: 2018
定价:¥89 销售价:登录后查看价格  ¥{{selectedSku?.salePrice}} 
库存: {{selectedSku?.stock}} 库存充足
{{item.title}}:
{{its.name}}
精选
内容简介
本书介绍了Elasticsearch的系统原理,旨在帮助读者了解其内部原理、设计思想,以及在生产环境中如何正确地部署、优化系统。系统原理分两方面介绍,一方面详细介绍主要流程,例如启动流程、选主流程、恢复流程;另一方面介绍各重要模块的实现,以及模块之间的关系,例如gateway模块、allocation模块等。本书的很后一部分介绍如何优化写入速度、搜索速度等大家关心的实际问题,并提供了一些诊断问题的方法和工具供读者参考。
作者简介
张超,长期从事服务端和基础架构等研发工作,对搜索、分布式系统、高性能网络服务有浓厚的兴趣,喜欢探究技术本质,喜欢分析有深度的问题。目前就职于360企业安全集团基础大数据团队,负责平台内核研发工作。
目录
   第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将工程导入IntelliJIDEA

2.2调试Elasticsearch

2.2.1本地运行、调试项目

2.2.2远程调试

2.3代码书签和断点组

第3章集群启动流程

3.1选举主节点

3.2选举集群元信息

3.3allocation过程

3.4indexrecovery

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.1NodesFaultDetection事件处理

5.7.2MasterFaultDetection事件处理

5.8小结

第6章数据模型

6.1PacificA算法

6.1.1数据副本策略

6.1.2配置管理

6.1.3错误检测

6.2ES的数据副本模型

6.2.1基本写入模型

6.2.2写故障处理

6.2.3基本读取模型

6.2.4读故障处理

6.2.5引申的含义

6.2.6系统异常

6.3AllocationIDs

6.3.1安全地分配主分片

6.3.2将分配标记为陈旧

6.2.3一个例子

6.3.4不会丢失全部

6.4SequenceIDs

6.4.1PrimaryTerms和SequenceNumbers

6.4.2本地及全局检查点

6.4.3用于快速恢复(Recovery)

6.5_version

第7章写流程

7.1文档操作的定义

7.2可选参数

7.3Index/Bulk基本流程

7.4Index/Bulk详细流程

7.4.1协调节点流程

7.4.2主分片节点流程

7.4.3副分片节点流程

7.5I/O异常处理

7.5.1Engine关闭过程

7.5.2Master的对应处理

7.5.3异常流程总结

7.6系统特性

7.7思考

第8章GET流程

8.1可选参数

8.2GET基本流程

8.3GET详细分析

8.3.1协调节点

8.3.2数据节点

8.4MGET流程分析

8.5思考

第9章Search流程

9.1索引和搜索

9.1.1建立索引

9.1.2执行搜索

9.2searchtype

9.3分布式搜索过程

9.3.1协调节点流程

9.3.2执行搜索的数据节点流程

9.4小结

第10章索引恢复流程分析

10.1相关配置

10.2流程概述

10.3主分片恢复流程

10.4副分片恢复流程

10.4.1流程概述

10.4.2syncedflush机制

10.4.3副分片节点处理过程

10.4.4主分片节点处理过程

10.5recovery速度优化

10.6如何保证副分片和主分片一致

10.7recovery相关监控命令

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.3allocation模块结构概述

12.4allocators

12.5deciders

12.5.1负载均衡类

12.5.2并发控制类

12.5.3条件类

12.6核心reroute实现

12.6.1集群启动时reroute的触发时机

12.6.2流程分析

12.6.3gatewayAllocator

12.6.4shardsAllocator

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.1Lucene文件格式简介

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.1MasterService

14.2.2ClusterApplierService

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.2Transport总体架构

15.2.1网络层

15.2.2服务层

15.3REST解析和处理

15.4RPC实现

15.4.1RPC的注册和映射

15.4.2根据Action获取处理类

15.5思考与总结

第16章ThreadPool模块分析

16.1线程池类型

16.1.1fixed

16.1.2scaling

16.1.3direct

16.1.4fixed_auto_queue_size

16.2处理器设置

16.3查看线程池

16.3.1catthreadpool

16.3.2nodesinfo

16.3.3nodesstats

16.3.4nodeshotthreads

16.3.5Java的线程池结构

16.4ES的线程池实现

16.4.1ThreadPool类结构与初始化

16.4.2fixed类型线程池构建过程

16.4.3scaling类型线程池构建过程

16.4.4direct类型线程池构建过程

16.4.5fixed_auto_queue_size类型线程池构建过程

16.5其他线程池

16.6思考与总结

第17章Shrink原理分析

17.1准备源索引

17.2缩小索引

17.3Shrink的工作原理

17.3.1创建新索引

17.3.2创建硬链接

17.3.3硬链接过程源码分析

第18章写入速度优化

18.1translogflush间隔调整

18.2索引刷新间隔refresh_interval

18.3段合并优化

18.4indexingbuffer

18.5使用bulk请求

18.5.1bulk线程池和队列

18.5.2并发执行bulk请求

18.6磁盘间的任务均衡

18.7节点间的任务均衡

18.8索引过程调整和优化

18.8.1自动生成docID

18.8.2调整字段Mappings

18.8.3调整_source字段

18.8.4禁用_all字段

18.8.5对Analyzed的字段禁用Norms

18.8.6index_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预热全局序号(globalordinals)

19.10executionhint

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禁用docvalues

20.2.3不要使用默认的动态字符串映射

20.2.4观察分片大小

20.2.5禁用_source

20.2.6使用best_compression

20.2.7FourceMerge

20.2.8ShrinkIndex

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配置LinuxOOMKiller

21.3.3优化内核参数

21.4索引层

21.4.1使用全局模板

21.4.2索引轮转

21.4.3避免热索引分片不均

21.4.4副本数选择

21.4.5ForceMerge

21.4.6ShrinkIndex

21.4.7close索引

21.4.8延迟分配分片

21.4.9小心地使用fielddata

21.5客户端

21.5.1使用RESTAPI而非JavaAPI

21.5.2注意429状态码

21.5.3curl的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使用ProfileAPI定位慢查询

22.2使用ExplainAPI分析未分配的分片(UnassignedShards)

22.2.1诊断未分配的主分片

22.2.2诊断未分配的副分片

22.2.3诊断已分配的分片

22.3节点CPU使用率高

22.4节点内存使用率高

22.5SlowLogs

22.6分析工具

22.6.1I/O信息

22.6.2内存

22.6.3CPU信息

22.6.4网络连接和流量

22.7小结

附录A重大版本变化

蜀ICP备2024047804号

Copyright 版权所有 © jvwen.com 聚文网