为什么NEST包含TCP保持活动?

时间:2019-04-23 22:30:26

标签: elasticsearch nest keep-alive tcp-keepalive

我注意到NEST可以设置TCP保持活动状态。

这是要解决什么问题?

我认为http保持活动应该足够了,这在NEST的内部连接池中是默认实现的吗?

有人可以说明这里的差异以及我们应该使用哪种方案。

谢谢

1 个答案:

答案 0 :(得分:2)

不是Nest开发人员,但我确实运行managed Elasticsearch service。 “保持生命”听起来很有价值,但对于 HTTP 连接而言,它比 TCP 连接更有价值。

Per Wikipedia

  

通常,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开发人员来说,也许是一个更好的问题。作为一名资深工程师,有时只是为了完整起见,最好为所有可配置的可能性包括一个选项。