2

我注意到 NEST 能够设置 TCP 保持活动状态。

这试图解决什么问题?

我以为http keep alive就够了,在NEST的内部连接池中默认实现了吗?

有人可以阐明这里的差异,以及我们应该使用哪些场景。

谢谢

4

1 回答 1

2

不是 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 开发人员来说,这可能是一个更好的问题。作为一名工程师,有时最好为所有可配置的可能性提供一个选项,即使只是为了完整性。

于 2019-04-25T01:33:19.370 回答