连接池原理简述
撸了今年阿里、腾讯和美团的面试,我有一个重要发现…>>
概述
数据库连接池的原理,跟线程池一样都是通过重用资源来提升性能。(线程池重用的是线程资源,连接池重用的是连接,避免连接频繁的创建和销毁,减少了cpu,内存,网络开销),本文主要简单讲述连接池的原理。

数据库连接的生命周期
让我看看连接一次数据库要经历哪些步骤

用 database driver 打开一个连接去连接数据库
打开一个 TCP socket 读写数据
数据读写完毕
关闭连接
关闭socket
可以看出进行一次数据库连接是个相当昂贵的操作。

没有连接池的情况

如上图,如果没有连接池,这时候应用有15万个并发用户操作(包括读写)那么就会创建很多连接到数据库,这样频繁的创建连接又销毁即浪费了cpu,内存资源,又会造成数据库连接过多而报错。(MySQL 5.7 最大连接数 是 10万,默认是 151)

有连接池的情况

如上图,假设连接池最大连接数是 200 ,现在程序有 15万 个并发sql操作(包括读写,相当于某个电商促销活动,有15万人在线操作,这个量级(阿里,唯品会等)很容易达到),这个时候,他们就会轮换使用这 200 个连接来执行sql,这样连接池和数据库的连接最多200个, 不会创建过多连接。这样使用连接池即减少了连接频繁地创建和销毁,又避免了过多连接打垮数据库,并且每次创建销毁一个连接大概 0.05s~1s(MySQL) ,相当于每个sql操作都多几十到几百毫秒,这很明显是没对的。

了解连接池原理的好处 懂得如何配置最大连接数了(不要超过数据库最大连接数,当然也不是越大越好,最大连接数一般跟最大线程池数一样,设置成 cpu核心数*2 就行了)
知道了资源池设计模式:即资源池设计模式是用来解决资源频繁创建和销毁带来的浪费问题。比如数据库连接池, 线程池等等。后续遇到同样场景的问题,就可以用此设计模式来解决。