前言
我们可以在不关心原理的情况下使用Elasticsearch(以下简称ES),但要想用好ES,就必须熟知其内部原理。
为什么要阅读代码?在传统软件行业,技术文档非常丰富。当开展一个项目时,从需求分析,到概要设计、详细设计,每个步骤都有相应的文档,从项目的整体架构、技术方案选型,到流程图、类图,细化到每个接口及参数。在这种情况下,想要搞清楚系统原理,并不需要阅读代码,文档上什么都有。但是互联网产品迭代快,技术文档不全,想要搞清楚原理,只能阅读代码,相当于从代码中逆向理解设计思想。
通过分析源码,我们可以有以下收获:
理解设计思想 当我们面临要解决的问题或实现的目标时,往往有多种方案可以选择。无论表面上看起来多么简单的架构,其背后都经过了深思熟虑。思考一下为什么使用现在的方案?有没有更好的解决方案?
探究内部机制的原理 某个技术点是怎么实现的?
搞明白执行流程 某个过程是什么样的,都做了什么?有几步?先做什么,后做什么?
熟悉代码结构 如果需要进行二次开发,则给出代码入口和调用关系,有时候找到某个逻辑的代码实现要花很多时间。
学以致用 借鉴其设计理念,掌握其解决问题的方式和方法,将来面对类似的问题时可以参考。
本书结构
本书由四部分组成,第一部分为基础知识和环境准备(第1~2章);第二部分介绍 ES 的主要流程(第3~10章),包括集群启动流程、节点启动/关闭流程、选主流程、读写流程、搜索流程和索引恢复流程;第三部分主要介绍重要内部模块(第11~17章),包括gateway模块、allocation模块、Snapshot模块、Cluster模块、Transport模块和ThreadPool模块等;第四部分介绍优化和诊断方法(第18~22章),包括写入速度优化、搜索速度优化、磁盘使用量优化,以及在生产环境中的实际应用建议,第22章介绍常用的问题诊断方法,排查集群遇到的问题。
术语约定
ES中有一些特有的概念,这些概念对应的中文翻译约定如下:
· 分片(shard);
· 主分片(primary shard),简称P;
· 分片副本(特指数据的一个分片,无论主分片,还是副分片);
· 副分片(replica shard),简称R;
· 分片分配(shard allocation);
· 集群状态(cluster state);
· 分配决策(allocation decision);
· 分配感知(allocation awareness);
· 分配标识(allocation IDs);
· 追踪(tracking);
· 事务日志(translog);
· 同步集合(in-sync set)。
行文约定
虽然本书是一本源码分析类图书,但原则上尽量少贴代码,引用的代码只是为了说明原理,因此所引用的代码并不保证和源码完全一致,对非核心逻辑有所删减,同时在代码块中,函数参数可能被省略,省略的函数参数用“…”表示,如:
executeBulk(...);
在引用代码中的某个方法时,使用#号分隔类名与方法名:
类名#方法名
一个索引由许多分片组成。我们用如下方式表示索引website的第0个分片:
website[0]
联系
读者有任何意见和建议都可以联系作者,邮箱:elasticsearchbook@163.com。
本书配套网站:www.elasticsearchbook.cn。
致谢
感谢李欣杰和郭东东,他们带我走进搜索领域;感谢韩洪伟,他让我学到了很多搜索系统的知识。欣杰和老韩都是资深的搜索架构师,能够和优秀的团队共事是我的荣幸。感谢 ES 团队的同事段军义,我们互相学习,一起解决了很多麻烦的问题。感谢出版社的策划编辑陈晓猛先生,他为本书的写作提供了很多建设性意见,并且耐心地编校了本书,让本书得以顺利出版。
感谢我的妻子和三岁的女儿,我爱你们!
张超
读者服务
轻松注册成为博文视点社区用户(www.broadview.com.cn),扫码直达本书页面。
· 提交勘误:您对书中内容的修改意见可在 提交勘误处提交,若被采纳,将获赠博文视点社区积分(在您购买电子书时,积分可用来抵扣相应金额)。
· 交流互动:在页面下方 读者评论处留下您的疑问或观点,与我们和其他读者一同学习交流。
页面入口:http://www.broadview.com.cn/35216