池化组件之连接池

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

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

对于服务器而言,连接池主要用来连接第三方服务,自己用的比较多,比较常见的: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连接池类似就不介绍了

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5月前
|
存储
openGauss资源池化
资源池化提供主备机共享一份存储的能力,实现基于磁阵设备的资源池化HA部署形态,解决传统HA部署下存储容量较单机翻倍的问题,同时备机支持实时一致性读。
|
2月前
|
监控 网络协议 关系型数据库
详解连接池参数设置(边调边看)
详解连接池参数设置(边调边看)
|
5月前
|
机器学习/深度学习
一文弄清池化层(pooling)的作用
一文弄清池化层(pooling)的作用
|
Java 关系型数据库 MySQL
连接池技术:简单而强大的加速数据库访问方法
连接池技术是一种简单而强大的方法,可用于加速数据库访问。在传统的数据库访问过程中,每次与数据库建立连接和关闭连接都需要耗费大量的时间和资源。而连接池技术通过事先建立一组可重复使用的数据库连接,有效地减少了连接和关闭连接的开销。本文将深入探讨连接池技术的工作原理和优势,以及如何正确配置和使用连接池来提高应用程序的性能。无论你是开发人员还是系统管理员,通过了解连接池技术,你将能够更好地利用数据库资源,使系统更加稳定和高效。
520 0
|
5月前
|
数据库连接 数据库
连接池的扩展和定制
连接池的扩展和定制
|
5月前
|
Java 关系型数据库 数据库连接
连接池的工作原理
连接池的工作原理
|
5月前
|
监控 Java 数据库连接
数据库访问: 解释一下连接池的概念。
数据库访问: 解释一下连接池的概念。
87 1
|
存储 缓存 网络协议
数据访问连接池和线程池
报文请求头通过设置报文的传输方式和URL, 以及一些简单的客户端请求过来的数据,携带的数据量不能太大。通过报文请求头传输数据的方式类型为GET请求,GET请求的方式数据编码方式和数据服务器的编码方式一致,数据传输需要通过加密和解密的过程。JAVA 的WEB应用服务器的默认编码方式是IOS8859-1. 默认的国际化字符编码方式编码的对象是字符CHARACTER,对于中国汉字的编码和存储有UTF-8 和 GB2312 . 默认的国际化字符编码方式每个字符使用一个字节存储,汉字的存储需要两个字节。
59 0
|
数据库
数据库连接池的工作原理
数据库连接池的工作原理
117 0
|
设计模式 SQL druid
jdbcs之连接池和框架
jdbcs之连接池和框架
152 0
jdbcs之连接池和框架