elasticsearch - 为什么 NEST 包括 TCP 保持事件状态?

标签 elasticsearch nest keep-alive tcp-keepalive

我注意到 NEST 能够设置 TCP 保持事件状态。

这要解决什么问题?

我认为http keepalive应该足够了,NEST内部连接池默认实现了这个功能?

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

谢谢

最佳答案

不是 Nest 开发人员,但我确实运行了 managed Elasticsearch service 。虽然“保持事件”听起来很有值(value),但它对于 HTTP 连接比 TCP 连接更有值(value)。

Per Wikipedia :

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/

相关文章:

apache-spark - 从Spark Streaming Job写入多个ES接收器

elasticsearch - Elasticsearch中日期格式的有效值范围(非查询范围)

performance - Elasticsearch .NET Nest API与HTTP RESTful API性能

c# - ElasticSearch 索引上的自定义属性

http - Windows Phone 在 1 分钟后超时 http 请求

php - 使用 PHP Curl 库的持久/保持事件 HTTP?

python - 如何在 Python 中将 Elasticsearch 批量索引与单个 JSON 文件结合使用

elasticsearch - Elasticsearch 聚合分页问题

c# - 在 Elasticsearch Nest 中过滤掉带有子项的行

http - 与 RestSharp 的持久 HTTP 连接