如何实现一个连接池?一文带你深入浅出,彻底搞懂

一文搞懂 Spring Boot:Java 开发的 “开箱即用奶茶套装” SpringBoot是简化Java开发的利器,通过自动配置、依赖管理和内嵌服务器三大核心功能大幅提升开发效率。它内置Tomcat服务器,采用starter依赖管理解决版本冲突问题,并提供简洁的配置文件。开发者只需关注业务逻辑,3分钟即可搭建可运行的Web项目(如创建HelloWorld接口)。同时需注意避免依赖版本冲突、端口占用和启动类位置错误等问题。SpringBoot让Java开发者摆脱繁琐配置,实现快速项目落地,成为现代Java后端开发的标准框架。 阅读详情

-     前言     -

【2w1h】是技术领域中一种非常有效的思考和学习方式,即What、Why和How;坚持【2w1h】,可以快速提升我们的深度思考能力。

今天我们通过【2w1h】方式来讨论“连接池”:什么是连接池(what)?为什么需要连接池(why)?怎样做一个连接池(how)?

-      什么是连接池?     -

深入思考连接池的本质,但不要思考的过于复杂!

“池”是一种非常形象化的描述,它是一种容器,做储存之用;在编程中我们往往使用数组、链表、队列、map来表达。

“连接”是网络中用于传输数据的通道;“连接”才是我们要真正去使用的对象,而“池”是用来管理“多个连接”的一种方式。

如果没有用“池”来统一管理“连接”,“连接”将散布在程序各处;那为了使用方便,我们往往会在使用时建立连接,使用完毕后,就关闭连接。所以“连接池”给我们提供了使用“连接”的方便。

同时,池是做储存之用的,所以“连接池”中的“连接”肯定是已经建立好的长连接,比如tcp连接、websocket连接等,即取即用,用完放回。如果没有真正理解“连接池”的本质,在面试中可能会出现“http连接池”的笑话!

根据下游类型,我们常见有数据库连接池、缓存连接池、服务连接池,如下图所示:

图一 数据库连接池

图二 缓存连接池

 

图三 服务连接池

在编程中,我们还经常会碰到进程池、线程池、协程池、内存池、对象池等。

-      为什么需要连接池?     -

除了连接池能非常方便的对连接进行管理外,一句话,在高吞吐时连接池大大提高了数据传输的效率。

从两个方面说:

1、避免反复的三次握手和四次握手

长连接的建立需要进行三次握手,而连接的释放需要进行四次握手,这是发生在系统层面的两个动作,对于单条连接来说耗时微乎其微,但在高吞吐场景时,耗时则不能忽略。

所以连接池的即取即用和用完放回的特性,避免了大量三次握手和四次握手的无效耗时,节省了系统资源。

2、 增加并行车道,实现全双工并行

数据通信包括单工、半双工和全双工。单工通信如下图,数据只能从A到B,不符合访问下游服务的场景。

图四 单工通信

半双工通信如下图,数据可以从A到B,也可从B到A,但是同一时刻只能一个方向上进行数据传输,通道利用率是50%。

 

图五 半双工通信

全双工通信如下图,可同时存在从A到B和从B到A的数据传输,通道的利用率是100%。长连接就是全双工通信。

 

图六 全双工通信

在IO密集型的互联网应用中,一条全双工通信通道仍然无法满足数据吞吐的需求时,该如何解决?

在互联网性能测试指标中有这样一个公式:

QPS(吞吐量) = 并发数 / 平均响应时间

在平均响应时间不变的情况下,适度增加并发数可以提升吞吐量;所以采用多条全双工通信的方式可以在一定程度上(平均响应时间没有大幅增加)提高吞吐量,而连接池则就最好的实现方式。

总结一下:为什么需要连接池?

(1)方便管理连接;

(2)避免反复三次握手和四次握手;

(3)更好地实现全双工并行。

-      怎样做一个连接池?     -

实现一个连接池,最关键的是均衡和保活,如下图所示:

图七 连接池实现原理

该连接池的“池”通过队列数据结构进行实现,队列先进先出的特性保证了使用连接的均衡性,每一条连接都可以均匀的被使用到。

连接池对外提供get()和free()两个API,get()用于从队首“出队”获取一条可用连接,free()用于将使用完的连接从对尾“入队”释放到队列中。

业务代码在低峰时会降低get()动作,所以连接池中的连接在长时间不用时会导致失效,此时保活线程在监测到get()的使用频率较低时,会模拟业务程序调用get()获取连接后发送心跳包,然后再通过free()将被保活的连接放回队列中,达到连接池中所有连接保活的目的。

 

在充分理解上述内容后,可以了解高级连接池的扩展知识!

-      高级连接池     -

高级连接池通常应用在微服务系统中,如下图:连接池连接下游多个节点。

