当前位置:主页 > 计算机电子书 > 程序设计 > Elasticsearch下载
Elasticsearch源码解析与优化实战

Elasticsearch源码解析与优化实战 PDF 高质量版

  • 更新:2023-08-13
  • 大小:192.7 MB
  • 类别:Elasticsearch
  • 作者:张超
  • 出版:电子工业出版社
  • 格式:PDF

  • 资源介绍
  • 学习心得
  • 相关内容

《Elasticsearch源码解析与优化实战》是一本关于搜索引擎Elasticsearch的深入解析和优化的实践指南。作为一个开源的全文搜索引擎,Elasticsearch在大规模集群应用时常常面临各种问题,难以逐一分析和处理。这本书通过对Elasticsearch中重要模块的分析,揭示了其实现原理和机制,帮助读者深入理解搜索优化的关键点。除了解析源码,本书还提供了实践经验和示例,使得读者不仅能知其然,还能知其所以然。无论是对于有Elasticsearch使用经验的开发者,还是对搜索引擎感兴趣的技术人员,这本书都是一本不可多得的宝典。

Elasticsearch源码解析与优化实战

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 控制相

资源获取

资源地址1:https://pan.baidu.com/s/1z3di6vjU0bFUXaPt0SWxJbA

相关资源

网友留言