泥瓦匠进阶:连接池原理设计并不难
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢!
目录
连接池产生原因 连接池实现原理TEMPERANCE:Eat not to dullness;drink not to elevation.
节制:食不过饱,饮不过量。
什么是连接?
连接,代表上游对下游的通信或会话。比如客户端连接服务器、服务器连接数据存储等
连接其通信的基本步骤,很类似 HTTP 操作:
再深入点,HTTP 持久连接是什么?HTTP 持久连接是指用同一个 HTTP 底层的 TCP 连接来发送/接收多个 HTTP 请求/响应。扩展点,只需要在头部设置:
Connection: Keep-Alive
为什么要有持久连接?每次都是从建立连接开始也可以达到结果,并且最后是关闭连接释放资源。这就是引出连接池产生原因。
二、连接池产生原因先看一下常见的 mysql-connector-java 包驱动下面 ConnectionImpl 源码:
trackConnection() execSQL() commit() close()
对 MySQL 多半是进行连接(connection),增删改查并提交(execSQL、commit),关闭连接(close)操作,然后实现业务相关逻辑。其操作也很清晰:
但,为啥会需要有连接池?
其实在业务量流量不大,并发量也不大的情况下,连接临时建立完全可以。
但并发量起来,达到百级、千级,其中建立连接、关闭连接的操作会造成性能瓶颈,所以得考虑连接池来优化上述 1 和 3 操作:
这里对连接存储的数据结构,并维护连接,就是连接池。
三、连接池实现原理连接池原理,可以具体看下阿里巴巴 Druid 包的 DruidDataSource 源码:
DruidConnectionHolder ] connections; createConnection() getConnection() recycle()
连接池实现原理也不难,DruidDataSource 即德鲁伊连接池,可以核心设计接口:
其中有个重入锁 ReetrantLock,具体作用如下:
获取一个连接,锁住 返回该连接,使用连接 使用完毕,回收连接,并释放锁核心连接池也就这么点东西,具体还需要考虑其他点如下:
连接池连接设计遵守 LRU 策略,性能的关键点是连接是否 LRU 方式重用。LRU 资料:https://yq.aliyun.com/articles/70456 通过 Hash 去连接,实现串行化 可以自动扩容连接数 连接数过多,可以自动关闭连接,释放资源(关注微信公众号,领取 Java 精选干货学习资料)
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/60448.html
aliyun通信阿里相关文章
- [编译原理] 简易计算式的翻译程序设计
- 继电器驱动原理详解(Relay)[通俗易懂]
- 编译原理实验1词法分析器的设计_编译原理实验一 词法分析
- SpringCloudFeign原理剖析
- 微服务架构开发实战:SpringCloudBus的设计原理
- 八路抢答器一个数码管C语言,八路抢答器设计 – 八路抢答器电路设计方案汇总(五款模拟电路设计原理及工作原理详细)…「建议收藏」
- kafka零拷贝原理_通俗易解中的解是什么意思
- MCS-51单片机原理_51单片机的基本结构
- 【源码阅读计划】浅析 Java 线程池工作原理及核心源码
- 第十八篇: 揭秘 Redux 设计思想与工作原理(上)
- 负载均衡 - 高并发网关设计原理与实践
- 【编译原理】S语言词法分析器设计-附雪景图
- AJAX异步请求原理
- MongoDB 数据库设计:从基础原理到优化实践(mongodb数据库设计)
- 深入解析Linux源码——从分层结构到关键算法,透彻解析Linux内核的工作原理和设计思路。(linux源码解析)
- 探究MSSQL表空间名的设计原理(mssql表空间名)
- 解Redis集群从原理到设计图形解析(redis集群设计原理图)
- Redis让秒杀更轻松深入浅出认识Redis设计原理(redis 设计原理)
- Oracle跨数据库查询并插入实现原理及代码