Nginx And Go Http 并发性能
本文由tom原创,转载请注明原文链接:https://work-jlsun.github.io//2014/01/20/golang-vs-nginx-test.html
1 测试硬件
|
|
2 测试软件
|
|
3 测试配置
3.1 一些内核配置
|
|
3.2 Nginx
|
|
3.3 golang 测试代码
4 测试方法
4.1 测试工具及命令
使用 ab测试不同并发场景下nginx和golang http 服务的性能,测试数据大小512Byte。
测试命令示例:ab -n 1000000 -c 5000 -k “http://127.0.0.1:8081/512b“
(ps: 所有测试结果,都是3次之后取平均值)
4.2 测试结果
- 短连接场景
并发请求量 | 100 | 200 | 500 | 1000 | 2000 | 5000 |
---|---|---|---|---|---|---|
nginx(tps) | 12741.62 | 12598.08 | 11917.15 | 12016.63 | 11640.36 | 6047.29 |
go(tps) | 11310.32 | 11208.87 | 10731.40 | 10757.3 | 10750.26 | 10869.80 |
ps: 端连接情况下 并发5000 情况下, nginx情况不知道是为什么(nginx进程cpu利用看起来不是很均衡)
- 长连接场景
并发请求量 | 100 | 200 | 500 | 1000 | 2000 | 5000 |
---|---|---|---|---|---|---|
nginx(tps) | 61249.81 | 60672.71 | 59548.39 | 55287.55 | 58375.65 | 60662.44 |
go(tps) | 55257.64 | 53288.23 | 49006.64 | 46362.55 | 48042.18 | 47855.02 |
- golang + nginx (golang as proxy)
并发请求量 | 100 | 200 | 500 | 1000 | 2000 | 5000 |
---|---|---|---|---|---|---|
go(tps) | 31535.37 | 29081.96 | 30250.24 | 28921.48 | 26631.12 | 25333.64 |
2: golang作为proxy的时候性能基本为非proxy的一半左右,这个是可以理解的,一个请求的响应时间就是nginx + go两层的响应时间。
3: 使用golang自带的httpclient连接后端的nginx
- nginx + golang (nginx as proxy)
并发请求量 | 100 | 200 | 500 | 1000 | 2000 | 5000 |
---|---|---|---|---|---|---|
TPS | 43336.19 | 41722.05 | 37984.94 | 34033.42 | 29489.74 | 25693.03 |
- golang proxy简单稳定性测试
|
|
5 测试结论
基于以上4中场景,上百组测试下,得出一下简单结论
- golang表现还是较为出色,相比于标杆Nginx性能差20%左右
- golang在高并发压力测试下稳定性还是不错,可以接受的
当前我们基于简单测试环境下的测试验证golang,现实环境远远比测试环境复杂,后续我们会在NosMedia 开发测试上线过程中不断总结经验。
6 参考资料
7 坑
- goang http 长连接问题
- Connection reset by peer (104)
This article used CC-BY-SA-4.0 license, please follow it.