池化组件之连接池

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 池化组件之连接池

池化组件:不停的执行某类任务。采用可以有效的提升性能。主要是用来解决资源复用的问题。常见的池化组件(连接池,请求池,线程池,内存池),下面主要介绍连接池。

对于服务器而言,连接池主要用来连接第三方服务,自己用的比较多,比较常见的:mysql连接池和redis连接池

1 数据库连接池

程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。

其实就是创建数据库连接是耗时,也容易对数据库造成安全隐患,所以集中创建连接,并把他们集中管理,供程序使用,可以保证安全可靠。常见的就是mysql连接池和redis连接池。

不适用连接池与使用连接池的流程图:

对于不适用:每次服务器要操作sql语句时候,就会tcp建立连接,mysql认证,mysql关闭,tcp关闭每次都需要全部流程走一遍,耗时,也存在安全问题,效率低下。而对于使用了连接池是程序在启动的时候会创建一定的连接,进行管理,当使用时就从池里拿一个连接,用完后就归还给池。

区别:

不采用:实现简单;网络io较多,带宽利用率低,QPS低,应用频繁创建连接和关闭连接,导致临时对消较多,带来更多的内存碎片。关闭连接后,会出现大量的TIME_WAIT的TCP状态(在2个MSL之后关闭)

font size=“3” color=“red”>采用:设计较为复杂;降低了网络开销,连接复用,有效减少连接数,提升性能,避免新建连接,没有time_wait状态的问题。

2 数据库连接池运行机制

从连接池获取或创建可用连接;

使用完毕之后,把连接返回给连接池;

在系统关闭前,断开所有连接并释放连接占用的系统资源。

连接池一般与线程池搭配使用。对于连接需要进行容器管理,一般采用list或者vector存储连接。

3 连接池设计注意点

单连接与多连接区别:对于单连接时,在对于服务器既要读又要写的时候就无法实现,只能io等待阻塞,耗时,性能低下。多连接就即可写有可读。

线程池不断执行任务,任务怎么和连接进行绑定??连接管理

连接池的使用流程:

请求连接----》从容器中获取

归还连接----》放回容器中

新建连接----》插入容器

4 连接池与不使用的性能区别

线程池数量一般情况下要与连接池数量保存一直,再性能差不多的情况下,但是当再性能差距较大的情况下就不一定了,性能差距较大则连接池与线程池的使用就会低下。一般线程执行完任务时归还连接对象

5 连接池如何设计

1 连接到数据库,涉及到数据库ip,端口,用户名,密码,数据库名字等;

a 连接操作,每个连接对象都是独立的连接通道,它们是独立的

b 配置最小连接数和最大连接数

2 需要一个队列管理它的连接,比如使用list

3 获取连接对象

4 归还连接对象

连接池连接设置的数量原则

连接数= ((核心数2)+有效磁盘数)

例如cpu的4核i7,那么连接池连接数的大小应该为42 +1 = 9

上面的公式只是一个经验,具体还是要和线程池数量和具体的业务结合再一起

6 简单连接池源码分析

设计数据库连接池:一般情况下,是设计一个CDBPool类专门用来管理连接的CDBConn,CDBConn才是真正跟数据库进行交互干活的。而杜宇CDBPool类:需要再构造函数的时候传入数据库相关的ip,端口,参数等,还有一个连接池名.

提供的接口:

init() 开始会创建固定数量较少的连接。把将连接放入free容器管理

GetDBConn(time) 获取一个空闲的连接。一般情况下设计师有free容器和used容器两者,先去空闲容器去如果没有就去检查已经分配的连接多久没有返回,如果超过一定时间就自动回收。

RelDBConn() 释放连接

GetPoolName()获取连接池的名字,可能一个程序中有多个连接池

注意:redis连接池类似就不介绍了

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
10月前
|
PyTorch 算法框架/工具
Pytorch中最大池化层Maxpool的作用说明及实例使用(附代码)
Pytorch中最大池化层Maxpool的作用说明及实例使用(附代码)
855 0
|
3月前
|
存储 SQL 数据库连接
连接池的工作原理
初始化连接池:在应用程序启动时,连接池会创建一组数据库连接,并将这些连接存储在一个容器(通常是一个集合或队列)中。 获取连接:当应用程序需要与数据库交互时,从连接池中获取一个空闲的连接。如果连接池中没有可用连接,应用程序可以选择等待或创建新的连接(如果连接池允许)。 使用连接:应用程序使用获取到的连接执行SQL操作。 归还连接:操作完成后,将连接归还到连接池,以便其他请求可以重用该连接。 维护连接池:连接池需要定期检查和维护连接的状态,例如清理长时间未使用的连接、验证连接的有效性等。
39 1
|
3月前
|
监控 数据库
优化连接池
合理设置连接池大小:连接池的大小应根据应用程序的并发量和数据库的承载能力来设置。过小的连接池会导致频繁的等待和阻塞,过大的连接池则会浪费资源。 连接池的监控和管理:实时监控连接池的使用情况,及时处理连接泄漏和失效连接,可以使用一些连接池管理工具来实现自动监控和管理。 连接池参数调整:根据实际情况调整连接池的参数,如连接超时时间、空闲连接的最小和最大数量等,以提高连接池的效率和稳定性。
35 0
|
7月前
|
算法 NoSQL 安全
Lettuce的特性和内部实现问题之Lettuce的多连接模式与连接池模式有何不同
Lettuce的特性和内部实现问题之Lettuce的多连接模式与连接池模式有何不同
155 2
|
7月前
|
缓存 数据可视化 安全
Lettuce的特性和内部实现问题之Lettuce在连接池模式下的整体性能表现偏低的问题如何解决
Lettuce的特性和内部实现问题之Lettuce在连接池模式下的整体性能表现偏低的问题如何解决
233 0
|
Java 关系型数据库 MySQL
连接池技术:简单而强大的加速数据库访问方法
连接池技术是一种简单而强大的方法,可用于加速数据库访问。在传统的数据库访问过程中,每次与数据库建立连接和关闭连接都需要耗费大量的时间和资源。而连接池技术通过事先建立一组可重复使用的数据库连接,有效地减少了连接和关闭连接的开销。本文将深入探讨连接池技术的工作原理和优势,以及如何正确配置和使用连接池来提高应用程序的性能。无论你是开发人员还是系统管理员,通过了解连接池技术,你将能够更好地利用数据库资源,使系统更加稳定和高效。
739 0
|
10月前
|
机器学习/深度学习
一文弄清池化层(pooling)的作用
一文弄清池化层(pooling)的作用
|
10月前
|
数据库连接 数据库
连接池的扩展和定制
连接池的扩展和定制
|
10月前
|
监控 Java 数据库连接
数据库访问: 解释一下连接池的概念。
数据库访问: 解释一下连接池的概念。
107 1
|
设计模式 SQL druid
jdbcs之连接池和框架
jdbcs之连接池和框架
171 0
jdbcs之连接池和框架