总是 TCP_NODELAY。每次都是。

主要观点:调试分布式系统的延迟问题时,应检查是否启用TCP_NODELAY,默认行为可能有误,整个概念可能已过时。
关键信息:

  • 1984 年 John Nagle 的 RFC896 指出小数据包传输存在 4000%的开销问题,Nagle 提出抑制新 TCP 段发送的解决方案。
  • Nagle 算法与延迟确认(delayed ACK)相互作用会导致问题,这是协议设计的难点之一。
  • 现代系统中,即便没有延迟确认,Nagle 算法的行为在分布式系统中可能也不是我们想要的,单数据中心 RTT 通常约 500μs,跨数据中心可达数百毫秒,延迟发送数据不一定是好事。
  • 现代分布式数据库和系统大多不会发送单字节数据包,核心问题虽存在但已推至应用层。
  • 在现代数据中心类硬件上构建低延迟分布式系统时,应启用 TCP_NODELAY 而无需担心,且认为 Nagle 算法在现代系统中可能不再需要,TCP_NODELAY 应是默认设置。
    重要细节:
  • RFC896 是关于计算机网络中亚稳态行为的早期声明之一。
  • 介绍了 TCP_QUICKACK 及其存在的问题,如缺乏可移植性、语义怪异等,且不能解决内核保留数据时间过长的问题。
阅读 10
0 条评论