技术开发 频道

MySQL内置加密和外部加密的性能对比

  【IT168 评论】这是对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,所以理论上将会稍微快一点,但是最 终结果,至少在这个测试中,这点差别微乎其微。

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

测试环境与外部加密技术

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

MySQL内置加密和外部加密的性能对比

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


0
相关文章