首页 > 其他分享 >INFINI Gateway 如何防止大跨度查询

INFINI Gateway 如何防止大跨度查询

时间:2023-12-23 15:36:18浏览次数:38  
标签:search 12 2023 查询 索引 INFINI test 跨度 Gateway

背景

业务每天生成一个日期后缀的索引,写入当日数据。
业务查询有时会查询好多天的数据,导致负载告警。
现在想对查询进行限制--只允许查询一天的数据(不限定是哪天),如果想查询多天的数据就走申请。

技术分析

在每天一个索引的情况下,要进行多天的数据查询,有三种途径:

  1. 查询时,指定多个索引
  2. 查询时,写前缀+*号,模糊匹配多个索引
  3. 查询别名,别名关联多个索引

需求实现

我们只需用网关代理 ES 集群,并在 default_flow 中增加一段 request_path_filter 过滤器的配置,只允许查询一个索引且格式如 "xxx-2023-12-06", "xxx.2023.12.06", "xxx20231206" 。

- request_path_filter:
           message: "Query scope exceeds limit, please contact the administrator for application."
           must:
             suffix:
                - _search
             regex:
                - \/[a-z]+[-.]?\d{4}[-.]?\d{1,2}[-.]?\d{1,2}\/

INFINI Gateway 如何防止大跨度查询_数据网关


如果需要指定其他格式,请自行修改 regex 的正则表达式。

创建测试索引

在 INFINI Console 开发工具中执行下列语句:

POST test-2023-12-06/_doc
{
  "test":"test"
}

POST test-2023-12-6/_doc
{
  "test":"test"
}
POST test.2023.12.06/_doc
{
  "test":"test"
}
POST test.2023.12.6/_doc
{
  "test":"test"
}

POST test20231206/_doc
{
  "test":"test"
}

POST test/_doc
{
  "test":"test"
}

查询测试语句

#预计成功的查询
curl localhost:8000/test-2023-12-06/_search?pretty
curl localhost:8000/test-2023-12-6/_search?pretty
curl localhost:8000/test.2023.12.06/_search?pretty
curl localhost:8000/test.2023.12.6/_search?pretty
curl localhost:8000/test20231206/_search?pretty
#预计失败的查询
curl localhost:8000/test-2023-12-06,test-2023-12-6/_search?pretty
curl localhost:8000/test-2023-12*/_search?pretty
curl localhost:8000/test*/_search?pretty
curl localhost:8000/*/_search?pretty

查询结果

预计成功的查询

INFINI Gateway 如何防止大跨度查询_数据网关_02

预计失败的查询

INFINI Gateway 如何防止大跨度查询_极限科技_03


此外,我们在 Console 中的 Request Analysis 看板中也能看到,哪些请求被拒绝,哪些请求被“放行”。

INFINI Gateway 如何防止大跨度查询_极限科技_04

查询多个索引(多天)

现在我们已经实现了业务只能查一个索引,即一天的数据。当业务需要查询多天的索引时,我们只需创建一个别名,关联多个索引就行了。注意别名也要符合格式要求:字母开头 + 日期格式后缀。
下面我们创建一个 test-1111-1-1 的别名,关联前面的三个测试索引。

POST /_aliases
{
  "actions" : [
    { "add" : { "indices" : ["test-2023-12-06", "test.2023.12.06","test-2023-12-6"], "alias" : "test-1111-1-1" } }
  ]
}

查询别名

INFINI Gateway 如何防止大跨度查询_Gateway_05


待业务查询用完之后,删除别名即可。

POST /_aliases
{
  "actions" : [
    { "remove": { "indices" : ["test-2023-12-06", "test.2023.12.06","test-2023-12-6"], "alias" : "test-1111-1-1" } }
  ]
}

最后,我们只需严格控制别名的创建,就能实现我们最初的需求了。

标签:search,12,2023,查询,索引,INFINI,test,跨度,Gateway
From: https://blog.51cto.com/u_15963473/8945162

相关文章

  • INFINI Gateway 如何防止大跨度查询
    背景业务每天生成一个日期后缀的索引,写入当日数据。业务查询有时会查询好多天的数据,导致负载告警。现在想对查询进行限制--只允许查询一天的数据(不限定是哪天),如果想查询多天的数据就走申请。技术分析在每天一个索引的情况下,要进行多天的数据查询,有三种途径:查询时,指定多个索......
  • nignx多域名多站点的配置,502 Bad Gateway解决方法
    本文以ubuntu为例,其他Linux系统类似1、先建立两个放网站的目录mkdir/datamkdir/data/ding1commkdir/data/ding2com2、查看nginx.conf可知放入位置sites-enabled文件夹内所有文件都生效cd/etc/nginxcp-rsites-enabledsites-enabled.bak#修改前先备份cdsites-enabled多域名......
  • 来领奖了,InfiniCloud网盘又能领取内存了
    1缘由今天登录自己的邮箱,整理相关的邮件的时候,突然发现有来自于infiniCloud的邮件,阅读邮件竟然发现了一个惊喜,为庆祝HappyHolidays!,用户就是能领取3GB的储存空间,有效期是一年的时间,对于免费用户来说这就很不错了。#HappyHolidays!ClickbelowforaholidaybonusfromI......
  • spring gateway 超时重试和默认拦截器配置
    spring:cloud:gateway:default-filters:-name:Retryargs:retries:3RetryConfig中默认的异常处理为IOException.class,TimeoutException.classpublicstaticclassRetryConfigimplementsHasRouteId{ privateStrin......
  • components之infiniteScroll 注意事项
    先吐槽,看官方示例代码看的一头雾水使用方式:1.按官方文档来<InfiniteScroll  ref={ref}  style={{backgroundColor:'#ffffff'}}  hasMore={hasMore}  loadMore={loadMore}  data={list}  keyExtractor={(word)=>word}  renderItem={({item:......
  • SpringCloud Gateway
    一、依赖<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>二、配置spring:cloud:gateway:routes:-id:product......
  • INFINI Labs 产品更新 | Easysearch 新增快照搜索功能,Console 支持 OpenSearch 存储
    INFINILabs产品又更新啦~,包括Easysearchv1.7.0、Consolev1.13.0。本次各产品更新了Easysearch快照搜索功能;Console支持OpenSearch集群存储系统数据、优化了初始化安装向导流程等。以下是本次更新的详细说明。INFINIEasysearchv1.7.0INFINIEasysearch是一个分布......
  • go-zero开发入门之gateway深入研究1
    创建一个gateway示例://main.gopackagemainimport("flag""fmt""gateway/middleware""github.com/zeromicro/go-zero/core/conf""github.com/zeromicro/go-zero/gateway")varconfigFile=......
  • 记录一次在k8s上,web服务内嵌的netty-socketio注册到nacos,gateway转发路由 遇到的问题
    web服务内嵌的nacos怎么注册?使用javasdk方式参考链接:https://nacos.io/zh-cn/docs/sdk.html每个socket不同怎么设置端口我这里使用的是注解,让用户传过来,并且在bean初始化之前进行变量存储。这个链接里面的[netty-socketio服务端代码编写目录]:https://www.cnblogs.com/x......
  • Spring Cloud Gateway的Filter中如果有耗时操作应该如何处理?
    1,如果不处理,会大大影响吞吐量;2,springcloudgateway是reactive的编码风格,改造代码难度很大,很不习惯;3,springcloudgateway使用事件线程处理一个http请求4,事件线程比较少(参考nettyeventloop),不能有耗时操作,否则影响吞吐量;5,springcloudgateway可以使用一个异步线程池:boundedE......