对于个人站长来说,选择性价比高的公有云VPS或虚拟机是常见的做法。然而,极度廉价的机器往往在硬件配置上有所妥协,其中最常被忽略但对网站性能影响巨大的一点就是CPU是否支持AES-NI(Advanced Encryption Standard New Instructions)硬件加速。
当您的网站使用HTTPS(几乎是现在的标配)时,所有的流量都需要进行加密和解密。AES-NI就是专门用来加速这一过程的CPU指令集。如果缺少它,加密操作将完全依赖软件计算,性能下降非常明显。
1. 为什么AES-NI对HTTPS至关重要?
TLS/SSL协议中使用的加密算法,尤其是AES-GCM这类高性能算法,在没有硬件加速的情况下,会消耗大量的CPU资源。在一个廉价的单核或双核VPS上,如果并发连接稍高,CPU使用率可能瞬间飙升至100%,导致网站响应速度严重拖慢,甚至连接超时。
经验表明,在纯软件模式下运行AES加密,其性能通常比启用AES-NI的硬件加速模式慢5到10倍。这意味着原本可以处理100个并发请求的机器,在缺少AES-NI的情况下可能只能处理10到20个。
2. 如何检查你的VPS是否支持AES-NI
首先,你需要通过SSH登录到你的Linux VPS或虚拟机,运行以下命令来检查CPU特性。
grep aes /proc/cpuinfo
结果分析:
* 如果输出包含 **aes 关键字(通常在 **flags 行),则表示你的CPU支持AES指令集,硬件加速可用。
* 如果没有任何输出,则说明硬件不支持,你的VPS在加密运算时将严重依赖软件性能。
3. 使用OpenSSL进行性能基准测试
我们可以使用系统自带的OpenSSL工具来直接测试加密算法的吞吐量。这个测试将直观地展示有无硬件加速的性能差异。
我们以常用的AES-256-GCM为例进行测试。测试结果的MB/s(兆字节每秒)越高,性能越好。
步骤一:安装OpenSSL(如果未安装)
# Debian/Ubuntu
sudo apt update && sudo apt install openssl -y
# CentOS/RHEL
sudo yum install openssl -y
步骤二:运行基准测试
运行以下命令测试AES-256-GCM的性能:
openssl speed -elapsed -evp aes-256-gcm
示例输出(带AES-NI加速的机器,性能较好):
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-256-gcm 118544.17k 124606.87k 126639.19k 127395.73k 127453.78k
示例输出(不带AES-NI加速的机器,性能较差):
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-256-gcm 12543.19k 13107.03k 13210.05k 13233.01k 13234.05k
性能评估:
如上所示,在处理8192 bytes大块数据时,有加速的机器吞吐量约为127 MB/s,而无加速的机器仅有13 MB/s左右。性能下降了将近10倍。
4. 结论与缓解措施
如果你的廉价机器缺少AES-NI,且你的网站访问量较大或需要处理大量加密数据传输,你可能会遇到严重的性能瓶颈。
缓解措施:
- 更换机器: 最彻底的解决方案是升级到明确支持AES-NI的CPU架构的VPS。
- 优化TLS配置: 尽管AES-GCM是目前推荐的算法,但在某些极度缺乏CPU性能的环境下,可以考虑测试和调整到其他软件性能较好的加密算法(例如,某些版本的ChaCha20-Poly1305在没有硬件加速的CPU上表现可能比纯软件AES更好)。但这通常需要对Nginx/Apache配置进行深度定制,并仔细权衡安全性和兼容性。
对于大部分个人博客和小流量网站,即使没有AES-NI也能运行,但只要流量稍有增长,性能问题就会立刻暴露。
汤不热吧