LoginSignup
3
3

More than 5 years have passed since last update.

goのweb frameworkについて調べる

Last updated at Posted at 2016-06-16

goの web frameworkについてあまり知らなかったので、調べてみた。

こちらをご参考にさせていただきました。
http://qiita.com/jumbOS5/items/45f86db15a5a6c8a0622

 - ベンチマークの参考は go-http-routing-benchmark (routers.goのL36をecho.v1にすれば動作することを確認),web-framework-benchmarkを使用。

web-framework-benchmarkを動かすには glideその他,bench.shで記載のあるライブラリが必要。wrkというコマンドが内部で叩かれるのでそれも必要。

frame work github star 触った感じ
echo 4686 少ない行で簡単に書ける。
gin 6829 少ない行で簡単に書ける。
martini 8257 ドキュメントが充実している,少ない行で簡単に書ける。周辺機能(ミドルウェア)が充実している。
beego 7337 少ない行で簡単に書ける。
goji 3097 issueが少ない。作りがシンプル。

他はこんな感じだった
bone 909
gocraft 1068
goji 3095
gorilla 2467
kami 165

benchmarkツールでの結果

下記の環境で動作確認(仮想環境なので性能判定としてはイマイチ)

  • 環境
    • Ubuntu 14.04 LTS
    • go 1.6
    • Intel(R) Core(TM)2 Duo CPU P8800 @ 2.66GHz
    • memory 4GB

web-framework-benchmark

## beego
benchmarking beego...
Running 10s test @ http://localhost:8080/teams/x-men/members/wolverine
  2 threads and 20 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    28.29ms   52.61ms 486.37ms   89.10%
    Req/Sec     3.84k     1.76k    8.64k    64.62%
  75967 requests in 10.06s, 10.50MB read
Requests/sec:   7548.68
Transfer/sec:      1.04MB

benchmarking with pipleline...
Running 10s test @ http://localhost:8080
  2 threads and 20 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   203.45ms  154.99ms 895.34ms   68.75%
    Req/Sec     5.66k     2.89k   12.07k    62.77%
  109792 requests in 10.11s, 15.18MB read
Requests/sec:  10864.86
Transfer/sec:      1.50MB
stopping beego (20432)...
./bench.sh: line 7: 20432 Killed                  ./server

## echo/standard
benchmarking echo/standard...
Running 10s test @ http://localhost:8080/teams/x-men/members/wolverine
  2 threads and 20 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    30.74ms   51.64ms 443.29ms   86.75%
    Req/Sec     4.14k     1.81k    8.36k    66.67%
  81687 requests in 10.08s, 11.30MB read
Requests/sec:   8107.75
Transfer/sec:      1.12MB

benchmarking with pipleline...
Running 10s test @ http://localhost:8080
  2 threads and 20 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   234.64ms  181.69ms   1.10s    69.73%
    Req/Sec     5.06k     2.78k   11.63k    64.17%
  97796 requests in 10.07s, 13.52MB read
Requests/sec:   9714.00
Transfer/sec:      1.34MB
stopping echo/standard (20469)...
./bench.sh: line 7: 20469 Killed                  ./server

## echo/fasthttp
benchmarking echo/fasthttp...
Running 10s test @ http://localhost:8080/teams/x-men/members/wolverine
  2 threads and 20 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    21.26ms   42.32ms 321.26ms   89.58%
    Req/Sec     3.26k     1.55k    7.48k    65.05%
  62771 requests in 10.07s, 9.76MB read
Requests/sec:   6233.91
Transfer/sec:      0.97MB

benchmarking with pipleline...
Running 10s test @ http://localhost:8080
  2 threads and 20 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   188.73ms  140.97ms 747.07ms   65.19%
    Req/Sec    24.82k    16.46k   60.52k    58.54%
  448086 requests in 10.10s, 69.65MB read
Requests/sec:  44346.54
Transfer/sec:      6.89MB
stopping echo/fasthttp (20500)...
./bench.sh: line 7: 20500 Killed                  ./server

## gin
benchmarking gin...
Running 10s test @ http://localhost:8080/teams/x-men/members/wolverine
  2 threads and 20 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    57.73ms   92.79ms 610.68ms   85.26%
    Req/Sec     3.05k     1.73k    7.16k    63.83%
  59049 requests in 10.06s, 8.17MB read
Requests/sec:   5869.92
Transfer/sec:    831.19KB

benchmarking with pipleline...
Running 10s test @ http://localhost:8080
  2 threads and 20 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   219.39ms  161.98ms   1.00s    66.63%
    Req/Sec     5.35k     2.98k   12.61k    64.25%
  101387 requests in 10.06s, 14.02MB read
Requests/sec:  10079.35
Transfer/sec:      1.39MB
stopping gin (20530)...
./bench.sh: line 7: 20530 Killed                  ./server

## goji
benchmarking goji...
Running 10s test @ http://localhost:8080/teams/x-men/members/wolverine
  2 threads and 20 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    30.56ms   50.54ms 391.85ms   86.29%
    Req/Sec     3.33k     1.80k    8.27k    59.79%
  65927 requests in 10.09s, 9.12MB read
Requests/sec:   6535.60
Transfer/sec:      0.90MB

benchmarking with pipleline...
Running 10s test @ http://localhost:8080
  2 threads and 20 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   259.73ms  197.36ms   1.59s    68.93%
    Req/Sec     5.00k     3.05k   11.68k    60.00%
  95654 requests in 10.05s, 13.23MB read
Requests/sec:   9513.19
Transfer/sec:      1.32MB
stopping goji (20558)...
./bench.sh: line 7: 20558 Killed                  ./server

