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

配置项作用 #

http.tcp_no_delay 配置项用于控制是否禁用 TCP Nagle 算法

⚠️ 此配置已被弃用,请使用新版配置 http.tcp.no_delay

配置项属性 #

  • 配置路径: http.tcp_no_delay
  • 数据类型: Boolean(布尔值)
  • 默认值: true
  • 是否可选: 是
  • 作用域: NodeScope(节点级别)
  • 弃用状态: ⚠️ 已弃用

配置项详解 #

弃用说明 #

配置迁移路径

旧版配置(已弃用):
http:
  tcp_no_delay: true
    │
    ↓ 仍然有效,但不推荐
    │
    ↓

新版配置(推荐):
http:
  tcp:
    no_delay: true

工作机制 #

Nagle 算法对比

启用 Nagle 算法 (tcp_no_delay = false):

小数据包:
┌─────┐ ┌─────┐ ┌─────┐
│ 50B │ │ 50B │ │ 50B │
└─────┘ └─────┘ └─────┘
   ↓       ↓       ↓
   └───────┴───────┘
           ↓
    缓冲区累积数据
           ↓
    等待达到一定大小
    或收到 ACK
           ↓
    ┌──────────────────┐
    │     150B 数据包    │ 发送
    └──────────────────┘

优点: 减少网络包数量,提高利用率
缺点: 增加延迟(最多 40-200ms)


禁用 Nagle 算法 (tcp_no_delay = true,默认):

小数据包:
┌─────┐ ┌─────┐ ┌─────┐
│ 50B │ │ 50B │ │ 50B │
└─────┘ └─────┘ └─────┘
   ↓       ↓       ↓
 立即   立即   立即
 发送   发送   发送

优点: 低延迟,立即响应
缺点: 更多网络包,可能降低利用率

配置建议 #

⚠️ 重要提示 #

此配置项已被标记为弃用,请迁移到新版配置 http.tcp.no_delay

旧版配置(不推荐) #

http:
  tcp_no_delay: true  # 旧版配置,已弃用

建议: 迁移到新版配置结构。

新版配置(推荐) #

http:
  tcp:
    no_delay: true  # 新版配置,推荐使用

生产环境配置 #

# 推荐的新版配置结构
http:
  tcp:
    no_delay: true
    keep_alive: true
    reuse_address: true

代码示例 #

easysearch.yml 旧版配置(已弃用) #

# 不推荐使用此格式
http:
  tcp_no_delay: true

easysearch.yml 新版配置(推荐) #

# 推荐使用此格式
http:
  tcp:
    no_delay: true

配合其他 TCP 配置(新版) #

http:
  tcp:
    no_delay: true        # 新版配置
    keep_alive: true
    keep_idle: 60
    keep_interval: 10
    send_buffer_size: 128kb
    receive_buffer_size: 128kb

相关配置 #

配置项状态作用默认值
http.tcp_no_delay⚠️ 已弃用旧版 NoDelay 配置true
http.tcp.no_delay✅ 推荐新版 NoDelay 配置true
http.tcp.keep_alive✅ 有效是否启用 Keep-Alivetrue

迁移指南 #

从旧版配置迁移 #

步骤 1: 备份现有配置

cp easysearch.yml easysearch.yml.bak


步骤 2: 更新配置格式

旧格式:
http:
  tcp_no_delay: true
  tcp_keep_alive: true

新格式:
http:
  tcp:
    no_delay: true
    keep_alive: true


步骤 3: 验证配置

确保配置语法正确


步骤 4: 重启节点

使新配置生效


步骤 5: 验证功能

确认 HTTP 服务正常工作

配置兼容性 #

// 代码中的兼容处理
public static final Setting<Boolean> OLD_SETTING_HTTP_TCP_NO_DELAY =
    boolSetting("http.tcp_no_delay", NetworkService.TCP_NO_DELAY,
                Setting.Property.NodeScope, Setting.Property.Deprecated);

public static final Setting<Boolean> SETTING_HTTP_TCP_NO_DELAY =
    boolSetting("http.tcp.no_delay", OLD_SETTING_HTTP_TCP_NO_DELAY,
                Setting.Property.NodeScope);

// 新配置会回退到旧配置的值
// 确保向后兼容性

使用场景 #

所有场景都应使用新版配置 #

  • 新部署: 直接使用 http.tcp.no_delay
  • 现有部署: 迁移到新版配置结构
  • 配置维护: 统一使用新版配置

注意事项 #

  1. 已弃用: 此配置已被标记为弃用,请迁移到 http.tcp.no_delay

  2. 向后兼容: 旧配置仍然有效,但不推荐使用。

  3. 配置结构: 新版配置使用嵌套结构 http.tcp.*

  4. 功能相同: 新旧配置的功能完全相同。

  5. 迁移建议: 建议在下次维护窗口期进行迁移。

  6. 文档更新: 更新相关文档和运维手册。

  7. 动态更新: 此配置不支持动态更新,修改后需要重启节点。

  8. 配置验证: 迁移后验证配置语法正确性。

  9. 版本兼容: 确保当前版本支持新版配置。

  10. 统一管理: 建议统一所有 TCP 相关配置到 http.tcp.* 结构下。