我注意到 NEST 能够设置 TCP 保持活动状态。
这试图解决什么问题?
我以为http keep alive就够了,在NEST的内部连接池中默认实现了吗?
有人可以阐明这里的差异,以及我们应该使用哪些场景。
谢谢
我注意到 NEST 能够设置 TCP 保持活动状态。
这试图解决什么问题?
我以为http keep alive就够了,在NEST的内部连接池中默认实现了吗?
有人可以阐明这里的差异,以及我们应该使用哪些场景。
谢谢
不是 Nest 开发人员,但我确实运行托管 Elasticsearch 服务。虽然“保持活力”听起来很有价值,但它对于HTTP连接比TCP连接更有价值。
通常,TCP Keepalive 在空闲 TCP 连接上每 45 或 60 秒发送一次,并且在丢失 3 个连续的 ACK 后断开连接。
这听起来很方便,但如果您进行一些测量,在同一个数据中心内建立TCP 连接的时间可能只有亚毫秒级。
鉴于我们正在查看 Elasticsearch 活动,我们现在处于 HTTP 领域。HTTP 连接可能会产生更多的开销。尤其是在这个安全连接的时代,交换 TLS 证书的握手可以是多个数据包,大约需要 50 毫秒。
因此,虽然 TCP keepalive 每分钟可以为您节省一毫秒,但 HTTP keepalive 可以为每个请求节省数十毫秒。对于每分钟生成一个以上 HTTP 请求的应用程序,HTTP keep-alive 总共可以节省大量时间。
另一方面,TCP keepalive 可以忽略不计。
另请参阅:HTTP Keep Alive 持续时间和 TCP 超时持续时间之间的关系
那么为什么 Nest 会包含开启 TCP keep-alive 的选项呢?对于 Nest 开发人员来说,这可能是一个更好的问题。作为一名工程师,有时最好为所有可配置的可能性提供一个选项,即使只是为了完整性。