elastic search(二)
es用途
elastic search作为一个近实时搜索引擎,功能是很强大的,她有很多RDBMS(传统数据库管理系统)所没有的功能(各自处理的领域不同,各有各的特色)。那么,什么是近实时搜索?默认情况下它能在1秒内,完成文档的索引构建以及被搜索到。虽然不是硬实时,但已经很快了,因此称为近实时搜索引擎。
es架构介绍
首先来看下elastic search分布式下的架构:
可以看到,各个节点概念如下:
节点类型:
-
master node:
-
主节点
-
es集群中,需要有一个节点作为leader角色,来做整体数据分配的计算、节点维护等
-
-
coordinator node
-
协调节点
-
能够转发客户端请求到实际分片
-
-
data node
-
数据节点
-
存储、查询lucene的节点
-
shard:
-
分片
-
索引的一部分,多个分片(shard)组合成为1个完整的索引(可以理解为传统数据库中的表)
分片(shard)类型:
-
主分片
-
副分片
-
对主分片的备份(完整拷贝)
-
一个主分片可以有0个副分片,也可以有N个副分片
-
为了分片数据的高可用性,类似hadoop fs机制
-
split:
-
如果某索引大了,可以进行索引拆分来减少单个分片的大小
merge:
-
可以合并索引
es应用简介
那么,根据es的特点,在东泽,有哪些领域应用到了呢?
最典型的就是elk(或者efk),elastic 生态原厂开源推荐方案:
不管是elk还是efk都是elastic原厂推荐方案,是优秀的原生方案之一。
题外话:最近也有另一种搭配方式:kfc
k: kibana
f: filebeat
c: clickhouse(大数据分析领域数据库)
ELK的用途有哪些?
-
提供开发人员以及运维人员生产系统的日志查询
-
提供业务运营人员业务监控统计dashboard
可以看出,1. 偏向非结构化数据存储、查询、以及带点数据分析的特色在里面。
下面展示下电商业务监控,基于EFK的样子,还是很好看的(数据已隐藏):
其次,电商商品查询场景:
初级的电商数据库用法如下所示:
上图是原始架构,经压测后,前端性能极差,qps很低,经排查,主要瓶颈出现在mysql查询,因此又出现了如下架构:
此时会把前台高并发的查询转到mysql读库中来做流量分流,性能确实上升了些。但是对like语句的性能依然很慢。急需解决,因此再改为如下架构:
此时,高并发的查询流量主要是打到了es搜索引擎,业务操作修改新增等流量依然转入mysql中。此时,存储维度的优化可以先缓缓了,可以暂时转向其他方向优化了。
在电商后台会将商品保存到关系型数据库的同时,同步的将数据塞到elastic search内进行索引的构建,然后小程序端或者web端就能进行近实时的搜索,而且搜索方式很丰富,2. 比mysql的like查询丰富很多,并且3. 性能极高。
再就是审计系统场景,需要根据关键字搜索,速度要快,而且4.略微带点数据分析的功能(统计功能较好):
以上都是es可以发挥的场景,用的比较广泛。
原理-es索引构建
下面说下当一个文档(其实就是JSON数据)发送到es某节点后的处理逻辑。
<!-- https://mvnrepository.com/artifact/org.elasticsearch.client/elasticsearch-rest-high-level-client -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.14.1</version>
</dependency>
大家可以参考这个url编写客户端demo:https://www.cnblogs.com/ginb/p/8716485.html
在业务应用服务端用上述java库构建请求发送到es集群后,大致的处理管道逻辑如下图所示:
能看出,es在分布式场景下,在基于lucene组件之上,分布式层面做了很多工作。比如分片的路由如何计算(这个其实像分表分库,传统的应用也是有的,再比如spring mvc的action路由,都是某种程度的路由机制;这个路由机制很多很多),找到分片后数据如何写入,又如何尽快的能让查询能够看到这条新数据,同时又不能被慢速磁盘系统拖累降低处理速率等,都是很好的最佳实践。
最后,相信通过两篇介绍es的文章后,应该能激发起很多小伙伴对elastic search的学习兴趣。
心怀远大理想。
为了家庭幸福而努力。
商业合作请看此处:https://www.magicube.ai