ES的timeout超时机制

ElasticSearch由于其分布式,高吞吐量,支持复杂检索的特点,通常用来做一些高并发场景下的复杂搜索应用。但是对于一些应用,对时间特别敏感,例如:电商行业的移动端APP首页商品展示,需要在指定的时间内展示给用户结果。如果接口响应很慢,将会给用户造成很差的体验,所以需要保证商品查询结果在指定的时间内立刻返回给用户,这是就需要一种超时机制,当然了,超时包括了底层数据存储的超时,中间服务调用时的超时,顶层接口的超时等。下面将介绍ElasticSearch的超时机制,数据底层数据存储的超时机制。

温馨提示:本博客已经发布小程序,可在微信小程序中搜索”百变码农”,手机上也能看!

1、ElasticSearch搜索过程回顾

(1)应用程序向ElasticSearch集群发出搜索请求;

 

(2)请求到达某一个协调节点,然后由协调节点解析搜索请求,并根据搜索条件,将请求路由到数据所在节点;

 

(3)各个数据节点执行完搜索过程之后,将结果返回给协调节点;

 

(4)协调节点对结果进行汇总,排序等操作之后,将结果最终返回给应用程序;

2、timeout机制的作用

默认情况下ES的节点是没有timeout的,即:如果发送了一个复杂的搜索请求,当ES节点机器硬件负载特别高的时候,可能节点搜索数据会特别慢,此时,请求会一直等待,直到搜索到结果为止。此时,如果指定了timeout,就能保证,在多长时间内,搜索结果还未查到的时候,就不再继续等待,将搜索到的结果返回即可。

总结:指定ES在多长时间内必须返回结果,防止上层调用方的搜索应用长时间等待搜索结果;

3、timeout机制的原理
(1)原理

指定了timeout之后,timeout将会作用于es的每个shard上,当shard上收到搜索请求之后,开始计时,在timeout指定的时间内,将搜索结果立刻返回,如果结果未搜索完毕,则不会继续等待,只返回当前已经搜索到的结果。

(2)示例
现有ES集群:1个节点,2个shard
搜索需求:每个shard上搜索500条数据
指定超时时间:timeout=1ms

搜索过程:当该ES集群中的2个shard收到搜索请求之后,会立刻执行检索,在1ms内,有可能shard上只搜索到50条数据,此时需要立刻返回,则协调节点收到的数据总量就为100条。但是整个过程保证了快速返回结果,不会长时间等待。

至此,ElasticSearch的超时timeout机制介绍完毕,欢迎转发本文章!

4、具体应用

搜索过程中指定超时时间:

(1)语法
GET test_index/test_type/_search?timeout=TIMEOUT

TIMEOUT:表示超时时间,常用的有三个单位,分别是ms(毫秒),s(秒),m(分钟)
(2)示例

搜索test_index索引test_type下的所有数据,超时为2s,如下:

GET /test_index/test_type/_search?timeout=2s

温馨提示:如果小程序端代码显示混乱,是因为移动端兼容性导致,可移步至PC端站点查看!

文章属于原创,如果转发请标注文章来源:个人小站【www.jinnianshizhunian.vip

另外提供一些优秀的Java架构师及IT开发视频,书籍资料。无需注册,无需登录即可下载,免费下载地址:https://www.592xuexi.com