环境初始化
export GOPROXY=https://goproxy.cn,direct && export GO111MODULE=on
# OR
go env -w GOPROXY="https://goproxy.cn,direct"
go env -w GO111MODULE=on
# then
go mod download
编译&运行
make && ./absys --help
# 程序每30s中自动去mysql拉取最新的实验配置
Usage of ./absys:
-config string
mysql configs (default "./cfg.toml")
-port int
server port (default 9200)
依赖mysql
# 自动创建tab,插入demo实验数据
cd api/script/
python3 initdb.py
实验status=1, 则只有allow_list中的设备生效(仅白名单生效模式,用来做AA和上线前Debug)
实验status=2, 则allow_list和配置的实验流量比例在线生效(线上流量放开的正常状态)
实验ID L1E1
永远不会出现在输出结果中,该实验的参数是全局基础默认值(独占layer1 100%)
其他层实验,仅出现自己的实验参数即可, 系统自动会按照layer1 ~ layerN的方式更新聚合所有参数
实验上线后效果OK则可以将对应参数更新到L1E1
全流量生效
注意需要定时清理全局在线逻辑的开关, 避免已上线逻辑的开关一直存在, 会导致L1E1
参数膨胀,代码也难以维护
请求demo
curl -X POST -d '{"uid":"l1-232935"}' http://localhost:9200/absys
{"data":{"eid":"L2E2","params":"eyJyZWNhbGwiOnsiYWxwaGEiOjAuNzUsImJldGEiOjAuNX19", "qid":1401753478321143808},"status":0}
status = 0表示ok
eid为命中的实验id列表
params: 为base64编码的实验参数
v0.0.1 压测结果(QPS万级别)
➜ hey git:(master) ./bin/hey_darwin_amd64 -m POST -H "Content-Type:application/json" -d '{"uid":"l1-232935"}' -n 10000 -c 20 'http://localhost:9200/absys'
Summary:
Total: 0.2667 secs
Slowest: 0.0414 secs
Fastest: 0.0000 secs
Average: 0.0005 secs
Requests/sec: 37490.5044
Total data: 1000000 bytes
Size/request: 100 bytes
Response time histogram:
0.000 [1] |
0.004 [9931] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
0.008 [37] |
0.012 [11] |
0.017 [0] |
0.021 [0] |
0.025 [0] |
0.029 [0] |
0.033 [0] |
0.037 [8] |
0.041 [12] |
Latency distribution:
10% in 0.0001 secs
25% in 0.0001 secs
50% in 0.0003 secs
75% in 0.0005 secs
90% in 0.0009 secs
95% in 0.0014 secs
99% in 0.0033 secs
Details (average, fastest, slowest):
DNS+dialup: 0.0000 secs, 0.0000 secs, 0.0122 secs
DNS-lookup: 0.0000 secs, 0.0000 secs, 0.0057 secs
req write: 0.0000 secs, 0.0000 secs, 0.0086 secs
resp wait: 0.0004 secs, 0.0000 secs, 0.0260 secs
resp read: 0.0000 secs, 0.0000 secs, 0.0079 secs
Status code distribution:
[200] 10000 responses