展开全部

主编推荐语

深入解析Elasticsearch原理、配置项,提供实际应用优化建议和大规模测试验证。

内容简介

本书介绍了Elasticsearch的系统原理,旨在帮助读者了解其内部原理、设计思想,以及在生产环境中如何正确地部署、优化系统。系统原理分两方面介绍,一方面详细介绍主要流程,例如启动流程、选主流程、恢复流程;另一方面介绍各重要模块的实现,以及模块之间的关系,例如gateway模块、allocation模块等。

本书的最后一部分介绍如何优化写入速度、搜索速度等大家关心的实际问题,并提供了一些诊断问题的方法和工具供读者参考。

目录

  • 版权信息
  • 作者简介
  • 前言
  • 第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 重大版本变化
展开全部

评分及书评

尚无评分
目前还没人评分

出版方

电子工业出版社

电子工业出版社成立于1982年10月,是国务院独资、工信部直属的中央级科技与教育出版社,是专业的信息技术知识集成和服务提供商。经过三十多年的建设与发展,已成为一家以科技和教育出版、期刊、网络、行业支撑服务、数字出版、软件研发、软科学研究、职业培训和教育为核心业务的现代知识服务集团。出版物内容涵盖了电子信息技术的各个分支及工业技术、经济管理、科普与少儿、社科人文等领域,综合出版能力位居全国出版行业前列。