容器云问题1:容器云spring boot应用TCP连接释放问题:Keep-Alive
在容器云环境中,会存在容器应用TCP连接复用,因为容器的端口资源需要进行有效的释放和复用,因此容器底层实际上已经释放了这个连接。我的spring boot应用中使用的是apache httpclient框架。一般完整的一次http交互,3次握手建立连接,4次握手关闭链接。
1.1持久连接
Web 客户端经常会打开到同一个站点的连接。比如,一个Web 页面上的大部分内嵌图片通常都来自同一个Web 站点,而且相当一部分指向其他对象的超链通常都指向同一个站点。因此,初始化了对某服务器HTTP 请求的应用程序很可能会在不久的将来对那台服务器发起更多的请求(比如,获取在线图片)。这种性质被称为站点局部性(site locality)。
HTTP/1.1(以及HTTP/1.0 的各种增强版本) 允许HTTP 设备在事务处理结束之后将TCP 连接保持在打开状态,以便为未来的HTTP 请求重用现存的连接。在事务处理结束之后仍然保持在打开状态的TCP 连接被称为持久连接。非持久连接会在每个事务结束之后关闭。持久连接会在不同事务之间保持打开状态,直到客户端或服务器决定将其关闭为止。
重用已对目标服务器打开的空闲持久连接,就可以避开缓慢的连接建立阶段。而且,已经打开的连接还可以避免慢启动的拥塞适应阶段,以便更快速地进行数据的传输。目前,各种Http请求框架默认是打开keep-alive,以提高连接性能。
1.1.1 HTTP/1.0的持久连接
在 HTTP/1.0 中,keep-alive 并 不 是 默 认 使 用 的。 客 户 端 必 须 发 送 一 个Connection: Keep-Alive 请求首部来激活keep-alive 连接。虽然,目前keep-alive 已经不再使用了,而且在当前的HTTP/1.1 规范中也没有对它的说明了。但浏览器和服务器对keep-alive 握手的使用仍然相当广泛,因此