Skip to content
This repository has been archived by the owner on Jan 4, 2022. It is now read-only.

Commit

Permalink
完成
Browse files Browse the repository at this point in the history
  • Loading branch information
YamiOdymel committed May 30, 2018
1 parent 3b41dc9 commit a9a77f0
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 335 deletions.
30 changes: 28 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,28 @@
# go-davai-benchmark
前行者效能報表 - The benchmark of the current http routers in Golang.
# Davai Benchmark

此測試透過 `go run main.go` 進行,這會在最終產生一個 `benchmark.csv` 報表供檢視與方便生成圖表。

這份測試是基於下列電腦所執行的。

```
MacBook Air 13" (Mid-2013)
1.7 GHz Intel Core i7 (4650U)
8 GB 1600 MHz DDR3
Intel HD Graphics 5000 1536 MB
```

測試結果如下。

```
TotalRequest ReadSize Reqs/s Trans/s Avg
Davai 21022 2.29MB 21583.24 2.35MB 231.661µs
Gramework 21364 3.97MB 22005.52 4.09MB 227.215µs
HTTPRouter 21100 2.29MB 21632.75 2.35MB 231.131µs
Martini 17949 1.95MB 18313.46 1.99MB 273.023µs
Pat 19397 2.11MB 19869.14 2.16MB 251.646µs
Gin 20718 2.25MB 21218.12 2.31MB 235.647µs
Mux 19123 2.08MB 19548.15 2.13MB 255.778µs
HTTPTreeMux 20847 2.27MB 21354.9 2.32MB 234.138µs
Echo 20508 2.23MB 21005.71 2.28MB 238.03µs
Beego 17619 2.32MB 17983.01 2.37MB 278.04µs
```
88 changes: 40 additions & 48 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import (
"github.com/gramework/gramework"
"github.com/julienschmidt/httprouter"
"github.com/labstack/echo"
davai "github.com/teacat/go-davai"
"github.com/teacat/davai"
"github.com/valyala/fasthttp"
"github.com/zenazn/goji"
)
Expand All @@ -37,105 +37,92 @@ func serverStartup() {
"/",
"/users",
"/user/:name",
"/noise/noise/noise",
"/noise/noise/noise/noise",
"/noise/noise/noise/noise/noise",
"/user/:name/:name2",
"/user/:name/:name2/:name3",
})
go httprouterServer([]string{
"/",
"/users",
"/user/:name",
"/noise/noise/noise",
"/noise/noise/noise/noise",
"/noise/noise/noise/noise/noise",
"/user/:name/:name2",
"/user/:name/:name2/:name3",
})
go martiniServer([]string{
"/",
"/users",
"/user/:name",
"/noise/noise/noise",
"/noise/noise/noise/noise",
"/noise/noise/noise/noise/noise",
"/user/:name/:name2",
"/user/:name/:name2/:name3",
})
go gojiServer([]string{
"/",
"/users",
"/user/:name",
"/noise/noise/noise",
"/noise/noise/noise/noise",
"/noise/noise/noise/noise/noise",
"/user/:name/:name2",
"/user/:name/:name2/:name3",
})
go patServer([]string{
"/",
"/users",
"/user/:name",
"/noise/noise/noise",
"/noise/noise/noise/noise",
"/noise/noise/noise/noise/noise",
"/user/:name/:name2",
"/user/:name/:name2/:name3",
})
go fasthttpServer([]string{
"/",
"/users",
"/user/:name",
"/noise/noise/noise",
"/noise/noise/noise/noise",
"/noise/noise/noise/noise/noise",
"/user/:name/:name2",
"/user/:name/:name2/:name3",
})
go ginServer([]string{
"/",
"/users",
"/user/:name",
"/noise/noise/noise",
"/noise/noise/noise/noise",
"/noise/noise/noise/noise/noise",
"/user/:name/:name2",
"/user/:name/:name2/:name3",
})
go muxServer([]string{
"/",
"/users",
"/user/{name}",
"/noise/noise/noise",
"/noise/noise/noise/noise",
"/noise/noise/noise/noise/noise",
"/user/{name}/{name2}",
"/user/{name}/{name2}/{name3}",
})
go grameworkServer([]string{
"/",
"/users",
"/user/:name",
"/noise/noise/noise",
"/noise/noise/noise/noise",
"/noise/noise/noise/noise/noise",
"/user/:name/:name2",
"/user/:name/:name2/:name3",
})
go httptreemuxServer([]string{
"/",
"/users",
"/user/:name",
"/noise/noise/noise",
"/noise/noise/noise/noise",
"/noise/noise/noise/noise/noise",
"/user/:name/:name2",
"/user/:name/:name2/:name3",
})
go echoServer([]string{
"/",
"/users",
"/user/:name",
"/noise/noise/noise",
"/noise/noise/noise/noise",
"/noise/noise/noise/noise/noise",
"/user/:name/:name2",
"/user/:name/:name2/:name3",
})
go davaiServer([]string{
"/",
"/users",
"/user/{name}",
"/noise/noise/noise",
"/noise/noise/noise/noise",
"/noise/noise/noise/noise/noise",
"/user/{name}/{name2}",
"/user/{name}/{name2}/{name3}",
})
go beegoServer([]string{
"/",
"/users",
"/user/:name",
"/noise/noise/noise",
"/noise/noise/noise/noise",
"/noise/noise/noise/noise/noise",
"/user/:name/:name2",
"/user/:name/:name2/:name3",
})

