我注意到 NEST 能够设置 TCP 保持事件状态。
这要解决什么问题?
我认为http keepalive应该足够了,NEST内部连接池默认实现了这个功能?
有人可以阐明这里的差异,以及我们应该使用哪些场景。
谢谢
最佳答案
不是 Nest 开发人员,但我确实运行了 managed Elasticsearch service 。虽然“保持事件”听起来很有值(value),但它对于 HTTP 连接比 TCP 连接更有值(value)。
Typically TCP Keepalives are sent every 45 or 60 seconds on an idle TCP connection, and the connection is dropped after 3 sequential ACKs are missed.
这听起来很方便,但如果您进行一些测量,就会发现在同一数据中心内建立 TCP 连接可能需要亚毫秒级的时间。
鉴于我们正在研究 Elasticsearch 事件,我们现在处于 HTTP 领域。 HTTP 连接可能会产生更多的开销。特别是在当今安全连接的时代,交换 TLS 证书的握手可以是多个数据包,并且大约需要 50 毫秒。
因此,虽然 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 开发人员来说,也许这是一个更好的问题。作为一名工程师同事,有时最好包含所有可配置可能性的选项,即使只是为了完整性。
关于elasticsearch - 为什么 NEST 包括 TCP 保持事件状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55820250/