这是对MySQL进行加密性能测试的两篇文章系列之二。在第一篇中,我专门使用MySQL的内置的对SSL的支持来 做压力测试,产生了一些令人惊讶的结果。

这是对MySQL进行加密性能测试的两篇文章系列之二。在第一篇中,我专门使用MySQL的内置的对SSL的支持来 做压力测试,产生了一些令人惊讶的结果。当然,使用SSL查询的吞吐性能要比不使用SSL的性能低这也在意料之中,但是我相当惊讶的是,主要的性能瓶颈是 花费在连接建立的时间。这个结果自然引导更进一步的研究。尤其我想要在MySQL内置的SSL加密和外部加密技术——比如SSH通道——之间做一次性能对 比。我也会通过这篇文章明确一些在我上一篇文章的评论中提出的问题。那么,直奔主题吧。。

测试环境:

这篇文章中涉及到的测试环境一共是四台机器:

  • 机器A:m1.xlarge EC2实例(4核CPU/15GB RAM/Amazon Linux)在US-West-2/Oregon
  • 机器B:m1.xlarge EC2 实例 (4 vCPU/15GB RAM/Amazon Linux) i在 EU-West/Ireland
  • 机器C: Intel Core i7-2600K 3.4GHz (8 HT cores/32GB RAM/CentOS 6.4)
  • 机器D:Intel Core i3-550 3.2GHz (4 HT cores/16GB RAM/CentOS 6.4)

一些测试使用的是MySQL5.6.13-community,另一部分是使用Percona Server5.6.13.

外部加密技术

在这个测试中,我在没有一个真正vpn的情况下,用最常用的方式创建一个站-站连接——即宝刀未老的SSH通道。我没有找到足够的设备来组建一个硬件加速 的VPN,但是这些也足以说明问题。MySQL/SSL使用的默认SSL加密组件是DHE-RSA-AES256-SHA;我们稍微解释一下,这个含义是 使用SHA1算法作为我们的hash函数,RSA作为身份认证,256位AES(在CBC模式下,根据OpenSSL文档)加密来实现 Diffie-Hellman密钥交换。虽然也许并不明显,通过OpenSSL是很容易模仿同样的加密套件的。SSH version2协议默认使用DHE/RSA/SHA1,所以我们需要的就是在建立我们的通道时指定AES256-CBC加密器,出于所有的意图和猜测, 我们会对比加密结果。出于好奇,我们也会尝试在SSH通道的CTR模式下使用AES256,因为这能够加密block,所以理论上将会稍微快一点,但是最 终结果,至少在这个测试中,这点差别微乎其微。

  • 没有加密
  • MySQL+SSL
  • SSH 隧道(AES256-CBC)
  • SSH 隧道 (AES256-CTR)
  • 1001.33 (59.26)
  • 22.23 (0.1392)
  • 476.52 (11.87)
  • 482.02 (13.42)

于这个测试的机器是C机器(服务器)和D机器(客户端),这两个机器同在一个千兆比特的以太网VLAN链中,测试脚本和第一部分的脚本相似,其目的 就是尽可能快的创建100个连接。每个测试配置运行10遍,下面的表格列出了平均值和标准差,列出的数字是每一秒创建的连接数。同时,也要注意到这个特殊 的测试,所有的密钥都是4096比特长,而且所有测试是在Percona Server 5.6.13上运行的。

或者,如果你喜欢图表的话,下面是图表的方式。

很明显,没有加密是最快的,但是通过SSH隧道创建连接的方式和MySQL本地SSL的方式相比并没有损失多少性能。无论是100 cps或是22 cps都是不现实的,但我敢打赌对于大多人来说,每个独立的线程产生470-480 cps的数目是仍然可以提供服务的。

高延迟链路的连接性能

