使用 ProxySQL 改進 MySQL SSL 的連接性能

分類:IT技術 時間:2017-09-30

在這個博客裏,我們準備來看一下 ProxySQL 是如何提高 mysql 的 SSL 連接性能的。

當用 SSL 部署 MySQL 時,主要的問題是如果沒有使用連接池(例如:PHP 中的 mysqlnd-mux,python中 的 mysql.connector.pooling 等等),初始握手會造成大量的開銷。不斷的關閉連接、創建新的連接會對你的查詢時間造成很大的影響。客戶和同事最近讓我知道了,雖然你可以用現代的英特爾處理器 AES-NI 硬件擴展來提升 SSL 加密/解密性能,但實際上,建立 SSL 連接時的開銷來自於多次服務器和客戶端建立連接時需要的握手。

使用 ProxySQL 支持 SSL 的後端連接和連接池,我們可以將它應用在任何應用程序上、同一個服務器(說明如下):

在這種情況下,ProxySQL 運行在同一臺服務器上的一個應用下,並且通過本地套接字與 MySQL 連接。MySQL 數據就不需要通過不安全的 TCP 流進行傳輸了。

我使用一個 PHP 腳本簡單地在一個單線程中創建了 1 萬個連接,來看看性能表現如何:

<?php
$i = 10000;
$user = 'percona';
$pass = 'percona';
while($i>=0) {
$mysqli = mysqli_init();
// Use SSL
//$link = mysqli_real_connect($mysqli, "192.168.56.110", $user, $pass, "", 3306, "", MYSQL_CLIENT_SSL)
// No SSL
//$link = mysqli_real_connect($mysqli, "192.168.56.110", $user, $pass, "", 3306 )
// OpenVPN
//$link = mysqli_real_connect($mysqli, "10.8.99.1",      $user, $pass, "", 3306 )
// ProxySQL
$link = mysqli_real_connect($mysqli, "localhost",      $user, $pass, "", 6033, "/tmp/proxysql.sock")
or die(mysqli_connect_error());
$info = mysqli_get_host_info($mysqli);
$i--;
mysqli_close($mysqli);
unset($mysqli);
}
?>

沒有使用 SSL 直接連接 MySQL:

[root@ad ~]# time php php-test.php
real 0m20.417s
user 0m0.201s
sys 0m3.396s

使用 SSL 直接連接 MySQL:

[root@ad ~]# time php php-test.php
real1m19.922s
user0m29.933s
sys0m9.550s

在 OpenVPN 隧道下沒有使用 SSL 直接連接 MySQL:

[root@ad ~]# time php php-test.php
real 0m15.161s
user 0m0.493s
sys 0m0.803s

接下來,使用 ProxySQL 通過本地套接字文件連接:

[root@ad ~]# time php php-test.php
real0m2.791s
user0m0.402s
sys0m0.436s

下面是這些數據的對比圖:

如你所見,使用 SSL 和不使用 SSL 情況下的開銷差距大約是 400% —— 對某些負載來說還是很可怕的。

通過 OpenVPN 連接大體上都比 SSL 好。有趣的是,OpenVPN 服務器需要部署在另一臺服務器上,與 MySQL 服務器和應用分開。

這種方法允許應用服務器和 MySQL 服務器(包括副本/集群節點)在同一個安全網絡上進行通信,但會創建一個單一的故障點。另外,當有一個新的遠程 master 的時候,在 MySQL 服務器上部署 OpenVPN 意味著如果你要新增一個額外的高可用性能的擴展會變得相當復雜。總之,OpenVPN 增加了許多額外的部件。

ProxySQL 的漂亮之處在於,你可以在所有應用程序服務器運行它,只要將其指向到正確的 MySQL 服務器(主服務器)即可正常工作,或者使用復制組功能來識別權威主機。

最後,需要註意的是,這些測試都是在 CentOS 7.3 + OpenSSL 1.0.1e + Percona Server for MySQL 5.7.19 + ProxySQL 1.4.1 + PHP 5.4 + OpenVPN 2.4.3 上面進行的。

祝您使用愉快。


Tags: 連接 quot mysqli_real_connect ProxySQL SSL MySQL

文章來源:


ads
ads

相關文章
ads

相關文章

ad