背景

业务每天生成一个日期后缀的索引,写入当日数据。

业务查询有时会查询好多天的数据,导致负载告警。

现在想对查询进行限制--只允许查询一天的数据(不限定是哪天),如果想查询多天的数据就走申请。

技术分析

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

  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}\/



如果需要指定其他格式,请自行修改 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

查询结果

预计成功的查询

预计失败的查询



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

查询多个索引(多天)

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

下面我们创建一个 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" } }
]
}

查询别名



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

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

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

INFINI Gateway 如何防止大跨度查询的更多相关文章

  1. Elasticsearch Span Query跨度查询

    ES基于Lucene开发,因此也继承了Lucene的一些多样化的查询,比如本篇说的Span Query跨度查询,就是基于Lucene中的SpanTermQuery以及其他的Query封装出的DSL,接 ...

  2. Facebook 正式开源其大数据查询引擎 Presto

    Facebook 正式宣布开源 Presto —— 数据查询引擎,可对250PB以上的数据进行快速地交互式分析.该项目始于 2012 年秋季开始开发,目前该项目已经在超过 1000 名 Faceboo ...

  3. 利用SQL Profiler处理开销较大的查询

    当SQL Server的性能变差时,最可能发生的是以下两件事: 首先,某些查询产生了系统资源上很大的压力.这些查询影响整个系统的性能,因为服务器无法足够快速地服务其他SQL查询. 另外,开销较大的查询 ...

  4. lucene-SpanQuery跨度查询基础

    1.跨度查询SpanQuery5个子类 SpanQuery类型                            描述 SpanTermQuery                和其他跨度查询结合 ...

  5. lucene-SpanFirstQuery 和SpanNearQuery 跨度查询

    1.SpanFirstQuery查询 对出现在一个域中前n个位置的跨度查询. public void testSpanFirstQuery() throws Exception{ SpanzFirts ...

  6. SQL命令语句进行大数据查询如何进行优化

    SQL 大数据查询如何进行优化? 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索 2.应尽量避免在 where 子句中对字段进行 null 值 ...

  7. mysql 5.7 innodb count count(*) count(1) 大数据 查询慢 耗时多 优化

    原文:mysql 5.7 innodb count count(*) count(1) 大数据 查询慢 耗时多 优化 问题描述 mysql 5.7 innodb 引擎 使用以下几种方法进行统计效率差不 ...

  8. 比hive快10倍的大数据查询利器presto部署

    目前最流行的大数据查询引擎非hive莫属,它是基于MR的类SQL查询工具,会把输入的查询SQL解释为MapReduce,能极大的降低使用大数据查询的门槛, 让一般的业务人员也可以直接对大数据进行查询. ...

  9. MySQL 如何优化大分页查询?

    一 背景 大部分开发和DBA同行都对分页查询非常非常了解,看帖子翻页需要分页查询,搜索商品也需要分页查询.那么问题来了,遇到上千万或者上亿的数据量怎么快速的拉取全量,比如大商家拉取每月千万级别的订单数 ...

  10. 015-elasticsearch5.4.3【五】-搜索API【四】Joining 多文档查询、GEO查询、moreLikeThisQuery、script脚本查询、span跨度查询

    一.Joining 多文档查询 joining query 像Elasticsearch这样的分布式系统中执行完整的SQL样式连接非常昂贵.相反,Elasticsearch提供两种形式的连接,旨在水平 ...

随机推荐

  1. 阿里开源自研工业级稀疏模型高性能训练框架 PAI-HybridBackend

    ​简介:近年来,随着稀疏模型对算力日益增长的需求, CPU集群必须不断扩大集群规模来满足训练的时效需求,这同时也带来了不断上升的资源成本以及实验的调试成本.为了解决这一问题,阿里云机器学习PAI平台开 ...

  2. MaxCompute Tunnel 技术原理及开发实战

    简介: MaxCompute(原名ODPS)是一种快速.完全托管的EB级数据仓库解决方案, 致力于批量结构化数据的存储和计算,为用户提供数据仓库的解决方案及分析建模服务.Tunnel是MaxCompu ...

  3. SAE助力「海底小纵队学英语」全面拥抱Serverless,节省25%以上成本

    简介: 阿里云Serveless应用引擎SAE 具备免运维IaaS.按需使用.按量计费.低门槛服务应用上云,并且支持多种语言和高弹性能力等特点,刚好完美解决了客户长期以来运维复杂.资源利用率不高.开发 ...

  4. [FAQ] SSH 免密登录主机/服务器 怎么操作 ?

    1. 生成公私钥对,保存好. 命令:ssh-keygen -t rsa -C "xxx" 2. 将公钥传到远程主机的 ~/.ssh/authorized_keys 之中. 命令:s ...

  5. WPF 一千个矩形做动画测试性能

    在很多性能测试开始之前,都需要测试一下自己的期望优化的设备的性能上限是多少.我每次都是重新写一个测试应用,因为每次需要优化的方向都不相同.本文将记录一个我写的一个简单的测试应用,这里面包含了一千个半透 ...

  6. WinUI 3 修复非打包应用运行提示缺少 Windows App Runtime 环境

    本文将告诉大家如何修复 WinUI 3 非打包的应用,在分发给到客户时,在客户的机器上运行提示缺少 Windows App Runtime 环境 在用户的机器上提示的 Windows App Runt ...

  7. WPF 列表控件数据源绑定多个数据集合方法

    在 WPF 用的多的列表控件如 ListBox 或 ListView 等,本文告诉大家在这些列表控件上进行绑定多个数据集合来源的多个实现方法.如有一个显示动物列表的控件,需要绑定的数据来源是阿猫和阿狗 ...

  8. WPF 实现自定义的笔迹橡皮擦

    本文来告诉大家使用比较底层的方法来实现 WPF 的笔迹橡皮擦 在 WPF 里面,对于笔迹来说,应该放在 Stroke 类里面,而不是作为点的集合存储.在 Stroke 类里面将作为管理笔迹的类提供笔迹 ...

  9. 手把手教你如何构建 WPF 官方开源框架源代码

    从去年微软就将 WPF 开源了,差不多现在所有 WPF 的源代码都开源了.在学习框架的时候,我会做一些改动,期望能构建一个自己的版本进行测试.但是作为一个特别大的框架,想要构建跑起来可不是直接在 Vi ...

  10. 2019-9-19-dotnet-找不到-PostAsJsonAsync-方法

    title author date CreateTime categories dotnet 找不到 PostAsJsonAsync 方法 lindexi 2019-09-19 14:53:58 +0 ...