我注意到NEST可以设置TCP保持活动状态。
这是要解决什么问题?
我认为http保持活动应该足够了,这在NEST的内部连接池中是默认实现的吗?
有人可以说明这里的差异以及我们应该使用哪种方案。
谢谢
答案 0 :(得分:2)
不是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 < / em>保持活动状态可以节省大量时间。
另一方面,TCP keepalive可以忽略不计。
另请参阅:Relation between HTTP Keep Alive duration and TCP timeout duration
那么为什么Nest会包含启用TCP保持活动状态的选项?对于Nest开发人员来说,也许是一个更好的问题。作为一名资深工程师,有时只是为了完整起见,最好为所有可配置的可能性包括一个选项。