图八 高级连接池

高级连接池具备这样几个特性:

1、 高可用:下游任意一个server 宕机时,连接池会关闭相关无效连接,防止被client访问;

2、 高可扩展:下游增加一个server节点时,连接池会发现并建立到新server节点的连接,供client访问;

3、 负载均衡:连接池会根据下游server的服务能力的高低分配数据请求;

4、 中间件:当下游server是类MySQL数据库并分片时,连接池会将请求打在相应的数据节点上,并对数据进行聚合。

古之立大事者,不惟有超世之才,亦必有坚忍不拔之志!

坚持技术学习,必有所成!

《深入浅出:图解淘宝分布式数据库TDDL(及开源替代方案)》 维度TDDL (历史)ShardingSphere (现在)TiDB (未来)架构模式Client原生分布式运维复杂度高中低SQL 能力弱强极强扩展性难易极易一句话总结TDDL 是阿里电商崛起的基石,而今天,​ 是它的开源继承者,TiDB​ 则是架构演进的下一站。以上是我在电商中台领域的一些实践,目前我正在这个方向进行更深入的探索/提供相关咨询与解决方案。如果你的团队有类似的技术挑战或合作需求,欢迎通过[我的GitHub/个人网站/邮箱]与我联系。 阅读详情

相关推荐

注意力机制详解

注意力机制详解Attention机制由来Attention定义Encoder-Decoder框架存在问题:Attenion机制的引入Attention机制的类别Hard AttentionSoft AttentionGlobal AttentionLocal AttentionSelf AttentionMulti-head Attention附录—Transformer全局视角Tensor视角Encoder部分Self-AttentionSelf-Attention向量计算Self-Attention的矩

weixin_43236310的博客 1万+

关于连接池的原理和实现方法

连接池的原理:为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。 连接池的定义:它通过构造函数初始化连接的最大上限,通过一个双向队列来维护

CodeLife 829

GD32重映射实战:从部分映射到完全映射的配置解析

本文深入解析GD32微控制器的重映射功能,以定时器1的PWM通道为例,详细阐述了从部分映射到完全映射的实战配置流程。文章重点介绍了AFIO模块的核心作用、配置寄存器操作以及关键的避坑指南,旨在帮助开发者灵活优化PCB布局并解决引脚资源冲突,从而高效利用芯片外设功能。

k6l7m8n9的博客 694

连接池的三种实现方式

关于连接池:关于数据库的连接过程,我们经常用到的是JDBC技术,一般对于初学者来说都是通过定义一个连接方法和一个释放资源的方法,可是这样的方式存在一个弊端,就是当连接数非常多的时候,我们不断使用连接和关闭,这样比较消耗系统资源,这时候我们就需要引入连接池。 关于连接池的思想是,我们先创建一个池子,之后创建连接存放到池子中去,这时候我们再从池子中直接通过拿取连接来进行使用,使用完之后再归还给池子即...

huolan52的博客 3725

别再怕DRIVER_VERIFIER_DMA_VIOLATION蓝屏:手把手教你用WinDbg分析IOMMU与驱动冲突

本文深入解析DRIVER_VERIFIER_DMA_VIOLATION蓝屏错误,从IOMMU原理到实战排错,手把手教你使用WinDbg分析驱动冲突。通过理解DMA与IOMMU的核心机制、搭建分析环境、解读DMAR表与设备拓扑,最终定位问题驱动并提供解决方案,帮助开发者和IT运维人员有效应对此类系统崩溃问题。

weixin_30298497的博客 803

光模块组成

时钟恢复电路(Clock Data Recovery,简称CDR)是光模块中的关键组成部分,CDR的作用主要是从接收到的信号中提取出数据序列,并且恢复出与数据序列相对应的时钟时序信号,从而还原接收到的具体信息。因为光信号传输至一定距离的时候,通常是长距离传输,其波形会出现一定程度的失真,接收端接收到的信号是一个个长短不一的脉冲信号,这个时候在接收端,我们就无法得到我们需要的数据。所以,这个时候就需要有信号的再生,信号的再生功能为再放大、再整形和再定时,其中的再定时指的就是CDR时钟数据恢复。

han_better的博客 5723

如何实现一个连接池?一文带你深入浅出,彻底搞懂!

- 前言 -【2w1h】是技术领域中一种非常有效的思考和学习方式,即What、Why和How;坚持【2w1h】,可以快速提升我们的深度思考能力。今天我们通过【2w1h】方...

musicml的博客 2151

原恒星尘埃生长的三维MHD模拟与湍流效应研究

