博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用 ProxySQL 提高 MySQL SSL 的连接性能
阅读量:6651 次
发布时间:2019-06-25

本文共 1910 字,大约阅读时间需要 6 分钟。

hot3.png

当用 SSL 部署 MySQL 时,主要的问题是如果没有使用连接池(例如:PHP 中的 mysqlnd-mux,python中 的 mysql.connector.pooling 等等),初始握手会造成大量的开销。不断的关闭连接、创建新的连接会对你的查询时间造成很大的影响。客户和同事最近让我知道了,虽然你可以用现代的英特尔处理器 AES-NI 硬件扩展来提升 SSL 加密/解密性能,但实际上,建立 SSL 连接时的开销来自于多次服务器和客户端建立连接时需要的握手。

使用 ProxySQL 支持 SSL 的后端连接和连接池,我们可以将它应用在任何应用程序上、同一个服务器(说明如下):

使用 ProxySQL 提高 MySQL SSL 的连接性能使用 ProxySQL 提高 MySQL SSL 的连接性能

在这种情况下,ProxySQL 运行在同一台服务器上的一个应用下,并且通过本地套接字与 MySQL 连接。MySQL 数据就不需要通过不安全的 TCP 流进行传输了。

我使用一个 PHP 脚本简单地在一个单线程中创建了 1 万个连接,来看看性能表现如何:

=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

下面是这些数据的对比图:

使用 ProxySQL 提高 MySQL SSL 的连接性能使用 ProxySQL 提高 MySQL SSL 的连接性能

如你所见,使用 SSL 和不使用 SSL 情况下的开销差距大约是 400% —— 对某些负载来说还是很可怕的。

通过 OpenVPN 连接大体上都比 SSL 好。有趣的是,OpenVPN 服务器需要部署在另一台服务器上,与 MySQL 服务器和应用分开。

这种方法允许应用服务器和 MySQL 服务器(包括副本/集群节点)在同一个安全网络上进行通信,但会创建一个单一的故障点。另外,当有一个新的远程 master 的时候,在 MySQL 服务器上部署 OpenVPN 意味着如果你要新增一个额外的高可用性能的扩展会变得相当复杂。总之,OpenVPN 增加了许多额外的部件。

ProxySQL 的漂亮之处在于,你可以在所有应用程序服务器运行它,只要将其指向到正确的 MySQL 服务器(主服务器)即可正常工作,或者使用复制组功能来识别权威主机。

最后,需要注意的是,这些测试都是在  7.3 + OpenSSL 1.0.1e +  + ProxySQL 1.4.1 + PHP 5.4 + OpenVPN 2.4.3 上面进行的。

原文来自:

转载于:https://my.oschina.net/ssdlinux/blog/1550517

你可能感兴趣的文章
iOS tableView自定义删除按钮
查看>>
2014年(实际上是2014界毕业生)互联网IT公司产品、技术类人员工资待遇
查看>>
List的foldLeft、foldRight、sort操作代码实战之Scala学习笔记-28
查看>>
svn revert说明
查看>>
plsql快捷开发
查看>>
移植x264到vs2008之二
查看>>
Python列表和元组
查看>>
比较全的 C# 操作 Word的代码
查看>>
初探AIR for“.NET研究” Android开发
查看>>
(转)matlab与C混合编程之中级篇
查看>>
pip安装错误,用镜像
查看>>
如何在open xml excel 中存储自定义xml数据?
查看>>
301和302跳转的区别
查看>>
【PM面试题】请设计一个老年人用的新闻App
查看>>
Linux安装 Mysql
查看>>
thickbox传递参数
查看>>
hdu 2082 找单词
查看>>
百度地图3.7.1获取当前的位置,并自定义自身位置的图标
查看>>
CuteEditor.Editor+a+a+c+a+a.a() System.RuntimeType.get_Assembly() 问题解决方法
查看>>
Int8 and UInt8 types different from Byte and SByte
查看>>