深入浅出剖析Elasticsearch的工作原理

1. 前言

随着日志量的增加,es在不停的调整,结构层面的冷热数据分离、master和client节点的分离并引入部落节点,es集群层面的index优化、flush优化、merge优化、内存熔断优化,系统层面的GC、文件描述符、进程数、关闭交换分区调整等等,其实es优化是一个法无定法的事儿,并不是死板的调固定参数,而是要不停的去试各种参数值在自己的业务场景下哪个表现最好,但是总结起来,首先了解了es的数据写入和读取过程,才知道如何下手,我们做的所有调优都是为了更快的索引速度、更快更大数据量的搜索性能、更稳定的服务,下面从上下行的角度做个介绍。

2. 上行数据写入过程

画这张图还是费了一些精力的,试图将生产环境里真实的写入过程进行完全的抽象并展现出来,es里面有很多的概念,这个网上有很多介绍,不展开说。从这张图看,首先数据的写入不依赖master节点,其实读取也是一样的,每一个节点都可以作为协调节点处理请求,并将数据路由到数据该有的节点,每个节点都可以查询到集群和文档的详细信息,那master的作用是什么呢?es集群master节点的作用是维护元信息和管理集群状态,master节点只是维护元信息并不是所有元信息的存放点,它负责了删除和创建索引等系列操作,但数据的写入和数据的查询都不需要经过master节点的。
在这里插入图片描述
数据写入的整个过程如下:数据写入请求——>协调节点接收后数据路由处理——>存入对应数据节点的index buffer并记录translog日志——>经过refresh刷新为segment存入文件缓存并变为可搜索——>数据永久刷新到磁盘并清空translog日志。到此一次数据就写完了,同时后台根据merge策略进行段的合并操作,在一个索引中,segment越少,搜索效率越高,一个shard最小可以merge合并成一个segment,segment就是倒序索引。

3. 下行数据写入搜索过程

从整体原理上看,下行数据的搜索没有数据写入那么复杂,es集群也是类似于map reduce的方式进行查询的,分层聚合计算,中间会有打分制等算法,最后在client节点做结果汇聚返回给客户端。全过程大致如下,当客户端节点收到search请求后,计算出牵涉到的shard并将请求分发出去,收到请求的节点进行第一步的汇聚,然后将汇聚结果返回到client节点,client节点再次处理后,将结果发给客户端。

4. 总结

知道了es的写入和查询原理后,就可以在相应的各环节做配置调整,每个环节点都是一个可以做的优化点,道法自然而术变万千。


转自:http://www.net-add.com/a/zidonghuayunwei/rizhifenxi/2017/0713/55.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值