You need to enable JavaScript to run this app.
导航
Byte-throttler 限流插件使用说明
最近更新时间:2024.12.05 12:35:32首次发布时间:2024.12.05 12:35:32

云搜索实例经常会遇到因为业务上量导致 QPS 激增的情况。如果实例资源不变,QPS 激增会导致 Latency 上升、集群 Pending、Node 被打挂等情况。为了预防这一情况,云搜索服务团队开发了限流功能的插件,以减轻云搜索实例受到业务 QPS/写入吞吐突增的影响。

适用场景

从 QPS/吞吐的维度对特定索引的访问进行限制,以避免突发的 QPS 大幅增加导致集群崩溃,或者某些索引 QPS 的增加影响存量业务的 Latency 或其他性能指标的情况。

不适用场景

不适用于大查询将集群打挂的场景,例如一个极大数据量的 Agg 查询。限流插件无法在该情况下保护云搜索实例。

适用版本

目前仅支持 ES 7.10.2 版本。

前提条件

Byte-throttler 插件默认未安装,如果需要使用,请提前自行安装。如何安装,请参见安装系统内置插件

步骤一:打开限流插件开关

默认处于关闭状态,使用前需要更新配置打开。

# 查看集群所有默认配置
# GET _cluster/settings?include_defaults&flat_settings
PUT _cluster/settings
{ 
  "transient" : {
      "index.ratelimit.enabled" : "true"
  }
}

步骤二:增加限流规则

限流器主要由两部分组成,limiters 定义和 tags 定义。通过 tags 定义资源限制,通过 limiters 定义具体的限流类型和限流阈值。

  • tags 中的索引名称支持 * 通配符。
  • 每一条限流规则下可以配置多种限流类型。同一个limiter name下支持对search.qps/writer.qps/write.throughput 的一项或多项设置限流阈值。
  • 如果一次读写请求有多条限流规则命中,只要有一条触发限流,则会拒绝请求。

当请求超过限流值之后,ES 会拒绝之后发送的请求。返回的 http code 为429,内容为触发限制的规则及其名称。

查询操作

Rest request

设置单个索引的查询 QPS 限流

PUT _ratelimit/<limiterName>
{
  "limiters": {
    "search.qps": "1000"
  },
  "tags": {
    "index": "test_index"
  }
}

{"limiters": {"search.qps": "1"}, "tags": {"index": "test_index"}}

设置指定名称前缀的索引的查询 QPS 限流

PUT _ratelimit/<limiterName>
{
  "limiters": {
    "search.qps": "1000"
  },
  "tags": {
    "index": "test_index-*"
  }
}

设置所有索引的查询总 QPS 限流

PUT _ratelimit/<limiterName>
{
  "limiters": {
    "search.qps": "1000"
  },
  "tags": {
    "index": "test_index-*"
  }
}

写入操作

Rest request

设置单个索引的写入 QPS 限流

PUT _ratelimit/<limiterName>
{
  "limiters": {
    "write.qps": "1000"
  },
  "tags": {
    "index": "test_index"
  }
}

设置单个索引的写入吞吐限流

PUT _ratelimit/<limiterName>
{
  "limiters": {
    "write.throughput": "1024 * 1024"
  },
  "tags": {
    "index": "test_index"
  }
}

设置多个限流器配置

PUT _ratelimit/<limiterName>
{
  "limiters": {
    "search.qps": "1000",
    "write.qps": "1000",
    "write.throughput": "1024 * 1024"
  },
  "tags": {
    "index": "test_index"
  }
}

步骤三:查看限流规则

操作

Rest request

获取所有限流配置

GET _ratelimit/

获取单个指定的限流配置

GET _ratelimit/<limiterName>

步骤四:删除限流规则

操作

Rest request

删除单个指定的限流配置

DELET _ratelimit/<limiterName>

步骤五:获取监控信息

操作

Rest request

获得所有限流器的指标数据

GET _ratelimit/metric

获得指定限流器的指标数据

GET _ratelimit/metric/{limitName}

获得指定节点上所有限流器的指标数据

GET _ratelimit/nodes/{nodeId}/metric

获得指定节点上指定限流器的指标数据

GET _ratelimit/nodes/{nodeId}/metric/{limitName}