TCP keepalive、HTTP keep-alive和长短链接的思考记录

TCP keepalive(保活机制)

TCP keepalive是TCP协议的保活机制。

为什么说保活呢,因为TCP连接建立后是一直存在的,虽然理想情况下,这个TCP连接的通讯链路肯定是能通的,但是现实情况是会受一些其他因素影响导致通讯链路不同,但是TCP连接还是在客户端和服务端之间保持着,也就是双方都还是维护着消耗着一些资源。

应用层心跳保活机制

image-20221125144644777

image-20221125144740188

HTTP keep-alive

image-20221107105622444

HTTP是基于TCP的。但是早期的1.0版本没有keep-alive,只能每次请求都建立一个TCP链接,请求完毕就把链接关闭。HTTP1.1版本开始加入keep-alive,可以复用一个TCP链接。但是有一个超时时间keep-alive timeout,时间到了最后还是会关闭这个链接。上图是文件nginx.conf配置的http keep-alive timeout。

 

HTTP协议的Keep-Alive意图在于TCP连接复用,同一个连接上串行方式传递请求-响应数据;TCP的Keepalive机制意图在于探测连接的对端是否存活,提高TCP连接的可靠性和稳定性,避免死连接的问题,同时也可以减少网络资源的占用,提高网络的效率。(在一定的时间内没有数据交换,可能会出现网络故障、设备故障或软件故障等问题,这将导致连接不能正常工作,但连接仍然保持打开状态,这被称为死连接。)

长短链接

简单说每次请求都关闭链接就是短链接,不关闭的话就是长连接。

需要注意的是,长连接并不意味着连接会一直保持开启状态,通常都会在一段时间内没有活动时自动关闭连接,以避免资源浪费。例如,在TCP协议中,可以使用心跳包来检测连接是否还处于活动状态,从而避免长时间的空闲连接,节省系统资源。

长短链接的优缺点那就很明显了,长链接耗资源,但实时性好,短链接时效差,节省资源。

由于用户激增,nacos1.0版本http短链接不能满足需求,nacos2.0版本使用了长连接,长连接和短连接的⼀个主要差别在于在整体连接稳定时,服务端需要⼀个 rebalance 的机制,将集群视角的连接数重新洗牌分配,趋向另外⼀种稳态。这时nacos服务器集群的负载均衡使用的是 客户端随机+服务端柔性调整的策略。(Nacos 1.0 版本也提供了 HTTP 长连接的支持,可以通过配置文件进行开启。在启用 HTTP 长连接后,Nacos 客户端可以使用 Keep-Alive 功能来维护连接,以减少连接建立和断开的开销,提高客户端的性能和效率。同时,Nacos 1.0 版本还提供了连接池等功能来进一步优化客户端的连接管理。)

参考:

  https://blog.csdn.net/chrisnotfound/article/details/80111559

  《NACOS架构与原理》

 
posted @   road2master  阅读(170)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示