请求速率限制器
Solr 允许按请求类型进行速率限制。可以为每种请求类型分配允许的最大并发请求数。默认速率限制已针对更新和搜索实现。
如果请求超过请求配额,则会以 HTTP 错误代码 429(请求过多)拒绝进一步的传入请求。
请注意,速率限制在实例(JVM)级别起作用,而不是在核心或集合级别起作用。在规划容量时请考虑这一点。未来计划在此处进行更细粒度的执行 (SOLR-14710)。
何时使用速率限制器
当用户希望将请求线程池的保证容量分配给特定请求类型时,应使用速率限制器。索引和搜索请求在很大程度上争用 CPU 资源。在生产工作负载的高压力下,这一点尤其明显。当前实现具有查询速率限制器,可以为索引释放资源。
速率限制器配置
默认速率限制器是搜索速率限制器。因此,可以使用以下命令对其进行配置
curl -X POST -H 'Content-type:application/json' -d '{ "set-ratelimiter": { "enabled": true, "guaranteedSlots":5, "allowedRequests":20, "slotBorrowingEnabled":true, "slotAcquisitionTimeoutInMS":70 } }' http://localhost:8983/api/cluster
要点
在使用速率限制器时,需要记住以下一些事项。
过度订阅
可以为请求类型定义一个配额大小,该大小超过可用线程池的大小。Solr 不会对可为请求类型定义的配额大小强制执行规则。这样做是为了有意允许用户对其配额分配拥有完全控制权。但是,如果配额超过可用线程池的大小,则线程池的标准排队策略将启动。
插槽借用
如果一个配额没有积压,但其他配额有积压,那么相对不繁忙的配额可以从繁忙的配额中“借用”插槽。目前,这是以循环方式进行的,未来待处理的任务是使其成为基于优先级的模型 (https://issues.apache.org/jira/browse/SOLR-14709).
此功能为实验性功能,不能保证借用的插槽能及时归还。 |