📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

配置项作用 #

script.disable_max_compilations_rate 配置项用于控制是否禁用脚本最大编译速率限制

当设置为 true 时,系统不再对脚本编译的速率进行限制;当设置为 false(默认值)时,启用脚本编译速率限制,以防止资源耗尽。

配置项属性 #

  • 配置路径: script.disable_max_compilations_rate
  • 数据类型: Boolean(布尔值)
  • 默认值: false
  • 是否可选: 是
  • 作用域: NodeScope(节点级别)
  • 动态更新: (需要重启节点生效)

配置项详解 #

工作机制 #

脚本编译速率控制

disable_max_compilations_rate: false (默认,启用限制):
脚本编译请求:
├── 检查编译速率
├── 计算时间窗口内的编译次数
├── 是否超过限制?
│   ├── 是 → 拒绝编译 ❌
│   └── 否 → 允许编译 ✅
└── 继续执行


相关配置生效:
├── script.max_compilations_rate
├── script.context.<context>.max_compilations_rate
└── 速率限制生效


disable_max_compilations_rate: true (禁用限制):
脚本编译请求:
├── 跳过速率检查
├── 允许无限编译
└── 直接执行 ✅


相关配置失效:
├── script.max_compilations_rate (失效)
├── script.context.<context>.max_compilations_rate (失效)
└── 无限制编译

速率限制机制 #

编译速率限制原理

限制算法 (滑动窗口):
时间窗口: 固定时长 (如 1 分钟)


检查流程:
├── 记录每次脚本编译时间
├── 计算时间窗口内的编译次数
├── 比较: 次数 <= max_compilations_rate?
│   ├── 是 → 允许编译 ✅
│   └── 否 → 拒绝编译 ❌
└── 返回结果


配置优先级:
├── disable_max_compilations_rate: true
│   └── 最高优先级,禁用所有限制
│
├── script.context.<context>.max_compilations_rate
│   └── 特定上下文的编译速率
│   └── 优先级高于通用配置
│
└── script.max_compilations_rate
    └── 通用的编译速率
    └── 当没有上下文配置时使用

安全影响 #

安全风险分析

禁用限制 (true) 的风险:
├── 资源耗尽风险 ⚠️
│   ├── 恶意脚本持续编译
│   ├── 内存占用增加
│   └── CPU 负载升高
│
├── DoS 攻击风险 ⚠️
│   ├── 发送大量不同脚本
│   ├── 强制持续编译
│   └── 导致服务不可用
│
└── 性能下降风险 ⚠️
    ├── 编译占用资源
    ├── 影响正常请求
    └── 响应时间增加


启用限制 (false) 的保护:
├── 资源保护 ✅
│   ├── 限制编译速率
│   ├── 防止资源耗尽
│   └── 保持系统稳定
│
├── 安全防护 ✅
│   ├── 防止恶意攻击
│   ├── 限制异常请求
│   └── 保护集群安全
│
└── 性能保障 ✅
    ├── 稳定的编译性能
    ├── 可预测的资源使用
    └── 良好的用户体验

配置建议 #

生产环境(推荐) #

script:
  disable_max_compilations_rate: false  # 启用限制(默认)

建议: 生产环境必须保持默认值 false,启用编译速率限制。

测试环境 #

script:
  disable_max_compilations_rate: true  # 禁用限制

建议: 仅在测试环境中使用,避免编译限制影响测试。

开发环境 #

script:
  disable_max_compilations_rate: true  # 方便调试

建议: 开发环境可以禁用,方便频繁修改和测试脚本。

性能调优 #

script:
  disable_max_compilations_rate: false  # 保持限制
  max_compilations_rate: "150/5m"      # 调整速率

建议: 保持限制启用,根据需求调整速率值。

代码示例 #

基础配置 #

script:
  disable_max_compilations_rate: false

测试环境配置 #

script:
  disable_max_compilations_rate: true

完整脚本配置 #

script:
  disable_max_compilations_rate: false
  max_compilations_rate: "150/5m"
  cache:
    max_size: 500
    expire: "30m"

上下文级配置 #

script:
  disable_max_compilations_rate: false
  context:
    score:
      max_compilations_rate: "200/5m"
    update:
      max_compilations_rate: "100/5m"

高安全配置 #

script:
  disable_max_compilations_rate: false
  max_compilations_rate: "75/5m"  # 更严格的限制

相关配置 #

配置项作用默认值
disable_max_compilations_rate禁用速率限制false
max_compilations_rate通用编译速率75/5m
context.<context>.max_compilations_rate上下文编译速率-

注意事项 #

  1. 默认值: 默认值为 false,推荐保持。

  2. 非动态更新: 需要重启节点才能生效。

  3. 生产环境: 生产环境必须保持 false

  4. 安全风险: 设置为 true 存在安全风险。

  5. 资源保护: 保持 false 可以保护系统资源。

  6. 测试专用: 仅在测试/开发环境使用 true

  7. 配置失效: 设置为 true 时,其他速率配置失效。

  8. 监控建议: 监控脚本编译频率和资源使用。

  9. 替代方案: 如需更高编译速率,调整 max_compilations_rate 而非禁用。

  10. 审计日志: 记录编译拒绝事件,便于安全审计。

使用场景 #

适合使用 false 的场景 (默认):

1. 生产环境
   ├── 需要资源保护
   ├── 需要安全防护
   └── 防止恶意攻击


2. 多租户环境
   ├── 多个用户共享集群
   ├── 防止单个用户占用资源
   └── 保证服务质量


3. 公网访问环境
   ├── 面向外部用户
   ├── 潜在攻击风险
   └── 需要安全保护


适合使用 true 的场景 (谨慎):

1. 测试环境
   ├── 频繁修改脚本
   ├── 不受编译限制
   └── 方便功能测试


2. 开发环境
   ├── 快速迭代
   ├── 调试脚本
   └── 本地开发


3. 私有安全环境
   ├── 受控访问
   ├── 信任用户
   └── 特殊需求

故障排查 #

编译速率限制问题

问题: 脚本编译被拒绝

错误信息:
script compilation limit exceeded


排查:
├── 检查编译速率
├── 查看被拒绝的脚本
├── 分析编译频率
└── 识别问题来源


解决:
├── 调整 max_compilations_rate
├── 优化脚本减少编译
├── 使用脚本缓存
└── 不要使用 disable_max_compilations_rate


问题: 需要更高的编译速率

错误的解决:
❌ script.disable_max_compilations_rate: true


正确的解决:
✅ script.max_compilations_rate: "200/5m"
✅ script.context.score.max_compilations_rate: "300/5m"