为了账号安全,请及时绑定邮箱和手机立即绑定

Go http 服务器慢速基准性能

Go http 服务器慢速基准性能

Go
MMTTMM 2022-01-17 16:51:30
我试图找到 Go 网络服务器的最大吞吐量。我在 8 核机器(Intel Xeon 2.5 Mhz)上运行 simplewebserver,并在不同的 8 核机器上运行 wrk 工具。Iperf 命令显示这些机器之间的速度约为 8-10Gbps。最初,我使用 apache ab 工具犯了一个错误,该工具每秒只提供 16k 个请求。问题与链接相同。现在,当我切换到 wrk 工具时,我每秒收到大约 90k 个请求,大约 11MB/秒。在第一台 8 核机器上,我运行了 simplewebserver.gopackage mainimport (   "io"    "net/http"    "runtime")func hello(w http.ResponseWriter, r *http.Request) {    io.WriteString(w, "Hello world!")} func main() {    runtime.GOMAXPROCS(8)    http.HandleFunc("/", hello)    http.ListenAndServe(":8000", nil) }在另一台 8 核机器上,我跑了 ./wrk -t8 -c1000 -d10s http://10.0.0.6:8000/结果:Running 10s test @ http://10.0.0.6:8000/8 threads and 1000 connectionsThread Stats   Avg      Stdev     Max   +/- StdevLatency    42.65ms  114.89ms   1.96s    91.33%Req/Sec    11.54k     3.01k   25.10k    74.88%923158 requests in 10.10s, 113.57MB readSocket errors: connect 0, read 0, write 0, timeout 20Requests/sec:  91415.11Transfer/sec:     11.25MB我可以说我已经达到了 golang Web 服务器的最大吞吐量吗?我得到 11 MB/秒的速度,这对于基本程序来说看起来很小。如果我在 www.google.com 页面上运行 wrk 工具,我会得到大约 200 MB/秒。即使对于像 kafka(java 服务器)这样的大型复杂计算系统,基准测试结果也超过 70 MB/秒(https://engineering.linkedin.com/kafka/benchmarking-apache-kafka-2-million-writes-second-三便宜的机器)。golang 服务器如何处理每秒数百万个请求的极端工作负载(至少超过 100MB/秒)?我有什么假设错了吗?更新:我在具有相同规格的 16 核机器上运行相同的程序。我将 maxprocs 更改为 16,结果提高到 120k 请求/秒。我觉得我已经达到了 golang http 服务器的最大值,因此我没有发现请求/秒有任何显着增加。
查看完整描述

2 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

“过早的优化是万恶之源” 1

我建议为您的用例构建一些东西,然后尝试优化。很难建立一个好的基准来测试你想要的东西,所以要确保你测试的是你想要的东西,而不是你的路由器速度之类的东西。


查看完整回答
反对 回复 2022-01-17
?
慕斯王

TA贡献1864条经验 获得超2个赞

Golang net/http 相当慢。如果目标是最大化请求率,还有其他实现。例如https://github.com/valyala/fasthttp在我的测试中,fasthttp 使查询率翻倍。我的测试是一个简短的请求和简短的回复。

该库有一些限制,例如不支持 HTTP/2。如果您需要 REST API 的 HTTP 并且您不是在寻找互操作性,fasthttp 将非常适合


查看完整回答
反对 回复 2022-01-17
  • 2 回答
  • 0 关注
  • 327 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号