原文地址:http://blog.sina.com.cn/s/blog_9eaa0f400102v9fd.html

数据库连接池php-cp介绍
时间 2015-01-23 11:53:05 数据库连接池 php-cp
php-cp(php-connect-pool)是用php扩展写的一个数据库连接池。

我们知道php开发速度快,适合创业快速迭代,但当流量大了之后,php大量的短连接给db层造成多余的消耗,而php处理请求过程中连接会一直持有再加上进程之间不能共享tcp连接会导致撑高mysql的连接,mysql的性能会随着连接数的升高而急速下降,所以很多大公司都强转java,这很大一部分原因是php没有连接池!当然你可以用开源的数据库中间件来缓解这个问题,但是本项目和现有的开源产品有以下几点不同。

一.它不同于市面上其他的开源数据库中间件产品:

1.它不需要单独部署中间件集群,是跑在应用服务器上的代理进程,减少了一层外部依赖,这样使得架构更加简单、清爽、可靠。

2.性能更高,减少了一次网络传输,它通过高效的ipc方式和php进程通信,并且避免了协议解析的消耗。

3.同时支持redis和mysql,不需要部署2套单独的中间件系统。

二.简单原理图:

数据库连接池php-cp介绍

三。 技术特性

1.支持最大最小连接数配置。

2.支持压力小自动回收连接(力度和频率可配置)。

3.支持平滑重启。

4.支持连接用光的排队机制。

5.同时支持mysql和redis。

6.使用简单,框架简单整合后(修改new 方法),现有业务一行代码都不用改即可用上连接池。

7.提供了get_disable_list函数,来获得不可用的宕机ip列表,这样负载均衡也可以做在客户端(配置文件全部的ip和宕机ip做差集,然后再随机即可)。

btw:你也可以用lvs,但是lvs转发在系统架构上引入了依赖,dr模式不能跨网段又限制了扩容,而且后端db出问题只能知道lvs的vip。

8.连接池进程会启动ping进程来监听宕机列表,如果可用会反映到get_disable_list函数的返回值上.

9.做了大量优化,虽然请求经过连接池进程转发,但是基本无qps损耗。

四.使用它

1.把pool.ini文件放到 /etc/ 并按需修改里面的配置。

2.启动代理进程

./pool_server start

支持 “start” “stop” “restart” “reload”命令

3.修改php脚本

$db = new PDO(xxxxx);

修改成 $db = new pdo_connect_pool(xxxx);//dont use persistent

$redis = new Redis();

修改成 $redis = new redis_connect_pool();//dont use pconnect

提示:尽早调用$db/$redis->release() 来释放这个进程占用的连接到池子里面;

五.API

get_disable_list($pdo_config,CP_DEFAULT_PDO_PORT);

get_disable_list($redis_conf,CP_DEFAULT_REDIS_PORT);

– 第一个参数是你的配置文件.

– 如果配置文件变了,不可用列表将会被清空

– 返回失效的数据库ip.

六.压力测试:

1.带有连接池:

php脚本如下:

$obj = new pdo_connect_pool(‘mysql:host=192.168.20.130;dbname=test1’,”admin”,”admin”);

$stmt = $obj->query(“show tables”);

$data = $stmt->fetchAll();

var_dump($data);

$obj->release();

30s完成的请求数:

数据库连接池php-cp介绍 完成了大概19w次请求

mysql服务器cpu占用:

数据库连接池php-cp介绍mysql服务器消耗52%的cpu

2.短连接压测,不带连接池

php脚本如下:

$obj = new PDO(‘mysql:host=192.168.20.130;dbname=test1’,”admin”,”admin”);

$stmt = $obj->query(“show tables”);

$data = $stmt->fetchAll();

var_dump($data);

30S完成请求:

数据库连接池php-cp介绍 完成了大概12w次请求

mysql服务器cpu占用:

数据库连接池php-cp介绍 cpu占用大概122%

可见连接池虽然经过请求转发,但是减少了建立和释放tcp的时间,总的QPS有大幅提升,同时对mysql服务器的负载有大幅降低。

以上压测机器为debian,4core机器。

七.安装:

phpize=>./configure=>make install=>echo “extensions=xx/connect_pool.so”>php.ini

需要:

PHP 5.3 +(no zts)

linux 2.6+

并且已经安装了pdo和redis扩展

转载于:https://www.cnblogs.com/xiaotaoing/p/6687395.html

