配置Dashboards查询响应熔断
在业务查询过程中,OpenSearch可能返回超大响应体,如全量索引导出、高基数字段聚合等。当OpenSearch Dashboards后端进程缓冲和解析这些超大响应时,堆内存会被迅速占满,导致进程OOM(Out of Memory,内存溢出)崩溃,影响所有用户的可视化操作。CSS服务提供查询响应熔断功能,在Dashboards后端进程收到响应但尚未缓冲body之前,根据响应头的content-length预估堆内存消耗,一旦超过阈值即销毁响应流并返回错误,避免进程崩溃。
功能介绍
当OpenSearch Dashboards后端进程收到查询响应时,熔断器会在缓冲响应体之前进行判断,决定是放行还是拦截。
熔断器满足以下任一条件即触发,触发后请求响应体会直接被丢弃:
- 绝对值上限:当“maxContentLength > 0”且“请求响应体的contentLength ≥ maxContentLength”时触发,表示响应体本身过大,无论当前堆占用如何都拒绝。
- 堆占用上限:当“contentLength × heapMultiplier + heapUsed > heapSizeLimit × maxPercentage”时触发,表示预估该响应入堆后会超过堆内存上限。
其中各参数含义如下:
- maxContentLength:响应体绝对上限。响应体大小达到该值即触发熔断。
- contentLength:当前请求响应体的大小,即HTTP响应头“content-length”字段的值。
- heapSizeLimit:进程的堆内存上限。
- heapUsed:进程当前已使用的堆内存。
- heapMultiplier:堆估算倍数,默认值为4。将contentLength放大后用于预估响应入堆后的内存占用。默认值4是因为JSON数据在JavaScript中解析为对象后,内存占用约为原始文本的3~5倍,4倍是一个兼顾安全与资源的经验值。
- maxPercentage:堆占用上限比例。
约束限制
- 仅当OpenSearch集群版本号为2.19.0或3.4.0,且镜像版本号不低于x.x.x_26.6.0_xxx时,才支持Dashboards查询响应熔断功能。满足条件的集群默认启用该功能。
- 安全集群(开启“安全模式”的集群)的Dashboards查询响应熔断参数仅支持在Global租户下可见可改。
- Advanced Settings修改后不是即时生效,而是后台周期性同步,最迟1分钟后生效。
登录Dashboards的Advanced settings页面
- 登录云搜索服务管理控制台。
- 在左侧导航栏,选择“集群管理 > OpenSearch”。
- 在集群列表,选择目标集群,单击操作列的“Dashboards”,登录OpenSearch Dashboards。
- (可选)如果是安全集群,需要切换到Global租户才能配置Dashboards查询响应熔断参数。
在Dashboards页面,单击右上方用户名,选择“Switch tenants”,在Select your tenant页面选择“Global”,单击“Confirm”。
- 在左侧导航栏选择“Management > Dashboards Management”,选择“Advanced settings”,进入Settings页面。
配置Dashboards查询响应熔断参数
- 在Settings页面,找到Search模块,配置以下Dashboards查询响应熔断的参数。 图2 配置Dashboards查询响应熔断
表1 Dashboards查询响应熔断的参数说明 参数
类型
默认值
说明
circuitBreaker:enabled
Boolean
On
是否启用Dashboards查询响应熔断。
- On:启用。
- Off:关闭。关闭熔断功能后,Dashboards后端进程将不再拦截超大响应,大查询响应可能导致进程OOM崩溃,影响所有用户的可视化操作。建议仅在确认业务无大查询风险时关闭。
circuitBreaker:heapMultiplier
Integer
4
堆估算倍数,用于预估响应入堆后的内存占用。
取值范围:1~10
circuitBreaker:maxContentLength
Integer
104857600
响应体绝对上限。
取值范围:
- 0(表示不限)
- 1048576(1MB)~1073741824(1GB)
单位:字节
circuitBreaker:maxPercentage
Float
1.0
堆占用上限比例。
取值范围:0.1~1.0
1.0表示可用满堆。
- 修改完成后,单击“Save changes”保存参数。
- 等待约1分钟后,执行一次大查询验证熔断功能生效。
- 在左侧导航栏选择“Dev Tools”,进入操作页面。
- 执行一次大查询,返回请求失败,错误码为502。 图3 大查询
- 在浏览器,按F12进入开发者工具,切换至“Network”页签,查看“Response”,显示“Memory circuit breaker triggered”,则表示查询响应已被熔断。 图4 查询响应