## martini
benchmarking martini...
Running 10s test @ http://localhost:8080/teams/x-men/members/wolverine
  2 threads and 20 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    48.80ms   76.59ms 585.97ms   85.53%
    Req/Sec     2.80k     1.50k    6.04k    64.17%
  54224 requests in 10.09s, 7.50MB read
Requests/sec:   5373.82
Transfer/sec:    760.94KB

benchmarking with pipleline...
Running 10s test @ http://localhost:8080
  2 threads and 20 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   228.92ms  166.95ms 968.45ms   67.61%
    Req/Sec     3.56k     1.76k    7.95k    66.49%
  69365 requests in 10.04s, 9.59MB read
Requests/sec:   6908.24
Transfer/sec:      0.96MB
stopping martini (20586)...
./bench.sh: line 7: 20586 Killed                  ./server

go-http-routing-benchmarkでの結果

ベンチ項目が多くかつ時間もかかるので、一部割愛。

$ go test -bench=.
#GithubAPI Routes: 203
   Ace: 48768 Bytes
   Bear: 161496 Bytes
   Beego: 146328 Bytes
   Bone: 97696 Bytes
   Denco: 36440 Bytes
   Echo: 76328 Bytes
   Gin: 52464 Bytes
   GocraftWeb: 95304 Bytes
   Goji: 86104 Bytes
   Gojiv2: 144408 Bytes
   GoJsonRest: 134136 Bytes
   GoRestful: 1395608 Bytes
   GorillaMux: 1494816 Bytes
   HttpRouter: 37464 Bytes
   HttpTreeMux: 78736 Bytes
   Kocha: 785120 Bytes
   LARS: 49056 Bytes
   Macaron: 129304 Bytes
   Martini: 556192 Bytes
   Pat: 21200 Bytes
   Possum: 83408 Bytes
   R2router: 47104 Bytes
   Revel: 141296 Bytes
   Rivet: 42840 Bytes
   Tango: 54584 Bytes
   TigerTonic: 96032 Bytes
   Traffic: 1053744 Bytes
   Vulcan: 464976 Bytes

#GPlusAPI Routes: 13
   Ace: 3600 Bytes
   Bear: 7112 Bytes
   Beego: 9712 Bytes
   Bone: 6448 Bytes
   Denco: 3256 Bytes
   Echo: 7128 Bytes
   Gin: 3856 Bytes
   GocraftWeb: 7496 Bytes
   Goji: 2912 Bytes
   Gojiv2: 7376 Bytes
   GoJsonRest: 11400 Bytes
   GoRestful: 87608 Bytes
   GorillaMux: 71072 Bytes
   HttpRouter: 2712 Bytes
   HttpTreeMux: 7376 Bytes
   Kocha: 128880 Bytes
   LARS: 3664 Bytes
   Macaron: 8448 Bytes
   Martini: 23936 Bytes
   Pat: 1856 Bytes
   Possum: 7248 Bytes
   R2router: 3928 Bytes
   Revel: 10768 Bytes
   Rivet: 3064 Bytes
   Tango: 4912 Bytes
   TigerTonic: 9408 Bytes
   Traffic: 49472 Bytes
   Vulcan: 25496 Bytes

#ParseAPI Routes: 26
   Ace: 6592 Bytes
   Bear: 12320 Bytes
   Beego: 18416 Bytes
   Bone: 10992 Bytes
   Denco: 4184 Bytes
   Echo: 8048 Bytes
   Gin: 6816 Bytes
   GocraftWeb: 12800 Bytes
   Goji: 5232 Bytes
   Gojiv2: 14464 Bytes
   GoJsonRest: 14088 Bytes
   GoRestful: 126216 Bytes
   GorillaMux: 122184 Bytes
   HttpRouter: 4976 Bytes
   HttpTreeMux: 7784 Bytes
   Kocha: 181712 Bytes
   LARS: 6656 Bytes
   Macaron: 13232 Bytes
   Martini: 45952 Bytes
   Pat: 2560 Bytes
   Possum: 9200 Bytes
   R2router: 7056 Bytes
   Revel: 15488 Bytes
   Rivet: 5680 Bytes
   Tango: 8664 Bytes
   TigerTonic: 9840 Bytes
   Traffic: 93480 Bytes
   Vulcan: 44504 Bytes

#Static Routes: 157
   HttpServeMux: 18784 Bytes
   Ace: 30080 Bytes
   Bear: 30216 Bytes
   Beego: 93768 Bytes
   Bone: 37872 Bytes
   Denco: 10272 Bytes
   Echo: 61024 Bytes
   Gin: 30400 Bytes
   GocraftWeb: 55048 Bytes
   Goji: 27200 Bytes
   Gojiv2: 104464 Bytes
   GoJsonRest: 135768 Bytes
   GoRestful: 908200 Bytes
   GorillaMux: 668496 Bytes
   HttpRouter: 21128 Bytes
   HttpTreeMux: 73384 Bytes
   Kocha: 114960 Bytes
   LARS: 30144 Bytes
   Macaron: 35136 Bytes
   Martini: 308784 Bytes
   Pat: 20464 Bytes
   Possum: 90368 Bytes
   R2router: 23712 Bytes
   Revel: 92768 Bytes
   Rivet: 23880 Bytes
   Tango: 28008 Bytes
   TigerTonic: 79904 Bytes
   Traffic: 624416 Bytes
   Vulcan: 368728 Bytes

ここまでやってみてやはり使いどころによって選ぶフレームワークが変わってくると思った。
まだそれぞれの特徴を掴み取れていないので,どれが使いやすいか引き続き調べてみようと思う。

3
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3