长连接&连接池的应用

Posted 51reboot运维开发

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了长连接&连接池的应用相关的知识,希望对你有一定的参考价值。


我们知道TCP是基于连接的协议,其实这个“连接”只是一个逻辑上的概念。在IP层看来, TCPUDP仅仅是内容上稍有差别而已。


TCP的“连接”仅仅是连接的两端对于四元组和sequence号的一种约定而已。

在有些文章里总会提到这名词、或者五元组,甚至七元组。虽然我很反对摆弄名词秀专业,但我们也要防止被“秀”。 其实很容易理解:


在性能比较敏感的程序中,为了节省TCP网络调用建立连接三次握手的时间, 很多程序都会选择采用复用之前已经建立过的连接的方法来优化。


再加上往往是“请求、响应、请求、响应”的模式,单个连接限制了QPS(Query Per Second)的提升。 所以会采取开启多个连接组成一个“池子”的方式来优化性能,我们称之为连接池。


HTTP的长连接


HTTP长连接,HTTP持久连接(HTTPpersistent connection,也称作HTTP keep-alive或HTTP connection reuse)是使用同一个TCP连接来发送和接收多个HTTP请求/应答, 而不是为每一个新的请求/应答打开新的连接的方法。


在HTTP 1.0 中, 没有官方的 keepalive 的操作。通常是在现有协议上添加一个指数。如果浏览器支持 keep-alive,它会在请求的包头中添加:


Connection: Keep-Alive



然后当服务器收到请求,作出回应的时候,它也添加一个头在响应中:


Connection: Keep-Alive



这样做,连接就不会中断,而是保持连接。当客户端发送另一个请求时,它会使用同一个连接。这一直继续到客户端或服务器端认为会话已经结束,其中一方中断连接。


在HTTP 1.1 中 所有的连接默认都是持续连接,除非特殊声明不支持。 HTTP 持久连接不使用独立的 keepalive 信息,而是仅仅允许多个请求使用单个连接。


然而,Apache 2.0 httpd 的默认连接过期时间是仅仅15秒,对于 Apache 2.2 只有5秒。 短的过期时间的优点是能够快速的传输多个web页组件,而不会绑定多个服务器进程或线程太长时间。


长连接&连接池的应用

Keep-Alive的优势


  • 较少的CPU和内存的使用(由于同时打开的连接的减少了)

  • 允许请求和应答的HTTP管线化

  • 减少了后续请求的延迟(无需再进行握手)

  • 报告错误无需关闭TCP连接


Keep-Alive的劣势


对于现在的广泛普及的宽带连接来说,Keep-Alive也许并不像以前一样有用。 web服务器会保持连接若干秒(Apache中默认15秒),这与提高的性能相比也许会影响性能。对于单个文件被不断请求的服务(例如图片存放网站),Keep-Alive可能会极大的影响性能, 因为它在文件被请求之后还保持了不必要的连接很长时间。


根据RFC2616,用户客户端与任何服务器和代理服务器之间不应该维持超过2个链接。代理服务器应该最多使用2×N个持久连接到其他服务器或代理服务器,其中N是同时活跃的用户数。这个指引旨在提高HTTP响应时间并避免阻塞。


但由于,TCP连接减少了,对于静态资源(图片、javascript、CSS)较多的网站, 性能反而可能会下降。


动静分离


为了规避上面说的对图片等静态资源的影响,大多数商业网站会启用独立的静态资源域名。从而保证主站的动态资源请求和静态资源的请求不会互相挤占连接。


动静分离同时还会有一个额外的好处

对于静态资源的请求,HTTP请求头里的Cookie等信息是没有用处的, 反而占用了宝贵的上行网络资源。用独立的域名存放静态资源后,请求静态资源域名就不会默认带上主站域的Cookie,从而解决了这个问题。


如下表:

长连接&连接池的应用






长连接&连接池的应用


关于Reboot:



Reboot QQ交流群

238757010

365534424



等着 与你一起 改变这世界






一、IT技术文章:

回复"1",查看——“ 如何深入了解linux

回复"2",查看——Python 自动化框架

回复"3",查看——Linux 运维职业规划

回复"4",查看—— 提升B格的命令技巧

回复"5",查看——“ 网络编程-从Apache到nginx

回复"6",查看—— 两个使用的Python 装饰器

回复"7",查看——“ Python 多线程、进程那些事

回复"8",查看——“ 1000,000 packets/s的挑战

回复"9",查看——“ Op危机,你嗅到了没?

回复"10",查看——“ 干货丨戏说非阻塞网络编程

回复"11",查看——“用Python写一个简单的监控系统

回复"12",查看——“ 提高你Python 编码效率的‘武林秘籍


二、最新课程:

回复"课程",查看——最新课程消息

回复"报名",查看——报名咨询方式

回复"Reboot",查看——Reboot简介


以上是关于长连接&连接池的应用的主要内容,如果未能解决你的问题,请参考以下文章

数据库连接池的工作原理以及这项技术的产生

IIS连接数IIS并发连接数IIS最大并发工作线程数应用程序池的队列长度应用程序池的

关于Binder连接池的跨应用使用方法

你真的了解:IIS连接数IIS并发连接数IIS最大并发工作线程数应用程序池的队列长度应用程序池的...

MySql & JDBC & 连接池 & 总结

关于 servlet 应用程序中的连接池的一些问题