【问题标题】:Why does NEST include TCP keep alive?为什么 NEST 包含 TCP 保持活动?
【发布时间】:2019-04-23 22:30:25
【问题描述】:

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

这是要解决什么问题?

我觉得http keep alive应该够了,在NEST的内部连接池中默认实现了?

有人可以解释一下这里的区别,以及我们应该使用什么场景。

谢谢

【问题讨论】:

    标签: elasticsearch nest keep-alive tcp-keepalive


    【解决方案1】:

    我不是 Nest 开发人员,但我运行的是 managed Elasticsearch service。虽然“保持活力”听起来很有价值,但对于 HTTP 连接来说,它比 TCP 连接更有价值。

    Per Wikipedia:

    通常在空闲 TCP 连接上每 45 或 60 秒发送一次 TCP Keepalive,并在丢失 3 个连续 ACK 后断开连接。

    这听起来很方便,但如果您进行一些测量,建立 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 开发人员来说,这可能是一个更好的问题。作为一名工程师,有时最好为所有可配置的可能性包含一个选项,即使只是为了完整性。

    【讨论】:

      猜你喜欢
      • 2016-10-24
      • 2022-01-10
      • 1970-01-01
      • 2012-03-09
      • 2015-12-26
      • 2019-10-19
      • 1970-01-01
      • 2010-11-19
      相关资源
      最近更新 更多