oneproxy php,数据库中间件OneProxy系列二:透明连接池

OneProxy是一个独立于应用代码和后端数据库的数据库连接池解决方案,提供透明化的数据连接服务。它解决了传统编程式数据库连接池在不同编程语言间难以共享、维护成本高及服务器压力大的问题。通过配置和压力测试,OneProxy能有效地减少数据库连接数,提高系统性能。在实验中,即使在大量并发下,后端MySQL也只有少量活跃session,证明了其高效的连接管理能力。
摘要由CSDN通过智能技术生成

数据库连接池

数据库连接池的概念对于任何有开发经验的人来说都是并不陌生,其数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

对于数据库连接池的运用,几乎每种编程语言都是拥有自己的连接池组件,比如java就具有多种开源的数据库连接池。本章要介绍的是基于oneproxy的数据库连接池,简单的去理解这个数据库连接池从代码的编写工作中剥离出来,对用户以及开发者都可以是透明的。下面将重点介绍oneproxy实现的透明连接池的优势。

273e82724df39db60a0a0b68a4b2d62f.png

传统编码式连接池

d9dd5d465296f943ae3526c2de633f4e.png

采用编程式的数据库连接池的劣势:

1.并不是所有编程语言都有像java那样的优秀的连接池组件,但是对于部分语言,比如PHP,这种十分流行的编程语言却在连接池的编写效果上非常一般。

2.对于一个庞大复杂的系统,是经常需要用多种编程语言去实现多种功能模块,那么问题就来了,这会导致数据库连接池无法共享而导致维护成本的增加。

3.就算是开发语言的统一,但一旦服务器上部署上千个应用实例,那么同样会给后端数据库带来巨大的负担

4.另外,也是必要重要的一点,系统不会是一成不变的,当一旦决定要在业务上做扩展,那么就要涉及到代码的改动,那么将会不能避免去改动连接池这块的代码,将大大增加扩容的难度

oneproxy的数据库连接池的优势就在于能解决以上所有的问题。接下来先对实验这种连接池的功能。

在OneProxy里配置好“proxy-master-addresses”参数,启动OneProxy的命令如下:

[root@ANYSQLSRV1

oneproxy]# cat start.sh

#/bin/bash

#

PHP One

Proxy OneSQL

if [ -e

"/usr/local/oneproxy/log/oneproxy.pid" ]

then

kill -INT $(cat

/usr/local/oneproxy/log/oneproxy.pid)

fi

sleep 2

ulimit -c 10000

/usr/local/oneproxy/oneproxy

--proxy-address=0.0.0.0:3307 \

--proxy-master-addresses=192.168.42.145:3306

\

--proxy-user-list=test:A94A8FE5CCB19BA61C4C0873D391E987982FBBD3

\

--proxy-database=test

--proxy-charset=utf8_general_ci \

--log-file=/usr/local/oneproxy/log/oneproxy.log

\

--pid-file=/usr/local/oneproxy/log/oneproxy.pid

然后用MySQL客户端,或者PHP页面去做测试,如下所示:

这里使用mydbtest进行测试,下载地址

编辑测试脚本,在下面的测试文件中,提定测试程序连接池OneProxy的端口地址,两次请求之间等待100ms。

option

user

yfy/123@192.168.42.140:3307:default

time

1m

log

/dev/null

wait

1000

declare

id1

int 200000 400000

begin

select * from t where id = :id1;

end

启动256个并发进行压力测试

./mydbtest_linux64.bin query=test.sql

degree=256

这个时候登陆到后端MYSQL会发现实际上只有不到20个session

mysql> show processlist;

+------+------+----------------------+-------------+-------------+------+-----------------------------------------------------------------------+------------------+

| Id| User | Host|

db| Command| Time | State| Info|

+------+------+----------------------+-------------+-------------+------+-----------------------------------------------------------------------+------------------+

|1 | repl | 192.168.42.143:32785 | NULL| Binlog Dump | 6496 | Master has sent

all binlog to slave; waiting for binlog to be updated | NULL|

| 2559 | yfy| 192.168.42.140:56221 | NULL| Sleep|1 || NULL|

| 2639 | yfy| 192.168.42.140:60844 | fieldworker |

Sleep|24 ||

NULL|

| 2640 | yfy| 192.168.42.140:32897 | fieldworker |

Sleep|24 || NULL|

| 2641 | yfy| 192.168.42.140:32898 | fieldworker |

Query|0 | init| show processlist |

| 2642 | yfy| 192.168.42.140:32899 | fieldworker |

Sleep|25 || NULL|

| 2643 | yfy| 192.168.42.140:32925 | fieldworker |

Sleep|24 || NULL|

| 2644 | yfy| 192.168.42.140:32926 | fieldworker |

Sleep|24 || NULL|

| 2645 | yfy| 192.168.42.140:32927 | fieldworker |

Sleep|24 || NULL|

| 2646 | yfy| 192.168.42.140:32953 | fieldworker |

Sleep|24 || NULL|

| 2647 | yfy| 192.168.42.140:32954 | fieldworker | Sleep|24 || NULL|

| 2648 | yfy| 192.168.42.140:32980 | fieldworker |

Sleep|25 || NULL|

| 2649 | yfy| 192.168.42.140:33028 | fieldworker |

Sleep|24 || NULL|

| 2650 | yfy| 192.168.42.140:33058 | fieldworker |

Sleep|24 ||

NULL|

| 2651 | yfy| 192.168.42.140:33105 | fieldworker |

Sleep|25 || NULL|

| 2652 | yfy| 192.168.42.140:33160 | fieldworker |

Sleep|24 || NULL|

| 2653 | yfy| 192.168.42.140:33311 | fieldworker |

Sleep|64 ||

NULL|

| 2654 | yfy| 192.168.42.140:33312 | fieldworker |

Sleep|64 || NULL|

| 2655 | yfy| 192.168.42.140:33313 | fieldworker |

Sleep|24 || NULL|

| 2656 | yfy| 192.168.42.140:33314 | fieldworker |

Sleep|24 || NULL|

| 2657 | yfy| 192.168.42.140:33315 | fieldworker |

Sleep|24 || NULL|

+------+------+----------------------+-------------+-------------+------+-----------------------------------------------------------------------+------------------+

21 rows in set (0.00 sec)

总结:oneproxy脱离应用代码和后端数据库可以独立部署提供数据连接池,而对于应用来说的透明程度就可以看成一台mysql服务器,不管前端应有采用什么语言,怎样的系统架构都是共享的一个数据库连接池。OneProxy对于闲置超过两分钟的连接会自动回收,不过目前可以对于连接池的可控性并没有那么完善。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值