我注意到NEST能够设置TCP保持活动状态。
这是想解决什么问题?
我认为http保持活动状态应该足够了,这是在NEST的内部连接池中默认实现的?
有人可以阐明这里的差异,以及我们应该使用哪些场景。
谢谢
不是 Nest 开发人员,但我确实运行托管的 Elasticsearch 服务。虽然"保持活动状态"听起来很有价值,但对于HTTP连接来说,它比TCP连接更有价值。
根据维基百科:
通常,TCP 保持连接在空闲的 TCP 连接上每 45 或 60 秒发送一次,并且在错过 3 个顺序 ACK 后断开连接。
这听起来很方便,但如果你进行一些测量,在同一数据中心内建立TCP连接可能是亚毫秒级的。
鉴于我们正在研究Elasticsearch活动,我们现在处于HTTP领域。HTTP连接可能会有更多的开销。特别是在这个安全连接的时代,交换TLS证书的握手可以是几个数据包,大约为~50ms。
因此,虽然TCP keepalive每分钟可以为您节省一毫秒,但HTTP keepalive可以为每个请求节省数十毫秒。对于每分钟生成多个 HTTP 请求的应用,HTTP保持活动状态可以在聚合中节省大量时间。
另一方面,TCP保持连接将可以忽略不计。
另请参阅:HTTP 保持活动状态持续时间和 TCP 超时持续时间之间的关系
那么为什么Nest包含打开TCP保持活动的选项呢?也许对于 Nest 开发人员来说,这是一个更好的问题。作为一名工程师同事,有时最好为所有可配置的可能性提供一个选项,即使只是为了完整性。