資料庫連接池php-cp介紹

來源:互聯網
上載者:User

標籤:

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擴充

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

資料庫連接池php-cp介紹

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.