【源码解析】压测工具vegeta

本文介绍了开源压测工具Vegeta的lib库,重点解析了其核心发压功能。文章从实现思路、部署环境到具体操作步骤,详细解释了如何定义压测时长和速率、设置压测接口,以及如何启动压测。通过对源码的分析,揭示了Vegeta如何通过多线程、动态调整goroutine数量、异步结果处理和随时停止等功能来确保恒定的发压速率。
摘要由CSDN通过智能技术生成

序言

github地址:https://github.com/tsenart/vegeta

第一次写源码解析的博客,就拿自己最熟悉的压测工具vegeta(贝吉塔)来介绍。本篇文章只介绍vegeta的lib库,也就是vegeta核心的发压功能。

实现思路

首先看下lib库里面的文件目录。

.
├── attack.go                  // 起压力
├── attack_test.go
├── histogram.go           // 柱状图,用于结果统计
├── histogram_test.go
├── lttb
├── metrics.go               // 统计指标,进行结果处理
├── metrics_test.go
├── pacer.go                  // 定速器,用于控制发压速率
├── pacer_test.go
├── plot
├── reporters.go            // 产生报告
├── results.go               // 一次http请求后的结果
├── results_easyjson.go
├── results_test.go
├── target.schema.json
├── targets.go             // 压测目标, 代表http请求
├── targets_easyjson.go
└── targets_test.go

http压测工具发压的过程就像是一次进攻一样。 这里用attack来表示发压的动作, 一次打击(hit)代表一次http请求。 打击的目标(target)代表http接口。 发压的qps叫做打击的速率(rate),用专门的定速器(pacer)来控制发压的qps。

部署环境

分析源码,首先要部署一个能看到源码的环境。平时开发使用vim, 这里就只演示在终端下的操作。

go get -u github.com/tsenart/vegeta

如果遇到timeout的情况,更新go版本到1.12及以上, 设置环境变量

export GOPROXY=https://goproxy.io
export GO111MODULE=on

平常go的项目被我放在~/Workspace/golang/mod目录下,这里我就新建一个文件夹test. 并执行go mod init test初始化一个GO项目。
在这里插入图片描述
创建一个main.go的文件,并从github上复制粘贴示例代码,加上注释后:

package main

import (
    "fmt"
    "time"

    vegeta "github.com/tsenart/vegeta/lib"
)

func main() {
    // 1. 压测时长&速率
    rate := vegeta.Rate{Freq: 100, Per: time.Second}
    duration := 4 * time.Second

    // 2. 压测接口
    targeter := vegeta.NewStaticTargeter(vegeta.Target{
        Method: "GET",
        URL:    "
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值