随笔分类 -  elasticsearch 源码 阅读笔记

这一系列是对之前阅读elasticsearch源码的总结。阅读好的源码就像阅读一本好书,会从中受益不少。
摘要:Create index Action 阅读全文
posted @ 2017-05-30 23:41 zziawan 阅读(5064) 评论(0) 推荐(0) 编辑
摘要:merge是lucene的底层机制,merge过程会将index中的segment进行合并,生成更大的segment,提高搜索效率。segment是lucene索引的一种存储结构,每个segment都是一部分数据的完整索引,它是lucene每次flush或merge时候形成。每次flush就是将内存 阅读全文
posted @ 2017-05-20 22:49 zziawan 阅读(4572) 评论(0) 推荐(0) 编辑
摘要:Lucene索引的一个特点就filed,索引以field组合。这一特点为索引和搜索提供了很大的灵活性。elasticsearch则在Lucene的基础上更近一步,它可以是 no scheme。实现这一功能的秘密就Mapping。Mapping是对索引各个字段的一种预设,包括索引与分词方式,是否存储等 阅读全文
posted @ 2017-05-08 23:24 zziawan 阅读(3858) 评论(1) 推荐(1) 编辑
摘要:elasticsearch对于索引中的数据操作如读写get等接口都封装在engine中,同时engine还封装了索引的读写控制,如流量、错误处理等。engine是离lucene最近的一部分。 engine的实现结构如下所示: engine接口有三个实现类,主要逻辑都在InternalEngine中。 阅读全文
posted @ 2017-05-03 23:36 zziawan 阅读(1702) 评论(1) 推荐(0) 编辑
摘要:跟大多数分布式系统一样,es也通过临时写入写操作来保证数据安全。因为lucene索引过程中,数据会首先据缓存在内存中直到达到一个量(文档数或是占用空间大小)才会写入到磁盘。这就会带来一个风险,如果在写入磁盘前系统崩溃,那么这些缓存数据就会丢失。es通过translog解决了这个问题,每次写操作都会写 阅读全文
posted @ 2017-05-01 23:06 zziawan 阅读(9553) 评论(7) 推荐(1) 编辑
摘要:从本篇开始,对elasticsearch的介绍将进入数据功能部分(index),这一部分包括索引的创建,管理,数据索引及搜索等相关功能。对于这一部分的介绍,首先对各个功能模块的分析,然后详细分析数据索引和搜索的整个流程。 这一部分从代码包结构上可以分为:index, indices及lucene(c 阅读全文
posted @ 2017-04-30 23:57 zziawan 阅读(1302) 评论(0) 推荐(0) 编辑
摘要:虽然在刚开始源码概述时把代码分为分布式和数据两部分,但是它们的界限并不明显。之前这几篇可以说是这两部分的衔接。我们在快速接近数据(index)部分。本篇分析一下之前分析cluster遗留下的问题:Metadata与routing,虽然这两部分的代码在cluster中,但是却直接和index相关。 m 阅读全文
posted @ 2017-04-18 00:05 zziawan 阅读(772) 评论(0) 推荐(0) 编辑
摘要:Action这一部分主要是数据(索引)的操作和部分集群信息操作。 所有的请求通过client转发到对应的action上然后再由对应的TransportAction来执行相关请求。如果请求能在本机上执行则在本机上执行,否则使用Transport进行转发到对应的节点。action support部分是对 阅读全文
posted @ 2017-04-05 23:48 zziawan 阅读(1141) 评论(0) 推荐(1) 编辑
摘要:上一篇从结构上分析了action的,本篇将以index action为例仔分析一下action的实现方式。 再概括一下action的作用:对于每种功能(如index)action都会包括两个基本的类*action(IndexAction)和Transport*action(TransportInde 阅读全文
posted @ 2017-04-03 00:45 zziawan 阅读(5483) 评论(0) 推荐(1) 编辑
摘要:上一篇介绍了elasticsearch的client结构,client只是一个门面,在每个方法后面都有一个action来承接相应的功能。但是action也并非是真正的功能实现者,它只是一个代理,它的真正实现者是transportAction.本篇就对action及transportAction的实现 阅读全文
posted @ 2017-03-28 23:41 zziawan 阅读(2279) 评论(0) 推荐(1) 编辑
摘要:elasticsearch通过构造一个client对外提供了一套丰富的java调用接口。总体来说client分为两类cluster信息方面的client及数据(index)方面的client。这两个大类由可以分为通用操作和admin操作两类。以下是client的继承关系(1.5版本,其它版本可能不一 阅读全文
posted @ 2017-03-27 23:28 zziawan 阅读(2654) 评论(0) 推荐(1) 编辑
摘要:上一篇通过 ElectMasterService源码,分析了master选举的原理的大部分内容:master候选节点ID排序保证选举一致性及通过设置最小可见候选节点数目避免brain split。节点排序后选举只能保证局部一致性,如果发生节点接收到了错误的集群状态就会选举出错误的master,因此必 阅读全文
posted @ 2017-03-21 00:07 zziawan 阅读(4740) 评论(0) 推荐(1) 编辑
摘要:master作为cluster的灵魂必须要有,还必须要唯一,否则集群就出大问题了。因此master选举在cluster分析中尤为重要。对于这个问题我将分两篇来分析。第一篇也就是本篇,首先会简单说一说mater选举的一些算法,及elasticsearch的选举原理。第二篇也就是下一篇,会结合zenDi 阅读全文
posted @ 2017-03-19 01:30 zziawan 阅读(21234) 评论(1) 推荐(5) 编辑
摘要:ping是集群发现的基本手段,通过在网络上广播或者指定ping某些节点获取集群信息,从而可以找到集群的master加入集群。zenDiscovery实现了两种凭机制:广播与单播。本篇将详细分析一些这MulticastZenPing机制的实现为后面的集群发现和master选举做好铺垫。 首先看一下广播 阅读全文
posted @ 2017-03-15 23:30 zziawan 阅读(2548) 评论(1) 推荐(0) 编辑
摘要:elasticsearch cluster实现了自己发现机制zen。Discovery功能主要包括以下几部分内容:master选举,master错误探测,集群中其它节点探测,单播多播ping。本篇会首先概述以下Discovery这一部分的功能,然后介绍节点检测。其它内容会在接下来介绍。 discov 阅读全文
posted @ 2017-03-13 00:17 zziawan 阅读(1417) 评论(0) 推荐(0) 编辑
摘要:elasticsearch nettyTransport 的请求发送及处理过程分析 阅读全文
posted @ 2017-03-10 00:07 zziawan 阅读(5947) 评论(1) 推荐(0) 编辑
摘要:nettytransport的启动过程 阅读全文
posted @ 2017-03-09 00:13 zziawan 阅读(5778) 评论(0) 推荐(0) 编辑
摘要:上一篇通过clusterservice对cluster做了一个简单的概述, 应该能够给大家一个初步认识。本篇将对cluster的代码组成进行详细分析,力求能够对cluster做一个更清晰的描述。cluster作为多个节点的协同工作机制,它需要节点,节点间通信,各个节点的状态及各个节点上的数据(ind 阅读全文
posted @ 2017-03-06 23:43 zziawan 阅读(1774) 评论(0) 推荐(0) 编辑
摘要:在源码概述中我们分析过,elasticsearch源码从功能上可以分为分布式功能和数据功能,接下来这几篇会就分布式功能展开。这里首先会对cluster作简单概述,然后对cluster所涉及的主要功能详细分析。 elasticsearch的集群功能代码在cluster包中,通过ClusterServi 阅读全文
posted @ 2017-03-05 23:14 zziawan 阅读(2476) 评论(0) 推荐(0) 编辑
摘要:elasticsearch的启动过程是根据配置和环境组装需要的模块并启动的过程。这一过程就是通过guice注入各个功能模块并启动这些模块,从而得到一个功能完整的node。正如之前所说elasticsearch的模块化特点,它的各个功能都是独立实现,然后实现通过guice对外提供。首先简单的说一下gu 阅读全文
posted @ 2017-03-04 22:13 zziawan 阅读(1124) 评论(0) 推荐(0) 编辑