2015 年 12 月,亚马逊推出了 VPC NAT 网关服务这基本上是创建自己的(和与 NAT 实例相比,它看起来非常好)。
我正准备部署自己的 NAT 实例,于是我决定使用 NAT 网关反而省去了我配置和维护自己的 NAT 服务的麻烦。
这项服务正如广告所说的那样,我一直很开心,直到我注意到一个奇怪的行为。
我使用 NAT 网关后面的 EC2 实例来测试大量网站,每个 EC2 实例最多运行 4 个并行 Firefox+selenium 测试。我注意到,以前在其他地方运行良好的测试在此环境中失败了。
因此我启动了 2 个 t2.large 实例,一个具有公共弹性 IP 并可直接访问 Internet;另一个具有私有 IP,位于 NAT 网关后面。
以下是运行结果Apache 基准测试针对某些网站:
弹性知识产权
ab -kn 1000 -c 20 https://www.pinterest.com/
(...)
Time taken for tests: 17.331 seconds
ab -kn 1000 -c 20 http://speedtest.ftp.otenet.gr/files/test100k.db
(...)
Time taken for tests: 9.610 seconds
ab -kn 1000 -c 20 http://www.bbc.com/
(...)
Time taken for tests: 5.890 seconds
NAT
ab -kn 1000 -c 20 https://www.pinterest.com/
(...)
Time taken for tests: 25.980 seconds
ab -kn 1000 -c 20 http://speedtest.ftp.otenet.gr/files/test100k.db
(...)
Time taken for tests: 14.920 seconds
ab -kn 1000 -c 20 http://www.bbc.com/
(...)
Time taken for tests: 6.552 seconds
在许多情况下,NAT 网关后面的服务器的性能比直接连接的服务高出很多个百分点。
AWS 表示该服务“支持高达 10Gbps 的突发速度”,这超过了我使用的单个实例的性能。
我注意到,如果我关闭保持活动(即-k
),性能会变得类似:
ab -n 1000 -c 20 https://www.pinterest.com/
EIP: 18.316 seconds
NAT: 17.763 seconds
这是什么魔法?发生了什么事?我的基准测试相关吗?
你有什么经验吗?
答案1
我的 Nat 网关设置是全新的,没有任何自定义设置。这是我的命令结果
siege -c 100 https://www.pinterest.com -v
使用 Nat 网关:
Transactions: 15012 hits
Availability: 100.00 %
Elapsed time: 140.40 secs
Data transferred: 335.43 MB
Response time: 0.43 secs
Transaction rate: 106.92 trans/sec
Throughput: 2.39 MB/sec
Concurrency: 46.39
Successful transactions: 15012
Failed transactions: 0
Longest transaction: 5.90
Shortest transaction: 0.29
无需 Nat Gateway
Transactions: 11519 hits
Availability: 100.00 %
Elapsed time: 107.02 secs
Data transferred: 257.20 MB
Response time: 0.43 secs
Transaction rate: 107.63 trans/sec
Throughput: 2.40 MB/sec
Concurrency: 46.33
Successful transactions: 11519
Failed transactions: 0
Longest transaction: 4.02
Shortest transaction: 0.28
几乎一样。