测试数据在我文章的后边会给出。事实上,SSL连接的稳定性受网络延迟的影响。 从上述结果中我们可以看到,在低延迟链路,使用SSL对性能有显著的影响,那么在广域网会怎么样?有可能一种情况下考虑到了网络简单往返时间的延迟,使用 了MySQL内置的SSL支持,混合加密就不会影响太多的性能。 因此,这次测试中,我拆成了两个不同的 Amazon EC2实例(就是上述的设备A和设备B)。 设备C位于加州北部用来当做client, 这次测试是在MySQL集群和Percona服务器下测试,密钥大小范围从0到4096为位。SSL密码组件使用的是默认设置,测试脚本和以前一样需要运 行10次,快速创建100个链接,并且每秒刷新连接结果。当然在测试中,这些原始数据是次要的,我们只是想看一下网络延迟都SSL性能的影响。

首先, 从 C 到 B (加州北部 到 爱尔兰):

--- ec2-54-220-212-210.eu-west-1.compute.amazonaws.com ping statistics ---
50 packets transmitted, 50 received, 0% packet loss, time 49228ms
rtt min/avg/max/mdev = 167.851/170.126/177.433/2.289 ms

接着, 从 C to A (加州北部 to 俄勒冈州):

--- ec2-54-212-134-221.us-west-2.compute.amazonaws.com ping statistics ---

50 packets transmitted, 50 received, 0% packet loss, time 49108ms

rtt min/avg/max/mdev = 42.543/44.648/59.994/3.194 ms

如我们所料, 很明显测试数据要比横跨一个大陆连接服务器的数值低得多,起码在地理位置上有几百米的距离吧, 但事实证明,排除MySQL集群的反应, 我们看到实际上在性能上不会真的下降那么多。下表比较了从C到B的连接,从C到A的连接。。

  MySQL 5.6.13 US->EU MySQL 5.6.13 US->US PS 5.6.13 US->EU PS 5.6.13 US->US PS 5.6.13-static US->EU PS 5.6.13-static US->US
1024-bit 34.39% 36.13% 34.59% 35.23% 33.44% 36.31%
2048-bit 37.04% 45.07% 33.91% 38.35% 34.30% 35.40%
4096-bit 51.85% 71.66% 37.06% 43.17% 37.64% 41.66%

以上是几点意见。首先,如果你服务器隔着40ms或170ms远的时候1024位的SSL加密对性能并没有 太大的影响。第二,随着延时的加长,由于SSL加密开销的增加,丢失的连接会影响。 这很有道理, 特别是在一种常见的情况下 (服务器在同一个内网,或者通过TCP连接到同一个服务器), 连接的吞吐性能主要由使用不使用SSL来影响了。 当然,MySQL集群4096-bit加密的价格与Percona服务器相比,以上这些根本就没有任何意义了。有一些特别的手段用来对MySQL集群 4096-bit 加密性能提升,但看起来并没有对Percona服务器影响多少。我不确定这是一个很好的假设,在这两次测试中我都可能说是一个PEBCAT。所以,如果其 他人也在测试,我很好奇的想知道,你是否也得到相同的结构。

最后思考

先不论MySQL 5.6.13和4096-bit SSL的问题, 我认为这篇文章追逐要表达的和它的前任讲述的也是十分清晰的(译不懂前任的意思):如果你需要端到端加密你的MySQL传输,MySQL的内置的SSL支持你使用复制或连接池类的工作量,可能也会满足你的需求,但你的应用是需要频繁的创建和销毁大量的连接,只通过SSH隧道的方式你能减轻加密的负载。

原文链接:http://www.mysqlperformanceblog.com/2013/11/18/mysql-encryption-performance-revisited/

译文链接:http://www.oschina.net/translate/mysql-encryption-performance-revisited