log.Printf("等待所有伺服器啟動⋯")
Expand All @@ -145,14 +132,17 @@ func serverStartup() {
var (
testURLs = []string{
// /
"/",
//"/",
// /users
"/users",
//"/users",
// /user/:name
"/user/yamiodymel",
//"/user/yamiodymel",
// /user/:name/:name2
"/user/yamiodymel/admin",
}
testServers = []string{
"davai",
"gramework",
//"nethttp",
"httprouter",
"martini",
Expand All @@ -161,7 +151,6 @@ var (
//"fasthttp",
"gin",
"mux",
"gramework",
"httptreemux",
"echo",
"beego",
Expand All @@ -172,6 +161,7 @@ func serverBenchmark() {
for _, v := range testServers {
for _, vv := range testURLs {
run(v, vv)
<-time.After(time.Millisecond * 100)
}
}
}
Expand All @@ -184,7 +174,7 @@ func main() {

func serverReport() {
// Create a csv file
f, err := os.Create("./people.csv")
f, err := os.Create("./benchmark.csv")
if err != nil {
fmt.Println(err)
}
Expand Down Expand Up @@ -278,8 +268,6 @@ func run(server string, path string) {
port = beegoPort
}

log.Printf("開始測試 %s 伺服器效能。", server)

out, err := exec.Command("/Users/YamiOdymel/go/bin/go-wrk", "-c", "5", "-d", "1", "-redir", fmt.Sprintf("http://localhost%s%s", port, path)).Output()
if err != nil {
log.Fatal(err)
Expand All @@ -288,6 +276,7 @@ func run(server string, path string) {
parsed["RouterName"] = server
parsed["Location"] = path
results = append(results, parsed)
fmt.Printf("%s, %s \n", server, path)
}

// https://stackoverflow.com/a/30483899/5203951
Expand Down Expand Up @@ -315,8 +304,11 @@ Slowest Request: (?P<SlowestRequestTime>.*)
Number of Errors: (?P<NumberOfError>.*)`)
m := r.FindStringSubmatch(res)
n := r.SubexpNames()
v := mapSubexpNames(m, n)

//fmt.Printf("%+v", res)

fmt.Printf("%+v", res)
fmt.Printf("%s (reqs/s) | ", v["RequestsPerSecond"])

return mapSubexpNames(m, n)
}
Expand Down
31 changes: 0 additions & 31 deletions people 拷貝.csv

This file was deleted.

31 changes: 0 additions & 31 deletions people.csv

This file was deleted.

Loading

0 comments on commit a9a77f0

Please sign in to comment.