Go弱の会でgo vs node.jsのパフォーマンスベンチを取った話をしてきた。 #gojaku

Go弱の会に行ってきました。今回はnitrous.ioの話、revelの話、Dartの話がありました。

僕も少しだけしゃべったので、その話を含めてやったことをまとめます。

僕が話した内容

Go弱っぽく、Webアプリを作成し、そのベンチマークを取ってみました。

作ったアプリ

angularjs と goweb(RestFul server) と mgo (mongo driver) でツイッターっぽいアプリを作ってみました。


Goweb製(heroku) :

http://goweb-angular.herokuapp.com/app/#/

githubはここでアップしてます。

GitHub :
https://github.com/yosuke-furukawa/goweb-sample

ちなみに比較対象のkoa製の方もherokuにアップされてます。

Koa製 (heroku):

http://angular-koa.herokuapp.com/#/

ベンチ結果

GET結果:
f:id:yosuke_furukawa:20140209235425p:plain

POST結果:
f:id:yosuke_furukawa:20140210013640p:plain


平均 :

system GET(reqs/sec) POST(reqs/sec)
goweb(go) 1829 1491
koa(node.js) 1332 470

結果として、GETにおいてもPOSTにおいてもgolangの勝利下馬評通りの結果になりました。


とはいえ、node.jsもGETにおいてはgolangとそこまで変わらないレスポンスを返しているし、POSTには差はありますが、秒間470リクエストはそこまで悲観するような結果ではないかなと。

golangが速すぎますね。

おまけ

今回のベンチマークにはboomっていうgolang製のベンチマークツールを使いました。

boomはapache benchとやれることはほとんど同様なんですが、POST、PUT、DELETEが簡単に投げられるため、RESTFul APIと相性が良いので、積極的に使っていきたいですね。

boom 使い方まとめ
# install
$ go get github.com/rakyll/boom

# GET 100 requests 10 connects
$ boom -n 100 -c 10 http://0.0.0.0:9090/tweets

# POST 100 requests 10 connects
$ boom -n 1000 -c 100 -T "application/json" -m POST -d '{"body":"abc"}' http://0.0.0.0:9090/tweets