MySQL加密的性能测试的更多相关文章

  1. mysql几种性能测试的工具使用

    mysql几种性能测试的工具使用 近期由于要比较mysql及其分支mariadb, percona的性能,了解了几个这方面的工具,包括:mysqlslap sysbench tpcc-mysql,做一 ...

  2. MySQL 加密 压缩

    许多MySQL加密和压缩函数返回结果可能包含任意字节值的字符串,如果要存储这些结果,请使用VARBINARY或BLOB二进制字符串数据类型.这将避免使用非二进制字符串数据类型(CHAR, VARCHA ...

  3. MySQL加密

    MySQL字段加密和解密 1.加密:aes_encrypt('admin','key') 解密:aes_decrypt(password,'key') 2.双向加密 通过密钥去加密,解密的时候的只有知 ...

  4. HBase 高性能获取数据(多线程批量式解决办法) + MySQL和HBase性能测试比较

    摘要:   在前篇博客里已经讲述了通过一个自定义 HBase Filter来获取数据的办法,在末尾指出此办法的性能是不能满足应用要求的,很显然对于如此成熟的HBase来说,高性能获取数据应该不是问题. ...

  5. 【MySQL】Sysbench性能测试

    两台MySQL配置不一样,要测试下性能差别 [m1] long_query_time = 0.1 log_slave_updates innodb_flush_log_at_trx_commit [m ...

  6. Mysql加密方式

    MySQL数据库的认证密码有两种方式, MySQL 4.1版本之前是MySQL323加密,MySQL 4.1和之后的版本都是MySQLSHA1加密, MySQL数据库中自带Old_Password(s ...

  7. MySQL 加密/压缩函数

    这些问题可能导致数据值的改变.一般而言,上述问题可能在你使用非二进制串数据类型(如char,varchar,text等数据类型)的情况下发生. AES_ENCRYPT()和AES_DECRYPT() ...

  8. MYSQL 加密的 3 类方法

    背景: 若你想要储存一些由可能包含任意字节值的加密函数返回的结果,使用BLOB列而不是 CHAR 或VARCHAR 列,从而避免由于结尾空格的删除而改变一些数据值的潜在问题. 这一句话来自官方文件,记 ...

  9. mysql加密和解密

    MySQL 4.1版本之前是MySQL323加密,MySQL 4.1和之后的版本都是MySQLSHA1加密, (1)以MySQL323方式加密 select  old_password('111111 ...

随机推荐

  1. ASPNET 5

    1. 什么是APS.NET 5 ASP.NET 5是一个可构建基于云服务的Web应用的构架,并且它是开源的和跨平台的.我们提供了重新设计的一个可以部署在本地和云服务的优化框架.它由一个一个模块组成,因 ...

  2. Nginx配置文件nginx.conf详解(转)

    #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_processes 8; #全局错误日志定义类型,[ debug | ...

  3. spring 配置触发器 (类似于定时任务)

    为什么会看这个? 发现项目中有的service中的方法没有地方调用.经查,发现在web.xml中加载的spring的配置文件中配置了这个方法, 经查这种方式是触发器,会定时执行,只需要配置一下.可以设 ...

  4. JAVA为什么会空指针异常

    1.所谓的指针,就是java中的对象的引用.比如String s;这个s就是指针. 2.所谓的空指针,就是指针的内容为空,比如上面的s,如果令它指向null,就是空指针. 3.所谓的空指针异常,就是一 ...

  5. 武汉科技大学ACM:1001: 华科版C语言程序设计教程(第二版)习题6.7

    Problem Description 输出杨辉三角前n行. Input 输入一个数n(n <= 9) Output 输出杨辉三角前n行.(注意行末不能有多余的空格,数字以%3d的格式输出) S ...

  6. ecshop有关real_ip()你发现的问题

    我这边有一个ECSHOP后台,有一个功能,在客户下订单时自动获取客户IP,用的是ECSHOP本身的real_ip函数,但这个函数存在一个问题,十个订单得到的IP,可能会有几个与CNZZ统计得到的不一样 ...

  7. 微软office MIME类型

      后缀 MIME 類型 .docx application/vnd.openxmlformats-officedocument.wordprocessingml.document .docm app ...

  8. 【行为型】Chain of responsibility模式

    职责链模式将对象的请求处理组成链式结构,并将请求按链式结构逐个传递下去,直接被其中的某个处理者处理为止.由此可知,职责链模式的适用场合是对指定请求,可以有多个请求处理者(或称为请求响应者),但用户并不 ...

  9. template of class

    class template will call the constructor of its member object before constructor itself......

  10. 一次awk脚本的重构

    # 脚本功能说明: # . 检查URL中的域名是否是指定版本的域名 # . 对访问bid,authorid的游客身份排重,并累加其pv # 全局变量说明 # DOMIAN_LIST 是数组,key是要 ...