我注意到NEST能够设置TCP保持活动状态。
这个试图解决的问题是什么?
我认为http keep alive应该足够了,这是默认在NEST的内部连接池中实现的吗?
有人可以说明这里的差异,以及我们应该使用的场景。
谢谢
不是Nest开发人员,但我确实运行了managed Elasticsearch service。虽然“保持活力”听起来很有价值,但对于HTTP连接而言,它比TCP连接更有价值。
通常,TCP Keepalive在空闲TCP连接上每隔45或60秒发送一次,并且在错过3次连续ACK后连接将被丢弃。
这听起来很方便,但是如果你进行一些测量,在同一个数据中心内建立TCP连接可能是亚毫秒级。
鉴于我们正在研究Elasticsearch活动,我们现在处于HTTP领域。并且HTTP连接可能会有更多的开销。特别是在安全连接的这个时代,交换TLS证书的握手可以是几个数据包,大约需要50ms。
因此,虽然TCP keepalive每分钟可以节省一毫秒,但HTTP keepalive可以为每个请求节省数十毫秒。对于每分钟生成多个HTTP请求的应用程序,HTTP keep-alive可以在聚合中节省大量时间。
另一方面,TCP keepalive可以忽略不计。
另见:Relation between HTTP Keep Alive duration and TCP timeout duration
那么为什么Nest包含打开TCP keep-alive的选项呢?也许对于Nest开发人员来说,这是一个更好的问题。作为一名工程师,有时候为所有可配置的可能性包含一个选项是很好的,只是为了完整性。