连接池原理设计并不难
目录
- 连接
- 连接池产生原因
- 连接池实现原理
- 小结
一、连接
什么是连接?
连接,代表上游对下游的通信或会话。比如客户端连接服务器、服务器连接数据存储等
连接其通信的基本步骤,很类似 HTTP 操作:
1、上游对下游建立一个连接(客户端与服务器需要建立连接。比如点击某个超级链接)
2、上游通过连接,发送请求(建立连接后,客户端发送请求给服务器)
3、上游通过连接,收到响应(服务器接到请求后,响应其响应信息)
4、上游关闭连接,释放连接资源(客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接)
file
再深入点,HTTP 持久连接是什么?HTTP 持久连接是指用同一个 HTTP 底层的 TCP 连接来发送/接收多个 HTTP 请求/响应。扩展点,只需要在头部设置:
Connection: Keep-Alive
为什么要有持久连接?每次都是从建立连接开始也可以达到结果,并且最后是关闭连接释放资源。这就是引出连接池产生原因。
二、连接池产生原因
先看一下常见的 mysql-connector-java 包驱动下面 ConnectionImpl 源码:
trackConnection() execSQL() commit() close()
对 MySQL 多半是进行连接(connection),增删改查并提交(execSQL、commit),关闭连接(close)操作,然后实现业务相关逻辑。其操作也很清晰:
1、建立连接
2、发送请求(数据的 CRUD 操作)
3、关闭连接
但,为啥会需要有连接池?
其实在业务量流量不大,并发量也不大的情况下,连接临时建立完全可以。
但并发量起来,达到百级、千级,其中建立连接、关闭连接的操作会造成性能瓶颈,所以得考虑连接池来优化上述 1 和 3 操作:
1、取出连接(业务服务启动时,初始化若干个连接,放在连接存储中)
2、发送请求(当有请求,从连接存储中中取出)
3、放回连接(执行完毕,连接放回连接存储中)
这里对连接存储的数据结构,并维护连接,就是连接池。
三、连接池实现原理
连接池原理,可以具体看下阿里巴巴 Druid 包的 DruidDataSource 源码:
DruidConnectionHolder[] connections; createConnection() getConnection() recycle()
连接池实现原理也不难,DruidDataSource 即德鲁伊连接池,可以核心设计接口:
1、createConnection:服务启动 init ,会创建一批指定数量的连接放入 connections 数组
2、getConnection:这样每次请求,不会新建一个连接。而是从 DruidConnectionHolder[] connections 数组中取出一个连接
3、recycle:每次请求结束后,不是关闭连接,而是回收连接到 connections 数组
其中有个重入锁 ReetrantLock,具体作用如下:
- 获取一个连接,锁住
- 返回该连接,使用连接
- 使用完毕,回收连接,并释放锁
四、小结
核心连接池也就这么点东西,具体还需要考虑其他点如下:
- 连接池连接设计遵守 LRU 策略,性能的关键点是连接是否 LRU 方式重用。LRU 资料:https://yq.aliyun.com/articles/70456
- 通过 Hash 去连接,实现串行化
- 可以自动扩容连接数
- 连接数过多,可以自动关闭连接,释放资源
- 等等
文章来源:https://my.oschina.net/jeffli1993/blog/3029248

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
从Python安装到语法基础,这才是初学者都能懂的爬虫教程
Python和PyCharm的安装:学会Python和PyCharm的安装方法 变量和字符串:学会使用变量和字符串的基本用法 函数与控制语句:学会Python循环、判断语句、循环语句和函数的使用 Python数据结构:理解和使用列表、字典、元组和集合 Python文件操作:学习使用Python建立文件并写入数据 Python面向对象:了解Python中类的定义和使用方法 01 Python与PyCharm安装 “工欲善其事,必先利其器”,本节介绍Python环境的安装和Python的集成开发环境(IDE)PyCharm的安装。 Python安装(Windows、Mac和Linux) 当前主流的Python版本为2.x和3.x。由于Python 2第三方库更多(很多库没有向Python 3转移),企业普遍使用Python 2。如果作为学习和研究的话,建议使用Python 3,因为它是未来的发展方向。所以本教程选择Python 3的环境。 1.1 Windows中安装Python 3 在Windows系统中安装Python 3,请参照下面的步骤进行。 打开浏览器,访问Python官网(ht...
- 下一篇
【云周刊】第212期:发布SaaS加速器:我们不做SaaS,我们只做SaaS生态的推进者和守护者
欢迎订阅云周刊 本期头条 发布SaaS加速器:我们不做SaaS,我们只做SaaS生态的推进者和守护者 上午的演讲过程当中,大家都听到了,整个阿里云的战略是不做SaaS坚持被集成。如何让合作伙伴以及客户来集成阿里云,关键是如何能够帮助合作伙伴构建业务系统,构建企业应用和SaaS,进而覆盖到更多的企业和客户,这是我们一个核心的内容。下面将重点介绍一下我们思考,为什么要做这件事情?与此同时,对于合作伙伴来说有什么样的帮助?我会具体介绍一下。点击查看 寻找 K8s 1.14 Release 里的“蚌中之珠”天马行空脚踏实地,阿里巴巴有群百里挑一的天才应届生 生于疼痛的阿里云我是如何拿到蚂蚁金服实习 offer 的我在阿里云做前端 技术干货 2019阿里云峰会•北京回顾合集:PDF下载2009年,阿里云正式成立;在过去的10年里,阿里云引领了国内云计算
相关文章
文章评论
共有0条评论来说两句吧...