星际尘埃演化是恒星形成过程中的关键环节,其动力学行为直接影响行星系统的构建。通过磁流体力学(MHD)模拟可以揭示尘埃颗粒从微米级到行星胚胎尺度的生长机制,其中湍流效应通过改变碰撞频率和密度结构发挥双重作用。最新研究采用COALA-RAMSES耦合框架,实现了包含自洽尘埃生长的三维非理想MHD模拟,量化了不同物理环境下尘埃尺寸分布的演化规律。这些发现不仅为解释ALMA观测数据提供理论依据,也对行星形成初期条件约束具有重要意义,特别是在湍流参数化与尘埃生长速率关系方面取得突破。

weixin_30988079的博客 383

Mysql数据库连接池的简单实现(基于C++11), 基础学完, 包教包会.

Mysql数据库连接池的简单实现(基于C++11), 基础学完, 包教包会. 保姆级别教程, 作为简单上手项目再合适不过了

小杰312的博客 2010

数据分析之AB测试基础知识

在 A/B 测试中,零假设是两组的指标是相同的,当假设检验推断出两组指标不同,但事实上两组指标相同时,就是第一类错误。

qq_45727498的博客 561

Vue2 - 详细实现安装西瓜视频 xgplayer 插件详细配置及使用教程,利用西瓜视频播放器播放 mp4、flv、hls 格式视频文件及视频推流(直播或监控摄像头画面),支持移动端H5及PC网站!

vue2,nuxt2,西瓜视频,xgplayer,插件组件,xgplayer-hls,xgplayer-flv,xgplayer-mp4,播放视频点播和直播视频流,自定义播放器样式,截屏,监控视频,vue使用西瓜播放器播放flv、hls、mp4视频,截屏按钮,直播流,报错,黑屏,加载失败,苹果ios不兼容,重连,怎么改样式,很卡,详细教程,监控实时播放推流,倍速播放,在线flv在线推流地址,HLS播放,vue西瓜播放器,vue如何使用西瓜视频插件做直播推流回流,视频点播,flv在线视频流播放,截图功能,利用

🏆 前端领域优质创作者 1万+

mybatis小记——数据库连接池实现

简单实现 说到数据库连接池的实现,可能大家并不陌生,应该都或多或少的实现过,那么先来说说一个简单的数据库连接池的实现。 既然是连接池,首先得有连接,然后有池子(废话),连接使用jdk的Connection,池子使用一个List<Connection>即可,需要连接的时候从list中获取,如果list中没有那么就新new一个并加入到list中就可以了。使用完成之后,将连接放回list...

m47838704的专栏 2868

Django框架中settings文件的部署建议

为了更好地管理开发和生产环境的配置,建议将settings文件分为多个文件,分别用于不同的环境。然后,通过在启动应用程序时指定不同的settings文件,来加载相应的配置。在Django框架中,settings.py文件是非常重要的配置文件,它包含了项目的各种设置和选项。在Django框架中,settings.py文件是非常重要的配置文件,它包含了项目的各种设置和选项。可以使用Python的。为了更好地管理开发和生产环境的配置,建议将settings文件分为多个文件,分别用于不同的环境。

WELL_CODER的博客 129

3连接池_如何实现一个连接池?一文带你深入浅出,彻底搞懂

- 前言 -【2w1h】是技术领域中一种非常有效的思考和学习方式,即What、Why和How;坚持【2w1h】,可以快速提升我们的深度思考能力。今天我们通过【2w1h】方式来讨论“连接池”:什么是连接池(what)?为什么需要连接池(why)?怎样做一个连接池(how)?- 什么是连接池? -深入思考连接池的本质,但不要思考的过于复杂!“池”是一种非常形象化的描述,它是一种容器,做储存之用;在编程...

weixin_31173113的博客 187

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

3连接池_如何实现一个连接池?一文带你深入浅出,彻底搞懂!

- 前言 -【2w1h】是技术领域中一种非常有效的思考和学习方式,即What、Why和How;坚持【2w1h】,可以快速提升我们的深度思考能力。今天我们通过【2w1h】方式来讨论“连接池”:什么是连接池(what)?为什么需要连接池(why)?怎样做一个连接池(how)?- 什么是连接池? -深入思考连接池的本质,但不要思考的过于复杂!“池”是一种非常形...

weixin_34082139的博客 185

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

一个程序如何连接到外网_如何实现一个连接池?一文带你深入浅出,彻底搞懂...

- 前言 -【2w1h】是技术领域中一种非常有效的思考和学习方式,即What、Why和How;坚持【2w1h】,可以快速提升我们的深度思考能力。今天我们通过【2w1h】方式来讨论“连接池”:什么是连接池(what)?为什么需要连接池(why)?怎样做一个连接池(how)?- 什么是连接池? -深入思考连接池的本质,但不要思考的过于复杂!“池”是一种非常形象化的描述,它是一种容器,做储存之用;在编程...

