Elasticsearch源码解析与优化实战

《Elasticsearch源码解析与优化实战》

  • 出版社:电子工业出版社
  • ISBN:9787121352164
  • 版次:1
  • 商品编码:12462703
  • 品牌:博文视点
  • 包装:平装
  • 开本:16开
  • 出版时间:2018-11-01
  • 用纸:胶版纸
  • 页数:360
  • 字数:432000
  • 正文语种:中文
基本介绍书籍目录点评信息
  • 书籍内容

    本书介绍了Elasticsearch的系统原理,旨在帮助读者了解其内部原理、设计思想,以及在生产环境中如何正确地部署、优化系统。系统原理分两方面介绍,一方面详细介绍主要流程,例如启动流程、选主流程、恢复流程;另一方面介绍各重要模块的实现,以及模块之间的关系,例如gateway模块、allocation模块等。本书的最后一部分介绍如何优化写入速度、搜索速度等大家关心的实际问题,并提供了一些诊断问题的方法和工具供读者参考。
    本书适合对Elasticsearch进行改进的研发人员、平台运维人员,对分布式搜索感兴趣的朋友,以及在使用Elasticsearch过程中遇到问题的人们。

    编辑推荐

    适读人群 :本书适合对Elasticsearch进行改进的研发人员、平台运维人员,对分布式搜索感兴趣的朋友,以及在使用Elasticsearch过程中遇到问题的人们。
    Elasticsearch 是一个开源的全文搜索引擎,很多用户对于大规模集群应用时遇到的各种问题难以分析处理,或者知其然而不知其所以然。本书分析 Elasticsearch 中重要模块及其实现原理和机制,让用户深入理解相关重要配置项意义,应对系统故障时不再迷茫。另外,本书提供实际应用场景中一些常见问题的优化建议,这些建议都是作者经过大规模测试及应用验证过的。

    作者简介

    长期从事服务端和基础架构等研发工作,对搜索、分布式系统、高性能网络服务有浓厚的兴趣,喜欢探究技术本质,喜欢分析有深度的问题。目前就职于360企业安全集团基础大数据团队,负责平台内核研发工作。
  • 第1章 走进Elasticsearch1.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 客户端API1.4 主要内部模块简介1.4.1 模块结构1.4.2 模块管理第2章 准备编译和调试环境2.1 编译源码2.1.1 准备JDK和Gradle2.1.2 下载源代码2.1.3 编译项目,打包2.1.4 将工程导入IntelliJ IDEA2.2 调试Elasticsearch2.2.1 本地运行、调试项目2.2.2 远程调试2.3 代码书签和断点组第3章 集群启动流程3.1 选举主节点3.2 选举集群元信息3.3 allocation过程3.4 index recovery3.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 选举临时Master5.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 IDs6.3.1 安全地分配主分片6.3.2 将分配标记为陈旧6.2.3 一个例子6.3.4 不会丢失全部6.4 Sequence IDs6.4.1 Primary Terms和Sequence Numbers6.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 type9.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 触发allocation11.5 思考第12章 allocation模块分析12.1 什么是allocation12.2 触发时机12.3 allocation模块结构概述12.4 allocators12.5 deciders12.5.1 负载均衡类12.5.2 并发控制类12.5.3 条件限制类12.6 核心reroute实现12.6.1 集群启动时reroute的触发时机12.6.2 流程分析12.6.3 gatewayAllocator12.6.4 shardsAllocator12.7 从gateway到allocation流程的转换12.8 从allocation流程到recovery流程的转换12.9 思考第13章 Snapshot模块分析13.1 仓库13.2 快照13.2.1 创建快照13.2.2 获取快照信息13.2.3 快照status13.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 MasterService14.2.2 ClusterApplierService14.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 任务管理API14.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 fixed16.1.2 scaling16.1.3 direct16.1.4 fixed_auto_queue_size16.2 处理器设置16.3 查看线程池16.3.1 cat thread pool16.3.2 nodes info16.3.3 nodes stats16.3.4 nodes hot threads16.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_interval18.3 段合并优化18.4 indexing buffer18.5 使用bulk请求18.5.1 bulk线程池和队列18.5.2 并发执行bulk请求18.6 磁盘间的任务均衡18.7 节点间的任务均衡18.8 索引过程调整和优化18.8.1 自动生成doc ID18.8.2 调整字段Mappings18.8.3 调整_source字段18.8.4 禁用_all字段18.8.5 对Analyzed的字段禁用Norms18.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-merge19.9 预热全局序号(global ordinals)19.10 execution hint19.11 预热文件系统cache19.12 转换查询表达式19.13 调节搜索请求中的batched_reduce_size19.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 values20.2.3 不要使用默认的动态字符串映射20.2.4 观察分片大小20.2.5 禁用_source20.2.6 使用best_compression20.2.7 Fource Merge20.2.8 Shrink Index20.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 关闭swap21.3.2 配置Linux OOM Killer21.3.3 优化内核参数21.4 索引层21.4.1 使用全局模板21.4.2 索引轮转21.4.3 避免热索引分片不均21.4.4 副本数选择21.4.5 Force Merge21.4.6 Shrink Index21.4.7 close索引21.4.8 延迟分配分片21.4.9 小心地使用fielddata21.5 客户端21.5.1 使用REST API而非Java API21.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 避免使用多个_type21.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 Logs22.6 分析工具22.6.1 I/O信息22.6.2 内存22.6.3 CPU信息22.6.4 网络连接和流量22.7 小结附录A 重大版本变化
  • 精彩书评

    非常高兴看到国内能有一本研究Elasticsearch源码的书出现,Elasticsearch现在已经变得非常流行,掌握这门技术是大势所趋。Elasticsearch虽然上手简单,但是想要成为Elasticsearch的专家可不容易,而阅读本书就是一个很好的开始。
    Elastic中文社区创始人,Elastic技术布道师 曾勇(Medcl)
    Elasticsearch作为开源的分布式搜索引擎,近几年开始在国内加速流行。由于常年混迹Elastic中文社区,从社区用户提交的形形色色的问题中,我看到国内用户大多对该技术还缺乏深层次的理解,遇到问题时往往举手无措。比如如何架构集群?如何正确设置集群参数和数据模型?如何优化数据读写?如何应对灾难并迅速恢复数据?
    《Elasticsearch源码解析与优化实战》让我眼前一亮!本书内容整理自作者的ES源码分析系列博客,而我也曾通过阅读该系列博客,加深了对ES内部运作机理的认识。如果你希望从一个ES工程师转变为ES技术专家、架构师,相信这本书会给你带来极大的帮助。
    携程旅行网技术保障部,系统研发总监 吴晓刚
    ES作为一个大小公司都广泛使用的开源搜索引擎,其中文方面的系统的资料却少得可怜。当初我们公司遇到ES的问题时,也找不到太好的资料解决,只好求助朋友。
    有幸第一时间拜读本书样稿,书中系统和详细地介绍了ES的概念、各个流程、优化方案、应用实践、各种故障诊断等。难能可贵的是,每一部分都有作者的思考与总结。发现当初在ES上踩过的各种坑,本书中都有详细的解释。
    阿里巴巴前研究员,阿里巴巴前技术负责人 吴雪军
微信公众号

热门文章

更多