php连接池 php–cp相关推荐

  1. php+sqlrelay+mysql实现连接池及读写负载均衡

    本文主要介绍sqlrelay的配置安装.通过其性能和一些具体环境的测试来帮助开发者应用在相应的场合中去应付大并发的mysql数据库连接. 什么是sqlrelay? Sqlrelay是一个开源的数据库连 ...

  2. vc2010访问局域网mysql_VC2010利用MySQL++访问mysql. 及连接池示例

    首先下载并安装mysql,我使用的为mysql 5.5版本,安装时注意安装c++的开发包. #1  下载mysql++,解压,  找到install.hta, 修改对应路径,指向vc2008所在路径, ...

  3. Go http client 连接池不复用的问题

    当 http client 返回值为不为空,只读取 response header,但不读 body 内容就执行 response.Body.Close(),那么连接会被主动关闭,得不到复用. 测试代 ...

  4. 关于go访问rabbitmq的连接池

    转载地址:https://www.golangtc.com/t/54ca4877421aa9537400014c 下 https://github.com/owner888/epooll/blob/m ...

  5. mysql,jdbc、连接池

    show processlist; select * from information_schema.processlist; Command:The type of command the thre ...

  6. java连接池hkai,MySQL连接配置文件密码加密及其在多种连接池上的应用

    为了安全,连接数据库的配置文件中,如密码等信息需要采用密文的形式存放. 本文将给出多种连接池数据库密码密文存放的实现~ 如何配置数据库密码加密访问数据库? 将配置文件用户相关的信息(例如:密码)进行加 ...

  7. 阿里巴巴云连接池durid数据库密码加密

    阿里巴巴连接池durid数据库密码加密      刘振兴     代码分享     2017年05月05日    374    暂无评论   先贴上本人durid 的配置 <!-- 阿里巴巴连接 ...

  8. druid连接池监控

    项目中使用的数据库连接池是阿里开源的druid连接池,经常会有一些场景需要监控和统计数据源.sql的执行情况,因此引入druid提供的监控druid monitor. Druid是一个开源项目,源码托 ...

  9. 把TeamTalk(即时通讯项目)中的线程池连接池拆出来单独测试。

    研究过Teamtalk的伙伴会发现它的线程池和连接池与很多文件有关联, 这篇文章主要写,把它的线程池连接池拆出来需要用到哪些文件. 其实我本来只想测试它的连接池的,但发现连接池里套的有线程池,于是就一 ...

  10. java beanlisthandler_Java篇-DBUtils与连接池

    一 : DBUtils DBUtils就是为了简化JDBC的快发而产生的开发工具包.对JDBC的一种封装. 核心功能 1. QueryRunner 中提供对sql语句操作的API update(Con ...

最新文章

  1. python中文意思k-python中“//”表示什么意思_后端开发
  2. Spark Streaming 实战案例(一)
  3. CUDA: OpenCV requires enabled ‘cudev‘ module from ‘opencv_contrib
  4. mysql 索引_MySQL之索引
  5. 江阴市高中计算机会考知识点,最新!2019年江阴中考体育考试方案发布!速看.........
  6. simulink学习笔记(2)
  7. python写入mysql乱码_python MYsql中文乱码
  8. A.2.3-猜数字游戏
  9. 简易的设计模式——桥梁模式
  10. 亮剑:PHP,我的未来不是梦(1)
  11. 【三维路径规划】基于matlab改进的蝙蝠算法农用无人机三维路径规划【含Matlab源码 1514期】
  12. win10禁止驱动强制签名---解决驱动无法安装
  13. ad18 bell封装_Altium 中异形焊盘异形封装的创建图文教程
  14. 翻译润色、论文英语修改、语法建议、3个软件-研究生必用
  15. @RunWith报错/SpringJUnit4ClassRunner报错或无法使用
  16. 1000个苹果和10个筐子
  17. 什么app可以绘制路线图_为什么大多数路线图都会不可避免地带来糟糕的结果
  18. 各种锂电池的放电倍率和计算方法
  19. 用python提取字符串的中英文——建议收藏反复观看
  20. WCF 项目应用连载[6] - 升级Lig服务 - 设计ILigger 构建一个完善的Lig版本

热门文章

  1. 爱奇艺动态化框架Qigsaw开源!带来极速原生开发体验和更低crash率
  2. 液压系统原理动画_图文讲解液压系统溢流阀分类与工作原理
  3. echarts大屏模板_大屏数据展示模板智慧城市
  4. vue点击按钮打开下拉菜单_vue 点击弹出下拉菜单 点击其他页面收回菜单
  5. java历save_日历【savejava吧】_百度贴吧
  6. datanode启动后闪退_网友吐槽12306 App:不同意获取个人信息就会“闪退”
  7. golang语言函数--示例--模板--小程序模板
  8. pythonATM,购物车项目实战1,项目说明
  9. golang中字符串常用的命令
  10. 数字地球与计算机技术联系,数字地球与地球空间信息科学的关系