golang高性能Web框架基准测试插件库go-web-framework-benchmark的使用

go-web-framework-benchmark 高性能Web框架基准测试插件库使用指南

概述

go-web-framework-benchmark 是一个用于比较Go语言Web框架性能的基准测试套件。它不同于只测试路由性能的工具,而是测试完整的HTTP请求处理过程,包括连接、路由选择和处理程序执行。

测试框架列表

该基准测试覆盖了以下稳定的Go Web框架(按字母顺序排列):

  • atreugo
  • baa
  • beego
  • bone
  • chi
  • clevergo
  • default http
  • denco
  • don
  • echo
  • fasthttp-routing
  • fasthttp/router
  • fasthttp
  • fiber
  • gear
  • gearbox
  • gem
  • gin
  • goframe
  • go-ozzo
  • go-restful
  • go-tigertonic
  • goji
  • golf
  • gorilla
  • gorouter
  • goyave
  • httprouter
  • httptreemux
  • httpz
  • indigo
  • lars
  • lion
  • macaron
  • muxie
  • negroni
  • pat
  • pulse
  • pure
  • r2router
  • tango
  • tinyrouter
  • treemux
  • violetear
  • vulcan
  • webgo

安装与使用

1. 安装基准测试工具

go get github.com/smallnest/go-web-framework-bbenchmark

2. 运行基础测试

cd $GOPATH/src/github.com/smallnest/go-web-framework-benchmark
go build -o gowebbenchmark .
./test.sh

测试完成后会生成 processtime.csv 和 concurrency.csv 结果文件。

3. 扩展测试选项

测试延迟和内存分配

./test-latency.sh

禁用keepalive测试

./test-latency-nonkeepalive.sh

测试HTTP管道化

./test-pipelining.sh

运行全部测试

./test-all.sh

注意:完整测试所有框架需要数小时时间。

4. 自定义测试框架

修改 test.sh 脚本,只保留你想测试的框架:

web_frameworks=("default" "gin" "echo" "fasthttp" "fiber" "beego" "goji")

示例代码

以下是模拟业务逻辑的测试处理器示例:

api.Get("/rest/hello", func(c *XXXXX.Context) {
    sleepTime := strconv.Atoi(os.Args[1]) //10ms
    if sleepTime > 0 {
        time.Sleep(time.Duration(sleepTime) * time.Millisecond)
    }

    c.Text("Hello world")
})

测试结果解读

测试结果包含以下指标:

  1. 吞吐量:每秒处理的请求数(越高越好)
  2. 延迟:服务器实际处理时间(越低越好)
  3. 内存分配:测试期间堆内存分配量(MB,越低越好)

测试环境:

  • CPU: KVM Virtual CPU version(2 GHz, 4 cores)
  • 内存: 16G
  • Go版本: go1.18.5 linux/amd64
  • OS: Ubuntu 22.04.1 LTS with Kernel 5.15.0-41-generic

添加新框架

欢迎贡献新的框架测试,步骤如下:

  1. 在README中添加框架链接
  2. 在server.go中添加框架的实现
  3. 在libs.sh中添加框架名称

请按字母顺序添加新框架。


更多关于golang高性能Web框架基准测试插件库go-web-framework-benchmark的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang高性能Web框架基准测试插件库go-web-framework-benchmark的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


go-web-framework-benchmark 使用指南

go-web-framework-benchmark 是一个用于测试和比较各种 Go Web 框架性能的基准测试工具。下面我将详细介绍如何使用这个工具。

安装

首先需要安装该工具:

go get -u github.com/smallnest/go-web-framework-benchmark

基本使用

1. 运行所有框架的基准测试

cd $GOPATH/src/github.com/smallnest/go-web-framework-benchmark
go build -o benchmark main.go
./benchmark

2. 测试特定框架

./benchmark -framework gin,echo,iris

3. 常用参数

./benchmark -h

常用参数包括:

  • -concurrency: 并发数 (默认: 100)
  • -requests: 总请求数 (默认: 10000)
  • -duration: 测试持续时间 (如 10s, 1m)
  • -framework: 指定测试的框架列表 (逗号分隔)
  • -port: 测试服务器端口 (默认: 8080)

示例代码

如果你想将自己的框架加入测试,可以参考以下示例:

1. 添加测试框架

server 目录下创建你的框架实现,例如 myframework.go:

package server

import (
	"net/http"
	
	"github.com/yourname/yourframework"
)

func init() {
	servers["yourframework"] = yourFrameworkServer
}

func yourFrameworkServer(addr string) error {
	app := yourframework.New()
	app.Get("/hello", func(c yourframework.Context) error {
		return c.String("world")
	})
	return app.Start(addr)
}

2. 注册框架

main.go 中添加你的框架到 allServers 变量:

var allServers = []string{
	// 其他框架...
	"yourframework",
}

测试结果解读

测试完成后会输出类似以下结果:

Framework           Requests/sec  Latency(ms)  Transfer(MB)
gin                 125678        0.79         12.5
echo                118765        0.84         11.8
iris                121234        0.82         12.1
yourframework       110987        0.90         11.0
  • Requests/sec: 每秒处理的请求数,越高越好
  • Latency: 平均延迟时间,越低越好
  • Transfer: 数据传输量

高级用法

1. 生成图表

./benchmark -plot

这会生成 benchmark.png 图表文件。

2. 持续集成

可以编写脚本定期运行测试并记录结果:

#!/bin/bash
DATE=$(date +%Y%m%d)
./benchmark -framework gin,echo,iris > results/$DATE.txt

3. 自定义测试用例

修改 server/common.go 中的测试路由和响应内容:

const (
	TestString = "world"  // 修改测试返回内容
)

注意事项

  1. 测试环境应保持一致,最好在干净的机器上运行
  2. 避免在测试期间运行其他消耗资源的程序
  3. 多次运行取平均值以获得更准确的结果
  4. 不同版本的框架性能可能有差异,注意记录版本号

通过这个工具,你可以客观地比较不同 Go Web 框架的性能表现,为项目选型提供数据支持。

回到顶部