weixin_39837607的博客 350

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

一篇搞懂TCP、HTTP、Socket、Socket连接池

前言 ​ 作为一名开发人员我们经常会听到HTTP协议、TCP/IP协议、UDP协议、Socket、Socket长连接、Socket连接池等字眼,然而它们之间的关系、区别及原理并不是所有人都能理解清楚,这篇文章就从网络协议基础开始到Socket连接池,一步一步解释他们之间的关系。 七层网络模型 ​ 首先从网络通信的分层模型讲起:七层模型,亦称OSI(Open System Interconnection)模型。自下往上分为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。所有有关通信的都离不

肖邦的夜曲的专栏 547

深入浅出RPC框架:从原理到实践,一文搞懂分布式通信核心

RPC框架是分布式系统通信的关键技术,其核心价值在于简化远程调用、提升开发效率和系统性能。文章详细解析了RPC的工作原理,包括服务发现、代理调用、序列化和网络传输等关键流程,并对比了Dubbo、gRPC、Thrift和OpenFeign四大主流框架的特性与适用场景。针对不同技术栈需求,提供了选型建议:Java生态推荐Dubbo,多语言架构建议gRPC,追求极致性能选择Thrift,Spring Cloud环境适用OpenFeign。理解RPC框架对构建高效分布式系统具有重要意义。

cx1050306424的博客 975

一文搞懂Nginx:六大核心场景实战配置详解

从安装到生产级配置,覆盖静态服务、反向代理、负载均衡、HTTPS、限流等六大核心场景,附生产级完整配置模板,直接抄作业

雨1986的博客 1192

一文搞懂云网络核心机制与最佳实践,架构师都在收藏

云网络就像是互联网时代的"高速公路系统",连接着数以万计的应用和服务。对于架构师来说,掌握云网络的核心机制不仅是技术能力的体现,更是设计高可用、高性能系统的基础。本文将用最通俗易懂的方式,带你深入了解云网络的奥秘。

TechVision大咖圈聚合全球科技大咖,洞察AI、云计算、大数据等前沿趋势,为企业决策者提供智见未来的转型路径。 998

java队列_如何彻底搞懂 Java 数据结构?优快云 博文精选

作者 | 张振华.Jack责编| 郭芮出品 |优快云 博客本文和大家一起来重温《Java数据结构》经典之作。Java数据结构 要理解Java数据结构,必须能清楚何为数据结构?数据结构:Data_Structure,它是储存数据的一种结构体,在此结构中储存一些数据,而这些数据之间有一定的关系。而各数据元素之间的相互关系,又包括三个组成成分,数据的逻辑结构,数据的存储结构和数据运算结构...

weixin_39742568的博客 208

什么是设计模式?一文理解,通俗易懂!

设计模式是软件开发中一些经过验证的、可重复使用的解决方案,它们帮助程序员解决常见的编程问题。其实在了解了它的来历后,对涉及模式就有一定理解了,顾名思义,就是模式,什么模式,开发设计的模式。可以把设计模式想象成在烹饪中的食谱:它提供了一种做菜的方式,虽然你可以想怎么做就怎么做,但使用经典的食谱可以让你更快地做出美味的菜肴。

m0_62056231的博客 1427

a - 数据结构实验之串一:kmp简单应用_如何彻底搞懂 Java 数据结构?优快云 博文精选...

作者 | 张振华.Jack责编| 郭芮出品 |优快云 博客本文和大家一起来重温《Java数据结构》经典之作。Java数据结构 要理解Java数据结构,必须能清楚何为数据结构?数据结构:Data_Structure,它是储存数据的一种结构体,在此结构中储存一些数据,而这些数据之间有一定的关系。而各数据元素之间的相互关系,又包括三个组成成分,数据的逻辑结构,数据的存储结构和数据运算结构...

weixin_39874809的博客 75

深入浅出数据库变更:有锁 DDL 与无锁 DDL 的全方位对比

摘要:本文对比了数据库DDL变更中的有锁与无锁方案。有锁变更通过排他锁和COPY算法实现,简单但会阻塞业务;无锁方案包括MySQL原生Online DDL、基于触发器的pt-osc和基于Binlog的gh-ost,能在修改表结构时保持业务运行。文章分析了各方案的原理、优缺点和适用场景,指出无锁变更仍存在MDL锁堆积和主从延迟风险,并给出了最佳实践建议:小表直接ALTER,大表使用gh-ost,避开高峰期并检查长事务。掌握无锁变更技术对保障系统高可用至关重要。

qq_32799165的博客 1068
上一篇: keepalived配置虚拟ip(vip)实现双机热备以及自动切换主备
下一篇: 为什么大公司一定要使用DevOps?
Hack_Bug
博客等级 码龄15年 34粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值