go-zero系列-限流(并发控制)及hey压测
参考地址:
go-zero系列-限流(并发控制):https://go-zero.dev/docs/tutorials/service/governance/limiter
hey地址:https://github.com/rakyll/hey
1、压测工具hey下载安装:
会安装到GOPATH/bin目录下
go install github.com/rakyll/hey
如果提示: 先执行: go get github.com/rakyll/hey 再执行 go install github.com/rakyll/hey
no required module provides package github.com/rakyll/hey; to add it:
go get github.com/rakyll/hey
windows下安装hey结果(会安装到GOPATH/bin目录下)
2. 修改yaml配置文件
#最大连接数
MaxConns: 100
3. 压测
3.1hey 简单介绍
-c 指定并发请求数,这里设置为25。即同时会有25个并发用户发送请求。
-z 指定发送请求测试持续时间。这里设置为1秒。即每个并发用户将发送请求并持续1秒。
-q 指定请求数量,这里设置为1。即每个并发用户发送1个请求。
-m 请求方法,比如GET/POST等 (默认get请求)
-n 运行次数
3.2 hey 简单请求
get请求,指定3s时间内,并发为500
hey -z 3s -c 500 http://192.168.1.4:8084/api/getName
get请求,运行200次,指定并发为600
hey -n 200 -c 600 http://192.168.1.4:8084/api/getName
post请求
hey -z 3s -c 300 -m POST -H "Content-Type: application/json" -d "{'name': '王五'}" http://192.168.1.4:8084/api/editName
3.3 压测
压测 50 个并发,执行 1 秒, POST请求, 全部成功
hey -z 1s -c 50 -q 1 -m POST http://192.168.1.4:8084/notify/api
Latency distribution:
10% in 0.0675 secs
25% in 0.0681 secs
50% in 0.0689 secs
75% in 0.0697 secs
90% in 0.0702 secs
95% in 0.0709 secs
0% in 0.0000 secs
Details (average, fastest, slowest):
DNS+dialup: 0.0025 secs, 0.0673 secs, 0.0709 secs
DNS-lookup: 0.0000 secs, 0.0000 secs, 0.0000 secs
req write: 0.0000 secs, 0.0000 secs, 0.0002 secs
resp wait: 0.0633 secs, 0.0600 secs, 0.0661 secs
resp read: 0.0000 secs, 0.0000 secs, 0.0001 secs
Status code distribution:
[200] 50 responses
压测 120 个并发,执行 1 秒, POST请求, 其他20个限流
hey -z 1s -c 120 -q 1 -m POST http://192.168.1.4:8084/notify/api
Latency distribution:
10% in 0.0216 secs
25% in 0.0833 secs
50% in 0.0878 secs
75% in 0.0901 secs
90% in 0.0928 secs
95% in 0.0966 secs
99% in 0.0969 secs
Details (average, fastest, slowest):
DNS+dialup: 0.0041 secs, 0.0155 secs, 0.0969 secs
DNS-lookup: 0.0000 secs, 0.0000 secs, 0.0000 secs
req write: 0.0001 secs, 0.0000 secs, 0.0007 secs
resp wait: 0.0700 secs, 0.0083 secs, 0.0912 secs
resp read: 0.0000 secs, 0.0000 secs, 0.0001 secs
Status code distribution:
[200] 100 responses
[503] 20 responses
从压测结果来看,我们的服务只能支持 100 个并发,超过 100 个并发的请求都会被限流,返回 503 状态码。 在服务的日志中也会出现限流相关的错误:
{“@timestamp”:“2024-10-19T16:56:26.677+08:00”,“caller”:“internal/log.go:82”,“content”:“(/notify/api- 192.168.1.4:53245) concurrent connections over 100, rejected with code 503”,“level”:“error”,“span”:“6569d42b8c7824bb”,“trace”:“75196ffa669dda69e6d814927957fab5”}